2 Incheckningar 970f2bf586 ... 77c182d6e2

Upphovsman SHA1 Meddelande Datum
  zhujing 77c182d6e2 Merge remote-tracking branch 'origin/master' 1 vecka sedan
  zhujing 94d0ad63b6 接口 1 vecka sedan

+ 1 - 1
ui/smarttrade-platform/src/api/customer/index.js

@@ -1,3 +1,3 @@
 import { get, post, put, remove, upload } from '@/utils/request'
 
-export const getCustomerList = (params = {}) => post('/router/rest/customer/list', params)
+export const getCustomerList = (data = {}) => post('/router/rest/customer/list', data)

+ 3 - 0
ui/smarttrade-platform/src/api/knowledge/index.js

@@ -0,0 +1,3 @@
+import { get, post, put, remove, upload } from '@/utils/request'
+
+export const knowledgeDatasets = (params = {}) => get('/router/rest/knowledge/base/datasets', params)

+ 102 - 90
ui/smarttrade-platform/src/views/CustomersView.vue

@@ -36,7 +36,7 @@
     <div style="display: flex; gap: 16px; margin-bottom: 20px;">
       <div class="search-box" style="flex: 1;">
         <i class="fas fa-search search-icon"></i>
-        <input type="text" v-model="searchQuery" class="search-input" placeholder="搜索公司名称、联系人、邮箱...">
+        <input type="text" v-model="searchQuery" class="search-input" placeholder="搜索公司名称、联系人、邮箱..." @input="getCustomer">
       </div>
       <div style="display: flex; gap: 8px;">
         <select v-model="regionFilter" class="form-select" style="width: auto; padding: 8px 16px;">
@@ -81,24 +81,25 @@
         <div class="customer-flag">{{ customer.flag }}</div>
         <div class="customer-info">
           <div class="customer-header">
-            <span class="customer-name">{{ customer.name }}</span>
-            <span class="customer-status" :style="{ background: getStatusBg(customer.status), color: getStatusColor(customer.status) }">
+            <span class="customer-name">{{ customer.customerName }}</span>
+            <!-- 客户类型标识 -->
+            <!-- <span class="customer-status" :style="{ background: getStatusBg(customer.status), color: getStatusColor(customer.status) }">
               {{ getStatusLabel(customer.status) }}
-            </span>
+            </span> -->
           </div>
           <div class="customer-contact">
-            <i class="fas fa-user"></i> {{ customer.contact }} · {{ customer.role }}
+            <i class="fas fa-user"></i> {{ customer.liaison.name }}<span v-if="customer.liaison.departmentPosition"> · </span>{{ customer.liaison.departmentPosition }}
           </div>
           <div class="customer-meta">
-            <span><i class="fas fa-map-marker-alt"></i> {{ customer.location }}</span>
-            <span><i class="fas fa-industry"></i> {{ customer.industry }}</span>
-            <span><i class="fas fa-dollar-sign"></i> {{ customer.annualPurchase }}</span>
+            <span><i class="fas fa-map-marker-alt"></i> {{ customer.continent }} · {{ customer.country }}</span>
+            <span><i class="fas fa-industry"></i> {{ customer.customerCompany.industry }}</span>
+            <!-- <span><i class="fas fa-dollar-sign"></i> {{ customer.annualPurchase }}</span> -->
           </div>
         </div>
-        <div class="customer-score">
+        <!-- <div class="customer-score">
           <div class="score-circle" :class="getScoreClass(customer.score)">{{ customer.score }}</div>
           <div class="score-label">意向分</div>
-        </div>
+        </div> -->
         <div class="customer-actions" @click.stop>
           <button class="btn btn-secondary btn-sm" @click="showCustomerDetail(customer)"><i class="fas fa-eye"></i>更多详情</button>
         </div>
@@ -266,89 +267,100 @@ const showToast = ref(false)
 const toastMessage = ref('')
 const toastType = ref('success')
 
-const customerStats = {
-  total: 1247,
-  prospect: 812,
-  intent: 224,
-  deal: 156,
-  silent: 55
-}
-
-const tabs = [
-  { key: 'all', label: '全部客户', count: 1247 },
-  { key: 'prospect', label: '潜在客户', count: 812 },
-  { key: 'intent', label: '意向客户', count: 224 },
-  { key: 'deal', label: '成交客户', count: 156 },
-  { key: 'silent', label: '沉默客户', count: 55 }
-]
-
-getCustomerList().then(res => {
-  console.log('res :>》》》> ', res);
+const customerStats = ref({
+  total: 0,
+  prospect: 0,
+  intent: 0,
+  deal: 0,
+  silent: 0
 })
 
-const customers = ref([
-  { 
-    id: 1, flag: '🇸🇦', name: 'Riyadh Tech Distribution', status: 'prospect', contact: 'Ahmed Al-Rashid', 
-    role: '采购总监', location: '沙特·利雅得', industry: '固态硬盘进口商', annualPurchase: '年采购$2M+', score: 92,
-    email: 'ahmed@riyahtech.sa', phone: '+966 50 123 4567', website: 'www.riyahtech.sa',
-    totalDeals: 3, totalAmount: 4560000, lastContact: '3天前',
-    aiInsights: [
-      { type: 'purchase', level: 'high', icon: 'fas fa-shopping-cart', title: '采购意愿强烈', description: '近30天内访问官网5次,下载产品手册,建议重点跟进' },
-      { type: 'timing', level: 'medium', icon: 'fas fa-clock', title: '最佳联系时间', description: '根据历史数据分析,周二上午10点联系成功率最高' },
-      { type: 'decision', level: 'high', icon: 'fas fa-user-tie', title: '决策人已识别', description: 'Ahmed Al-Rashid 为采购决策人,已验证邮箱有效性' }
-    ],
-    interactions: [
-      { id: 1, type: 'email', action: '发送报价单', detail: 'SSD采购报价已发送,等待回复', time: '3天前' },
-      { id: 2, type: 'visit', action: '官网访问', detail: '浏览了企业级SSD产品页面,停留8分钟', time: '5天前' },
-      { id: 3, type: 'call', action: '电话沟通', detail: '确认了采购需求,数量约5000片', time: '1周前' },
-      { id: 4, type: 'email', action: '首次联系', detail: '通过LinkedIn找到联系人,发送介绍邮件', time: '2周前' }
-    ],
-    opportunities: [
-      { id: 1, name: 'SSD批量采购', amount: 850000, stage: '谈判中', statusClass: 'negotiation', statusLabel: '跟进中' }
-    ]
-  },
-  { 
-    id: 2, flag: '🇦🇪', name: 'Dubai Storage Solutions', status: 'prospect', contact: 'Mohammed Khan', 
-    role: 'CEO', location: '阿联酋·迪拜', industry: '电子分销商', annualPurchase: '年采购$1.5M', score: 88,
-    email: 'mohammed@dubaistorage.ae', phone: '+971 50 987 6543', website: 'www.dubaistorage.ae',
-    totalDeals: 2, totalAmount: 2800000, lastContact: '1天前',
-    aiInsights: [
-      { type: 'purchase', level: 'medium', icon: 'fas fa-chart-line', title: '采购潜力', description: '公司规模扩张中,预计明年需求增长30%' }
-    ],
-    interactions: [
-      { id: 1, type: 'meeting', action: '视频会议', detail: '讨论Q2采购计划,对NVMe SSD感兴趣', time: '1天前' }
-    ],
-    opportunities: []
-  },
-  { 
-    id: 3, flag: '🇰🇼', name: 'Kuwait Data Systems', status: 'intent', contact: 'Faisal Al-Mutairi', 
-    role: 'IT总监', location: '科威特', industry: '数据中心集成商', annualPurchase: '年采购$2.5M', score: 85,
-    email: 'faisal@kwdata.kw', phone: '+965 99 888 777', website: 'www.kwdata.kw',
-    totalDeals: 5, totalAmount: 6800000, lastContact: '今天',
-    aiInsights: [
-      { type: 'timing', level: 'high', icon: 'fas fa-fire', title: '紧急需求', description: '数据中心扩容项目急需采购,建议立即跟进' }
-    ],
-    interactions: [
-      { id: 1, type: 'email', action: '回复询价', detail: '确认了技术规格,要求提供样品', time: '今天' }
-    ],
-    opportunities: [
-      { id: 1, name: '数据中心扩容项目', amount: 1200000, stage: '方案报价', statusClass: 'proposal', statusLabel: '待报价' }
-    ]
-  },
-  { 
-    id: 4, flag: '🇩🇪', name: 'Berlin Tech GmbH', status: 'deal', contact: 'Hans Mueller', 
-    role: '采购经理', location: '德国·柏林', industry: '企业级存储', annualPurchase: '年采购$3M+', score: 95,
-    email: 'hans@berlintech.de', phone: '+49 30 12345678', website: 'www.berlintech.de',
-    totalDeals: 8, totalAmount: 12500000, lastContact: '2天前',
-    aiInsights: [],
-    interactions: [
-      { id: 1, type: 'order', action: '订单确认', detail: 'PO-2026-0315 已确认,金额¥680,000', time: '2天前' }
-    ],
-    opportunities: [
-      { id: 1, name: 'NVMe SSD批量采购', amount: 680000, stage: '已成交', statusClass: 'won', statusLabel: '已成交' }
-    ]
-  }
+const tabs = ref([
+  { key: 'all', label: '全部客户', count: 0 },
+  // { key: 'prospect', label: '潜在客户', count: 812 },
+  // { key: 'intent', label: '意向客户', count: 224 },
+  // { key: 'deal', label: '成交客户', count: 156 },
+  // { key: 'silent', label: '沉默客户', count: 55 }
 ])
+const customers = ref([])
+const params = ref({
+  pageIndex: 1, 
+  pageSize: 10,
+  blurry:null,
+})
+const getCustomer = () => {
+    params.value.blurry = searchQuery.value
+    getCustomerList(params.value).then(res => {
+    customerStats.value.total = tabs.value[0].count = res.result.total
+    customers.value = res.result.records
+  })
+}
+getCustomer()
+
+
+// const customers = ref([
+//   { 
+//     id: 1, flag: '🇸🇦', name: 'Riyadh Tech Distribution', status: 'prospect', contact: 'Ahmed Al-Rashid', 
+//     role: '采购总监', location: '沙特·利雅得', industry: '固态硬盘进口商', annualPurchase: '年采购$2M+', score: 92,
+//     email: 'ahmed@riyahtech.sa', phone: '+966 50 123 4567', website: 'www.riyahtech.sa',
+//     totalDeals: 3, totalAmount: 4560000, lastContact: '3天前',
+//     aiInsights: [
+//       { type: 'purchase', level: 'high', icon: 'fas fa-shopping-cart', title: '采购意愿强烈', description: '近30天内访问官网5次,下载产品手册,建议重点跟进' },
+//       { type: 'timing', level: 'medium', icon: 'fas fa-clock', title: '最佳联系时间', description: '根据历史数据分析,周二上午10点联系成功率最高' },
+//       { type: 'decision', level: 'high', icon: 'fas fa-user-tie', title: '决策人已识别', description: 'Ahmed Al-Rashid 为采购决策人,已验证邮箱有效性' }
+//     ],
+//     interactions: [
+//       { id: 1, type: 'email', action: '发送报价单', detail: 'SSD采购报价已发送,等待回复', time: '3天前' },
+//       { id: 2, type: 'visit', action: '官网访问', detail: '浏览了企业级SSD产品页面,停留8分钟', time: '5天前' },
+//       { id: 3, type: 'call', action: '电话沟通', detail: '确认了采购需求,数量约5000片', time: '1周前' },
+//       { id: 4, type: 'email', action: '首次联系', detail: '通过LinkedIn找到联系人,发送介绍邮件', time: '2周前' }
+//     ],
+//     opportunities: [
+//       { id: 1, name: 'SSD批量采购', amount: 850000, stage: '谈判中', statusClass: 'negotiation', statusLabel: '跟进中' }
+//     ]
+//   },
+//   { 
+//     id: 2, flag: '🇦🇪', name: 'Dubai Storage Solutions', status: 'prospect', contact: 'Mohammed Khan', 
+//     role: 'CEO', location: '阿联酋·迪拜', industry: '电子分销商', annualPurchase: '年采购$1.5M', score: 88,
+//     email: 'mohammed@dubaistorage.ae', phone: '+971 50 987 6543', website: 'www.dubaistorage.ae',
+//     totalDeals: 2, totalAmount: 2800000, lastContact: '1天前',
+//     aiInsights: [
+//       { type: 'purchase', level: 'medium', icon: 'fas fa-chart-line', title: '采购潜力', description: '公司规模扩张中,预计明年需求增长30%' }
+//     ],
+//     interactions: [
+//       { id: 1, type: 'meeting', action: '视频会议', detail: '讨论Q2采购计划,对NVMe SSD感兴趣', time: '1天前' }
+//     ],
+//     opportunities: []
+//   },
+//   { 
+//     id: 3, flag: '🇰🇼', name: 'Kuwait Data Systems', status: 'intent', contact: 'Faisal Al-Mutairi', 
+//     role: 'IT总监', location: '科威特', industry: '数据中心集成商', annualPurchase: '年采购$2.5M', score: 85,
+//     email: 'faisal@kwdata.kw', phone: '+965 99 888 777', website: 'www.kwdata.kw',
+//     totalDeals: 5, totalAmount: 6800000, lastContact: '今天',
+//     aiInsights: [
+//       { type: 'timing', level: 'high', icon: 'fas fa-fire', title: '紧急需求', description: '数据中心扩容项目急需采购,建议立即跟进' }
+//     ],
+//     interactions: [
+//       { id: 1, type: 'email', action: '回复询价', detail: '确认了技术规格,要求提供样品', time: '今天' }
+//     ],
+//     opportunities: [
+//       { id: 1, name: '数据中心扩容项目', amount: 1200000, stage: '方案报价', statusClass: 'proposal', statusLabel: '待报价' }
+//     ]
+//   },
+//   { 
+//     id: 4, flag: '🇩🇪', name: 'Berlin Tech GmbH', status: 'deal', contact: 'Hans Mueller', 
+//     role: '采购经理', location: '德国·柏林', industry: '企业级存储', annualPurchase: '年采购$3M+', score: 95,
+//     email: 'hans@berlintech.de', phone: '+49 30 12345678', website: 'www.berlintech.de',
+//     totalDeals: 8, totalAmount: 12500000, lastContact: '2天前',
+//     aiInsights: [],
+//     interactions: [
+//       { id: 1, type: 'order', action: '订单确认', detail: 'PO-2026-0315 已确认,金额¥680,000', time: '2天前' }
+//     ],
+//     opportunities: [
+//       { id: 1, name: 'NVMe SSD批量采购', amount: 680000, stage: '已成交', statusClass: 'won', statusLabel: '已成交' }
+//     ]
+//   }
+// ])
 
 const filteredCustomers = computed(() => {
   let result = customers.value

+ 5 - 0
ui/smarttrade-platform/src/views/KnowledgeView.vue

@@ -499,6 +499,11 @@
 
 <script setup>
 import { ref, computed } from 'vue'
+import { knowledgeDatasets } from '../api/knowledge'
+
+knowledgeDatasets({ pageIndex: 1, pageSize: 10 }).then(res => {
+  console.log('res :>> ', res);
+})
 
 const showAddModal = ref(false)
 const showDetailModal = ref(false)