Browse Source

feat: 客服许可 - 分配许可 - 前端页面

zhengxy 2 years ago
parent
commit
7c72ceb8c9

+ 3 - 0
project/src/assets/config/interface_api.js

@@ -378,6 +378,9 @@ var api = {
378 378
 
379 379
   user_dataBoardAuth: "/api/userPermission/exportAuth", // 账号管理 - 用户数据看板权限
380 380
 
381
+
382
+  member_licenseCount: "/api/license/count", // 成员管理 - 查询企微待分配许可数
383
+
381 384
 };
382 385
 
383 386
 export { api };

+ 122 - 0
project/src/components/manage/memberComp/assignDialog.vue

@@ -0,0 +1,122 @@
1
+<template>
2
+  <el-dialog
3
+    :visible.sync="dialogVisible"
4
+    :before-close="handleCancel"
5
+    class="assign-dialog"
6
+    title="分配许可"
7
+    width="450px"
8
+  >
9
+    <div class="form-wrap" v-loading="loading">
10
+      现有待分配许可{{ waitForAssignNum }}个,是否确定分配给成员【{{ userInfo.name }}】
11
+    </div>
12
+    <div slot="footer" class="dialog-footer">
13
+      <el-button size="mini" @click="handleCancel">取 消</el-button>
14
+      <el-button size="mini" type="primary" @click="handleConfirm">确 定</el-button>
15
+    </div>
16
+  </el-dialog>
17
+</template>
18
+
19
+<script>
20
+export default {
21
+  name: "assignDialog",
22
+  props: {
23
+    // 控制弹框是否显示
24
+    dialogVisible: {
25
+      type: Boolean,
26
+      default: () => false
27
+    },
28
+    // 成员信息
29
+    userInfo: {
30
+      type: Object,
31
+      default: () => ({
32
+        user_id: '',
33
+        name: '',
34
+      })
35
+    },
36
+    // 待分配许可数
37
+    waitForAssignNum: {
38
+      type: Number,
39
+      default: () => 0
40
+    },
41
+  },
42
+  data() {
43
+    return {
44
+      loading: false,
45
+      form: {
46
+        user_id: '',
47
+      }
48
+    }
49
+  },
50
+  watch: {
51
+    dialogVisible(isShow) {
52
+      if (isShow) {
53
+        // 获取表单数据
54
+        this.handleGetFormData()
55
+      }
56
+    },
57
+  },
58
+  methods: {
59
+    // 获取弹框表单数据
60
+    handleGetFormData() {
61
+      const { user_id = '' } = this.userInfo
62
+      this.form.user_id = user_id
63
+    },
64
+    // 清空弹框表单数据
65
+    handleClearFormData() {
66
+      this.form.user_id = ''
67
+    },
68
+
69
+    async handleConfirm() {
70
+      try {
71
+        this.$emit('confirm') // mock
72
+        // 表单校验
73
+        // await this.handleFormValidate()
74
+        // const params = { ...this.form }
75
+        // this.loading = true
76
+        // const { data: res = {} } = await this.$axios.post(`${this.URL.BASEURL}${this.URL.manage_bindUserAdqAccountId}`, { ...params })
77
+        // if (res && res.errno == 0) {
78
+        //   this.$message.success('操作成功')
79
+        //   this.handleClearFormData()
80
+        //   this.$emit('confirm')
81
+        // } else if (res.errno != 4002) {
82
+        //   this.$message.warning(res.err || '操作失败')
83
+        // }
84
+      } catch (error) {
85
+        console.log('error => ', error)
86
+      } finally {
87
+        this.loading = false
88
+      }
89
+    },
90
+    handleCancel() {
91
+      this.handleClearFormData()
92
+      this.$emit('cancel')
93
+    },
94
+    // 执行表单校验
95
+    handleFormValidate() {
96
+      return new Promise((resolve, reject) => {
97
+        // if (!this.form.account_id) {
98
+        //   this.$message.warning('请选择投放账号')
99
+        //   reject('表单校验未通过')
100
+        // } else {
101
+        //   resolve('表单校验通过')
102
+        // }
103
+
104
+        // 此版本无必填项
105
+        resolve('表单校验通过')
106
+      })
107
+    },
108
+
109
+  },
110
+};
111
+</script>
112
+
113
+<style lang="scss" scoped>
114
+.assign-dialog {
115
+  .form-wrap {
116
+    padding: 0 10px;
117
+  }
118
+  .dialog-footer {
119
+    text-align: right;
120
+  }
121
+}
122
+</style>

+ 72 - 6
project/src/components/manage/memberManage.vue

@@ -189,13 +189,23 @@
189 189
     </el-drawer>
190 190
 
191 191
     <!-- S 信息绑定 - 弹框 -->
192
-    <member-info-bind
192
+    <memberInfoBind
193 193
       :dialogVisible="infoBindDialogVisible"
194 194
       :userInfo="currentBindInfo"
195 195
       @cancel="handleInfoBindCancel"
196 196
       @confirm="handleInfoBindConfirm"
197 197
     />
198 198
     <!-- E 信息绑定 - 弹框 -->
199
+
200
+    <!-- S 分配许可 - 弹框 -->
201
+    <assignDialog
202
+      :dialogVisible="assignDialogVisible"
203
+      :userInfo="currentAssignInfo"
204
+      :waitForAssignNum="waitForAssignNum"
205
+      @cancel="handleAssignCancel"
206
+      @confirm="handleAssignConfirm"
207
+    />
208
+    <!-- E 分配许可 - 弹框 -->
199 209
   </div>
200 210
 </template>
201 211
 
@@ -205,6 +215,7 @@ import userDetail from './userDetail/index.vue'
205 215
 import memberInfoBind from './memberComp/memberInfoBind.vue'
206 216
 import selfCustomerservice from '@/components/assembly/screen/customerService.vue'
207 217
 import batchAssign from './memberComp/batchAssign.vue'
218
+import assignDialog from './memberComp/assignDialog.vue'
208 219
 import { orderTypeOptions } from '@/assets/js/staticTypes'
209 220
 
210 221
 const orderTypeDesc = new Map([
@@ -226,6 +237,7 @@ export default {
226 237
     memberInfoBind,
227 238
     selfCustomerservice,
228 239
     batchAssign,
240
+    assignDialog,
229 241
   },
230 242
   data () {
231 243
     return {
@@ -260,6 +272,9 @@ export default {
260 272
       activeStatusOptions: Object.freeze(activeStatusOptions), // 激活状态选项
261 273
 
262 274
       waitForAssignNum: 0, // 待分配许可数
275
+      assignDialogVisible: false, // 控制“分配许可”弹框显示
276
+      currentAssignInfo: {}, // 当前需要分配许可的成员信息
277
+
263 278
     }
264 279
   },
265 280
   computed: {
@@ -272,6 +287,7 @@ export default {
272 287
     this.height = document.documentElement.clientHeight - 200 > 400 ? document.documentElement.clientHeight - 200 : 400
273 288
     this.init_depart()
274 289
     this.init(1)
290
+    this.handleGetWaitForAssignNum()
275 291
   },
276 292
   methods: {
277 293
     detailEvent (data) {
@@ -287,6 +303,7 @@ export default {
287 303
     inputChange (keyword) {
288 304
       this.keyword = keyword
289 305
       this.init(1, keyword)
306
+      this.handleGetWaitForAssignNum()
290 307
     },
291 308
     init_depart () {
292 309
       this.$axios.get(this.URL.BASEURL + this.URL.departmentList, {}).then((res) => {
@@ -358,6 +375,7 @@ export default {
358 375
     },
359 376
     handleCurrentChange (val) {
360 377
       this.init(val, this.keyword)
378
+      this.handleGetWaitForAssignNum()
361 379
     },
362 380
     checkDepartId (id) {
363 381
       if (this.checkVals.indexOf(id) == -1) {
@@ -366,6 +384,7 @@ export default {
366 384
         this.checkVals.splice(this.checkVals.indexOf(id), 1)
367 385
       }
368 386
       this.init(1, this.keyword)
387
+      this.handleGetWaitForAssignNum()
369 388
     },
370 389
 
371 390
     async onClickInfoBind({ name = '', user_id = '', account_id = '' }) {
@@ -397,6 +416,7 @@ export default {
397 416
     handleInfoBindConfirm() {
398 417
       this.infoBindDialogVisible = false
399 418
       this.init(undefined, this.keyword)
419
+      this.handleGetWaitForAssignNum()
400 420
     },
401 421
     getOrderTypeDesc(type) {
402 422
       return orderTypeDesc.get(String(type)) || '-'
@@ -405,27 +425,73 @@ export default {
405 425
     onChangeUserIds(val) {
406 426
       this.user_ids = val ? val : []
407 427
       this.init(1, this.keyword)
428
+      this.handleGetWaitForAssignNum()
408 429
     },
409 430
     // 监听激活状态变化
410 431
     onChangeActiveStatus(val) {
411 432
       this.is_active = val
412 433
       this.init(1, this.keyword)
434
+      this.handleGetWaitForAssignNum()
413 435
     },
414 436
 
415
-    // 监听点击“转移许可”
416
-    onClickTransfer(current) {
417
-      console.log('onClickTransfer => ', JSON.parse(JSON.stringify(current)))
437
+    // 获取“待分配许可数”
438
+    handleGetWaitForAssignNum() {
439
+      return new Promise(async (resolve, reject) => {
440
+        try {
441
+          this.loading = true
442
+          const url = `${this.URL.BASEURL}${this.URL.member_licenseCount}`
443
+          const params = {
444
+            corpid: this.$localSelfStore.getLocal('defaultCorp') && this.$localSelfStore.getLocal('defaultCorp') != 'undefined' ? JSON.parse(this.$localSelfStore.getLocal('defaultCorp')).corpid : '',
445
+          }
446
+          const { data: res = {} } = await this.$axios.get(url, { params })
447
+          if (res && res.errno == 0) {
448
+            this.waitForAssignNum = res.rst.count
449
+            this.waitForAssignNum = parseInt(Math.random() * 100) // mock
450
+            resolve(this.waitForAssignNum)
451
+          } else if (res.errno != 4002) {
452
+            this.$message.warning(res.err)
453
+            this.waitForAssignNum = 0
454
+            reject(this.waitForAssignNum)
455
+          }
456
+        } catch (error) {
457
+          console.log('error => ', error)
458
+          this.waitForAssignNum = 0
459
+          reject(this.waitForAssignNum)
460
+        } finally {
461
+          this.loading = false
462
+        }
463
+      })
418 464
     },
419 465
     // 监听点击“分配许可”
420
-    onClickAssign(current) {
466
+    async onClickAssign(current) {
421 467
       console.log('onClickAssign => ', JSON.parse(JSON.stringify(current)))
422
-      this.$refs.batchAssign.handleReset()
468
+      this.currentAssignInfo = {...current}
469
+      const num = await this.handleGetWaitForAssignNum()
470
+      if (!num) return this.$message.warning('暂无待分配许可')
471
+      this.assignDialogVisible = true
472
+    },
473
+    // 执行分配许可 => 取消
474
+    handleAssignCancel() {
475
+      this.currentAssignInfo = {}
476
+      this.assignDialogVisible = false
477
+    },
478
+    // 执行分配许可 => 确定
479
+    handleAssignConfirm() {
480
+      this.assignDialogVisible = false
481
+      this.init(undefined, this.keyword)
482
+      this.handleGetWaitForAssignNum()
483
+    },
484
+    // 监听点击“转移许可”
485
+    onClickTransfer(current) {
486
+      console.log('onClickTransfer => ', JSON.parse(JSON.stringify(current)))
423 487
     },
424 488
     // 监听“批量分配许可”变化
425 489
     onChangeBatchAssign(val) {
426 490
       console.log('onChangeBatchAssign => ', val)
427 491
       this.init(undefined, this.keyword)
492
+      this.handleGetWaitForAssignNum()
428 493
     },
494
+
429 495
   }
430 496
 }
431 497
 </script>