From 617dcdcba6b5134fbd6b7cdf77c459556d19cc9a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 04 十一月 2026 16:44:58 +0800
Subject: [PATCH] feat(crm): 开票管理新增销售订单选择,开票金额带出订单未开票金额

---
 src/views/crm/invoice/data.ts |   46 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/src/views/crm/invoice/data.ts b/src/views/crm/invoice/data.ts
index cd22af7..8a5e9ba 100644
--- a/src/views/crm/invoice/data.ts
+++ b/src/views/crm/invoice/data.ts
@@ -6,8 +6,10 @@
 import { useUserStore } from '@vben/stores';
 
 import { getContractSimpleList } from '#/api/crm/contract';
+import { getSaleOrderRemainPrice } from '#/api/crm/invoice';
 import { getSimpleUserList } from '#/api/system/user';
 import CrmCustomerSelect from '#/components/crm-customer-select.vue';
+import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
 
 import { markRaw } from 'vue';
 
@@ -56,6 +58,34 @@
       defaultValue: userStore.userInfo?.id,
     },
     {
+      fieldName: 'saleOrderId',
+      label: '閿�鍞鍗�',
+      component: markRaw(ErpSaleOrderSelect),
+      dependencies: {
+        triggerFields: ['id'],
+        disabled: (values) => !!values.id,
+      },
+      componentProps: (_values, form) => ({
+        placeholder: '璇烽�夋嫨閿�鍞鍗曪紙鍙笉閫夛級',
+        allowClear: true,
+        // 鍙厑璁搁�夋嫨瀹℃牳閫氳繃鐨勯攢鍞鍗曪紙ErpAuditStatus.APPROVE = 20锛�
+        status: 20,
+        onChange: async (item: any) => {
+          if (!item) {
+            form.setFieldValue('price', undefined);
+            return;
+          }
+          // 瀹㈡埛銆佸悎鍚屻�佹姮澶撮殢閿�鍞鍗曞甫鍑�
+          form.setFieldValue('customerId', item.customerId);
+          form.setFieldValue('contractId', item.contractId);
+          form.setFieldValue('invoiceTitle', item.customerName);
+          // 寮�绁ㄩ噾棰濋粯璁ゅ甫鍑鸿璁㈠崟鐨勬湭寮�绁ㄩ噾棰�
+          const remainPrice = await getSaleOrderRemainPrice(item.id);
+          form.setFieldValue('price', remainPrice > 0 ? remainPrice : 0);
+        },
+      }),
+    },
+    {
       fieldName: 'customerId',
       label: '瀹㈡埛鍚嶇О',
       component: markRaw(CrmCustomerSelect),
@@ -68,8 +98,9 @@
         },
       }),
       dependencies: {
-        triggerFields: ['id'],
-        disabled: (values) => !!values.id,
+        triggerFields: ['id', 'saleOrderId'],
+        // 閫変簡閿�鍞鍗曟椂瀹㈡埛鐢辫鍗曠‘瀹氾紝涓嶅彲鏀�
+        disabled: (values) => !!values.id || !!values.saleOrderId,
       },
     },
     {
@@ -77,8 +108,10 @@
       label: '鍚堝悓鍚嶇О',
       component: 'Select',
       dependencies: {
-        triggerFields: ['customerId'],
-        disabled: (values) => !values.customerId || !!values.id,
+        triggerFields: ['customerId', 'saleOrderId'],
+        // 閫変簡閿�鍞鍗曟椂鍚堝悓鐢辫鍗曞甫鍑猴紝涓嶅彲鏀�
+        disabled: (values) =>
+          !values.customerId || !!values.id || !!values.saleOrderId,
         async componentProps(values, form) {
           if (!values.customerId) {
             return {
@@ -233,6 +266,11 @@
       slots: { default: 'contractNo' },
     },
     {
+      title: '閿�鍞鍗曞彿',
+      field: 'saleOrderNo',
+      minWidth: 160,
+    },
+    {
       title: '鍙戠エ绫诲瀷',
       field: 'invoiceType',
       minWidth: 120,

--
Gitblit v1.9.3