Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

zyy vor 2 Tagen
Ursprung
Commit
0f9dd8f853

+ 8 - 0
src/api/crm/customer.js

@@ -22,6 +22,14 @@ export function listCustomerAll(query) {
     params: query
   })
 }
+export function listNoPage(query) {
+  return request({
+    url: '/crm/customer/listNoPage',
+    method: 'get',
+    params: query
+  })
+}
+
 export function getCustomerList(query) {
   return request({
     url: '/crm/customer/getCustomerList',

+ 20 - 3
src/views/company/companyWorkflow/design.scss

@@ -314,11 +314,28 @@
       .edge-group {
         cursor: pointer;
 
-        path {
+        // 交互路径 - 扩大点击区域
+        .edge-interaction {
+          pointer-events: stroke;
+        }
+
+        .edge-path {
           transition: all 0.2s;
+          pointer-events: none; // 让点击事件穿透到交互路径
+        }
 
-          &.selected {
-            stroke-width: 4;
+        // 悬停效果
+        &:hover {
+          .edge-path {
+            stroke-width: 3;
+            filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.2));
+          }
+        }
+
+        // 选中效果
+        &.selected {
+          .edge-path {
+            stroke-width: 3;
             filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.3));
           }
         }

+ 16 - 4
src/views/company/companyWorkflow/design.vue

@@ -110,14 +110,26 @@
               v-for="edge in edges"
               :key="edge.edgeKey"
               class="edge-group"
+              :class="{ selected: selectedEdge === edge }"
               @click.stop="selectEdge(edge)"
             >
+              <!-- 不可见的交互路径,用于扩大点击区域 -->
+              <path
+                :d="getEdgePath(edge)"
+                stroke="transparent"
+                stroke-width="16"
+                fill="none"
+                class="edge-interaction"
+                style="cursor: pointer"
+              />
+              <!-- 可见的连线路径 -->
               <path
                 :d="getEdgePath(edge)"
                 :stroke="edge.edgeColor || '#999'"
                 stroke-width="2"
                 fill="none"
                 :marker-end="selectedEdge === edge ? 'url(#arrowhead-selected)' : 'url(#arrowhead)'"
+                class="edge-path"
                 :class="{ selected: selectedEdge === edge }"
               />
               <text
@@ -383,7 +395,7 @@
                   />
                 </el-select>
               </el-form-item>
-              <el-form-item label="技能组">
+              <!-- <el-form-item label="技能组">
                 <el-select
                   v-model="selectedNode.nodeConfig.busiGroupId"
                   filterable
@@ -397,7 +409,7 @@
                     :value="item.groupId"
                   />
                 </el-select>
-              </el-form-item>
+              </el-form-item> -->
             </div>
 
             <!-- AI短信配置 -->
@@ -901,8 +913,8 @@ export default {
 
       const categoryMap = {
         basic: { key: 'basic', name: '基础节点', types: [] },
-        logic: { key: 'logic', name: '逻辑节点', types: [] },
-        aiCell: { key: 'aiCell', name: '外呼节点', types: [] },
+        // logic: { key: 'logic', name: '逻辑节点', types: [] },
+        aiCell: { key: 'aiCell', name: '动作节点', types: [] },
       }
       this.nodeTypes.forEach(t => {
         // 如果节点类型没有颜色,使用默认颜色

+ 60 - 2
src/views/crm/components/CustomerSelect.vue

@@ -89,7 +89,18 @@
           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
         </el-form-item>
       </el-form>
-
+      <el-row :gutter="10" class="mb8" v-if="designatedCompany">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          @click="checkWithCondition()"
+        >按筛选条件选中
+        </el-button>
+      </el-col>
+    </el-row>
       <el-table border v-loading="loading" :data="customerList" :row-key="getRowKeys" @selection-change="handleSelectionChange" size="mini" ref="table" height="450">
         <el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
         <el-table-column label="ID" align="center" prop="customerId" />
@@ -153,7 +164,7 @@
 </template>
 
 <script>
-import { listCustomerAll  } from "@/api/crm/customer";
+import { listCustomerAll,listNoPage } from "@/api/crm/customer";
 import { getCompanyList } from "@/api/company/company";
 import customerDetails from '@/views/crm/components/customerDetails.vue';
 import editCustomerSource from '@/views/crm/components/editSource.vue';
@@ -451,6 +462,53 @@ export default {
         this.$refs.table.clearSelection();
       })
     },
+    //按照筛选条件选择客户
+    checkWithCondition(){
+
+    let queryParamNoPage = {};
+    queryParamNoPage = this.queryParams;
+    if(this.receiveTimeRange!=null&&this.receiveTimeRange.length==2){
+        queryParamNoPage.receiveTimeRange=this.receiveTimeRange[0]+"--"+this.receiveTimeRange[1]
+      }
+      else{
+        queryParamNoPage.receiveTimeRange=null;
+      }
+      if(this.ctsTypeArr.length>0){
+        queryParamNoPage.customerType=this.ctsTypeArr.toString();
+      }
+      else{
+        queryParamNoPage.customerType=null
+      }
+
+      if(this.sourceArr.length>0){
+        queryParamNoPage.source=this.sourceArr.toString();
+      }
+      else{
+        queryParamNoPage.source=null
+      }
+      if(this.tagIds.length>0){
+        queryParamNoPage.tags=this.tagIds.toString();
+      }
+      else{
+        queryParamNoPage.tags=null
+      }
+      listNoPage(this.addDateRange(queryParamNoPage, this.dateRange)).then(response => {
+        let resList = response.rows; 
+        this.ids = [];
+        this.names = [];
+        this.rows = [];
+        if(!!resList){
+          this.ids = resList.map(item => item.customerId);
+          this.names = resList.map(item => item.customerName);
+          this.rows = resList;
+        }
+        this.$nextTick(() => {
+        this.$emit("success", {ids: this.ids, names: this.names, rows: this.rows})
+        this.shows = false;
+        this.$refs.table.clearSelection();
+      })
+      });
+    }
   }
 };
 </script>

+ 1 - 1
src/views/crm/components/aiCallVoiceLog.vue

@@ -101,7 +101,7 @@ export default {
                 });
             },
             handleRecordPath(url){
-                let path = 'http://118.24.138.129/recordFile/listen?file=' + url;
+                let path = 'http://129.28.164.235:8899/recordings/files?filename=' + url;
                 console.log(path);
                 return path;
             }

+ 20 - 0
src/views/hisStore/components/productOrder.vue

@@ -141,6 +141,26 @@
                   {{ order.remark }}
                 </span>
           </el-descriptions-item>
+          <el-descriptions-item label="销售名称" v-if="order!=null && order.orderType != 0">
+                <span >
+                  {{ order.companyUserName }}
+                </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="销售公司" v-if="order!=null && order.orderType != 0">
+                <span >
+                  {{ order.companyName }}
+                </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="所属营期" v-if="order!=null && order.orderType == 3">
+                <span >
+                  {{ order.periodName }}
+                </span>
+          </el-descriptions-item>
+          <el-descriptions-item label="所属小节" v-if="order!=null && order.orderType == 3">
+                <span >
+                  {{ order.videoName }}
+                </span>
+          </el-descriptions-item>
           <el-descriptions-item label="跟随阶段" v-if="company.companyId == 174">
               <span v-if="order!=null ">
                 <el-tag prop="orderVisit" v-for="(item, index) in customerUserStatusOptions"

+ 7 - 0
src/views/hisStore/storeOrder/healthStoreList.vue

@@ -124,6 +124,12 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="订单类型" prop="orderType">
+        <el-select v-model="queryParams.orderType" placeholder="请选择订单类型" clearable size="small">
+          <el-option label="直播订单" value="2" />
+          <el-option label="点播订单" value="3" />
+        </el-select>
+      </el-form-item>
       <!--      <el-form-item label="上传凭证" prop="isUpload">
                <el-select   v-model="queryParams.isUpload" placeholder="请选择" clearable size="small" >
                 <el-option key="0"  label="未上传" value="0" />
@@ -440,6 +446,7 @@
       <el-table-column align="center" label="订单类型" prop="orderType" width="100">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.orderType == 2" type="warning">直播订单</el-tag>
+          <el-tag v-else-if="scope.row.orderType == 3">点播订单</el-tag>
           <el-tag v-else type="success">商城订单</el-tag>
         </template>
       </el-table-column>

+ 23 - 2
src/views/live/liveData/indexCompany.vue

@@ -60,7 +60,7 @@
       <el-table-column prop="totalAttendanceCount" label="总到课人数(去重)" width="140" align="center">
         <template slot-scope="scope">{{ scope.row.totalAttendanceCount || 0 }}</template>
       </el-table-column>
-      <el-table-column prop="totalCompleteCount" label="总完课人数" width="110" align="center">
+      <el-table-column prop="totalCompleteCount" label="总完课人数(去重)" width="110" align="center">
         <template slot-scope="scope">{{ scope.row.totalCompleteCount || 0 }}</template>
       </el-table-column>
       <el-table-column prop="totalCompleteRate" label="总完课率" width="100" align="center">
@@ -69,7 +69,7 @@
       <el-table-column prop="liveAttendanceCount" label="直播课人数(去重)" width="140" align="center">
         <template slot-scope="scope">{{ scope.row.liveAttendanceCount || 0 }}</template>
       </el-table-column>
-      <el-table-column prop="liveCompleteCount" label="直播完课人数" width="120" align="center">
+      <el-table-column prop="liveCompleteCount" label="直播完课人数(去重)" width="120" align="center">
         <template slot-scope="scope">{{ scope.row.liveCompleteCount || 0 }}</template>
       </el-table-column>
       <el-table-column prop="liveCompleteRate" label="直播完课率" width="110" align="center">
@@ -167,6 +167,27 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
+      // 验证公司ID不能为空
+      if (!this.queryParams.companyIds || this.queryParams.companyIds.length === 0) {
+        this.$message.warning('请选择公司');
+        return;
+      }
+
+      // 验证时间范围不能为空
+      if (!this.dateRange || this.dateRange.length !== 2) {
+        this.$message.warning('请选择时间范围');
+        return;
+      }
+
+      // 验证时间范围不能超过31天
+      const startDate = new Date(this.dateRange[0]);
+      const endDate = new Date(this.dateRange[1]);
+      const diffTime = Math.abs(endDate - startDate);
+      const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+      if (diffDays > 31) {
+        this.$message.warning('时间范围不能超过31天');
+        return;
+      }
       this.queryParams.pageNum = 1;
       this.getList();
     },