Explorar o código

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_companyUI

caoliqin hai 3 días
pai
achega
4d4ce9791c

+ 26 - 0
.env.prod-xcsw

@@ -0,0 +1,26 @@
+# 页面标题
+VUE_APP_TITLE =星辰生物SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME =福州市星海星辰生物科技有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =闽ICP备2025092516号-13
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/xcsw.png
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 2
+
+#项目所属
+VUE_APP_PROJECT_FROM=xcsw
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 1 - 0
package.json

@@ -56,6 +56,7 @@
     "build:prod-bjzm": "vue-cli-service build --mode prod-bjzm",
     "build:prod-gzzdy": "vue-cli-service build --mode prod-gzzdy",
     "build:prod-shdn": "vue-cli-service build --mode prod-shdn",
+    "build:prod-xcsw": "vue-cli-service build --mode prod-xcsw",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src",
     "test:unit": "jest --clearCache && vue-cli-service test:unit",

BIN=BIN
src/assets/logo/xcsw.png


+ 20 - 2
src/views/crm/components/customerDetails.vue

@@ -72,8 +72,8 @@
             </el-descriptions-item>
 
             <el-descriptions-item label="标签" label-class-name="my-label">
-                <span v-if="item!=null">
-                    {{item.tags}}
+                <span v-if="item!=null && item.tags != null">
+                    <el-tag v-for="tag in item.tags.split(',')" size="mini">{{ tag }}</el-tag>
                 </span>
                 <!-- <el-button size="mini" icon="el-icon-edit"></el-button> -->
             </el-descriptions-item>
@@ -108,6 +108,24 @@
                 </span>
                 <!-- <el-button size="mini" icon="el-icon-edit"></el-button> -->
             </el-descriptions-item>
+          <el-descriptions-item label="购买渠道" label-class-name="my-label">
+                <span v-if="item!=null">
+                    {{item.platformName || ''}}
+                </span>
+
+          </el-descriptions-item>
+          <el-descriptions-item label="购买商品" label-class-name="my-label">
+                <span v-if="item!=null">
+                    {{item.goodsName || ''}} - {{item.goodsSpecification || ''}}
+                </span>
+
+          </el-descriptions-item>
+          <el-descriptions-item label="购买店铺" label-class-name="my-label">
+                <span v-if="item!=null">
+                    {{item.shopName || ''}}
+                </span>
+
+          </el-descriptions-item>
             <el-descriptions-item label="消费金额" label-class-name="my-label">
                 <span v-if="item!=null">
                     {{item.payMoney}}

+ 15 - 15
src/views/crm/components/duplicateCustomer.vue

@@ -74,7 +74,7 @@
                 </span>
                 <!-- <el-button size="mini" icon="el-icon-edit"></el-button> -->
             </el-descriptions-item>
-           
+
             <el-descriptions-item label="进线日期" label-class-name="my-label">
                 <span v-if="item!=null">
                     {{item.registerDate}}
@@ -147,7 +147,7 @@
                 </span>
                 <!-- <el-button size="mini" icon="el-icon-edit"></el-button> -->
             </el-descriptions-item>
-           
+
         </el-descriptions>
 
         <el-tabs style="margin-top:15px;"  z-index = "99" type="border-card" v-model="activeName" @tab-click="handleClick">
@@ -160,7 +160,7 @@
             <el-tab-pane label="订单记录" name="storeOrder">
                 <customer-store-order-list ref="storeOrder"></customer-store-order-list>
             </el-tab-pane>
-           
+
             <el-tab-pane label="通话记录" name="voiceLogs">
                 <customer-voice-logs-list ref="voiceLogs"></customer-voice-logs-list>
             </el-tab-pane>
@@ -171,7 +171,7 @@
                 <customer-logs-list ref="logs"></customer-logs-list>
             </el-tab-pane>
         </el-tabs>
-       
+
         <el-dialog :title="addTag.title" :visible.sync="addTag.open" width="600px" append-to-body>
             <add-tag ref="tag" @close="closeTag()"></add-tag>
         </el-dialog>
@@ -192,7 +192,7 @@
 
     </div>
 </template>
-  
+
 <script>
     import { listCustomerExt } from "@/api/crm/customerExt";
     import customerVisitList from '../components/customerVisitList.vue';
@@ -255,7 +255,7 @@
                 item:null,
                 showDuplicate:false,
                 dCustomerId:null,
-                 
+
             };
         },
         created() {
@@ -277,10 +277,10 @@
             this.getDicts("crm_customer_is_receive").then((response) => {
                 this.receiveOptions = response.data;
             });
-            
+
         },
         mounted(){
-           
+
         },
         methods: {
             handleEdit() {
@@ -310,7 +310,7 @@
                 setTimeout(() => {
                     that.$refs.sms.reset(this.item.customerId,mobile);
                 }, 500);
-                
+
             },
             closeRemark(){
                 this.addRemark.open=false;
@@ -333,7 +333,7 @@
                 setTimeout(() => {
                     that.$refs.tag.reset(this.item);
                 }, 500);
-                
+
             },
             handleClick(tab, event) {
                 if(tab.name=="contacts"){
@@ -378,14 +378,14 @@
                                     item.value=element.value
                                 }
                             });
-                           
+
                         });
                     }
                     this.activeName="visit"
                     setTimeout(() => {
                         that.$refs.visit.getData(customerId);
                     }, 500);
-                    
+
                 });
             },
         }
@@ -396,7 +396,7 @@
     height: 100%;
     background-color: #fff;
     padding: 0px 20px;
-        
+
 }
 .customer-title{
     margin-bottom: 15px;
@@ -412,5 +412,5 @@
   .el-descriptions-item__label.is-bordered-label{
     font-weight: normal;
   }
-  
-</style>
+
+</style>

+ 19 - 19
src/views/crm/components/lineCustomerDetails.vue

@@ -80,7 +80,7 @@
                 </span>
                 <!-- <el-button size="mini" icon="el-icon-edit"></el-button> -->
             </el-descriptions-item>
-           
+
             <el-descriptions-item label="进线日期" label-class-name="my-label">
                 <span v-if="item!=null">
                     {{item.registerDate}}
@@ -153,7 +153,7 @@
                 </span>
                 <!-- <el-button size="mini" icon="el-icon-edit"></el-button> -->
             </el-descriptions-item>
-           
+
         </el-descriptions>
 
         <el-tabs style="margin-top:15px;"  z-index = "99" type="border-card" v-model="activeName" @tab-click="handleClick">
@@ -166,7 +166,7 @@
             <el-tab-pane label="订单记录" name="storeOrder">
                 <customer-store-order-list ref="storeOrder"></customer-store-order-list>
             </el-tab-pane>
-           
+
             <el-tab-pane label="通话记录" name="voiceLogs">
                 <customer-voice-logs-list ref="voiceLogs"></customer-voice-logs-list>
             </el-tab-pane>
@@ -180,7 +180,7 @@
                 <customer-his-order-list ref="hisOrder"></customer-his-order-list>
             </el-tab-pane>
         </el-tabs>
-       
+
         <el-dialog :title="addTag.title" :visible.sync="addTag.open" width="600px" append-to-body>
             <add-tag ref="tag" @close="closeTag()"></add-tag>
         </el-dialog>
@@ -205,7 +205,7 @@
 
     </div>
 </template>
-  
+
 <script>
     import { listCustomerExt } from "@/api/crm/customerExt";
     import customerVisitList from '../components/customerVisitList.vue';
@@ -270,7 +270,7 @@
                 repetition:null,
                 showDuplicate:false,
                 dCustomerId:null,
-                 
+
             };
         },
         created() {
@@ -292,10 +292,10 @@
             this.getDicts("crm_customer_is_receive").then((response) => {
                 this.receiveOptions = response.data;
             });
-            
+
         },
         mounted(){
-           
+
         },
         methods: {
             handleShow(repetition){
@@ -328,7 +328,7 @@
                 setTimeout(() => {
                     that.$refs.sms.reset(this.item.customerId,mobile);
                 }, 500);
-                
+
             },
             closeRemark(){
                 this.addRemark.open=false;
@@ -351,7 +351,7 @@
                 setTimeout(() => {
                     that.$refs.tag.reset(this.item);
                 }, 500);
-                
+
             },
             handleClick(tab, event) {
                 if(tab.name=="contacts"){
@@ -371,7 +371,7 @@
                 }
                 if(tab.name=="smsLogs"){
                     this.$refs.smsLogs.getData(this.item.customerId);
-                }  
+                }
                 if(tab.name=="hisOrder"){
                     this.$refs.hisOrder.getData(this.item.customerId);
                 }
@@ -400,25 +400,25 @@
                                     item.value=element.value
                                 }
                             });
-                           
+
                         });
                     }
                     this.activeName="visit"
                     setTimeout(() => {
                         that.$refs.visit.getData(customerId);
                     }, 500);
-                    
+
                 });
             },
             initDuplicate(isDuplicate,dCustomerId){
-                 
+
                 this.showDuplicate=isDuplicate;
                 this.dCustomerId=dCustomerId;
             },
             handleDuplicate(){
                 this.duplicate.open=true;
                 var that=this;
-               
+
                 setTimeout(() => {
                     that.$refs.duplicateCustomer.getDetails(that.dCustomerId);
                 }, 200);
@@ -427,7 +427,7 @@
                 this.duplicate.open=false;
                 this.getDetails(this.customerId)
             }
-        
+
         }
     };
 </script>
@@ -436,7 +436,7 @@
     height: 100%;
     background-color: #fff;
     padding: 0px 20px;
-        
+
 }
 .customer-title{
     margin-bottom: 15px;
@@ -452,5 +452,5 @@
   .el-descriptions-item__label.is-bordered-label{
     font-weight: normal;
   }
-  
-</style>
+
+</style>

+ 9 - 4
src/views/live/liveAfteraSales/index.vue

@@ -433,20 +433,25 @@ export default {
     },
     /** 导出按钮操作 */
     handleExport() {
-      const queryParams = this.queryParams;
+      const params = { ...this.queryParams };
+      // 处理日期范围
+      if (this.dateRange && this.dateRange.length === 2) {
+        params.createTimeBegin = this.dateRange[0];
+        params.createTimeEnd = this.dateRange[1];
+      }
       this.$confirm('是否确认导出所有售后记录数据项?', "警告", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
           type: "warning"
         }).then(() => {
           this.exportLoading = true;
-          return exportLiveAfterSales(queryParams);
+          return exportLiveAfterSales(params);
         }).then(response => {
           this.download(response.msg);
           this.exportLoading = false;
         }).catch(() => {
-        this.exportLoading = false;
-      });
+          this.exportLoading = false;
+        });
     },
     getTreeselect() {
       var param={companyId:this.companyId}

+ 4 - 4
src/views/qw/friendWelcome/deptFriendWelcome.vue

@@ -410,7 +410,7 @@
         <div v-if="welcomeItem.type==='link'">
 
           <el-form-item label="选择课程">
-            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
+            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
                 :key="dict.dictValue"
@@ -418,7 +418,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
+            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
               <el-option
                 v-for="dict in videoList"
                 :key="dict.dictValue"
@@ -465,7 +465,7 @@
         <div v-if="welcomeItem.type==='miniprogram'">
 
           <el-form-item label="选择课程">
-            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
+            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
                 :key="dict.dictValue"
@@ -473,7 +473,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
+            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
               <el-option
                 v-for="dict in videoList"
                 :key="dict.dictValue"

+ 4 - 4
src/views/qw/friendWelcome/indexNew.vue

@@ -438,7 +438,7 @@
         <div v-if="welcomeItem.type==='link'">
 
           <el-form-item label="选择课程">
-            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
+            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
                 :key="dict.dictValue"
@@ -446,7 +446,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
+            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
               <el-option
                 v-for="dict in videoList"
                 :key="dict.dictValue"
@@ -493,7 +493,7 @@
         <div v-if="welcomeItem.type==='miniprogram'">
 
           <el-form-item label="选择课程" prop="miniprogramCourseId">
-            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
+            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
                 :key="dict.dictValue"
@@ -501,7 +501,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
+            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
               <el-option
                 v-for="dict in videoList"
                 :key="dict.dictValue"

+ 4 - 4
src/views/qw/friendWelcome/myIndexNew.vue

@@ -430,7 +430,7 @@
         <div v-if="welcomeItem.type==='link'">
 
           <el-form-item label="选择课程">
-            <el-select v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"
+            <el-select v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable
                        @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
@@ -439,7 +439,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;"
+            <el-select v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable
                        @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)">
               <el-option
                 v-for="dict in videoList"
@@ -489,7 +489,7 @@
         <div v-if="welcomeItem.type==='miniprogram'">
 
           <el-form-item label="选择课程">
-            <el-select v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"
+            <el-select v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable
                        @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
@@ -498,7 +498,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;"
+            <el-select v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable
                        @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)">
               <el-option
                 v-for="dict in videoList"

+ 4 - 4
src/views/qw/friendWelcome/myWelcome.vue

@@ -435,7 +435,7 @@
         <div v-if="welcomeItem.type==='link'">
 
           <el-form-item label="选择课程">
-            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
+            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
                 :key="dict.dictValue"
@@ -443,7 +443,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
+            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
               <el-option
                 v-for="dict in videoList"
                 :key="dict.dictValue"
@@ -490,7 +490,7 @@
         <div v-if="welcomeItem.type==='miniprogram'">
 
           <el-form-item label="选择课程" prop="miniprogramCourseId">
-            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini"  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
+            <el-select  v-model="fileFrom.courseId" placeholder="请选择课程" style=" margin-right: 10px;" size="mini" filterable  @change="courseChange(fileFrom,welcomeItem.index,welcomeItem.itemIndex)">
               <el-option
                 v-for="dict in courseList"
                 :key="dict.dictValue"
@@ -498,7 +498,7 @@
                 :value="parseInt(dict.dictValue)"
               />
             </el-select>
-            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
+            <el-select  v-model="fileFrom.videoId" placeholder="请选择小节" size="mini" style=" margin-right: 10px;" filterable @change="videoIdChange(fileFrom, welcomeItem.index, welcomeItem.itemIndex,welcomeItem.type)" >
               <el-option
                 v-for="dict in videoList"
                 :key="dict.dictValue"