Просмотр исходного кода

售后点击号码外呼,会员详情里查看工单详情

liuyifan лет назад: 5
Родитель
Сommit
1579c2f045

+ 23 - 3
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleEvent/components/detail.vue

@@ -148,7 +148,16 @@
148 148
                 align="center"
149 149
                 width=""
150 150
               />
151
-              <el-table-column prop="F_Id" label="订单编号" align="center" min-width="180"/>
151
+              <el-table-column prop="F_Id" label="订单编号" align="center" min-width="180">
152
+                <template slot-scope="scope">
153
+                  <el-button
154
+                    type="text"
155
+                    size="small"
156
+                    @click="hadndleOrderCode(scope.row.F_Id)"
157
+                  >{{ scope.row.F_Id }}</el-button
158
+                  >
159
+                </template>
160
+              </el-table-column>
152 161
               <el-table-column prop="F_Customer" label="客户姓名" align="center" min-width />
153 162
               <el-table-column prop="F_CustomerPhone" label="手机号码" align="center" min-width="140">
154 163
                 <template slot-scope="scope">
@@ -311,7 +320,7 @@ import audioPlayer from '@/components/audioPlayer'
311 320
 import { getFileTranserLists } from '@/api/memberManagement/memberList'
312 321
 import afterSale from '@/views/afterSaleManagement/addAfterSale/afterSale'
313 322
 import { getChatLogList } from '@/api/afterSaleManagement/afterSaleList'
314
-
323
+import detail from "@/views/orderManagement/orderList/detail"
315 324
 
316 325
 export default {
317 326
   name: 'Detail',
@@ -682,7 +691,18 @@ export default {
682 691
         shadeClose: true,
683 692
         title: '录音详情'
684 693
       })
685
-    }
694
+    },
695
+    hadndleOrderCode(ordercode) {
696
+      this.$layer.iframe({
697
+        content: {
698
+          content: detail, // 传递的组件对象
699
+          parent: this, // 当前的vue对象
700
+          data: { rowid: ordercode } // props
701
+        },
702
+        area: ['70%', '80%'],
703
+        title: '订单详情'
704
+      })
705
+    },
686 706
   }
687 707
 }
688 708
 </script>

+ 8 - 8
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleEvent/components/handleTransfer.vue

@@ -1,12 +1,12 @@
1 1
 <template>
2 2
   <div>
3 3
     <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="80px">
4
-      <!-- <el-form-item label="是否处理" prop="transferState">
5
-        <el-select v-model="ruleForm.transferState" class="form_select" filterable placeholder="是否处理" >
6
-          <el-option label="未处理" value="0"></el-option>
7
-          <el-option label="已处理" value="1"></el-option>
4
+      <el-form-item label="是否可见" prop="IsSo">
5
+        <el-select v-model="ruleForm.IsSo" class="form_select" filterable placeholder="是否可见" >
6
+          <el-option label="" value="0"></el-option>
7
+          <el-option label="" value="1"></el-option>
8 8
         </el-select>
9
-      </el-form-item> -->
9
+      </el-form-item>
10 10
       <el-form-item label="处理方式">
11 11
         <el-input v-model="ruleForm.message" type="textarea" placeholder="处理方式"></el-input>
12 12
       </el-form-item>
@@ -37,15 +37,15 @@ export default {
37 37
     return {
38 38
       ruleForm: {
39 39
         id: "", // id
40
-        // transferState: "", // 是否处理
40
+        IsSo: "1", // 是否处理
41 41
         message: '', // 处理方式
42 42
       },
43 43
       rules: {
44
-        transferState: [
44
+        IsSo: [
45 45
           {
46 46
             required: true,
47 47
             trigger: 'change',
48
-            message: '请选择是否处理'
48
+            message: '请选择是否可见'
49 49
           }
50 50
         ],
51 51
       }

+ 50 - 1
CallCenterWeb.UI/src/views/afterSaleManagement/afterSaleEvent/index.vue

@@ -45,6 +45,10 @@
45 45
             class="el-icon-tickets"
46 46
             @click="clickCut(scope.row.F_ID)"
47 47
           />
48
+          <i
49
+            class="el-icon-phone phoneIcon"
50
+            @click="clickCallOut(scope.row.F_Phone)"
51
+          />
48 52
         </template>
49 53
       </el-table-column>
50 54
       <el-table-column label="备用号码" align="center" width="">
@@ -239,6 +243,10 @@ import Pagination from '@/components/Pagination' // 对el-pagination 二次封
239 243
 import mergeId from './components/mergeId'
240 244
 import addOrEditRemark from "./components/addOrEditRemark"
241 245
 import handleTransfer from "./components/handleTransfer"
246
+import { getCallOutprefix } from '@/api/teloperation'
247
+import { Send } from '@/utils/telWebsocket'
248
+import store from '@/store'
249
+
242 250
 export default {
243 251
   name: 'MemberLabel',
244 252
   components: {
@@ -319,7 +327,15 @@ export default {
319 327
     }
320 328
   },
321 329
   computed: {
322
-    ...mapGetters(['token'])
330
+    ...mapGetters([
331
+      'token',
332
+      'usercode', // 工号
333
+      'extension', // 分机号
334
+      'sidebar',
335
+      'avatar',
336
+      'telCallType', // 通话类型
337
+      'telIsVisCallout' // 外呼面板是否显示
338
+    ])
323 339
   },
324 340
   methods: {
325 341
     getList() {
@@ -667,10 +683,43 @@ export default {
667 683
         .catch(() => {
668 684
           this.$message.info('查询失败')
669 685
         })
686
+    },
687
+    // 外呼
688
+    clickCallOut(phoneNumber) {
689
+      this.callOut(phoneNumber)
690
+    },
691
+    // 外呼
692
+    callOut(phoneNumber) {
693
+      if (phoneNumber) {
694
+        getCallOutprefix(phoneNumber).then((response) => {
695
+          if (response.state.toLowerCase() === 'success') {
696
+            const res = response.data
697
+            this.scoketDatas = {
698
+              Type: 'MakeCall',
699
+              AgentID: this.usercode,
700
+              AgentExten: this.extension,
701
+              Header: res.fix, // 号码前缀 用于截断前缀得到真实号码
702
+              DestinationNumber: res.phone //
703
+            }
704
+            store.dispatch('ChangeCallNum', phoneNumber)
705
+            Send(this.scoketDatas)
706
+            store.dispatch('UpdateCalloutScreen', false) // 关闭外呼面板
707
+            store.dispatch('UpdateOutboundScreen', false) // 关闭外呼弹屏
708
+          }
709
+        })
710
+      } else {
711
+        this.$message({
712
+          message: '请先输入电话号码!',
713
+          type: 'warning'
714
+        })
715
+      }
670 716
     }
671 717
   }
672 718
 }
673 719
 </script>
674 720
 
675 721
 <style rel="stylesheet/scss" lang="scss" scoped>
722
+.phoneIcon{
723
+  cursor: pointer
724
+}
676 725
 </style>

+ 23 - 3
CallCenterWeb.UI/src/views/afterSaleManagement/saleOrderList/components/detail.vue

@@ -148,7 +148,16 @@
148 148
                 align="center"
149 149
                 width=""
150 150
               />
151
-              <el-table-column prop="F_Id" label="订单编号" align="center" min-width="180"/>
151
+              <el-table-column prop="F_Id" label="订单编号" align="center" min-width="180">
152
+                <template slot-scope="scope">
153
+                  <el-button
154
+                    type="text"
155
+                    size="small"
156
+                    @click="hadndleOrderCode(scope.row.F_Id)"
157
+                  >{{ scope.row.F_Id }}</el-button
158
+                  >
159
+                </template>
160
+              </el-table-column>
152 161
               <el-table-column prop="F_Customer" label="客户姓名" align="center" min-width />
153 162
               <el-table-column prop="F_CustomerPhone" label="手机号码" align="center" min-width="140">
154 163
                 <template slot-scope="scope">
@@ -311,7 +320,7 @@ import audioPlayer from '@/components/audioPlayer'
311 320
 import { getFileTranserLists } from '@/api/memberManagement/memberList'
312 321
 import afterSale from '@/views/afterSaleManagement/addAfterSale/afterSale'
313 322
 import { getChatLogList } from '@/api/afterSaleManagement/afterSaleList'
314
-
323
+import detail from "@/views/orderManagement/orderList/detail"
315 324
 
316 325
 export default {
317 326
   name: 'Detail',
@@ -682,7 +691,18 @@ export default {
682 691
         shadeClose: true,
683 692
         title: '录音详情'
684 693
       })
685
-    }
694
+    },
695
+    hadndleOrderCode(ordercode) {
696
+      this.$layer.iframe({
697
+        content: {
698
+          content: detail, // 传递的组件对象
699
+          parent: this, // 当前的vue对象
700
+          data: { rowid: ordercode } // props
701
+        },
702
+        area: ['70%', '80%'],
703
+        title: '订单详情'
704
+      })
705
+    },
686 706
   }
687 707
 }
688 708
 </script>

+ 50 - 1
CallCenterWeb.UI/src/views/afterSaleManagement/saleOrderList/index.vue

@@ -46,6 +46,10 @@
46 46
             class="el-icon-tickets"
47 47
             @click="clickCut(scope.row.F_ID)"
48 48
           />
49
+          <i
50
+            class="el-icon-phone phoneIcon"
51
+            @click="clickCallOut(scope.row.F_Phone)"
52
+          />
49 53
         </template>
50 54
       </el-table-column>
51 55
       <el-table-column label="备用号码" align="center" width="">
@@ -233,6 +237,10 @@ import { formatterContent } from '@/utils'
233 237
 import Pagination from '@/components/Pagination' // 对el-pagination 二次封装
234 238
 import mergeId from './components/mergeId'
235 239
 import addOrEditRemark from "./components/addOrEditRemark"
240
+import { getCallOutprefix } from '@/api/teloperation'
241
+import { Send } from '@/utils/telWebsocket'
242
+import store from '@/store'
243
+
236 244
 export default {
237 245
   name: 'MemberLabel',
238 246
   components: {
@@ -313,7 +321,15 @@ export default {
313 321
     }
314 322
   },
315 323
   computed: {
316
-    ...mapGetters(['token'])
324
+    ...mapGetters([
325
+      'token',
326
+      'usercode', // 工号
327
+      'extension', // 分机号
328
+      'sidebar',
329
+      'avatar',
330
+      'telCallType', // 通话类型
331
+      'telIsVisCallout' // 外呼面板是否显示
332
+    ])
317 333
   },
318 334
   methods: {
319 335
     getList() {
@@ -649,10 +665,43 @@ export default {
649 665
         .catch(() => {
650 666
           this.$message.info('查询失败')
651 667
         })
668
+    },
669
+    // 外呼
670
+    clickCallOut(phoneNumber) {
671
+      this.callOut(phoneNumber)
672
+    },
673
+    // 外呼
674
+    callOut(phoneNumber) {
675
+      if (phoneNumber) {
676
+        getCallOutprefix(phoneNumber).then((response) => {
677
+          if (response.state.toLowerCase() === 'success') {
678
+            const res = response.data
679
+            this.scoketDatas = {
680
+              Type: 'MakeCall',
681
+              AgentID: this.usercode,
682
+              AgentExten: this.extension,
683
+              Header: res.fix, // 号码前缀 用于截断前缀得到真实号码
684
+              DestinationNumber: res.phone //
685
+            }
686
+            store.dispatch('ChangeCallNum', phoneNumber)
687
+            Send(this.scoketDatas)
688
+            store.dispatch('UpdateCalloutScreen', false) // 关闭外呼面板
689
+            store.dispatch('UpdateOutboundScreen', false) // 关闭外呼弹屏
690
+          }
691
+        })
692
+      } else {
693
+        this.$message({
694
+          message: '请先输入电话号码!',
695
+          type: 'warning'
696
+        })
697
+      }
652 698
     }
653 699
   }
654 700
 }
655 701
 </script>
656 702
 
657 703
 <style rel="stylesheet/scss" lang="scss" scoped>
704
+.phoneIcon {
705
+  cursor: pointer;
706
+}
658 707
 </style>

+ 2 - 3
CallCenterWeb.UI/src/views/callScreen/components/AddOrEditCustomer.vue

@@ -515,9 +515,8 @@ export default {
515 515
           type: "warning",
516 516
         })
517 517
           .then(() => {
518
-            this.isDisable = false;
519 518
             const params = {
520
-              id: this.rowid,
519
+              id: this.vipid,
521 520
             };
522 521
             memberHandleTransferAfterSale(params).then((response) => {
523 522
               if (response.state.toLowerCase() === "success") {
@@ -540,7 +539,7 @@ export default {
540 539
           if (response.rows.Rows.length > 0) {
541 540
             console.log('response.rows.Rows[0]', response.rows.Rows[0])
542 541
             this.$emit('cus-info-list', response.rows.Rows[0])
543
-            this.vipid = response.rows.Rows[0].F_Phone
542
+            this.vipid = response.rows.Rows[0].F_ID
544 543
             this.resulBtn = false;
545 544
             this.ruleForm = response.rows.Rows[0];
546 545
             response.data = response.rows.Rows[0];

+ 129 - 0
CallCenterWeb.UI/src/views/telCall/numberTransferPool/importNumberTransferPool.vue

@@ -0,0 +1,129 @@
1
+<template>
2
+  <div class="importFile">
3
+    <el-alert title="选取的EXCEL文件需要严格按照下载的EXCEL模板进行填写!选择好文件后点击导入即可!" type="warning" class="md" show-icon/>
4
+    <el-row>
5
+      <el-col :lg="7" class="md">
6
+        <a :href="downloadUrl" download="号码中转池导入模板.xlsx" class="download_btn" title="点击下载EXCEL模板" rel="nofollow">
7
+          下载EXCEL模板
8
+        </a>
9
+      </el-col>
10
+      <el-col :lg="17" class="md">
11
+        <el-upload
12
+          ref="upload"
13
+          :limit="1"
14
+          :file-list="uploadData.fileList"
15
+          :action= "uploadData.uploadUrl"
16
+          :data = "uploadData.uploaderFiles"
17
+          :on-success="uploadSuccess"
18
+          :on-error="uploadError"
19
+          :on-exceed="uploadExceed"
20
+          :auto-upload="false"
21
+          :headers = "uploadData.uploadHeader"
22
+          class="uploadFiles"
23
+          list-type="text"
24
+          name="upFile"
25
+          accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
26
+          <el-button slot="trigger" size="small" type="primary">选取EXCEL文件</el-button>
27
+          <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">导入</el-button>
28
+          <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
29
+        </el-upload>
30
+      </el-col>
31
+    </el-row>
32
+  </div>
33
+</template>
34
+
35
+<script>
36
+import { getToken } from '@/utils/auth'
37
+
38
+export default {
39
+  name: 'ImportFile',
40
+  props: {
41
+    rowid: {
42
+      type: String,
43
+      default: ''
44
+    },
45
+    layerid: {
46
+      type: String,
47
+      default: ''
48
+    }
49
+  },
50
+  data() {
51
+    return {
52
+      downloadUrl: '/static/xls/importNumberTransferPool.xlsx',
53
+      uploadData: {// 文件上传数据
54
+        uploadHeader: {
55
+          Authorization: getToken(),
56
+        },
57
+        uploadUrl: this.$store.getters.serverConfig.BASE_API + 'api/Distribution/importdistribution',
58
+        uploaderFiles: {// 上传文件的参数
59
+        
60
+        },
61
+        fileList: [], // 展示文件的数据
62
+      }
63
+    }
64
+  },
65
+  created() {
66
+  },
67
+  methods: {
68
+    submitUpload() {
69
+      this.$refs.upload.submit()
70
+    },
71
+    // 文件上传
72
+    uploadSuccess(response, file, fileList) {
73
+      if (response.state.toLowerCase() === 'success') {
74
+        this.$parent.$layer.close(this.layerid)
75
+        this.$parent.getList() // 重新加载父级数据
76
+        this.$message.success('恭喜你,导入成功!')
77
+      } else {
78
+        this.$message.error(response.message)
79
+      }
80
+    },
81
+    uploadExceed(file, fileList) {
82
+      this.$message.warning('只能选择一个文件!')
83
+    },
84
+    uploadError(err, file, fileList) {
85
+      this.$message.error(err)
86
+    }
87
+  }
88
+}
89
+</script>
90
+
91
+<style rel="stylesheet/scss" lang="scss" scoped>
92
+	.importFile{
93
+		.md{
94
+			margin-bottom: 20px;
95
+		}
96
+		.download_btn{
97
+			display: inline-block;
98
+			line-height: 1;
99
+			white-space: nowrap;
100
+			cursor: pointer;
101
+			border: 1px solid #dcdfe6;
102
+			-webkit-appearance: none;
103
+			text-align: center;
104
+			-webkit-box-sizing: border-box;
105
+			box-sizing: border-box;
106
+			outline: 0;
107
+			margin: 0;
108
+			-webkit-transition: .1s;
109
+			transition: .1s;
110
+			font-weight: 500;
111
+			padding: 9px 15px;
112
+			font-size: 12px;
113
+			border-radius: 4px;
114
+			color: #fff;
115
+			background-color: #409EFF;
116
+			border-color: #409EFF;
117
+			&:hover{
118
+				background: #66b1ff;
119
+				border-color: #66b1ff;
120
+				color: #fff;
121
+			}
122
+			&:active{
123
+				background: #66b1ff;
124
+				border-color: #66b1ff;
125
+				color: #fff;
126
+			}
127
+		}
128
+	}
129
+</style>

+ 14 - 0
CallCenterWeb.UI/src/views/telCall/numberTransferPool/index.vue

@@ -7,6 +7,7 @@
7 7
       <el-input v-model="searchData.group" placeholder="请输入小组" class="filter-item"/>
8 8
       <el-button type="primary" class="filter-item" icon="el-icon-search" @click="btn_search">搜索</el-button>
9 9
       <el-button v-permission="'HY_add'" type="primary" class="filter-item" icon="el-icon-plus" @click="btn_add">添加</el-button>
10
+      <el-button v-permission="'HY_import'" type="primary" class="filter-item" @click="btn_import">导入</el-button>
10 11
     </div>
11 12
     <el-tabs v-model="activeName" type="card" @tab-click="handleTabClick">
12 13
       <el-tab-pane label="媒体中转池" name="0" />
@@ -48,6 +49,7 @@
48 49
 import { getNumberTransferPoolList, deleteNumberTransferPoolList } from '@/api/telCall/numberTransferPool'
49 50
 import addOrEdit from './addOrEdit'
50 51
 import distribution from './distribution'
52
+import importNumberTransferPool from './importNumberTransferPool'
51 53
 import Pagination from '@/components/Pagination' // 对el-pagination 二次封装
52 54
 
53 55
 export default {
@@ -186,6 +188,18 @@ export default {
186 188
       this.pageParams.pageindex = 1
187 189
       this.getList()
188 190
     },
191
+    // 导入快递信息
192
+    btn_import () {
193
+      this.$layer.iframe({
194
+        content: {
195
+          content: importNumberTransferPool, // 传递的组件对象
196
+          parent: this, // 当前的vue对象
197
+          data: { rowid: '' } // props
198
+        },
199
+        area: ["30%", "30%"],
200
+        title: "导入"
201
+      });
202
+    },
189 203
   }
190 204
 }
191 205
 </script>

BIN
CallCenterWeb.UI/static/xls/importNumberTransferPool.xlsx