|
|
@@ -46,6 +46,8 @@ const orderCounts = ref({
|
|
|
|
|
|
// 当前订单的分配机构输入值
|
|
|
const assignedInstitutionMap = ref<Record<number, string>>({});
|
|
|
+// 记录是否从右边列表选择指派(用于控制按钮显示)
|
|
|
+const assignedFromRightList = ref<Record<number, boolean>>({});
|
|
|
|
|
|
// 日期时间选择弹窗相关
|
|
|
const dateTimePickerVisible = ref(false);
|
|
|
@@ -201,6 +203,8 @@ watch(activeSubTab, async () => {
|
|
|
allInstitutionData.value = [];
|
|
|
institutionList.value = [];
|
|
|
gridRef.value?.loadData([]);
|
|
|
+ // 切换tab时,清空所有按钮显示标记,这样按钮就不会显示
|
|
|
+ assignedFromRightList.value = {};
|
|
|
await loadOrderCounts();
|
|
|
await loadOrderList();
|
|
|
if (orderList.value.length > 0) {
|
|
|
@@ -216,6 +220,7 @@ watch(activeSubTab, async () => {
|
|
|
orderList.value.forEach(order => {
|
|
|
const orderId = getOrderId(order);
|
|
|
assignedInstitutionMap.value[orderId] = '';
|
|
|
+ assignedFromRightList.value[orderId] = false;
|
|
|
});
|
|
|
}
|
|
|
await loadInstitutionList();
|
|
|
@@ -232,6 +237,8 @@ watch(() => props.orderType, async () => {
|
|
|
activeSubTab.value = 'pending';
|
|
|
selectedOrderId.value = null;
|
|
|
assignedInstitutionMap.value = {};
|
|
|
+ // 切换订单类型时,清空所有按钮显示标记
|
|
|
+ assignedFromRightList.value = {};
|
|
|
orderPageConfig.currentPage = 1;
|
|
|
searchForm.customerName = '';
|
|
|
searchForm.contactPhone = '';
|
|
|
@@ -270,6 +277,7 @@ watch(() => props.orderType, async () => {
|
|
|
orderList.value.forEach(order => {
|
|
|
const orderId = getOrderId(order);
|
|
|
assignedInstitutionMap.value[orderId] = '';
|
|
|
+ assignedFromRightList.value[orderId] = false;
|
|
|
});
|
|
|
}
|
|
|
// 选中订单后必须加载机构列表(切换订单类型时)
|
|
|
@@ -569,6 +577,7 @@ function handleDateChange(orderId: number, date: Dayjs | null) {
|
|
|
|
|
|
// 清空分配机构
|
|
|
assignedInstitutionMap.value[orderId] = '';
|
|
|
+ assignedFromRightList.value[orderId] = false;
|
|
|
|
|
|
loadInstitutionList();
|
|
|
}
|
|
|
@@ -596,6 +605,7 @@ function handleTimeChange(orderId: number, startTime: any, order: OrderModel) {
|
|
|
|
|
|
// 清空分配机构
|
|
|
assignedInstitutionMap.value[orderId] = '';
|
|
|
+ assignedFromRightList.value[orderId] = false;
|
|
|
|
|
|
// 刷新可派单机构列表
|
|
|
loadInstitutionList();
|
|
|
@@ -646,6 +656,8 @@ function handleLastInstitutionClick(orderId: number, institutionName: string) {
|
|
|
}
|
|
|
|
|
|
assignedInstitutionMap.value[orderId] = institutionName;
|
|
|
+ // 标记为已填充(可以显示按钮)
|
|
|
+ assignedFromRightList.value[orderId] = true;
|
|
|
}
|
|
|
|
|
|
function handleSupplierClick(orderId: number, supplierName: string) {
|
|
|
@@ -662,6 +674,8 @@ function handleSupplierClick(orderId: number, supplierName: string) {
|
|
|
}
|
|
|
|
|
|
assignedInstitutionMap.value[orderId] = supplierName;
|
|
|
+ // 标记为已填充(可以显示按钮)
|
|
|
+ assignedFromRightList.value[orderId] = true;
|
|
|
}
|
|
|
|
|
|
function handleAssignInstitution(institutionName: string) {
|
|
|
@@ -680,8 +694,9 @@ function handleAssignInstitution(institutionName: string) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
assignedInstitutionMap.value[selectedOrderId.value] = institutionName;
|
|
|
+ // 标记为从右边列表选择
|
|
|
+ assignedFromRightList.value[selectedOrderId.value] = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -831,6 +846,7 @@ async function handleConfirmAssign(orderId: number) {
|
|
|
|
|
|
// 清空分配机构输入框
|
|
|
assignedInstitutionMap.value[orderId] = '';
|
|
|
+ assignedFromRightList.value[orderId] = false;
|
|
|
|
|
|
// 静默更新订单计数(不显示loading,避免闪烁)
|
|
|
loadOrderCounts().catch(err => {
|
|
|
@@ -846,7 +862,9 @@ async function handleConfirmAssign(orderId: number) {
|
|
|
|
|
|
// 处理取消
|
|
|
function handleCancel(orderId: number) {
|
|
|
- assignedInstitutionMap.value[orderId] = '';
|
|
|
+ // 只清空分配机构,保持按钮显示(不清空 assignedFromRightList)
|
|
|
+ // 使用 null 表示用户主动清空,这样在非 pending tab 中也不会显示原有的供应商名称
|
|
|
+ assignedInstitutionMap.value[orderId] = null as any;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -861,6 +879,42 @@ function isOrderSelected(order: OrderModel): boolean {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+// 获取分配机构显示值
|
|
|
+function getAssignedInstitutionDisplayValue(order: OrderModel): string {
|
|
|
+ const orderId = getOrderId(order);
|
|
|
+ // 检查 key 是否存在(使用 hasOwnProperty 或 in 操作符)
|
|
|
+ const hasKey = orderId in assignedInstitutionMap.value;
|
|
|
+ const assignedValue = assignedInstitutionMap.value[orderId];
|
|
|
+
|
|
|
+
|
|
|
+ if (hasKey) {
|
|
|
+ if (assignedValue === null) {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ return assignedValue || '';
|
|
|
+ }
|
|
|
+
|
|
|
+ if (activeSubTab.value !== 'pending') {
|
|
|
+ return order.conditioningProgramSupplierName || '';
|
|
|
+ }
|
|
|
+
|
|
|
+ return '';
|
|
|
+}
|
|
|
+
|
|
|
+// 判断是否应该显示确认指派按钮
|
|
|
+function shouldShowConfirmAssignButton(order: OrderModel): boolean {
|
|
|
+ // 如果订单已核销或已发货,不显示
|
|
|
+ if (isOrderVerified(order) || isOrderShipped(order)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ const orderId = getOrderId(order);
|
|
|
+ // 检查是否已标记为可显示按钮(从右边列表选择、上次供应商或下面供应商填充)
|
|
|
+ // 只要标记为可显示,就显示按钮(即使后来点击取消清空了输入框)
|
|
|
+ const canShowButton = assignedFromRightList.value[orderId];
|
|
|
+ return canShowButton === true;
|
|
|
+}
|
|
|
+
|
|
|
// 处理订单选中
|
|
|
function handleOrderSelect(order: OrderModel) {
|
|
|
const orderId = getOrderId(order);
|
|
|
@@ -1106,18 +1160,17 @@ defineExpose({
|
|
|
<div class="assign-section">
|
|
|
<span class="assign-label">分配机构:</span>
|
|
|
<a-input
|
|
|
- :value="assignedInstitutionMap[getOrderId(order)] || (activeSubTab !== 'pending' ? (order.conditioningProgramSupplierName || '') : '')"
|
|
|
+ :value="getAssignedInstitutionDisplayValue(order)"
|
|
|
placeholder="请点击右侧指派按钮或点击上次/供应商选择分配机构" class="assign-input" readonly
|
|
|
:disabled="isOrderVerified(order) || isOrderShipped(order)" />
|
|
|
- <!-- <a-button
|
|
|
- v-if="!isOrderVerified(order) && !isOrderShipped(order)"
|
|
|
- type="default"
|
|
|
- size="small"
|
|
|
- @click.stop="handleCancel(getOrderId(order))"
|
|
|
- >
|
|
|
- 取消
|
|
|
- </a-button> -->
|
|
|
- <a-button v-if="!isOrderVerified(order) && !isOrderShipped(order)" type="primary" size="small"
|
|
|
+ <a-button
|
|
|
+ v-if="shouldShowConfirmAssignButton(order)"
|
|
|
+ type="default"
|
|
|
+ size="small"
|
|
|
+ @click.stop="handleCancel(getOrderId(order))">
|
|
|
+ 取消
|
|
|
+ </a-button>
|
|
|
+ <a-button v-if="shouldShowConfirmAssignButton(order)" type="primary" size="small"
|
|
|
@click.stop="handleConfirmAssign(getOrderId(order))">
|
|
|
确认指派
|
|
|
</a-button>
|
|
|
@@ -1243,7 +1296,7 @@ defineExpose({
|
|
|
flex-direction: column;
|
|
|
overflow: hidden;
|
|
|
|
|
|
-
|
|
|
+
|
|
|
.order-list-header {
|
|
|
flex-shrink: 0;
|
|
|
padding: 16px;
|