From 21599300cc73ff7384b74cc5e4ac2cbd82bdc293 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 28 十月 2026 18:34:29 +0800
Subject: [PATCH] feat(wls): 更新销售退货功能支持关联销售出库单

---
 src/views/mes/pro/batch/data.ts |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 115 insertions(+), 3 deletions(-)

diff --git a/src/views/mes/pro/batch/data.ts b/src/views/mes/pro/batch/data.ts
index 9e0803c..4be0fd3 100644
--- a/src/views/mes/pro/batch/data.ts
+++ b/src/views/mes/pro/batch/data.ts
@@ -16,14 +16,68 @@
 
 /** 鏈粦瀹氭墭鐩樹笅鎷夐�夐」 */
 export interface PalletOption {
+  disabled?: boolean;
+  itemCode?: string;
+  itemId?: number;
+  itemName?: string;
   label: string;
   value: number;
+}
+
+export type TonBagOption = PalletOption;
+
+/** 缁戝畾绫诲瀷锛堟墭鐩�/鍚ㄨ浜掓枼锛岀紪杈戣ˉ褰曟椂鎸夊凡鏈夌粦瀹氶攣瀹氬叾涓竴鏂癸級 */
+export type BindingMode = 'pallet' | 'tonBag';
+
+/** 鎵樼洏銆佸惃琚嬩笅鎷夌殑浜や簰浜嬩欢锛堟敮鎸佽繙绋嬫悳绱笌婊氬姩鍒嗛〉鍔犺浇锛� */
+export interface BindingSelectHandlers {
+  onChange?: (ids: number[]) => void;
+  onPopupScroll?: (event: Event) => void;
+  onSearch?: (keyword: string) => void;
+}
+
+/**
+ * 鍒锋柊鎵樼洏閫夐」绂佺敤鎬併��
+ *
+ * 涓嬫媺宸叉敼涓哄垎椤靛姞杞斤紝閫夐」鏁扮粍鏈韩灏辨槸娓叉煋鏁版嵁婧愶紝鍥犳绂佺敤鎬佺洿鎺ュ啓鍒伴�夐」瀵硅薄涓婏紝
+ * 姣忔鍔犺浇鏂颁竴椤垫垨琛ㄥ崟鍊煎彉鍖栨椂閲嶇畻锛岄伩鍏嶄緷璧栨満鍒堕噷鍋氭暟缁勬槧灏勫鑷存柊鍔犺浇鐨勬暟鎹鏃у揩鐓ц鐩栥��
+ */
+export function applyPalletOptionState(
+  options: PalletOption[],
+  values: Record<string, any>,
+  existingBinding?: BindingMode,
+) {
+  options.forEach((option) => {
+    option.disabled =
+      existingBinding === 'tonBag' ||
+      !!values.tonBagIds?.length ||
+      !option.itemId ||
+      (!!values.itemId && option.itemId !== values.itemId);
+  });
+}
+
+/** 鍒锋柊鍚ㄨ閫夐」绂佺敤鎬侊紝瑙勫垯涓� {@link applyPalletOptionState} 瀵圭О */
+export function applyTonBagOptionState(
+  options: TonBagOption[],
+  values: Record<string, any>,
+  existingBinding?: BindingMode,
+) {
+  options.forEach((option) => {
+    option.disabled =
+      existingBinding === 'pallet' ||
+      !!values.palletIds?.length ||
+      (!!values.itemId && option.itemId !== values.itemId);
+  });
 }
 
 /** 鏂板/淇敼鐨勮〃鍗� */
 export function useFormSchema(
   formType: FormType,
   palletOptions: PalletOption[] = [],
+  palletHandlers: BindingSelectHandlers = {},
+  tonBagOptions: TonBagOption[] = [],
+  tonBagHandlers: BindingSelectHandlers = {},
+  existingBinding?: BindingMode,
 ): VbenFormSchema[] {
   const disabled = formType === 'detail';
   return [
@@ -132,6 +186,18 @@
       rules: 'selectRequired',
     },
     {
+      fieldName: 'itemId', component: 'Input',
+      dependencies: { triggerFields: [''], show: () => false },
+    },
+    {
+      fieldName: 'itemName', label: '鍝佺鍚嶇О', component: 'Input',
+      componentProps: { disabled: true, placeholder: '閫夋嫨鎵樼洏鎴栧惃琚嬪悗鑷姩甯﹀叆' },
+    },
+    {
+      fieldName: 'itemCode', label: '鍝佺缂栫爜', component: 'Input',
+      componentProps: { disabled: true, placeholder: '閫夋嫨鎵樼洏鎴栧惃琚嬪悗鑷姩甯﹀叆' },
+    },
+    {
       fieldName: 'palletIds',
       label: '缁戝畾鎵樼洏',
       component: 'Select',
@@ -139,17 +205,59 @@
         allowClear: true,
         disabled,
         maxTagCount: 3,
+        dropdownMatchSelectWidth: false,
+        dropdownStyle: { minWidth: '360px', maxWidth: 'calc(100vw - 32px)' },
         mode: 'multiple',
         optionFilterProp: 'label',
         options: palletOptions,
-        placeholder: '璇烽�夋嫨鎵樼洏锛堝彲涓嶉�夛級',
+        filterOption: false,
+        ...palletHandlers,
+        placeholder: '璇烽�夋嫨鐩稿悓鍝佺鐨勬墭鐩�',
         showSearch: true,
       },
       dependencies: {
-        triggerFields: [''],
+        triggerFields: ['itemId', 'tonBagIds'],
         show: () => formType !== 'detail',
+        componentProps: (values) => {
+          applyPalletOptionState(palletOptions, values, existingBinding);
+          return {
+            options: palletOptions,
+            disabled: disabled || existingBinding === 'tonBag' || !!values.tonBagIds?.length,
+          };
+        },
       },
-      help: '缁戝畾鍚庢壒娆$洿鎺ヨ繘鍏ョ敓浜т腑锛氭墭鐩樼敓鎴愭寮忔墭鐩樼爜锛屾墭鐩樹笅鏈綍鎵规鐨勮鐮佽嚜鍔ㄧ骇鑱斿綍鍏ユ湰鎵规锛堣鐮佸搧绉嶉』涓�鑷达級锛涚紪杈戞椂浠呴渶鍕鹃�夋柊澧炴墭鐩橈紝宸茬粦瀹氱殑涓嶅彲瑙g粦',
+      help: '鍙兘缁戝畾鐩稿悓鍝佺鐨勬墭鐩橈紝鍝佺淇℃伅鑷姩甯﹀叆锛涚己灏戝搧绉嶇殑鎵樼洏璇峰厛瑁呰銆傜粦瀹氬悗鎵规鐩存帴杩涘叆鐢熶骇涓細鎵樼洏鐢熸垚姝e紡鎵樼洏鐮侊紝鎵樼洏涓嬫湭褰曟壒娆$殑琚嬬爜鑷姩绾ц仈褰曞叆鏈壒娆★紙琚嬬爜鍝佺椤讳竴鑷达級锛涚紪杈戞椂浠呴渶鍕鹃�夋柊澧炴墭鐩橈紝宸茬粦瀹氱殑涓嶅彲瑙g粦',
+    },
+    {
+      fieldName: 'tonBagIds',
+      label: '缁戝畾鍚ㄨ',
+      component: 'Select',
+      componentProps: {
+        allowClear: true,
+        disabled,
+        maxTagCount: 3,
+        dropdownMatchSelectWidth: false,
+        dropdownStyle: { minWidth: '380px', maxWidth: 'calc(100vw - 32px)' },
+        mode: 'multiple',
+        optionFilterProp: 'label',
+        options: tonBagOptions,
+        filterOption: false,
+        ...tonBagHandlers,
+        placeholder: '璇烽�夋嫨鐩稿悓鍝佺鐨勫惃琚�',
+        showSearch: true,
+      },
+      dependencies: {
+        triggerFields: ['itemId', 'palletIds'],
+        show: () => formType !== 'detail',
+        componentProps: (values) => {
+          applyTonBagOptionState(tonBagOptions, values, existingBinding);
+          return {
+            options: tonBagOptions,
+            disabled: disabled || existingBinding === 'pallet' || !!values.palletIds?.length,
+          };
+        },
+      },
+      help: '浠呭彲缁戝畾璁¢噺鍗曚綅涓哄惃銆佹棤鎵樼洏涓旀湭褰曞叆鎵规鐨勮鐮侊紱涓庣粦瀹氭墭鐩樹簰鏂ャ�傜紪杈戞椂浠呴�夋嫨鏂板鍚ㄨ锛屽凡缁戝畾鐨勪笉鍙В缁�',
     },
     {
       fieldName: 'remark',
@@ -168,6 +276,7 @@
 /** 鍒楄〃鐨勬悳绱㈣〃鍗� */
 export function useGridFormSchema(): VbenFormSchema[] {
   return [
+    { fieldName: 'businessCode', label: '涓氬姟鐮�', component: 'Input', componentProps: { allowClear: true, placeholder: '璇疯緭鍏ヤ綔涓氭壂鐮佷笟鍔$爜' } },
     {
       fieldName: 'code',
       label: '鎵规鍙�',
@@ -237,6 +346,7 @@
 /** 鍒楄〃鐨勫瓧娈� */
 export function useGridColumns(): VxeTableGridOptions<MesProBatchApi.Batch>['columns'] {
   return [
+    { field: 'businessCode', title: '涓氬姟鐮侊紙浣滀笟鎵爜锛�', minWidth: 210 },
     {
       field: 'code',
       title: '鎵规鍙�',
@@ -244,6 +354,8 @@
       minWidth: 200,
       slots: { default: 'code' },
     },
+    { field: 'itemName', title: '鍝佺鍚嶇О', minWidth: 150 },
+    { field: 'itemCode', title: '鍝佺缂栫爜', minWidth: 150 },
     {
       field: 'lineName',
       title: '鍔犲伐鍗曚綅',

--
Gitblit v1.9.3