瀏覽代碼

Merge remote-tracking branch 'origin/master'

yuhongqi 12 小時之前
父節點
當前提交
0549891483

+ 18 - 0
src/views/company/companyUser/index.vue

@@ -173,6 +173,13 @@
               <dict-tag :options="qwStatusOptions" :value="scope.row.qwStatus"/>
             </template>
           </el-table-column>
+            <el-table-column label="客服语音回复方式" align="center">
+                <template slot-scope="scope">
+                    <span v-if="scope.row.isCustomerVoice === 1" style="color: #67C23A;">客户语音销售回复语音</span>
+                    <span v-else-if="scope.row.isCustomerVoice === 2" style="color: #409EFF;">客户语音销售回复文本</span>
+                    <span v-else style="color: #67C23A;">客户语音销售回复语音</span>
+                </template>
+            </el-table-column>
           <el-table-column label="绑定的企微号" align="center">
             <template slot-scope="scope">
               <div v-if="scope.row.qwUsers && scope.row.qwUsers.length > 0">
@@ -540,6 +547,16 @@
             </el-form-item>
           </el-col>
         </el-row>
+          <el-row>
+              <el-col :span="12">
+                  <el-form-item label="客服ai语音回复方式">
+                      <el-select v-model="form.isCustomerVoice" placeholder="请选择">
+                          <el-option label="客户语音销售回复语音" :value="1"></el-option>
+                          <el-option label="客户语音销售回复文本" :value="2"></el-option>
+                      </el-select>
+                  </el-form-item>
+              </el-col>
+          </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -1533,6 +1550,7 @@ export default {
         sex: undefined,
         status: "0",
         remark: undefined,
+        isCustomerVoice: 1,
         domain: null,
         postIds: [],
         roleIds: [],

+ 45 - 0
src/views/crm/components/addRemark.vue

@@ -16,6 +16,16 @@
                     show-word-limit
                 />
             </el-form-item>
+            <el-form-item>
+                <div class="form-footer">
+                    <el-button type="primary" :loading="loading" @click="submitForm">
+                        <i class="el-icon-check"></i> 保 存
+                    </el-button>
+                    <el-button @click="clearAndSave">
+                        <i class="el-icon-delete"></i> 清空备注并保存
+                    </el-button>
+                </div>
+            </el-form-item>
         </el-form>
     </div>
 </template>
@@ -26,6 +36,7 @@
         name: "AddRemark",
         data() {
             return {
+                loading: false,
                 form: {
                     customerId:null,
                     remark:null,
@@ -51,15 +62,38 @@
             submitForm() {
                 this.$refs["form"].validate(valid => {
                     if (valid) {
+                        this.loading = true;
                         updateCustomer(this.form).then(response => {
+                            this.loading = false;
                             if (response.code === 200) {
                                 this.$message.success("操作成功");
                                 this.$emit('close');
                             }
+                        }).catch(() => {
+                            this.loading = false;
                         });
                     }
                 });
             },
+            clearAndSave() {
+                this.$confirm('确定要清空备注内容并保存吗?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    this.loading = true;
+                    this.form.remark = '';
+                    updateCustomer(this.form).then(response => {
+                        this.loading = false;
+                        if (response.code === 200) {
+                            this.$message.success("备注已清空");
+                            this.$emit('close');
+                        }
+                    }).catch(() => {
+                        this.loading = false;
+                    });
+                }).catch(() => {});
+            },
         }
     };
 </script>
@@ -84,5 +118,16 @@
             color: #303133;
         }
     }
+    
+    .form-footer {
+        display: flex;
+        justify-content: center;
+        gap: 12px;
+        padding-top: 10px;
+        
+        .el-button {
+            min-width: 100px;
+        }
+    }
 }
 </style>

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

@@ -32,7 +32,7 @@
                             <el-button
                             size="mini"
                             type="text"
-                            @click="handleRemoveUser(scope.row.$index)"
+                            @click="handleRemoveUser(scope.$index)"
                             >删除</el-button>
                         </template>
                     </el-table-column>

+ 117 - 2
src/views/qw/externalContact/deptIndex.vue

@@ -484,8 +484,25 @@
           </el-tag>
         </template>
       </el-table-column>
+      <el-table-column label="重粉记录" align="center" width="100px" fixed="right">
+        <template slot-scope="scope">
+            <el-button
+                size="mini"
+                type="text"
+                @click="showRepeatRecord(scope.row)"
+            >重粉记录</el-button>
+        </template>
+      </el-table-column>
       <el-table-column label="修改" align="center" class-name="small-padding fixed-width" width="120px" fixed="right">
         <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-shopping-bag-2"
+              :disabled="!scope.row.fsUserId"
+              @click="handleCreateOrder(scope.row)"
+
+            >制单</el-button>
           <el-button
             v-show="scope.row.status==0||scope.row.status==2"
             size="mini"
@@ -849,6 +866,56 @@
         <el-tag v-for="item in repeat.list">{{item.qwUserName}}</el-tag>
       </el-row>
     </el-dialog>
+
+    <!-- 重粉记录 -->
+    <el-drawer title="重粉记录" :visible.sync="repeatRecord.open" size="75%" append-to-body>
+      <div style="padding: 10px">
+        <el-form :model="repeatRecord.queryParams" ref="repeatRecordQueryForm" :inline="true" label-width="110px">
+          <el-form-item label="销售企微ID" prop="qwUserId">
+            <el-input
+              v-model="repeatRecord.queryParams.qwUserId"
+              placeholder="请输入销售企微ID"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQueryRepeatRecord"
+            />
+          </el-form-item>
+          <el-form-item label="销售企微昵称" prop="qwUserName">
+            <el-input
+              v-model="repeatRecord.queryParams.qwUserName"
+              placeholder="请输入销售企微昵称"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQueryRepeatRecord"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQueryRepeatRecord">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetRepeatRecordQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
+        <el-table v-loading="repeatRecord.loading" :data="repeatRecord.list" border>
+          <el-table-column label="企微客户ID" align="center" prop="externalUserId" min-width="140" />
+          <el-table-column label="企微客户昵称" align="center" prop="externalUserName" min-width="120" />
+          <el-table-column label="销售企微ID" align="center" prop="qwUserId" min-width="120" />
+          <el-table-column label="销售企微昵称" align="center" prop="qwUserName" min-width="120" />
+          <el-table-column label="企微部门" align="center" prop="deptName" min-width="120" />
+          <el-table-column label="添加时间" align="center" prop="createTime" width="170" />
+          <el-table-column label="注册时间" align="center" prop="registerTime" width="170" />
+        </el-table>
+        <pagination
+          v-show="repeatRecord.total > 0"
+          :total="repeatRecord.total"
+          :page.sync="repeatRecord.queryParams.pageNum"
+          :limit.sync="repeatRecord.queryParams.pageSize"
+          @pagination="repeatRecordList"
+        />
+      </div>
+    </el-drawer>
+
+    <!--  制单页面组件    -->
+    <create-oder ref="createOder" />
+
     <el-drawer
       :with-header="false"
       size="75%"
@@ -897,7 +964,7 @@ import {
   unBindUserId,
   updateExternalContact,
   getRepeat,
-  updateExternalContactCall, myDeptExtList
+  updateExternalContactCall, myDeptExtList, getRepeatRecordList
 } from '../../../api/qw/externalContact'
 import {getMyQwCompanyList,getQwUserListLikeName} from "@/api/qw/user";
 import {getId} from "@/api/store/healthRecord";
@@ -913,10 +980,11 @@ import healthRecordDetails from '@/views/store/components/healthRecordDetails.vu
 import userDetails from '@/views/store/components/userDetails.vue';
 import PaginationMore from "../../../components/PaginationMore/index.vue";
 import customerDetail from './customerDetail.vue';
+import createOder from '@/views/components/order/createOder.vue';
 
 export default {
   name: "deptExternalContact",
-  components:{PaginationMore, mycustomer,customerDetails,SopDialog,selectUser,info,healthRecordDetails,userDetails,customerDetail},
+  components:{PaginationMore, mycustomer,customerDetails,SopDialog,selectUser,info,healthRecordDetails,userDetails,customerDetail,createOder},
   data() {
     return {
 
@@ -929,6 +997,20 @@ export default {
         param:{},
         list:[]
       },
+      repeatRecord: {
+        open: false,
+        loading: false,
+        list: [],
+        total: 0,
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          corpId: null,
+          externalUserId: null,
+          qwUserId: null,
+          qwUserName: null
+        }
+      },
 
       user:{
         open:false,
@@ -2240,6 +2322,39 @@ export default {
         this.exportLoading = false;
       }).catch(() => {});
     },
+    handleCreateOrder(row) {
+      this.$refs.createOder.show(row);
+    },
+    /** 重粉记录 */
+    showRepeatRecord(row) {
+      this.repeatRecord.queryParams.corpId = row.corpId;
+      this.repeatRecord.queryParams.externalUserId = row.externalUserId;
+      this.repeatRecord.queryParams.qwUserId = null;
+      this.repeatRecord.queryParams.qwUserName = null;
+      this.repeatRecord.queryParams.pageNum = 1;
+      this.repeatRecord.queryParams.pageSize = 10;
+      this.repeatRecord.open = true;
+      this.repeatRecordList();
+    },
+    handleQueryRepeatRecord() {
+      this.repeatRecord.queryParams.pageNum = 1;
+      this.repeatRecordList();
+    },
+    resetRepeatRecordQuery() {
+      this.repeatRecord.queryParams.qwUserId = null;
+      this.repeatRecord.queryParams.qwUserName = null;
+      this.repeatRecord.queryParams.pageNum = 1;
+      this.repeatRecordList();
+    },
+    repeatRecordList() {
+      this.repeatRecord.loading = true;
+      getRepeatRecordList(this.repeatRecord.queryParams).then(res => {
+        this.repeatRecord.list = res.rows || [];
+        this.repeatRecord.total = res.total || 0;
+      }).finally(() => {
+        this.repeatRecord.loading = false;
+      });
+    },
     openRepeat(row){
       this.repeat.param = {
         externalUserId: row.externalUserId,

+ 0 - 1
src/views/qw/user/cuDeptIdIndex.vue

@@ -211,7 +211,6 @@
             type="text"
             icon="el-icon-s-check"
             plain
-            v-hasPermi="['qw:user:authAppKey']"
             @click="uploadAuthorizeKey2(scope.row)"
           >授权key
           </el-button>

+ 1 - 2
src/views/qw/user/index.vue

@@ -278,7 +278,6 @@
             type="text"
             icon="el-icon-s-check"
             plain
-            v-hasPermi="['qw:user:authAppKey']"
             @click="uploadAuthorizeKey2(scope.row)"
           >授权key
           </el-button>
@@ -844,7 +843,7 @@ export default {
       if (val.appKey == null || val.appKey === '') {
         return this.$message.warning("没有授权码,无法登录企业微信,请授权");
       }
-      loginQwIpad({qwUserId: val.id, isNewVersion:true}).then(res => {
+      loginQwIpad({qwUserId: val.id}).then(res => {
         this.qwUserId = val.id;
         this.qwLogin.code = null;
         this.imageLoading = false;

+ 0 - 1
src/views/qw/user/myIndex.vue

@@ -265,7 +265,6 @@
             type="text"
             icon="el-icon-s-check"
             plain
-            v-hasPermi="['qw:user:authAppKey']"
             @click="uploadAuthorizeKey2(scope.row)"
           >授权key
           </el-button>