From d78d1e8058a63ad46b15cf004cba87681f18bfab Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期二, 13 十月 2026 16:20:28 +0800
Subject: [PATCH] feat(aftersales): 工单 客户/联系人/物料/批次 改为文本输入

---
 src/views/aftersales/ticket/modules/form.vue |    2 
 src/views/aftersales/ticket/data.ts          |  112 ++++++++++++--------------------------------------------
 2 files changed, 25 insertions(+), 89 deletions(-)

diff --git a/src/views/aftersales/ticket/data.ts b/src/views/aftersales/ticket/data.ts
index 0a27a78..9b0d34d 100644
--- a/src/views/aftersales/ticket/data.ts
+++ b/src/views/aftersales/ticket/data.ts
@@ -1,7 +1,6 @@
-import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
+import type { VbenFormSchema } from '#/adapter/form';
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { AftersalesTicketApi } from '#/api/aftersales/ticket';
-import type { ErpSaleOrderApi } from '#/api/erp/sale/order';
 
 import { h, markRaw } from 'vue';
 
@@ -11,9 +10,6 @@
 import { Button, Tag } from 'ant-design-vue';
 
 import { z } from '#/adapter/form';
-import CrmCustomerSelect from '#/components/crm-customer-select.vue';
-import { MdItemSelect } from '#/views/mes/md/item/components';
-import { WmBatchSelect } from '#/views/wls/batch/components';
 import { UserSelect } from '#/views/system/user/components';
 import { getDeptList } from '#/api/system/dept';
 import { handleTree } from '#/packages/utils/src';
@@ -70,16 +66,16 @@
       rules: 'required',
     },
     {
-      fieldName: 'customerId',
+      fieldName: 'customerName',
       label: '瀹㈡埛',
-      component: markRaw(CrmCustomerSelect),
+      component: 'Input',
       componentProps: {
-        placeholder: '璇烽�夋嫨瀹㈡埛',
+        placeholder: '璇疯緭鍏ュ鎴�',
       },
-      rules: 'selectRequired',
+      rules: 'required',
     },
     {
-      fieldName: 'contactId',
+      fieldName: 'contactName',
       label: '鑱旂郴浜�',
       component: 'Input',
       componentProps: {
@@ -190,11 +186,12 @@
       },
     },
     {
-      fieldName: 'customerId',
+      fieldName: 'customerName',
       label: '瀹㈡埛',
-      component: markRaw(CrmCustomerSelect),
+      component: 'Input',
       componentProps: {
-        placeholder: '璇烽�夋嫨瀹㈡埛',
+        allowClear: true,
+        placeholder: '璇疯緭鍏ュ鎴�',
       },
     },
     {
@@ -359,86 +356,25 @@
 }
 
 /** 宸ュ崟鏄庣粏琛岃〃鍗� */
-export function useTicketItemFormSchema(
-  clientId?: number,
-  salesOrderCode?: string,
-  orderItems?: ErpSaleOrderApi.SaleOrderItem[],
-  formApi?: VbenFormApi,
-): VbenFormSchema[] {
-  const hasOrderItems = orderItems && orderItems.length > 0;
+export function useTicketItemFormSchema(): VbenFormSchema[] {
   return [
     {
-      fieldName: 'itemId',
-      label: '鐗╂枡',
-      component: hasOrderItems ? 'Select' : markRaw(MdItemSelect),
-      componentProps: hasOrderItems
-        ? {
-            placeholder: '璇烽�夋嫨鐗╂枡',
-            options: orderItems!.map((oi) => ({
-              label: `${oi.productName || ''} (${oi.productBarCode || oi.productId})`,
-              value: oi.productId,
-            })),
-            showSearch: true,
-            onChange: (value: number) => {
-              const oi = orderItems!.find((o) => o.productId === value);
-              if (oi && formApi) {
-                formApi.setValues({
-                  itemName: oi.productName,
-                  itemCode: oi.productBarCode || '',
-                  saleQuantity: oi.count,
-                  batchCode: oi.batchCode || '',
-                });
-              }
-            },
-          }
-        : {
-            placeholder: '璇烽�夋嫨鐗╂枡',
-          },
-      rules: 'selectRequired',
-    },
-    {
-      fieldName: 'itemCode',
-      component: 'Input',
-      dependencies: { triggerFields: [''], show: () => false },
-    },
-    {
       fieldName: 'itemName',
+      label: '鐗╂枡',
       component: 'Input',
-      dependencies: { triggerFields: [''], show: () => false },
+      componentProps: {
+        placeholder: '璇疯緭鍏ョ墿鏂�',
+      },
+      rules: 'required',
     },
-    ...(hasOrderItems
-      ? [
-          {
-            fieldName: 'batchCode',
-            label: '鎵规',
-            component: 'Input',
-            componentProps: {
-              disabled: true,
-              placeholder: '鑷姩浠庤鍗曞甫鍏�',
-            },
-          },
-        ]
-      : [
-          {
-            fieldName: 'batchId',
-            label: '鎵规',
-            component: markRaw(WmBatchSelect),
-            componentProps: {
-              clientId,
-              placeholder: '璇烽�夋嫨鎵规',
-              salesOrderCode,
-            },
-            dependencies: {
-              triggerFields: ['itemId'],
-              componentProps: (values: Record<string, unknown>) => ({
-                clientId,
-                itemId: values.itemId,
-                placeholder: '璇烽�夋嫨鎵规',
-                salesOrderCode,
-              }),
-            },
-          },
-        ]),
+    {
+      fieldName: 'batchCode',
+      label: '鎵规',
+      component: 'Input',
+      componentProps: {
+        placeholder: '璇疯緭鍏ユ壒娆�',
+      },
+    },
     {
       fieldName: 'saleQuantity',
       label: '閿�鍞暟閲�',
diff --git a/src/views/aftersales/ticket/modules/form.vue b/src/views/aftersales/ticket/modules/form.vue
index 47d677b..fa0d44f 100644
--- a/src/views/aftersales/ticket/modules/form.vue
+++ b/src/views/aftersales/ticket/modules/form.vue
@@ -167,7 +167,7 @@
   onOpenChange(isOpen: boolean) {
     if (!isOpen) { editingItemIndex.value = null; return; }
     const d = itemModalApi.getData<AftersalesTicketApi.TicketItem | null>();
-    itemFormApi.setState({ schema: useTicketItemFormSchema(formData.value?.customerId, undefined, [], itemFormApi) });
+    itemFormApi.setState({ schema: useTicketItemFormSchema() });
     if (d) { itemFormApi.setValues(d as Record<string, unknown>); } else { itemFormApi.resetForm(); }
   },
 });

--
Gitblit v1.9.3