From 54a14c766c182d2e45bc63e047dc338e2e44e7dd Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 22 五月 2026 09:26:27 +0800
Subject: [PATCH] feat(AIChatSidebar): 添加销售退款回款记录功能支持
---
src/components/AIChatSidebar/index.vue | 93 +++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 82 insertions(+), 11 deletions(-)
diff --git a/src/components/AIChatSidebar/index.vue b/src/components/AIChatSidebar/index.vue
index 3006ce7..a6d46da 100644
--- a/src/components/AIChatSidebar/index.vue
+++ b/src/components/AIChatSidebar/index.vue
@@ -1007,7 +1007,7 @@
sales_customer_profile_list: '瀹㈡埛妗f',
sales_quotation_list: '閿�鍞姤浠�',
sales_ledger_list: '閿�鍞彴璐�',
- sales_return_list: '閿�鍞��璐�',
+ sales_return_list: '閿�鍞��娆�/鍥炴璁板綍',
sales_customer_interaction_list: '瀹㈡埛寰�鏉�',
sales_shipping_list: '鍙戣揣鍙拌处',
sales_dashboard: '閿�鍞寚鏍囩粺璁�',
@@ -1016,6 +1016,7 @@
}
const purchaseTypeLabelMap = {
purchase_material_rank: '閲囪喘鐗╂枡閲戦鎺掕',
+ purchase_stats: '閲囪喘缁熻',
purchase_pending_payment_list: '寰呬粯娆鹃噰璐崟'
}
const financialStructuredTypeSet = new Set([
@@ -1108,6 +1109,26 @@
stockQty: '搴撳瓨閲�'
}
Object.assign(structuredFieldLabelMap, {
+ refundId: '閫�娆�/鍥炴鍗曞彿',
+ collectionNumber: '鏀舵鍗曞彿',
+ collectionAmount: '鏀舵閲戦',
+ actualAmount: '鏀舵閲戦(鍏煎)',
+ customerId: '瀹㈡埛ID',
+ salesLedgerId: '閿�鍞彴璐D',
+ projectName: '椤圭洰鍚嶇О',
+ receiptPaymentDate: '鏀朵粯娆炬棩鏈�',
+ receiptPaymentAmount: '鏀朵粯娆鹃噾棰�',
+ receiptPaymentType: '鏀朵粯娆剧被鍨�',
+ registrant: '鐧昏浜�',
+ returnAmount: '鍥炴閲戦姹囨��',
+ totalReceiptAmount: '鏀舵鎬婚',
+ customerCount: '瀹㈡埛鏁�',
+ paidAmount: '宸蹭粯娆鹃噾棰�',
+ contractAmount: '鍚堝悓閲戦',
+ paymentCount: '浠樻绗旀暟',
+ invoiceCount: '鍙戠エ绗旀暟',
+ paymentAmount: '浠樻閲戦',
+ invoiceAmount: '鍙戠エ閲戦',
customerName: '瀹㈡埛鍚嶇О',
riskLevel: '椋庨櫓绛夌骇',
riskScore: '椋庨櫓璇勫垎',
@@ -1554,12 +1575,41 @@
return items.filter(item => isPlainObject(item))
}
+const normalizeSalesReturnListItems = (items = []) => {
+ return normalizeSalesListItems(items).map((item) => {
+ const collectionAmount = item.collectionAmount ?? item.actualAmount
+ const collectionNumber = item.collectionNumber || item.refundId || ''
+ return {
+ ...item,
+ refundId: item.refundId || collectionNumber,
+ collectionNumber,
+ collectionAmount: collectionAmount ?? 0,
+ actualAmount: item.actualAmount ?? collectionAmount ?? 0
+ }
+ })
+}
+
+const normalizeSalesTypeListItems = (type = '', items = []) => {
+ if (type === 'sales_return_list') {
+ return normalizeSalesReturnListItems(items)
+ }
+ return normalizeSalesListItems(items)
+}
+
+const inferSalesColumnsByType = (type = '', listItems = []) => {
+ const columns = inferSalesColumns(listItems)
+ if (type === 'sales_return_list') {
+ return columns.filter(column => column !== 'actualAmount')
+ }
+ return columns
+}
+
const buildSalesStructuredData = (parsedData) => {
const type = String(parsedData?.type || '')
if (!salesStructuredTypeSet.has(type)) return null
const rawData = isPlainObject(parsedData?.data) ? parsedData.data : {}
- const listItems = normalizeSalesListItems(rawData.items)
+ const listItems = normalizeSalesTypeListItems(type, rawData.items)
const topCustomers = normalizeSalesListItems(rawData.topCustomers)
const contractTrend = normalizeSalesListItems(rawData.contractTrend)
@@ -1567,7 +1617,7 @@
type,
summaryEntries: normalizeManufacturingSummaryEntries(parsedData?.summary),
listItems,
- columns: inferSalesColumns(listItems),
+ columns: inferSalesColumnsByType(type, listItems),
topCustomers,
topCustomerColumns: inferSalesColumns(topCustomers),
contractTrend,
@@ -2399,6 +2449,8 @@
if (parsedData.type === 'sales_customer_churn_risk') return '宸蹭负鎮ㄧ敓鎴愬鎴锋祦澶遍闄╁垎鏋愩��'
if (parsedData.type === 'sales_collection_quote_strategy') return '宸蹭负鎮ㄧ敓鎴愬洖娆句笌鎶ヤ环绛栫暐寤鸿銆�'
if (parsedData.type === 'sales_dashboard') return '宸蹭负鎮ㄧ敓鎴愰攢鍞寚鏍囩粺璁°��'
+ if (parsedData.type === 'sales_return_list') return '宸茶繑鍥為攢鍞��娆�/鍥炴璁板綍銆�'
+ if (parsedData.type === 'sales_customer_interaction_list') return '宸茶繑鍥炲鎴峰線鏉ユ暟鎹��'
return '宸茶繑鍥為攢鍞煡璇㈢粨鏋溿��'
}
if (manufacturingStructuredTypeSet.has(parsedData.type)) {
@@ -2411,6 +2463,27 @@
if (String(parsedData.type || '').startsWith('purchase_')) return '宸茶繑鍥為噰璐煡璇㈢粨鏋溿��'
if (parsedData.charts && Object.keys(parsedData.charts).length > 0) return '宸蹭负鎮ㄧ敓鎴愬垎鏋愬浘琛ㄣ��'
return '姝e湪涓烘偍灞曠ず鍒嗘瀽缁撴灉...'
+}
+
+const resolveStructuredDescription = (parsedData) => {
+ if (!parsedData) return ''
+ if (parsedData.action === 'confirm_required') {
+ return getPurchaseConfirmDescription(parsedData)
+ }
+
+ const description = String(parsedData.description || '').trim()
+ if (!description) return ''
+
+ if (parsedData.type === 'sales_customer_interaction_list') {
+ if (description === 'no_customer_interactions') return '璇ユ椂闂磋寖鍥存殏鏃犲鎴峰線鏉ヨ褰曘��'
+ if (description === 'ok') return '宸茶繑鍥炲鎴峰線鏉ユ暟鎹��'
+ }
+
+ if (description === 'ok' || description === 'success') {
+ return getStructuredFallbackText(parsedData)
+ }
+
+ return description
}
const buildPurchaseMaterialRankCharts = (parsedData) => {
@@ -3790,10 +3863,9 @@
display = ''
}
- if (parsed.description) {
- display = parsed.action === 'confirm_required'
- ? getPurchaseConfirmDescription(parsed)
- : parsed.description
+ const resolvedDescription = resolveStructuredDescription(parsed)
+ if (resolvedDescription) {
+ display = resolvedDescription
}
if (!display) {
@@ -3812,10 +3884,9 @@
display = ''
}
- if (parsed.description) {
- display = parsed.action === 'confirm_required'
- ? getPurchaseConfirmDescription(parsed)
- : parsed.description
+ const resolvedDescription = resolveStructuredDescription(parsed)
+ if (resolvedDescription) {
+ display = resolvedDescription
}
if (!display) {
--
Gitblit v1.9.3