吴树波 23 годин тому
батько
коміт
0b614f2267

+ 199 - 71
src/views/company/companyVoiceRobotic/index.vue

@@ -168,75 +168,86 @@
     />
 
     <!-- 添加或修改机器人外呼任务对话框 -->
-    <el-drawer size="75%" :title="title" :visible.sync="open" width="500px" append-to-body>
-      <div class="app-container">
-        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-          <el-form-item label="任务名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入任务名称"/>
-          </el-form-item>
-          <!-- <el-form-item label="机器人" prop="robot">
-            <el-select v-model="form.robot" filterable>
-              <el-option v-for="item in robotList" :label="item.name + '('+item.num+')'" :value="item.id"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="话术" prop="dialogId">
-            <el-select v-model="form.dialogId" filterable>
-              <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>
-            </el-select>
-          </el-form-item> -->
-           <!-- <el-form-item label="主叫分组" prop="cidGroupId">
-            <el-select v-model="form.cidGroupId" filterable>
-              <el-option v-for="item in CIDGroupList" :label="item.name" :value="item.id"/>
-            </el-select>
-          </el-form-item> -->
-          <el-form-item label="拨打客户" prop="userIds">
-            <el-button @click="openSelect">选择客户({{ form.userIds ? form.userIds.length : 0 }})</el-button>
-          </el-form-item>
-          <!-- <el-form-item label="任务流程" prop="taskFlow"> -->
-<!--            <draggable v-model="taskFlowList" @end="" class="flow-parent">-->
-<!--              <div class="flow-child" v-for="item in taskFlowList">-->
-<!--                <el-tag>{{ item.value }}</el-tag>-->
-<!--                <i class="el-icon-arrow-right"></i>-->
-<!--              </div>-->
-<!--            </draggable>-->
-        <el-form-item label="任务流程" prop="companyAiWorkflowId">
-             <el-select v-model="form.companyAiWorkflowId" filterable>
-              <el-option v-for="item in workflowList" :label="item.label" :value="item.value"/>
-            </el-select>
-         </el-form-item>
-          <el-form-item label="加微方式" prop="addType">
-            <el-radio v-model="form.addType" :label="0">平均</el-radio>
-            <el-radio v-model="form.addType" :label="1">意向</el-radio>
-          </el-form-item>
-<!--          <el-form-item label="加微等待时间" prop="addWxTime" >-->
-<!--              <el-input style="width:240px"  v-model="form.addWxTime" placeholder="加微等待时间"/>-->
-<!--          </el-form-item>-->
-          <el-form-item label="分配账号">
-            <el-button @click="addQwUser">添加</el-button>
-            <el-row :gutter="24" v-for="(item, index) in form.qwUser" style="margin-top: 5px">
-              <el-col :span="5" v-if="form.addType == 1">
-                <el-select v-model="item.intention" placeholder="意向等级" filterable clearable>
-                  <el-option v-for="item in levelList" :label="item.dictLabel" :value="item.dictValue"/>
-                </el-select>
-              </el-col>
-              <el-col :span="4">
-                <el-button @click="openQwUserSelect(index)">选择企微({{ item.companyUserId ? item.companyUserId.length : 0 }})</el-button>
-              </el-col>
-              <!-- <el-col :span="5">
-                <el-select v-model="item.wxDialogId" placeholder="话术" filterable>
-                  <el-option v-for="item in wxDialogList" :label="item.name" :value="item.id"/>
-                </el-select>
-              </el-col>
-              <el-col :span="5">
-                <el-select v-model="item.smsTempId" placeholder="短信模板" filterable>
-                  <el-option v-for="item in smsTempList" :label="item.title" :value="item.tempId"/>
-                </el-select>
-              </el-col> -->
-              <el-col :span="3">
-                <el-button type="danger" icon="el-icon-delete" circle @click="removeQwUser(index)"></el-button>
-              </el-col>
-            </el-row>
-          </el-form-item>
+    <el-drawer size="60%" :title="title" :visible.sync="open" width="500px" append-to-body class="task-form-drawer">
+      <div class="drawer-content">
+        <el-form ref="form" :model="form" :rules="rules" label-width="90px" class="task-form">
+          <div class="form-section">
+            <div class="section-title">
+              <i class="el-icon-document"></i>
+              <span>基本信息</span>
+            </div>
+            <el-form-item label="任务名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入任务名称" clearable/>
+            </el-form-item>
+            <el-form-item label="拨打客户" prop="userIds">
+              <el-button icon="el-icon-user" @click="openSelect">
+                选择客户
+                <el-tag v-if="form.userIds && form.userIds.length" type="primary" size="small" style="margin-left: 8px;">
+                  {{ form.userIds.length }}
+                </el-tag>
+              </el-button>
+            </el-form-item>
+            <el-form-item label="任务流程" prop="companyAiWorkflowId">
+              <el-select v-model="form.companyAiWorkflowId" filterable placeholder="请选择任务流程">
+                <el-option v-for="item in workflowList" :key="item.value" :label="item.label" :value="item.value"/>
+              </el-select>
+            </el-form-item>
+          </div>
+
+          <div class="form-section">
+            <div class="section-title">
+              <i class="el-icon-setting"></i>
+              <span>加微设置</span>
+            </div>
+            <el-form-item label="加微方式" prop="addType">
+              <el-radio-group v-model="form.addType">
+                <el-radio :label="0" border>
+                  <i class="el-icon-pie-chart"></i>
+                  平均分配
+                </el-radio>
+                <el-radio :label="1" border>
+                  <i class="el-icon-star-on"></i>
+                  意向分配
+                </el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </div>
+
+          <div class="form-section account-section">
+            <div class="section-title">
+              <i class="el-icon-user-solid"></i>
+              <span>分配账号</span>
+              <el-button type="primary" size="mini" icon="el-icon-plus" @click="addQwUser" plain>添加</el-button>
+            </div>
+            <div class="account-list" v-if="form.qwUser && form.qwUser.length">
+              <div v-for="(item, index) in form.qwUser" :key="index" class="account-item">
+                <el-row :gutter="12">
+                  <el-col :span="form.addType == 1 ? 6 : 0" v-if="form.addType == 1">
+                    <el-select v-model="item.intention" placeholder="意向等级" filterable clearable size="small">
+                      <el-option v-for="opt in levelList" :key="opt.dictValue" :label="opt.dictLabel" :value="opt.dictValue"/>
+                    </el-select>
+                  </el-col>
+                  <el-col :span="form.addType == 1 ? 7 : 10">
+                    <el-button icon="el-icon-user" @click="openQwUserSelect(index)" size="small" style="width: 100%;">
+                      选择企微
+                      <el-tag v-if="item.companyUserId && item.companyUserId.length" type="success" size="mini" style="margin-left: 6px;">
+                        {{ item.companyUserId.length }}
+                      </el-tag>
+                    </el-button>
+                  </el-col>
+                  <el-col :span="form.addType == 1 ? 9 : 12">
+                    <el-select v-model="item.wxDialogId" placeholder="选择话术" filterable size="small">
+                      <el-option v-for="dialog in wxDialogList" :key="dialog.id" :label="dialog.name" :value="dialog.id"/>
+                    </el-select>
+                  </el-col>
+                  <el-col :span="2">
+                    <el-button type="danger" icon="el-icon-delete" circle @click="removeQwUser(index)" size="small"></el-button>
+                  </el-col>
+                </el-row>
+              </div>
+            </div>
+            <el-empty v-else description="暂无分配账号" :image-size="80"></el-empty>
+          </div>
           <!-- <el-form-item label="模式" prop="mode">
             <el-select v-model="form.mode">
               <el-option label="呼叫机器人后挂断" :value="7"/>
@@ -710,7 +721,11 @@ export default {
         endTime2: null,
         createTime: null,
         qwUser: [],
-        createUser: null
+        createUser: null,
+        userIds: [],
+        userNames: [],
+        userTableList: [],
+        companyAiWorkflowId: null
       };
       this.resetForm("form");
     },
@@ -753,6 +768,26 @@ export default {
           if (this.form.weekDay && this.form.weekDay.length > 0) {
             this.form.weekDay1 = this.form.weekDay.join(",")
           }
+          
+          // 验证加微方案
+          if(!this.form.qwUser || this.form.qwUser.length == 0){
+            this.msgError("请添加分配账号");
+            return;
+          }
+          
+          // 验证每个账号是否选择了企微和话术
+          for(let i = 0; i < this.form.qwUser.length; i++) {
+            const account = this.form.qwUser[i];
+            if(!account.companyUserId || account.companyUserId.length == 0) {
+              this.msgError(`第 ${i + 1} 个账号请选择企微`);
+              return;
+            }
+            if(!account.wxDialogId) {
+              this.msgError(`第 ${i + 1} 个账号请选择话术`);
+              return;
+            }
+          }
+          
           let list = [];
           this.form.qwUser.forEach(l => {
             list = list.concat(l.companyUserId.map(e => {return {intention: l.intention, companyUserId: e,wxDialogId: l.wxDialogId,smsTempId:l.smsTempId}}))
@@ -821,7 +856,7 @@ export default {
       });
     },
     openSelect() {
-      this.$refs.customer.setRows(this.form.userTableList);
+      this.$refs.customer.setRows(this.form.userTableList || []);
     },
     openQwUserSelect(index) {
       this.thisQwUserIndex = index;
@@ -1279,4 +1314,97 @@ export default {
 .duration i {
   font-size: 14px;
 }
+
+/* 任务表单样式 */
+.task-form-drawer ::v-deep .el-drawer__body {
+  padding: 0;
+}
+
+.drawer-content {
+  padding: 16px;
+  background: #f5f7fa;
+  min-height: 100%;
+}
+
+.task-form {
+  max-width: 750px;
+  margin: 0 auto;
+}
+
+.form-section {
+  background: #fff;
+  border-radius: 8px;
+  padding: 16px 20px;
+  margin-bottom: 16px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+}
+
+.section-title {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  font-size: 15px;
+  font-weight: 600;
+  color: #303133;
+  margin-bottom: 16px;
+  padding-bottom: 10px;
+  border-bottom: 1px solid #f0f2f5;
+}
+
+.section-title i {
+  font-size: 16px;
+  color: #1890ff;
+}
+
+.task-form ::v-deep .el-form-item {
+  margin-bottom: 16px;
+}
+
+.task-form ::v-deep .el-form-item:last-child {
+  margin-bottom: 0;
+}
+
+.task-form ::v-deep .el-input,
+.task-form ::v-deep .el-select {
+  width: 100%;
+}
+
+.task-form ::v-deep .el-radio-group {
+  width: 100%;
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 12px;
+}
+
+.task-form ::v-deep .el-radio.is-bordered {
+  margin: 0;
+  padding: 10px 16px;
+  height: auto;
+}
+
+.task-form ::v-deep .el-radio.is-bordered i {
+  margin-right: 6px;
+  font-size: 16px;
+}
+
+.account-list {
+  margin-top: 12px;
+}
+
+.account-item {
+  margin-bottom: 10px;
+  padding: 12px;
+  background: #f9fafb;
+  border-radius: 6px;
+  border: 1px solid #e8e8e8;
+}
+
+.account-item:hover {
+  border-color: #1890ff;
+  background: #f0f9ff;
+}
+
+.account-item ::v-deep .el-select {
+  width: 100%;
+}
 </style>

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

@@ -402,7 +402,7 @@
               </div>
 
               <!-- 加微信任务条件 -->
-              <div v-if="edgeSourceNode.nodeType == 'AI_SEND_MSG_TASK'" class="conditions-container">
+              <div v-if="edgeSourceNode.nodeType == 'AI_ADD_WX_TASK'" class="conditions-container">
                 <div v-for="(item, index) in selectedEdge.conditionExprObj" :key="index" class="condition-item">
                   <div class="condition-header">
                     <span class="condition-number">条件 {{ index + 1 }}</span>
@@ -428,8 +428,8 @@
                 </div>
               </div>
 
-              <!-- 其他任务类型条件 -->
-              <div v-if="edgeSourceNode.nodeType == 'AI_ADD_WX_TASK'" class="conditions-container">
+              <!-- 发短信任务条件 -->
+              <div v-if="edgeSourceNode.nodeType == 'AI_SEND_MSG_TASK'" class="conditions-container">
                 <div class="empty-condition">
                   <i class="el-icon-info"></i>
                   <span>此类型暂不支持条件设置</span>
@@ -535,6 +535,11 @@ export default {
         { dictValue: '3', dictLabel: '审批流程' }
       ],
       conditionExprTemp:{
+        callConnected: false,
+        callTime: '',
+        intention: '',
+        isAdd: false,
+        addTime: ''
       },
       CIDGroupList:[],
       robotList: [],
@@ -634,6 +639,10 @@ export default {
     // 点击连线时聚焦
     selectEdge(edge) {
       this.selectedEdge = edge
+      // 确保 conditionExprObj 存在
+      if (!this.selectedEdge.conditionExprObj) {
+        this.$set(this.selectedEdge, 'conditionExprObj', [])
+      }
       this.edgeSourceNode = this.nodes.filter(e => e.nodeKey == this.selectedEdge.sourceNodeKey)[0]
       if(this.edgeSourceNode.nodeType == "AI_CALL_TASK"){
         if(this.levelList.length == 0) {
@@ -729,12 +738,27 @@ export default {
     },
     /** 节点类型分组 */
     groupNodeTypes() {
+      // 默认颜色映射
+      const defaultColors = {
+        start: '#52c41a',
+        end: '#ff4d4f',
+        condition: '#faad14',
+        AI_CALL_TASK: '#1890ff',
+        AI_ADD_WX_TASK: '#722ed1',
+        AI_SEND_MSG_TASK: '#eb2f96',
+        DELAY_TASK: '#13c2c2'
+      }
+      
       const categoryMap = {
         basic: { key: 'basic', name: '基础节点', types: [] },
         logic: { key: 'logic', name: '逻辑节点', types: [] },
         aiCell: { key: 'aiCell', name: '外呼节点', types: [] },
       }
       this.nodeTypes.forEach(t => {
+        // 如果节点类型没有颜色,使用默认颜色
+        if (!t.typeColor) {
+          t.typeColor = defaultColors[t.typeCode] || '#666'
+        }
         const cat = categoryMap[t.typeCategory] || categoryMap.basic
         cat.types.push(t)
       })
@@ -1204,6 +1228,13 @@ export default {
     },
     /** 删除连线(按钮触发) */
     addCondition() {
+      if (!this.selectedEdge) {
+        this.msgWarning('请先选择一条连线')
+        return
+      }
+      if (!this.selectedEdge.conditionExprObj) {
+        this.$set(this.selectedEdge, 'conditionExprObj', [])
+      }
       this.selectedEdge.conditionExprObj.push(JSON.parse(JSON.stringify(this.conditionExprTemp)));
     },
     removeCondition(index) {
@@ -1226,6 +1257,11 @@ export default {
       nodes.filter(node => typeof node.nodeConfig == 'object').forEach(node => {
         node.nodeConfig = JSON.stringify(node.nodeConfig);
       })
+      
+      // 查找开始节点和结束节点
+      const startNode = this.nodes.find(node => node.nodeType === 'START')
+      const endNode = this.nodes.find(node => node.nodeType === 'END')
+      
       const data = {
         workflowId: this.workflowId,
         workflowName: this.form.workflowName,
@@ -1233,7 +1269,9 @@ export default {
         workflowType: this.form.workflowType,
         canvasData: JSON.stringify({ scale: this.scale, offset: this.canvasOffset }),
         nodes: nodes,
-        edges: this.edges
+        edges: this.edges,
+        startNodeKey: startNode ? startNode.nodeKey : null,
+        endNodeKey: endNode ? endNode.nodeKey : null
       }
 
       if (this.workflowId) {

+ 89 - 88
src/views/components/QwUserSelect.vue

@@ -1,91 +1,86 @@
 <template>
-  <el-drawer size="75%" title="客户选择" :visible.sync="shows" append-to-body destroy-on-close>
-    <div class="app-container">
-      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-        <el-form-item label="认领人" prop="companyUserNickName">
-          <el-input
-            v-model="queryParams.companyUserNickName"
-            placeholder="请输入认领人"
-            clearable
-            size="small"
-            @keyup.enter.native="handleQuery"
-          />
-        </el-form-item>
-        <el-form-item label="客户状态" prop="status">
-          <el-select v-model="queryParams.status" placeholder="请选择客户状态" clearable size="small">
-            <el-option
-              v-for="item in statusOptions"
-              :key="'status'+item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="客户类型" prop="customerType">
-          <el-select multiple v-model="ctsTypeArr" placeholder="请选择客户类型" clearable size="small">
-            <el-option
-              v-for="(item, index) in typeOptions"
-              :key="`${item.dictValue}-${index}`"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            />
-          </el-select>
-        </el-form-item>
+  <el-drawer size="75%" title="选择企微账号" :visible.sync="shows" append-to-body destroy-on-close class="qw-user-select-drawer">
+    <div class="drawer-container">
+      <!-- 搜索表单 -->
+      <el-card shadow="never" class="search-card">
+        <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="80px" class="search-form">
+          <el-row :gutter="16">
+            <el-col :span="8">
+              <el-form-item label="认领人" prop="companyUserNickName">
+                <el-input v-model="queryParams.companyUserNickName" placeholder="请输入" clearable size="small" @keyup.enter.native="handleQuery"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户状态" prop="status">
+                <el-select v-model="queryParams.status" placeholder="请选择" clearable size="small">
+                  <el-option v-for="item in statusOptions" :key="'status'+item.dictValue" :label="item.dictLabel" :value="item.dictValue"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户类型" prop="customerType">
+                <el-select multiple v-model="ctsTypeArr" placeholder="请选择" clearable size="small">
+                  <el-option v-for="(item, index) in typeOptions" :key="`${item.dictValue}-${index}`" :label="item.dictLabel" :value="item.dictValue"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="16">
+            <el-col :span="8">
+              <el-form-item label="创建时间" prop="createTime">
+                <el-date-picker clearable size="small" v-model="dateRange" type="daterange" value-format="yyyy-MM-dd"
+                  start-placeholder="开始日期" end-placeholder="结束日期" style="width: 100%;"></el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="领取时间" prop="receiveTimeRange">
+                <el-date-picker clearable size="small" v-model="receiveTimeRange" type="daterange" value-format="yyyy-MM-dd"
+                  start-placeholder="开始日期" end-placeholder="结束日期" style="width: 100%;"></el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="客户来源" prop="source">
+                <el-select multiple v-model="sourceArr" placeholder="请选择" clearable size="small">
+                  <el-option v-for="item in sourceOptions" :key="'source'+item.dictValue" :label="item.dictLabel" :value="item.dictValue"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="16">
+            <el-col :span="8">
+              <el-form-item label="客户标签" prop="tags">
+                <el-select multiple v-model="tagIds" placeholder="请选择" clearable size="small">
+                  <el-option v-for="(item, index) in tagsOptions" :key="`${item.dictValue}-${index}`" :label="item.dictLabel" :value="item.dictLabel"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="16" style="text-align: right;">
+              <el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">搜索</el-button>
+              <el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-card>
 
-        <el-form-item label="创建时间" prop="createTime">
-          <el-date-picker clearable size="small" style="width: 205.4px"
-                          v-model="dateRange"
-                          type="daterange"
-                          value-format="yyyy-MM-dd"
-                          start-placeholder="开始日期" end-placeholder="结束日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="领取时间" prop="receiveTimeRange">
-          <el-date-picker
-            style="width:205.4px"
-            clearable size="small"
-            v-model="receiveTimeRange"
-            type="daterange"
-            value-format="yyyy-MM-dd"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="客户来源" prop="source">
-          <el-select multiple v-model="sourceArr" placeholder="请选择客户来源" clearable size="small">
-            <el-option
-              v-for="item in sourceOptions"
-              :key="'source'+item.dictValue"
-              :label="item.dictLabel"
-              :value="item.dictValue"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="客户标签" prop="tags">
-          <el-select multiple v-model="tagIds" placeholder="请选择客户标签" clearable size="small">
-            <el-option
-              v-for="(item, index) in tagsOptions"
-              :key="`${item.dictValue}-${index}`"
-              :label="item.dictLabel"
-              :value="item.dictLabel"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-        </el-form-item>
-      </el-form>
+      <!-- 企微账号列表 -->
+      <el-card shadow="never" class="table-card">
+        <div slot="header" class="card-header">
+          <span>企微账号列表</span>
+          <el-tag v-if="selectedRows.length" type="success">已选择 {{ selectedRows.length }} 个账号</el-tag>
+        </div>
+        <el-table border v-loading="loading" :data="customerList" :row-key="getRowKeys" @selection-change="handleSelectionChange" size="small" ref="table" height="500">
+          <el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
+          <el-table-column label="微信昵称" align="center" prop="wxNickName" min-width="120"/>
+          <el-table-column label="微信号" align="center" prop="wxNo" min-width="150"/>
+          <el-table-column label="手机号" align="center" prop="phone" width="120"/>
+          <el-table-column label="员工" align="center" prop="companyUserName" width="100"/>
+        </el-table>
+      </el-card>
 
-      <el-table border v-loading="loading" :data="customerList" :row-key="getRowKeys" @selection-change="handleSelectionChange" size="mini" ref="table" height="460">
-        <el-table-column type="selection" width="55" align="center" :reserve-selection="true" />
-        <el-table-column label="微信昵称" align="center" prop="wxNickName"/>
-        <el-table-column label="微信号" align="center" prop="wxNo"/>
-        <el-table-column label="手机号" align="center" prop="phone"/>
-        <el-table-column label="员工" align="center" prop="companyUserName"/>
-      </el-table>
-      <div slot="footer" class="dialog-footer" style="width: 100%;display: flex;flex-direction: row-reverse;margin-top: 20px;z-index: 9898989;padding-top: 5px">
-        <el-button type="primary" @click="submitForm" style="margin-bottom: 5px">确 定</el-button>
+      <!-- 底部按钮 -->
+      <div class="footer-actions">
+        <el-button @click="shows = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确定选择</el-button>
       </div>
     </div>
   </el-drawer>
@@ -100,6 +95,8 @@ export default {
   name: "CustomerSelect",
   data() {
     return {
+      rows: [], // 已选择的行数据
+      selectedRows: [], // 已选择的行数据(别名)
       source:{
         title:"修改客户来源",
         open:false,
@@ -221,12 +218,13 @@ export default {
   methods: {
     setRows(rows){
       this.shows = true;
-      this.rows = rows;
+      this.rows = rows || [];
+      this.selectedRows = rows || []; // 同步更新
       this.getList();
     },
     initSelect(){
       let row = this.rows;
-      if(row && row.length > 0){
+      if(row && row.length > 0 && this.$refs.table){
         row.forEach(row => {
           this.$refs.table.toggleRowSelection(row, true);
         })
@@ -270,7 +268,9 @@ export default {
         this.queryParams.tags=null
       }
       companyUserList(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
-        this.$refs.table.clearSelection();
+        if (this.$refs.table) {
+          this.$refs.table.clearSelection();
+        }
         this.customerList = response.data;
         this.loading = false;
         this.initSelect();
@@ -292,6 +292,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.rows = selection;
+      this.selectedRows = selection; // 同步更新
       this.ids = selection.map(item => item.id)
       // this.names = selection.map(item => item.qwUserName)
       this.single = selection.length!==1

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

@@ -90,7 +90,7 @@
         </el-form-item>
       </el-form>
 
-      <el-table border v-loading="loading" :data="customerList" :row-key="getRowKeys" @selection-change="handleSelectionChange" size="mini" ref="table" height="460">
+      <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" />
         <el-table-column label="所属公司" align="center" prop="companyName" width="300"/>