From ced6b504a82f27839b4392ec7fdd76592516456e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 17 七月 2026 14:58:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/wls/warehouse/components/select.vue                        |   20 ++++--
 src/views/mes/workbench/components/tabs/ReturnIssueLineFormModal.vue |   20 +++++-
 src/views/wls/returnissue/modules/line-form.vue                      |    9 ++
 src/views/wls/returnissue/data.ts                                    |   58 ++++++++++++-------
 src/views/wls/warehouse/components/area-select.vue                   |   24 +++++--
 src/views/wls/warehouse/components/location-select.vue               |   24 +++++--
 src/api/mes/wm/returnissue/detail/index.ts                           |    2 
 src/views/wls/returnissue/modules/detail-form.vue                    |    9 ++
 8 files changed, 114 insertions(+), 52 deletions(-)

diff --git a/src/api/mes/wm/returnissue/detail/index.ts b/src/api/mes/wm/returnissue/detail/index.ts
index 7c878bb..064d04a 100644
--- a/src/api/mes/wm/returnissue/detail/index.ts
+++ b/src/api/mes/wm/returnissue/detail/index.ts
@@ -8,6 +8,8 @@
     lineId?: number; // 閫�鏂欏崟琛岀紪鍙�
     materialStockId?: number; // 搴撳瓨璁板綍缂栧彿
     itemId?: number; // 鐗╂枡缂栧彿
+    itemName?: string; // 鐗╂枡鍚嶇О
+    specification?: string; // 瑙勬牸鍨嬪彿
     quantity?: number; // 鏁伴噺
     batchId?: number; // 鎵规缂栧彿
     batchCode?: string; // 鎵规鍙�
diff --git a/src/views/mes/workbench/components/tabs/ReturnIssueLineFormModal.vue b/src/views/mes/workbench/components/tabs/ReturnIssueLineFormModal.vue
index cf2ef03..06f2052 100644
--- a/src/views/mes/workbench/components/tabs/ReturnIssueLineFormModal.vue
+++ b/src/views/mes/workbench/components/tabs/ReturnIssueLineFormModal.vue
@@ -16,7 +16,6 @@
   getReturnIssueLine,
   updateReturnIssueLine,
 } from '#/api/mes/wm/returnissue/line';
-import { MdItemSelect } from '#/views/mes/md/item/components';
 import { WmMaterialStockSelect } from '#/views/wls/materialstock/components';
 
 const emit = defineEmits(['success']);
@@ -40,6 +39,9 @@
             batchCode: stock?.batchCode,
             batchId: stock?.batchId,
             itemId: stock?.itemId,
+            materialDisplayName: stock
+              ? [stock.itemName, stock.specification].filter(Boolean).join(' | ')
+              : undefined,
             quantity: stock?.quantity,
             quantityMax: stock?.quantity,
           });
@@ -83,9 +85,14 @@
     },
     {
       fieldName: 'itemId',
+      component: 'Input',
+      dependencies: { triggerFields: [''], show: () => false },
+    },
+    {
+      fieldName: 'materialDisplayName',
       label: '鐗╂枡',
-      component: markRaw(MdItemSelect),
-      componentProps: { disabled: true },
+      component: 'Input',
+      componentProps: { disabled: true, placeholder: '閫夋嫨搴撳瓨鍚庤嚜鍔ㄥ甫鍑�' },
     },
     {
       fieldName: 'batchCode',
@@ -145,7 +152,12 @@
     modalApi.lock();
     try {
       formData.value = await getReturnIssueLine(data.id);
-      await formApi.setValues(formData.value);
+      await formApi.setValues({
+        ...formData.value,
+        materialDisplayName: [formData.value.itemName, formData.value.specification]
+          .filter(Boolean)
+          .join(' | '),
+      });
     } finally {
       modalApi.unlock();
     }
diff --git a/src/views/wls/returnissue/data.ts b/src/views/wls/returnissue/data.ts
index d25a934..d95b2c4 100644
--- a/src/views/wls/returnissue/data.ts
+++ b/src/views/wls/returnissue/data.ts
@@ -18,7 +18,6 @@
 
 import { z } from '#/adapter/form';
 import { generateAutoCode } from '#/api/mes/md/autocode/record';
-import { MdItemSelect } from '#/views/mes/md/item/components';
 import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
 import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
 import { WmMaterialStockSelect } from '#/views/wls/materialstock/components';
@@ -330,6 +329,9 @@
             batchCode: stock?.batchCode,
             batchId: stock?.batchId,
             itemId: stock?.itemId,
+            materialDisplayName: stock
+              ? [stock.itemName, stock.specification].filter(Boolean).join(' | ')
+              : undefined,
             quantity: stock?.quantity,
             quantityMax: stock?.quantity,
           });
@@ -376,10 +378,19 @@
     },
     {
       fieldName: 'itemId',
+      component: 'Input',
+      dependencies: {
+        triggerFields: [''],
+        show: () => false,
+      },
+    },
+    {
+      fieldName: 'materialDisplayName',
       label: '鐗╂枡',
-      component: markRaw(MdItemSelect),
+      component: 'Input',
       componentProps: {
         disabled: true,
+        placeholder: '閫夋嫨搴撳瓨鍚庤嚜鍔ㄥ甫鍑�',
       },
     },
     {
@@ -460,28 +471,37 @@
     },
     {
       fieldName: 'itemId',
+      component: 'Input',
+      dependencies: {
+        triggerFields: [''],
+        show: () => false,
+      },
+    },
+    {
+      fieldName: 'materialDisplayName',
       label: '鐗╂枡',
-      component: markRaw(MdItemSelect),
+      component: 'Input',
       componentProps: {
         disabled: true,
+        placeholder: '閫夋嫨搴撳瓨鍚庤嚜鍔ㄥ甫鍑�',
       },
-      rules: 'selectRequired',
     },
     {
       fieldName: 'materialStockId',
       label: '搴撳瓨璁板綍',
       component: markRaw(WmMaterialStockSelect),
       componentProps: {
-        // 閫夋嫨搴撳瓨璁板綍鍚庯紝鑷姩鍥炲~浠撳簱/搴撳尯/搴撲綅/鎵规/鏁伴噺
+        // 閫夋嫨搴撳瓨璁板綍鍚庯紝鑷姩鍥炲~鐗╂枡/鎵规/鏁伴噺锛堜笉鍐嶅甫鍏ヤ粨搴撲俊鎭級
         onChange: async (stock?: MesWmMaterialStockApi.MaterialStock) => {
           await formApi?.setValues({
-            areaId: stock?.areaId,
             batchCode: stock?.batchCode,
             batchId: stock?.batchId,
-            locationId: stock?.locationId,
+            itemId: stock?.itemId,
+            materialDisplayName: stock
+              ? [stock.itemName, stock.specification].filter(Boolean).join(' | ')
+              : undefined,
             quantity: stock?.quantity,
             quantityMax: stock?.quantity,
-            warehouseId: stock?.warehouseId,
           });
         },
         virtualFilter: 'only',
@@ -519,38 +539,32 @@
     },
     {
       fieldName: 'warehouseId',
-      label: '鍏ュ簱浠撳簱',
+      label: '涓婃灦鐩爣浠撳簱',
       component: markRaw(WmWarehouseSelect),
-      componentProps: {
-        disabled: true,
-      },
+      // componentProps: {
+      //   excludeCodes: ['WIP_VIRTUAL_WAREHOUSE'],
+      // },
     },
     {
       fieldName: 'locationId',
-      label: '搴撳尯',
+      label: '涓婃灦鐩爣搴撳尯',
       component: markRaw(WmWarehouseLocationSelect),
-      componentProps: {
-        disabled: true,
-      },
       dependencies: {
         triggerFields: ['warehouseId'],
         componentProps: (values) => ({
-          disabled: true,
+          disabled: !values.warehouseId,
           warehouseId: values.warehouseId,
         }),
       },
     },
     {
       fieldName: 'areaId',
-      label: '搴撲綅',
+      label: '涓婃灦鐩爣搴撲綅',
       component: markRaw(WmWarehouseAreaSelect),
-      componentProps: {
-        disabled: true,
-      },
       dependencies: {
         triggerFields: ['locationId'],
         componentProps: (values) => ({
-          disabled: true,
+          disabled: !values.locationId,
           locationId: values.locationId,
         }),
       },
diff --git a/src/views/wls/returnissue/modules/detail-form.vue b/src/views/wls/returnissue/modules/detail-form.vue
index 032c771..4b3c638 100644
--- a/src/views/wls/returnissue/modules/detail-form.vue
+++ b/src/views/wls/returnissue/modules/detail-form.vue
@@ -85,8 +85,13 @@
       modalApi.lock();
       try {
         formData.value = await getReturnIssueDetail(data.detailId);
-        // 璁剧疆鍒� values
-        await formApi.setValues(formData.value);
+        // 璁剧疆鍒� values锛屽苟鏋勫缓鐗╂枡灞曠ず鍚�
+        await formApi.setValues({
+          ...formData.value,
+          materialDisplayName: [formData.value.itemName, formData.value.specification]
+            .filter(Boolean)
+            .join(' | '),
+        });
       } finally {
         modalApi.unlock();
       }
diff --git a/src/views/wls/returnissue/modules/line-form.vue b/src/views/wls/returnissue/modules/line-form.vue
index 7cdc601..fc72468 100644
--- a/src/views/wls/returnissue/modules/line-form.vue
+++ b/src/views/wls/returnissue/modules/line-form.vue
@@ -79,8 +79,13 @@
     modalApi.lock();
     try {
       formData.value = await getReturnIssueLine(data.id);
-      // 璁剧疆鍒� values
-      await formApi.setValues(formData.value);
+      // 璁剧疆鍒� values锛屽苟鏋勫缓鐗╂枡灞曠ず鍚�
+      await formApi.setValues({
+        ...formData.value,
+        materialDisplayName: [formData.value.itemName, formData.value.specification]
+          .filter(Boolean)
+          .join(' | '),
+      });
     } finally {
       modalApi.unlock();
     }
diff --git a/src/views/wls/warehouse/components/area-select.vue b/src/views/wls/warehouse/components/area-select.vue
index b423ae7..b2b2aff 100644
--- a/src/views/wls/warehouse/components/area-select.vue
+++ b/src/views/wls/warehouse/components/area-select.vue
@@ -3,7 +3,7 @@
 
 import { computed, ref, useAttrs, watch, watchEffect } from 'vue';
 
-import { Select, SelectOption, Tag, Tooltip } from 'ant-design-vue';
+import { Select, SelectOption, Tooltip } from 'ant-design-vue';
 
 import { getWarehouseAreaSimpleList } from '#/api/mes/wm/warehouse/area';
 
@@ -73,11 +73,21 @@
   },
 );
 
-/** 搴撳尯鍙樻洿鎴栧垵濮嬪寲鏃堕噸鏂板姞杞藉簱浣嶅垪琛� */
+/** 搴撳尯鍙樻洿鏃舵竻绌哄凡閫夊簱浣嶅苟閲嶆柊鍔犺浇鍒楄〃 */
 watchEffect(async () => {
+  if (!props.locationId) {
+    allList.value = [];
+    return;
+  }
   allList.value = await getWarehouseAreaSimpleList(props.locationId);
-  if (props.modelValue !== null) {
-    selectedItem.value = allList.value.find((o) => o.id === props.modelValue);
+  // 搴撳尯鍙樻洿鏃舵竻绌哄凡閫夌殑搴撲綅
+  if (props.modelValue !== null && props.modelValue !== undefined) {
+    const stillExists = allList.value.find((o) => o.id === props.modelValue);
+    if (!stillExists) {
+      selectedItem.value = undefined;
+      emit('update:modelValue', undefined);
+      emit('change', undefined);
+    }
   }
 });
 </script>
@@ -100,14 +110,12 @@
       :disabled="disabled"
       :filter-option="filterOption"
       :placeholder="placeholder"
+      :popup-match-select-width="false"
       show-search
       @change="handleChange"
     >
       <SelectOption v-for="item in allList" :key="item.id" :value="item.id">
-        <div class="flex items-center gap-2">
-          <span>{{ item.name }}</span>
-          <Tag v-if="item.code" color="blue">缂栧彿: {{ item.code }}</Tag>
-        </div>
+        {{ item.name }}
       </SelectOption>
     </Select>
   </Tooltip>
diff --git a/src/views/wls/warehouse/components/location-select.vue b/src/views/wls/warehouse/components/location-select.vue
index d732a9e..468f45c 100644
--- a/src/views/wls/warehouse/components/location-select.vue
+++ b/src/views/wls/warehouse/components/location-select.vue
@@ -3,7 +3,7 @@
 
 import { computed, ref, useAttrs, watch, watchEffect } from 'vue';
 
-import { Select, SelectOption, Tag, Tooltip } from 'ant-design-vue';
+import { Select, SelectOption, Tooltip } from 'ant-design-vue';
 
 import { getWarehouseLocationSimpleList } from '#/api/mes/wm/warehouse/location';
 
@@ -73,11 +73,21 @@
   },
 );
 
-/** 浠撳簱鍙樻洿鎴栧垵濮嬪寲鏃堕噸鏂板姞杞藉簱鍖哄垪琛� */
+/** 浠撳簱鍙樻洿鏃舵竻绌哄凡閫夊簱鍖哄苟閲嶆柊鍔犺浇鍒楄〃 */
 watchEffect(async () => {
+  if (!props.warehouseId) {
+    allList.value = [];
+    return;
+  }
   allList.value = await getWarehouseLocationSimpleList(props.warehouseId);
-  if (props.modelValue !== null) {
-    selectedItem.value = allList.value.find((o) => o.id === props.modelValue);
+  // 浠撳簱鍙樻洿鏃舵竻绌哄凡閫夌殑搴撳尯
+  if (props.modelValue !== null && props.modelValue !== undefined) {
+    const stillExists = allList.value.find((o) => o.id === props.modelValue);
+    if (!stillExists) {
+      selectedItem.value = undefined;
+      emit('update:modelValue', undefined);
+      emit('change', undefined);
+    }
   }
 });
 </script>
@@ -99,14 +109,12 @@
       :disabled="disabled"
       :filter-option="filterOption"
       :placeholder="placeholder"
+      :popup-match-select-width="false"
       show-search
       @change="handleChange"
     >
       <SelectOption v-for="item in allList" :key="item.id" :value="item.id">
-        <div class="flex items-center gap-2">
-          <span>{{ item.name }}</span>
-          <Tag v-if="item.code" color="blue">缂栧彿: {{ item.code }}</Tag>
-        </div>
+        {{ item.name }}
       </SelectOption>
     </Select>
   </Tooltip>
diff --git a/src/views/wls/warehouse/components/select.vue b/src/views/wls/warehouse/components/select.vue
index 339f6b8..4a4ff78 100644
--- a/src/views/wls/warehouse/components/select.vue
+++ b/src/views/wls/warehouse/components/select.vue
@@ -3,7 +3,7 @@
 
 import { computed, onMounted, ref, useAttrs, watch } from 'vue';
 
-import { Select, SelectOption, Tag, Tooltip } from 'ant-design-vue';
+import { Select, SelectOption, Tooltip } from 'ant-design-vue';
 
 import { getWarehouseSimpleList } from '#/api/mes/wm/warehouse';
 
@@ -13,12 +13,14 @@
   defineProps<{
     allowClear?: boolean;
     disabled?: boolean;
+    excludeCodes?: string[];
     modelValue?: number;
     placeholder?: string;
   }>(),
   {
     allowClear: true,
     disabled: false,
+    excludeCodes: undefined,
     modelValue: undefined,
     placeholder: '璇烽�夋嫨浠撳簱',
   },
@@ -32,6 +34,14 @@
 const attrs = useAttrs();
 const allList = ref<MesWmWarehouseApi.Warehouse[]>([]);
 const selectedItem = ref<MesWmWarehouseApi.Warehouse>();
+
+/** 鎸� excludeCodes 杩囨护鍚庣殑浠撳簱鍒楄〃 */
+const filteredList = computed(() => {
+  if (!props.excludeCodes?.length) {
+    return allList.value;
+  }
+  return allList.value.filter((w) => !props.excludeCodes!.includes(w.code ?? ''));
+});
 
 const selectValue = computed({
   get: () => props.modelValue,
@@ -96,14 +106,12 @@
       :disabled="disabled"
       :filter-option="filterOption"
       :placeholder="placeholder"
+      :popup-match-select-width="false"
       show-search
       @change="handleChange"
     >
-      <SelectOption v-for="item in allList" :key="item.id" :value="item.id">
-        <div class="flex items-center gap-2">
-          <span>{{ item.name }}</span>
-          <Tag v-if="item.code" color="blue">缂栧彿: {{ item.code }}</Tag>
-        </div>
+      <SelectOption v-for="item in filteredList" :key="item.id" :value="item.id">
+        {{ item.name }}
       </SelectOption>
     </Select>
   </Tooltip>

--
Gitblit v1.9.3