Sfoglia il codice sorgente

阜外公告信息提醒,点击外呼问卷,在线聊天注释

miaofuhao 6 anni fa
parent
commit
108f8813c2

+ 8 - 0
fuwaiCallCenterWeb.UI/src/api/customer/customerInfoHY.js

171
     params
171
     params
172
   })
172
   })
173
 }
173
 }
174
+// 获取公告信息
175
+export function getNotice(params) {
176
+  return request({
177
+    url: 'messageapi/api/NoticeInfo/getlistsbypage',
178
+    method: 'get',
179
+    params
180
+  })
181
+}

+ 10 - 0
fuwaiCallCenterWeb.UI/src/api/questionnaire/management.js

28
     }
28
     }
29
   })
29
   })
30
 }
30
 }
31
+// 获取外呼前缀
32
+export function getPhone(phone) {
33
+  return request({
34
+    url: 'callcenterapi/api/calloutopt/getcalloutprefix',
35
+    method: 'get',
36
+    params: {
37
+      phone
38
+    }
39
+  })
40
+}
31
 
41
 
32
 // 获取问卷下拉数据
42
 // 获取问卷下拉数据
33
 export function getPagerSelect() {
43
 export function getPagerSelect() {

+ 14 - 14
fuwaiCallCenterWeb.UI/src/components/TopNotice/index.vue

1
 <template>
1
 <template>
2
   <div v-loading="loading" class="topNotice">
2
   <div v-loading="loading" class="topNotice">
3
     <div class="header">
3
     <div class="header">
4
-      <h5 class="title">最新消息</h5>
4
+      <h5 class="title">公告消息</h5>
5
     </div>
5
     </div>
6
     <el-scrollbar wrap-class="scrollbar-wrapper">
6
     <el-scrollbar wrap-class="scrollbar-wrapper">
7
       <ul v-if="proNoticeDatas.length" class="content">
7
       <ul v-if="proNoticeDatas.length" class="content">
8
         <li v-for="(item, index) in proNoticeDatas" :key="index" class="proitem">
8
         <li v-for="(item, index) in proNoticeDatas" :key="index" class="proitem">
9
           <h5 class="proname">
9
           <h5 class="proname">
10
-            {{ item.project_name }}
10
+            标题:{{ item.project_name }}
11
           </h5>
11
           </h5>
12
           <span class="orderendtime">
12
           <span class="orderendtime">
13
-            将于 {{ item.orderendtime }} 到期
13
+            发布时间:{{ item.orderendtime }}
14
           </span>
14
           </span>
15
         </li>
15
         </li>
16
       </ul>
16
       </ul>
17
       <div v-else class="nomsg">
17
       <div v-else class="nomsg">
18
-        没有新消息
18
+        没有新公告消息
19
       </div>
19
       </div>
20
     </el-scrollbar>
20
     </el-scrollbar>
21
     <div class="footer_menu">
21
     <div class="footer_menu">
22
-      <router-link class="inlineBlock" to="/customer/customerInfoHY">
22
+      <router-link class="inlineBlock" to="/notice/manage">
23
         <el-dropdown-item>
23
         <el-dropdown-item>
24
-          <i class="el-icon-more"/>更多详细信息
24
+          <i class="el-icon-more"/>更多公告信息
25
         </el-dropdown-item>
25
         </el-dropdown-item>
26
       </router-link>
26
       </router-link>
27
     </div>
27
     </div>
30
 
30
 
31
 <script>
31
 <script>
32
 
32
 
33
-import { getExpireCusInfo } from '@/api/customer/customerInfoHY'
33
+import { getNotice } from '@/api/customer/customerInfoHY'
34
 
34
 
35
 export default {
35
 export default {
36
   name: 'TopNotice',
36
   name: 'TopNotice',
50
       const params = {
50
       const params = {
51
         daykind: 0 // 传值0时获取到期前一月的客户信息,传值1获取当天到期的客户信息
51
         daykind: 0 // 传值0时获取到期前一月的客户信息,传值1获取当天到期的客户信息
52
       }
52
       }
53
-      getExpireCusInfo(params).then(res => {
53
+      getNotice(params).then(res => {
54
         this.loading = false
54
         this.loading = false
55
         if (res.state.toLowerCase() === 'success') {
55
         if (res.state.toLowerCase() === 'success') {
56
-          if (res.data.data && res.data.data.length) {
56
+          if (res.data.rows && res.data.rows.length) {
57
             this.proNoticeDatas = []
57
             this.proNoticeDatas = []
58
-            res.data.data.forEach(item => {
58
+            res.data.rows.forEach(item => {
59
               this.proNoticeDatas.unshift({
59
               this.proNoticeDatas.unshift({
60
-                project_name: item.project_name,
61
-                orderendtime: item.orderendtime
60
+                project_name: item.title,
61
+                orderendtime: item.createon
62
               })
62
               })
63
             })
63
             })
64
             this.$notify({
64
             this.$notify({
65
-              title: '项目到期提醒',
66
-              message: `您有${this.proNoticeDatas.length}个项目即将到期!`,
65
+              title: '公告消息提醒',
66
+              message: `您有${this.proNoticeDatas.length}个公告消息!`,
67
               type: 'warning',
67
               type: 'warning',
68
               duration: 0,
68
               duration: 0,
69
               position: 'bottom-right'
69
               position: 'bottom-right'

+ 0 - 1
fuwaiCallCenterWeb.UI/src/views/autoCallScreen/components/tabPager.vue

102
         // 修改试题数据用于提交
102
         // 修改试题数据用于提交
103
         pagerOptions = this.getPagerOptions()
103
         pagerOptions = this.getPagerOptions()
104
       }
104
       }
105
-
106
       const data = Object.assign(this.pagerDatas, {
105
       const data = Object.assign(this.pagerDatas, {
107
         result: pagerOptions
106
         result: pagerOptions
108
       })
107
       })

+ 95 - 32
fuwaiCallCenterWeb.UI/src/views/clickoutbound/tasks/components/tabPager.vue

7
           <span v-if="quesName">姓名: {{ quesName }}</span>
7
           <span v-if="quesName">姓名: {{ quesName }}</span>
8
         </el-col>
8
         </el-col>
9
         <el-col :lg="8">
9
         <el-col :lg="8">
10
-          <span v-if="quesPhone">电话: <span class="quesephon" @click="outboundClick">{{ quesPhone }}</span></span>
10
+          <span v-if="quesPhone">电话: <span class="quesephon" @click="outboundClick(quesPhone)">{{ quesPhone }}</span></span>
11
         </el-col>
11
         </el-col>
12
       </el-row>
12
       </el-row>
13
     </p>
13
     </p>
45
     <!-- 呼叫结果 -->
45
     <!-- 呼叫结果 -->
46
     <el-card v-if="callResults.length" shadow="hover" class="call_result">
46
     <el-card v-if="callResults.length" shadow="hover" class="call_result">
47
       <h5 class="title">呼叫结果</h5>
47
       <h5 class="title">呼叫结果</h5>
48
-      <el-radio-group v-model="callresultid">
49
-        <el-radio v-for="item in callResults" :key="item.id" :label="item.id" border>
50
-          {{ item.name }}
51
-        </el-radio>
52
-      </el-radio-group>
48
+      <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="order_form">
49
+        <el-radio-group v-model="ruleForm.callresultid">
50
+          <el-radio v-for="item in callResults" :key="item.id" :label="item.id" border>
51
+            {{ item.name }}
52
+          </el-radio>
53
+        </el-radio-group>
54
+      </el-form>
53
     </el-card>
55
     </el-card>
54
     <p v-if="pagerLists.length > 0" class="btn">
56
     <p v-if="pagerLists.length > 0" class="btn">
55
       <el-button type="primary" @click="submitPager">提 交</el-button>
57
       <el-button type="primary" @click="submitPager">提 交</el-button>
58
 </template>
60
 </template>
59
 
61
 
60
 <script>
62
 <script>
61
-import { getPager, answerPager, taskId } from '@/api/questionnaire/management'
63
+import store from '@/store'
64
+import { mapGetters } from 'vuex'
65
+import { Send } from '@/utils/telWebsocket'
66
+import { getPager, answerPager, taskId, getPhone } from '@/api/questionnaire/management'
62
 import { getDictionary } from '@/api/commonAPI'
67
 import { getDictionary } from '@/api/commonAPI'
63
 import { uniqueObjArray } from '@/utils'
68
 import { uniqueObjArray } from '@/utils'
64
 
69
 
81
   data() {
86
   data() {
82
     return {
87
     return {
83
       ruleForm: {
88
       ruleForm: {
84
-        id: ''
89
+        id: '',
90
+        callresultid: '5bfe540c5a10b06b7a35a83a'
85
       },
91
       },
86
       rules: {
92
       rules: {
87
         callresultid: [{
93
         callresultid: [{
93
       loading: false,
99
       loading: false,
94
       title: '',
100
       title: '',
95
       quesName: '',
101
       quesName: '',
102
+      taskid: '',
103
+      recordid: '',
96
       quesPhone: '',
104
       quesPhone: '',
97
       remark: '',
105
       remark: '',
98
       pagerid: '',
106
       pagerid: '',
99
-      callresultid: '5bfe540c5a10b06b7a35a83a', //	否	string	话务状态(字典项:外呼结果)
100
       pagerLists: [],
107
       pagerLists: [],
101
       callResults: [], // 呼叫结果数据
108
       callResults: [], // 呼叫结果数据
102
       jumpItem: [] // 跳过的试题
109
       jumpItem: [] // 跳过的试题
103
     }
110
     }
104
   },
111
   },
112
+  computed: {
113
+    ...mapGetters([
114
+      'usercode', // 工号
115
+      'extension', // 分机号
116
+      'telIsLogin', // 是否签入
117
+      'telSeatState', // 坐席状态
118
+      'telLineState', // 线路状态
119
+      'telIsVisCallout' // 外呼面板是否显示
120
+    ]),
121
+    // 是否可以点击外呼
122
+    isAllowCallout: function() {
123
+      // `this` 指向 vm 实例
124
+      return this.telIsLogin && this.telSeatState === 2 && this.telLineState === 1
125
+    }
126
+    //
127
+  },
105
   watch: {
128
   watch: {
106
     pagerDatas(newValue, oldValue) {
129
     pagerDatas(newValue, oldValue) {
107
       // console.log(newValue.pageid, oldValue.pageid)
130
       // console.log(newValue.pageid, oldValue.pageid)
110
       }
133
       }
111
     }
134
     }
112
   },
135
   },
136
+
113
   created() {
137
   created() {
114
     if (this.rowid) {
138
     if (this.rowid) {
115
       this.ruleForm.id = this.rowid
139
       this.ruleForm.id = this.rowid
127
           this.loading = false
151
           this.loading = false
128
           if (response.state.toLowerCase() === 'success') {
152
           if (response.state.toLowerCase() === 'success') {
129
             this.taskid = response.data.pagerid
153
             this.taskid = response.data.pagerid
154
+            this.recordid = response.data.tasktel.id
130
             this.quesName = response.data.tasktel.cusname
155
             this.quesName = response.data.tasktel.cusname
131
             this.quesPhone = response.data.tasktel.phone
156
             this.quesPhone = response.data.tasktel.phone
132
             this.getPagers(this.taskid)
157
             this.getPagers(this.taskid)
168
 
193
 
169
     // 提交
194
     // 提交
170
     submitPager() {
195
     submitPager() {
171
-      // alert('111')
172
-      // 验证必填项
173
-      // let pagerOptions = []
174
-      // let pagerDatas
175
-      // // 修改试题数据用于提交
176
-      // pagerOptions = this.getPagerOptions()
177
-      // const data = Object.assign(this.pagerDatas, {
178
-      //   result: pagerOptions
179
-      // })
180
-      // console.log(JSON.stringify(data))
181
-      // answerPager(data).then(response => {
182
-      //   this.loading = false
183
-      //   if (response.state.toLowerCase() === 'success') {
184
-      //     debugger
185
-      //     // 触发父组件的方法
186
-      //     this.$emit('getTP')
187
-      //     this.$message.success('恭喜你,数据提交成功!')
188
-      //   }
189
-      // }).catch(() => {
190
-      //   this.loading = false
191
-      // })
196
+      let pagerOptions = []
197
+      let pagerDatas
198
+      // 修改试题数据用于提交
199
+      pagerOptions = this.getPagerOptions()
200
+      // console.log(pagerOptions)
201
+      const data = {
202
+        fullname: this.quesName,
203
+        tel: this.quesPhone,
204
+        pageid: this.taskid,
205
+        recordid: this.recordid,
206
+        result: pagerOptions,
207
+        callresult: this.ruleForm.callresultid
208
+      }
209
+      console.log(this.ruleForm.callresultid)
210
+      answerPager(data).then(response => {
211
+        this.loading = false
212
+        if (response.state.toLowerCase() === 'success') {
213
+          debugger
214
+          // 触发父组件的方法
215
+          this.$emit('getTP')
216
+          this.$message.success('恭喜你,数据提交成功!')
217
+        }
218
+      }).catch(() => {
219
+        this.loading = false
220
+      })
192
     },
221
     },
193
-    outboundClick() {
194
-      // alert('111')
222
+    outboundClick(quesPhone) {
223
+      this.loading = true
224
+      this.$confirm('您确定要对此客户发起呼叫吗?', '提示', {
225
+        confirmButtonText: '确定',
226
+        cancelButtonText: '取消',
227
+        type: 'warning'
228
+      })
229
+        .then(() => {
230
+          getPhone(quesPhone).then(response => {
231
+            if (response.state.toLowerCase() === 'success') {
232
+              const res = response.data
233
+              this.scoketDatas = {
234
+                'Type': 'MakeCall',
235
+                'AgentID': this.usercode,
236
+                'AgentExten': this.extension,
237
+                'Header': res.fix, // 号码前缀 用于截断前缀得到真实号码
238
+                'DestinationNumber': res.phone //
239
+              }
240
+              store.dispatch('ChangeCallNum', quesPhone)
241
+              Send(this.scoketDatas)
242
+              // store.dispatch('UpdateCalloutScreen', false)// 关闭外呼面板
243
+            }
244
+          })
245
+        })
246
+        .catch(() => {
247
+          this.$message.info('已取消呼叫')
248
+        })
249
+      // return new Promise(resolve => {
250
+      //   getPhone(quesPhone).then(response => {
251
+      //     this.loading = false
252
+      //     if (response.state.toLowerCase() === 'success') {
253
+      //       debugger
254
+      //     }
255
+      //   })
256
+      //   resolve()
257
+      // })
195
     },
258
     },
196
     // 单选题跳题
259
     // 单选题跳题
197
     jumpPage(value, e) {
260
     jumpPage(value, e) {

+ 1 - 1
fuwaiCallCenterWeb.UI/src/views/clickoutbound/tasks/index.vue

27
       </el-table-column>
27
       </el-table-column>
28
       <el-table-column label="呼叫结果" align="center" min-width="110">
28
       <el-table-column label="呼叫结果" align="center" min-width="110">
29
         <template slot-scope="scope">
29
         <template slot-scope="scope">
30
-          {{ callResultsFilter(scope.row.askres) }}
30
+          {{ callResultsFilter(scope.row.hjjgname) }}
31
         </template>
31
         </template>
32
       </el-table-column>
32
       </el-table-column>
33
       <el-table-column prop="userid" label="坐席工号" align="center" min-width=""/>
33
       <el-table-column prop="userid" label="坐席工号" align="center" min-width=""/>

+ 1 - 1
fuwaiCallCenterWeb.UI/src/views/layout/Layout.vue

19
         <lineChat/>
19
         <lineChat/>
20
       </el-popover>
20
       </el-popover>
21
     </div>
21
     </div>
22
-    <el-button slot="reference" type="primary" class="btns lineChatIcon" icon="el-icon-service" circle @click="visible = !visible"/>
22
+    <!-- <el-button slot="reference" type="primary" class="btns lineChatIcon" icon="el-icon-service" circle @click="visible = !visible"/> -->
23
   </div>
23
   </div>
24
 </template>
24
 </template>
25
 
25
 

+ 25 - 10
fuwaiCallCenterWeb.UI/src/views/notice/manage/addOrEditManege.vue

7
       <el-form-item label="公告信息" prop="content">
7
       <el-form-item label="公告信息" prop="content">
8
         <el-input v-model="ruleForm.content" type="textarea" autosize placeholder="请输入公告内容"/>
8
         <el-input v-model="ruleForm.content" type="textarea" autosize placeholder="请输入公告内容"/>
9
       </el-form-item>
9
       </el-form-item>
10
-      <el-form-item label="上级分类" prop="parentids">
10
+      <el-form-item label="用户角色" prop="parentids">
11
         <el-tree
11
         <el-tree
12
           ref="tree"
12
           ref="tree"
13
           :data="treelists"
13
           :data="treelists"
14
           :default-expand-all="defaultExpandAll"
14
           :default-expand-all="defaultExpandAll"
15
           show-checkbox
15
           show-checkbox
16
-          node-key="id"
17
           check-strictly
16
           check-strictly
17
+          node-key="id"
18
           highlight-current
18
           highlight-current
19
           @node-click="treeNodeClick"
19
           @node-click="treeNodeClick"
20
         />
20
         />
103
           }
103
           }
104
         }
104
         }
105
       }
105
       }
106
+      console.log(usercodes)
107
+      console.log(rolecodes)
106
       this.$refs.ruleForm.validate((valid) => {
108
       this.$refs.ruleForm.validate((valid) => {
107
         if (valid) {
109
         if (valid) {
108
           this.loading = true
110
           this.loading = true
173
           treeIcheck[tempIcheck[i].id] = tempIcheck[i]
175
           treeIcheck[tempIcheck[i].id] = tempIcheck[i]
174
         }
176
         }
175
       }
177
       }
176
-      // console.log(treeIcheck)
177
       return this.filterTreeidDatas(treeIcheck)
178
       return this.filterTreeidDatas(treeIcheck)
178
     },
179
     },
179
     buildTree(list) {
180
     buildTree(list) {
180
       const temp = {}
181
       const temp = {}
181
       const tree = {}
182
       const tree = {}
182
-
183
       for (const j in list) {
183
       for (const j in list) {
184
         temp[list[j].id] = list[j]
184
         temp[list[j].id] = list[j]
185
       }
185
       }
199
     filterTreeidDatas(treeDatas) {
199
     filterTreeidDatas(treeDatas) {
200
       const accessedRouters = []
200
       const accessedRouters = []
201
       let j = -1
201
       let j = -1
202
+      console.log(treeDatas)
202
       for (const i in treeDatas) {
203
       for (const i in treeDatas) {
203
         j++
204
         j++
204
         accessedRouters.push({
205
         accessedRouters.push({
205
-          id: treeDatas[i].id
206
+          id: treeDatas[i].id,
207
+          label: treeDatas[i].name,
208
+          code: treeDatas[i].code,
209
+          ischeck: treeDatas[i].ischeck,
210
+          parentid: treeDatas[i].parentid,
211
+          children: []
206
         })
212
         })
207
-        if (treeDatas[i].children) {
208
-          accessedRouters[j].children = this.filterTreeidDatas(
209
-            treeDatas[i].children
210
-          )
213
+        if (treeDatas[i].children.length > 0) {
214
+          for (const n in treeDatas[i].children) {
215
+            if (treeDatas[i].children[n].ischeck) {
216
+              accessedRouters.push({
217
+                id: treeDatas[i].children[n].id,
218
+                label: treeDatas[i].children[n].name,
219
+                code: treeDatas[i].children[n].code,
220
+                ischeck: treeDatas[i].children[n].ischeck,
221
+                parentid: treeDatas[i].children[n].parentid,
222
+                children: []
223
+              })
224
+            }
225
+          }
211
         }
226
         }
212
       }
227
       }
213
       return accessedRouters
228
       return accessedRouters
236
     },
251
     },
237
     TimeoutExe() {
252
     TimeoutExe() {
238
       setTimeout(() => {
253
       setTimeout(() => {
239
-        console.log(this.treelistIscheck)
254
+        // console.log(this.treelistIscheck)
240
         this.$refs.tree.setCheckedNodes(this.treelistIscheck)
255
         this.$refs.tree.setCheckedNodes(this.treelistIscheck)
241
       }, 1000)
256
       }, 1000)
242
     },
257
     },

+ 1 - 3
fuwaiCallCenterWeb.UI/src/views/order/orderCreateHY/index.vue

372
         case '5d0c9e21156ef38d2086d941':// 售后
372
         case '5d0c9e21156ef38d2086d941':// 售后
373
           this.businIs = true // 是否是业务类型
373
           this.businIs = true // 是否是业务类型
374
           break
374
           break
375
-        case '5c47d83fd2bc5f5d5907f296':// 投诉
376
-          alert('投诉')
377
-          this.consultation = false
375
+        case '5c47d83fd2bc5f5d5907f296':// 投诉          this.consultation = false
378
           this.afterSale = false
376
           this.afterSale = false
379
           this.complaint = true
377
           this.complaint = true
380
           this.businIs = false // 是否是业务类型
378
           this.businIs = false // 是否是业务类型