Ver código fonte

修改智贸

Fan 3 semanas atrás
pai
commit
589c785d61

+ 4 - 0
ui/smarttrade-platform/.env.test

@@ -0,0 +1,4 @@
+# 测试环境后台接口地址
+VITE_API_BASE_URL=/api
+
+VITE_API_APP_ID=7

+ 3 - 1
ui/smarttrade-platform/package.json

@@ -4,7 +4,9 @@
   "private": true,
   "type": "module",
   "scripts": {
-    "dev": "vite",
+    "dev": "vite serve --mode development",
+    "test": "vite build --mode test",
+    "prod": "vite build --mode production",
     "build": "vite build",
     "preview": "vite preview"
   },

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

@@ -9,4 +9,5 @@ export const setMessageConfig = (data) => post('/router/rest/sys/message/config/
 export const getUserInfo = () => post('/router/rest/sys/auth/getCurrentUserInfo')
 export const updateUserPwd = (data) => post('/router/rest/sys/auth/modifyPass', data)
 export const updateRemark = (data) => post('/router/rest/sys/auth/updateRemark', data)
-export const getLoginData = (data) => post('/router/rest/sys/login/log/pageList', data)
+export const getLoginData = (data) => post('/router/rest/sys/login/log/pageList', data)
+export const getListTree = (data) => post('/router/rest/sys/user/pagelist', data)

+ 57 - 5
ui/smarttrade-platform/src/components/addMarketing.vue

@@ -210,31 +210,62 @@
                                     v-model="regionValue" clearable filterable @change="getRegion" />
                             </div>
                             <div class="form-group">
-                                <label class="form-label">行业</label>
+                                <!-- <label class="form-label">行业</label>
                                 <el-select v-model="newCampaign.filters.industry" clearable placeholder="全部行业">
                                     <el-option label="数据中心" value="datacenter" />
                                     <el-option label="消费电子" value="consumer" />
                                     <el-option label="电子分销" value="distributor" />
                                     <el-option label="零售" value="retail" />
                                     <el-option label="制造业" value="manufacturing" />
+                                </el-select> -->
+                                <label class="form-label">客户状态</label>
+                                <el-select v-model="customerParams.customerStatusDictValue" clearable placeholder="客户状态">
+                                    <el-option label="暂无需求" value="1" />
+                                    <el-option label="潜在客户" value="2" />
+                                    <el-option label="意向客户" value="3" />
+                                    <el-option label="忠诚客户" value="4" />
+                                    <el-option label="了解产品" value="11" />
+                                    <el-option label="正在跟进" value="22" />
+                                    <el-option label="寄样试用" value="33" />
+                                    <el-option label="意向购买" value="44" />
+                                    <el-option label="准备付款" value="55" />
+                                    <el-option label="暂时搁置" value="66" />
                                 </el-select>
                             </div>
                         </div>
                         <div class="filter-row">
                             <div class="form-group">
-                                <label class="form-label">意向分数</label>
+                                <!-- <label class="form-label">意向分数</label>
                                 <el-select v-model="newCampaign.filters.scoreRange" clearable placeholder="不限">
                                     <el-option label="80-100分" value="high" />
                                     <el-option label="60-79分" value="medium" />
                                     <el-option label="40-59分" value="low" />
+                                </el-select> -->
+                                <label class="form-label">客户类型</label>
+                                <el-select v-model="customerParams.customerTypeDictValue" clearable placeholder="客户类型">
+                                    <el-option label="供应厂商" value="4" />
+                                    <el-option label="代理合作" value="5" />
+                                    <el-option label="普通客户" value="1" />
+                                    <el-option label="友商客户" value="3" />
+                                    <el-option label="定制客户" value="2" />
+                                    <el-option label="内部客户" value="6" />
+                                    <el-option label="客户保护" value="10" />
+                                    <el-option label="协助项目" value="11" />
                                 </el-select>
                             </div>
                             <div class="form-group">
-                                <label class="form-label">客户规模</label>
+                                <!-- <label class="form-label">客户规模</label>
                                 <el-select v-model="newCampaign.filters.companySize" clearable placeholder="不限">
                                     <el-option label="大型企业(500+)" value="large" />
                                     <el-option label="中型企业(100-500)" value="medium" />
                                     <el-option label="小微企业(<100)" value="small" />
+                                </el-select> -->
+                                <label class="form-label">客户等级</label>
+                                <el-select v-model="customerParams.customerLevelDictValue" clearable placeholder="客户等级">
+                                    <el-option label="A级" value="1" />
+                                    <el-option label="B级" value="2" />
+                                    <el-option label="C级" value="3" />
+                                    <el-option label="D级" value="4" />
                                 </el-select>
                             </div>
                         </div>
@@ -884,6 +915,7 @@
     import PreviewCustomerModal from './PreviewCustomerModal.vue'
     import { getSopList, addMarketing, editMarketing, addSop, editSop } from '@/api/marketing'
     import { getCustomerList } from '@/api/customer'
+    import { getListTree } from '@/api/layout'
     import { getUserEmails } from '@/api/emails'
     import { region } from '@/utils/region';
 
@@ -1154,10 +1186,19 @@
             region: '', industry: '', scoreRange: '', stage: '', companySize: '', purchaseCycle: '',
             keyword: '', selectedTags: []
         }
+        customerParams.value = {
+            blurry: '',
+            country: '',
+            customerStatusDictValue: '',
+            customerTypeDictValue: '',
+            customerLevelDictValue: ''
+        }
+        getCustomerData()
     }
     const removeTag = (tag) => {
         const idx = newCampaign.value.filters.selectedTags.indexOf(tag)
         if (idx > -1) newCampaign.value.filters.selectedTags.splice(idx, 1)
+        customerList.value = customerList.value.filter(c => !c.customerName.includes(tag))
     }
     const applySuggestion = (type) => {
         if (type === 'name') {
@@ -1282,6 +1323,13 @@
         getSop(data?.sopId || '')
         customerList.value = []
         getEmails()
+        getTree()
+    }
+
+    const getTree = () => {
+        getListTree({isIncludeResign: false, reviewTag: 1, pageIndex: 1, pageSize: 10000 }).then(res => {
+            console.log('res :>> ', res);
+        })
     }
 
     const regionValue = ref([])
@@ -1289,13 +1337,18 @@
         customerParams.value.country = value ? value[1] : ''
     }
     const customerParams = ref({
-        country: ''
+        blurry: '',
+        country: '',
+        customerStatusDictValue: '',
+        customerTypeDictValue: '',
+        customerLevelDictValue: ''
     })
     const customerList = ref([])
     const sourceData = ref({})
     const getCustomerData = () => {
         getCustomerList({ pageIndex: 1, pageSize: 10000, ...customerParams.value }).then(res => {
             customerList.value = res.result.records || []
+            newCampaign.value.filters.selectedTags = customerList.value.map(item => item.customerName)
             sourceData.value = {}
             customerList.value.map(item => {
                 if(!item.customerSourceName) return
@@ -1305,7 +1358,6 @@
                     sourceData.value[item.customerSourceName] = 1
                 }
             })
-            console.log('sourceData.value :>> ', sourceData.value);
         })
     }
 

+ 39 - 19
ui/smarttrade-platform/src/views/MarketingView.vue

@@ -430,29 +430,28 @@
               <h4>输入要求</h4>
               <div class="form-group">
                 <label class="form-label">邮件类型</label>
-                <select class="form-select" v-model="aiGenerator.type">
-                  <option value="introduction">首次介绍信</option>
-                  <option value="followup">跟进邮件</option>
-                  <option value="product">产品推荐</option>
-                  <option value="offer">报价邮件</option>
-                </select>
+                <el-select v-model="aiGenerator.type">
+                  <el-option value="introduction" label="首次介绍信"></el-option>
+                  <el-option value="followup" label="跟进邮件"></el-option>
+                  <el-option value="product" label="产品推荐"></el-option>
+                  <el-option value="offer" label="报价邮件"></el-option>
+                </el-select>
               </div>
               <div class="form-group">
                 <label class="form-label">产品/服务</label>
-                <select class="form-select" v-model="aiGenerator.product">
-                  <option value="ssd">固态硬盘 SSD</option>
-                  <option value="hdd">机械硬盘 HDD</option>
-                  <option value="memory">内存条</option>
-                  <option value="storage">存储方案</option>
-                </select>
+                <el-select v-model="aiGenerator.product">
+                  <el-option value="ssd" label="固态硬盘 SSD"></el-option>
+                  <el-option value="hdd" label="机械硬盘 HDD"></el-option>
+                  <el-option value="memory" label="内存条"></el-option>
+                  <el-option value="storage" label="存储方案"></el-option>
+                </el-select>
               </div>
               <div class="form-group">
                 <label class="form-label">核心卖点</label>
-                <div class="checkbox-grid">
-                  <label v-for="point in sellingPoints" :key="point.id" class="checkbox-item">
-                    <input type="checkbox" v-model="aiGenerator.selectedPoints" :value="point.id">
-                    <span>{{ point.label }}</span>
-                  </label>
+                <div>
+                  <el-checkbox-group v-model="aiGenerator.selectedPoints">
+                    <el-checkbox :label="point.label" :value="point.id" v-for="point in sellingPoints" />
+                  </el-checkbox-group>
                 </div>
               </div>
               <div class="form-group">
@@ -473,8 +472,7 @@
               </div>
               <div class="form-group">
                 <label class="form-label">额外要求</label>
-                <textarea class="form-textarea" v-model="aiGenerator.additionalRequirements" rows="2"
-                          placeholder="例如:强调价格优势、提及促销信息"></textarea>
+                <el-input type="textarea" v-model="aiGenerator.additionalRequirements" :rows="2" placeholder="例如:强调价格优势、提及促销信息"></el-input>
               </div>
               <button class="btn btn-primary btn-block" @click="generateEmail" :disabled="isGenerating">
                 <i class="fas fa-magic" :class="{ 'fa-spin': isGenerating }"></i>
@@ -1777,4 +1775,26 @@ const editCampaign = (campaign) => {
 
 <style scoped>
  @import '../assets/styles/marketing.css';
+
+.ai-modal :deep(.el-textarea__inner),
+.ai-modal :deep(.el-select .el-select__wrapper) {
+    background: var(--bg-dark);
+    border: 1px solid var(--border);
+    box-shadow: none;
+    border-radius: 8px;
+    color: var(--text-primary);
+    width: 100%;
+    box-sizing: border-box;
+    min-width: 0;
+}
+.ai-modal :deep(.el-select__selection .el-select__placeholder:not(.is-transparent)) {
+    color: var(--text-primary);
+}
+.ai-modal :deep(.el-checkbox__input.is-checked .el-checkbox__inner) {
+    background: var(--primary);
+    border-color: var(--primary);
+}
+.ai-modal :deep(.el-checkbox__label) {
+    color: var(--text-primary);
+}
 </style>