From 34d20fbf25427a76848bd1bf85f14c6e3d7ea1f0 Mon Sep 17 00:00:00 2001
From: quxin <592870522@qq.com>
Date: 星期五, 04 九月 2026 11:36:57 +0800
Subject: [PATCH] 修复: 生产领料后的退料应该是选择领料的记录,不是选择库存的记录(同时库存数据需要根据领料退料变动,比如库存100,领用80,然后领用80中退料30,库存应由原来的20变成50)

---
 src/views/wls/returnissue/modules/line-form.vue |   10 ++--
 src/views/wls/returnissue/modules/line-list.vue |    5 +-
 src/views/wls/returnissue/data.ts               |   36 ++++++++++--------
 src/api/mes/wm/productissue/line/index.ts       |    8 ++++
 src/api/mes/wm/returnissue/line/index.ts        |    1 
 src/views/wls/returnissue/modules/form.vue      |    2 
 6 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/src/api/mes/wm/productissue/line/index.ts b/src/api/mes/wm/productissue/line/index.ts
index 285d37a..9b79b2f 100644
--- a/src/api/mes/wm/productissue/line/index.ts
+++ b/src/api/mes/wm/productissue/line/index.ts
@@ -69,3 +69,11 @@
     { params: { issueId } },
   );
 }
+
+/** 鏌ヨ鍙��鏂欑殑棰嗘枡鍗曡鍒楄〃锛堟寜鐢熶骇璁㈠崟杩囨护锛屼粎杩斿洖宸插畬鎴愰鏂欑殑璁板綍锛� */
+export function getReturnableIssueLines(workOrderId: number) {
+  return requestClient.get<MesWmProductIssueLineApi.ProductIssueLine[]>(
+      '/mes/wm/product-issue-line/returnable-list',
+      { params: { workOrderId } },
+  );
+}
diff --git a/src/api/mes/wm/returnissue/line/index.ts b/src/api/mes/wm/returnissue/line/index.ts
index 05bef07..d1bb469 100644
--- a/src/api/mes/wm/returnissue/line/index.ts
+++ b/src/api/mes/wm/returnissue/line/index.ts
@@ -7,6 +7,7 @@
   export interface ReturnIssueLine {
     id?: number; // 琛岀紪鍙�
     issueId?: number; // 閫�鏂欏崟缂栧彿
+    issueLineId?: number; // 棰嗘枡鍗曡缂栧彿锛堝叧鑱旀潵婧愰鏂欒褰曪級
     itemId?: number; // 鐗╂枡缂栧彿
     itemCode?: string; // 鐗╂枡缂栫爜
     itemName?: string; // 鐗╂枡鍚嶇О
diff --git a/src/views/wls/returnissue/data.ts b/src/views/wls/returnissue/data.ts
index 4ca6336..691b573 100644
--- a/src/views/wls/returnissue/data.ts
+++ b/src/views/wls/returnissue/data.ts
@@ -1,6 +1,7 @@
 锘縤mport type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';
+import type { MesWmProductIssueLineApi } from '#/api/mes/wm/productissue/line';
 import type { MesWmReturnIssueApi } from '#/api/mes/wm/returnissue';
 import type { MesWmReturnIssueDetailApi } from '#/api/mes/wm/returnissue/detail';
 import type { MesWmReturnIssueLineApi } from '#/api/mes/wm/returnissue/line';
@@ -20,6 +21,7 @@
 import { generateAutoCode } from '#/api/mes/md/autocode/record';
 import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
 import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
+import { WmProductIssueLineSelect } from '#/views/wls/productissue/components';
 import { WmMaterialStockSelect } from '#/views/wls/materialstock/components';
 import {
   WmWarehouseAreaSelect,
@@ -316,27 +318,29 @@
 }
 
 /** 閫�鏂欏崟琛屾柊澧�/淇敼鐨勮〃鍗� */
-export function useLineFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {
+export function useLineFormSchema(
+  formApi?: VbenFormApi,
+  workOrderId?: number,
+): VbenFormSchema[] {
   return [
     {
-      fieldName: 'materialStockId',
-      label: '搴撳瓨璁板綍',
-      component: markRaw(WmMaterialStockSelect),
+      fieldName: 'issueLineId',
+      label: '棰嗘枡璁板綍',
+      component: markRaw(WmProductIssueLineSelect),
       componentProps: {
-        // 閫夋嫨搴撳瓨璁板綍鍚庯紝鑷姩鍥炲~鐗╂枡/鎵规/鏁伴噺
-        onChange: async (stock?: MesWmMaterialStockApi.MaterialStock) => {
+        workOrderId,
+        onChange: async (line?: MesWmProductIssueLineApi.ProductIssueLine) => {
           await formApi?.setValues({
-            batchCode: stock?.batchCode,
-            batchId: stock?.batchId,
-            itemId: stock?.itemId,
-            materialDisplayName: stock
-              ? [stock.itemName, stock.specification].filter(Boolean).join(' | ')
+            batchCode: line?.batchCode,
+            batchId: line?.batchId,
+            itemId: line?.itemId,
+            materialDisplayName: line
+              ? [line.itemName, line.specification].filter(Boolean).join(' | ')
               : undefined,
-            quantity: stock?.quantity,
-            quantityMax: stock?.quantity,
+            quantity: line?.quantity,
+            quantityMax: line?.quantity,
           });
         },
-        virtualFilter: 'only',
       },
       rules: 'selectRequired',
     },
@@ -390,7 +394,7 @@
       component: 'Input',
       componentProps: {
         disabled: true,
-        placeholder: '閫夋嫨搴撳瓨鍚庤嚜鍔ㄥ甫鍑�',
+        placeholder: '閫夋嫨棰嗘枡璁板綍鍚庤嚜鍔ㄥ甫鍑�',
       },
     },
     {
@@ -399,7 +403,7 @@
       component: 'Input',
       componentProps: {
         disabled: true,
-        placeholder: '閫夋嫨搴撳瓨鍚庤嚜鍔ㄥ甫鍑�',
+        placeholder: '閫夋嫨棰嗘枡璁板綍鍚庤嚜鍔ㄥ甫鍑�',
       },
     },
     {
diff --git a/src/views/wls/returnissue/modules/form.vue b/src/views/wls/returnissue/modules/form.vue
index 1546dd4..2d340e9 100644
--- a/src/views/wls/returnissue/modules/form.vue
+++ b/src/views/wls/returnissue/modules/form.vue
@@ -198,7 +198,7 @@
     <template v-if="formData?.id">
       <Divider>鐗╂枡淇℃伅</Divider>
       <div class="mx-4">
-        <LineList :form-type="formType" :issue-id="formData.id" />
+        <LineList :form-type="formType" :issue-id="formData.id" :work-order-id="formData.workOrderId" />
       </div>
     </template>
     <template #prepend-footer>
diff --git a/src/views/wls/returnissue/modules/line-form.vue b/src/views/wls/returnissue/modules/line-form.vue
index fc72468..4e14a8d 100644
--- a/src/views/wls/returnissue/modules/line-form.vue
+++ b/src/views/wls/returnissue/modules/line-form.vue
@@ -19,7 +19,8 @@
 
 const emit = defineEmits(['success']);
 const formData = ref<MesWmReturnIssueLineApi.ReturnIssueLine>();
-const issueId = ref<number>(); // 鎵�灞為��鏂欏崟缂栧彿
+const issueId = ref<number>();
+const workOrderId = ref<number>();
 
 const getTitle = computed(() => {
   return formData.value?.id
@@ -69,17 +70,16 @@
       formData.value = undefined;
       return;
     }
-    formApi.setState({ schema: useLineFormSchema(formApi) });
-    // 鍔犺浇鏁版嵁
-    const data = modalApi.getData<{ id?: number; issueId: number }>();
+    const data = modalApi.getData<{ id?: number; issueId: number; workOrderId?: number }>();
     issueId.value = data.issueId;
+    workOrderId.value = data.workOrderId;
+    formApi.setState({ schema: useLineFormSchema(formApi, workOrderId.value) });
     if (!data.id) {
       return;
     }
     modalApi.lock();
     try {
       formData.value = await getReturnIssueLine(data.id);
-      // 璁剧疆鍒� values锛屽苟鏋勫缓鐗╂枡灞曠ず鍚�
       await formApi.setValues({
         ...formData.value,
         materialDisplayName: [formData.value.itemName, formData.value.specification]
diff --git a/src/views/wls/returnissue/modules/line-list.vue b/src/views/wls/returnissue/modules/line-list.vue
index 98c6682..14c7ccf 100644
--- a/src/views/wls/returnissue/modules/line-list.vue
+++ b/src/views/wls/returnissue/modules/line-list.vue
@@ -29,6 +29,7 @@
 const props = defineProps<{
   formType: FormType;
   issueId: number;
+  workOrderId?: number;
 }>();
 
 const isEditable = computed(() =>
@@ -61,12 +62,12 @@
 
 /** 娣诲姞鐗╂枡 */
 function handleCreate() {
-  lineFormModalApi.setData({ issueId: props.issueId }).open();
+  lineFormModalApi.setData({ issueId: props.issueId, workOrderId: props.workOrderId }).open();
 }
 
 /** 缂栬緫鐗╂枡 */
 function handleEdit(row: MesWmReturnIssueLineApi.ReturnIssueLine) {
-  lineFormModalApi.setData({ id: row.id, issueId: props.issueId }).open();
+  lineFormModalApi.setData({ id: row.id, issueId: props.issueId, workOrderId: props.workOrderId }).open();
 }
 
 /** 鍒犻櫎鐗╂枡 */

--
Gitblit v1.9.3