人民医院前端

telWebsocket.js 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. /**
  2. * 修改 心跳开始结束的时机;20181212
  3. * 签入后心跳开始;签出后心跳结束;
  4. * 增加心跳 false 处理(签出)
  5. */
  6. import { Message, MessageBox, Switch } from 'element-ui'
  7. import store from '@/store'
  8. import router from '@/router'
  9. import { Teljournal } from '@/api/commonAPI'
  10. let ws // websocket 实例
  11. let cls = 0
  12. let lockReconnect = false // 避免重复连接
  13. let calldDirection = 0 // 呼入
  14. let websocktTimer // 定时器
  15. let wsUrl = null
  16. // const wsUrl = 'ws://' + process.env.SOCKET_IP + ':' + process.env.SOCKET_PORT
  17. // 创建scoket连接
  18. export function createWebSocket() {
  19. wsUrl =
  20. 'ws://' +
  21. store.getters.serverConfig.SOCKET_IP +
  22. ':' +
  23. store.getters.serverConfig.SOCKET_PORT // 请求地址
  24. try {
  25. if ('WebSocket' in window) {
  26. ws = new WebSocket(wsUrl) // 创建一个websocket实例
  27. init()
  28. } else {
  29. Message.error('当前浏览器不支持Websocket!')
  30. }
  31. } catch (e) {
  32. reconnect()
  33. }
  34. }
  35. // 连接
  36. function init() {
  37. ws.onopen = function() {
  38. // console.groupCollapsed(`telWebsocket:`)
  39. console.log(new Date() + ' telWebsocket ' + '建立连接:' + wsUrl)
  40. // signIn()
  41. // 修改store 中连接状态
  42. store.dispatch('ConnectWs', true)
  43. // 修改 store 中telwebsocket的数据
  44. store.dispatch('ChangeTelWSMsg', {
  45. wsUrl: wsUrl,
  46. operationType: '建立连接'
  47. })
  48. if (Number(window.sessionStorage.getItem('storageSeatState'))) {
  49. signIn()
  50. }
  51. if (Number(window.sessionStorage.getItem('telIsLogin'))) {
  52. // heartCheck.reset().start()
  53. // heartCheck.sendHeart()
  54. }
  55. }
  56. // 接收到消息的回调方法
  57. ws.onmessage = function(evt) {
  58. // 如果获取到消息,心跳检测重置
  59. // 拿到任何消息都说明当前连接是正常的
  60. // heartCheck.reset().start()
  61. console.log(
  62. '%c' +
  63. new Date() +
  64. '%c receive%c telWebsocket %ctype:' +
  65. JSON.parse(evt.data)[0].Type +
  66. '%c ' +
  67. evt.data,
  68. 'color: #111',
  69. 'color: #67C23A',
  70. 'color: #111',
  71. 'color: #67C23A',
  72. 'color: #111'
  73. )
  74. dealMsg(JSON.parse(evt.data)[0])
  75. // 修改 store 中telwebsocket的数据
  76. const telWSData = JSON.parse(evt.data)
  77. telWSData.operationType = '接收'
  78. store.dispatch('ChangeTelWSMsg', telWSData)
  79. }
  80. // 连接关闭的回调方法
  81. ws.onclose = function(evt) {
  82. if (cls === 0) {
  83. cls = 1
  84. console.log('telWebsocket连接关闭')
  85. // console.groupEnd()
  86. // 修改store 中连接状态
  87. store.dispatch('ConnectWs', false)
  88. store.dispatch('ChangeLineState', 1)
  89. // 修改 store 中telwebsocket的数据
  90. store.dispatch('ChangeTelWSMsg', {
  91. wsUrl: wsUrl,
  92. operationType: '连接关闭'
  93. })
  94. reconnect()
  95. }
  96. }
  97. // 连接发生错误的回调方法
  98. ws.onerror = function(evt) {
  99. // 产生异常
  100. // Message({
  101. // dangerouslyUseHTMLString: true,
  102. // message: '<div style="font-size:80px;font-weight: 700;text-align: center; width:80%;margin: 0 auto;">telWebsocket连接出现异常!</div>',
  103. // offset: 400,
  104. // center: true,
  105. // type: 'error',
  106. // duration: 2 * 1000
  107. // })
  108. // console.warn('telWebsocket连接出现异常!')
  109. // 修改 store 中telwebsocket的数据
  110. store.dispatch('ChangeTelWSMsg', {
  111. wsUrl: wsUrl,
  112. operationType: '连接异常'
  113. })
  114. if (ws == null || ws.readyState !== ws.OPEN) {
  115. console.log(new Date() + 'telWebsocket开始重连')
  116. // 修改 store 中telwebsocket的数据
  117. store.dispatch('ChangeTelWSMsg', {
  118. wsUrl: wsUrl,
  119. operationType: '开始重连'
  120. })
  121. reconnect()
  122. }
  123. }
  124. }
  125. /**
  126. * 重新连接
  127. */
  128. function reconnect() {
  129. if (lockReconnect) return
  130. lockReconnect = true
  131. // 没连接上会一直重连,设置延迟避免请求过多
  132. websocktTimer && clearTimeout(websocktTimer)
  133. websocktTimer = setTimeout(function() {
  134. console.log(new Date() + ' ' + 'telWebsocket重连中……')
  135. // 修改 store 中telwebsocket的数据
  136. store.dispatch('ChangeTelWSMsg', {
  137. wsUrl: wsUrl,
  138. operationType: '重连中……'
  139. })
  140. createWebSocket()
  141. lockReconnect = false
  142. }, 2000)
  143. }
  144. /**
  145. * 发送
  146. * @ socketDatas 发送的数据 type {}
  147. */
  148. export function Send(scoketDatas) {
  149. if (ws.readyState !== ws.OPEN) {
  150. reconnect()
  151. }
  152. if (ws.readyState === ws.OPEN) {
  153. console.log(
  154. '%c' +
  155. new Date() +
  156. '%c send %c telWebsocket ' +
  157. JSON.stringify(scoketDatas),
  158. 'color: #111',
  159. 'color: #409EFF',
  160. 'color: #111'
  161. )
  162. ws.send(JSON.stringify(scoketDatas))
  163. scoketDatas.operationType = '发送'
  164. // 修改 store 中telwebsocket的数据
  165. store.dispatch('ChangeTelWSMsg', scoketDatas)
  166. }
  167. }
  168. // 心跳检测
  169. const heartCheck = {
  170. timeout: 20000, // 5秒
  171. timeoutObj: null,
  172. serverTimeoutObj: null,
  173. reset: function() {
  174. clearTimeout(this.timeoutObj)
  175. clearTimeout(this.serverTimeoutObj)
  176. return this
  177. },
  178. start: function() {
  179. const _self = this
  180. this.timeoutObj = setTimeout(function() {
  181. // 这里发送一个心跳,后端收到后,返回一个心跳消息,
  182. // onmessage拿到返回的心跳就说明连接正常
  183. _self.sendHeart()
  184. _self.aa()
  185. }, this.timeout)
  186. },
  187. sendHeart: function() {
  188. const scoketDatas = {
  189. Type: 'Heart',
  190. Result: true,
  191. AgentID: store.getters.usercode, // 工号
  192. AgentExten: store.getters.extension, // 分机号
  193. // AgentGroup: 1 // 坐席组id
  194. AgentGroup: store.getters.groupcode // 坐席组id
  195. }
  196. Send(scoketDatas)
  197. }
  198. }
  199. // 迁入
  200. function signIn() {
  201. // if(!this.groupcode){
  202. // this.$message.error('分机号不存在')
  203. // return false
  204. // }
  205. // if (!store.getters.extension) {
  206. // this.$confirm('如果您想进行话务操作,请重新登录并且输入分机号, 是否重新登录?', '提示', {
  207. // confirmButtonText: '是',
  208. // cancelButtonText: '否',
  209. // type: 'warning'
  210. // }).then(() => {
  211. // this.$store.dispatch('FedLogOut').then(() => {
  212. // location.reload() // 为了重新实例化vue-router对象 避免bug
  213. // })
  214. // }).catch(() => {
  215. // })
  216. // return
  217. // }
  218. const scoketDatas = {
  219. Type: 'Login',
  220. AgentID: store.getters.usercode,
  221. AgentExten: store.getters.extension,
  222. // AgentGroup: window.localStorage.getItem("groupCode"), // 坐席组id window.localStorage.getItem('groupCode')
  223. AgentGroup: '364',
  224. AgentType: '0',
  225. DisposeTime: '0' // 话后处理时长设置,0代表一致话后处理,除非发送置闲 (按照历史习惯,字符串形式)
  226. }
  227. Send(scoketDatas)
  228. }
  229. /**
  230. * 处理接收的消息
  231. * @ msgData 接收的数据 type {}
  232. */
  233. function dealMsg(msgData) {
  234. if (msgData) {
  235. const rlt = msgData.Result
  236. if (rlt === true) {
  237. switch (msgData.Type.toLowerCase()) {
  238. case 'login': // 签入
  239. LoginBack()
  240. break
  241. case 'logout': // 签出
  242. LogoutBack()
  243. break
  244. case 'dropcall': // 挂断
  245. DropCallBack()
  246. break
  247. case 'makecall': // 外呼
  248. MakeCallBack(msgData)
  249. break
  250. case 'setstate': // 置忙 置闲
  251. SetState(msgData)
  252. break // 置忙置闲
  253. case 'meeting': // 会议
  254. MeetingBack(msgData)
  255. break
  256. case 'meetingtakeback':
  257. MeetingTakeBackFun(msgData)
  258. break // 多方通话回签
  259. case 'transfer': // 转移
  260. TransferBack()
  261. break
  262. // case 'consult': // 协商呼叫
  263. // ConsultBack()
  264. // break
  265. case 'hold': // 保持
  266. HoldBack(msgData)
  267. break
  268. case 'retrieve': // 接回
  269. RetrieveBack()
  270. break
  271. case 'incoming': // 来电
  272. IncomingBack(msgData)
  273. break
  274. case 'linestateagent': // 线路状态
  275. LineStateAgentBack(msgData)
  276. break
  277. case 'agentstateagent': // 线路状态
  278. agentstateagentBack(msgData)
  279. case 'agentstate': // 线路状态
  280. updateSeatMonitorlists(msgData)
  281. break
  282. case 'getagentlist':
  283. getAgentList(msgData)
  284. break
  285. case 'callid':
  286. getCallid(msgData)
  287. break
  288. }
  289. } else if (rlt === false) {
  290. var texs = ''
  291. // const errCode = msgData.Error % 10000
  292. if (msgData.Type.toLowerCase() === 'meeting') {
  293. window.localStorage.setItem('meetingTransfer', 0)
  294. if (window.localStorage.getItem('meetingType') == '转接') {
  295. texs = '转接失败'
  296. }
  297. if (window.localStorage.getItem('meetingType') == '多方通话') {
  298. texs = '多方通话失败'
  299. }
  300. } else if (msgData.Type.toLowerCase() === 'transfer') {
  301. texs = '转接失败'
  302. } else if (msgData.Type.toLowerCase() === 'makecall') {
  303. texs = '外呼失败'
  304. } else {
  305. texs = msgData.Type
  306. }
  307. Message({
  308. dangerouslyUseHTMLString: true,
  309. message:
  310. '<div style="font-size:32px;font-weight: 700;text-align: center; width:100%;margin: 0 auto;">' +
  311. texs +
  312. '</div>',
  313. offset: 400,
  314. center: true,
  315. type: 'error',
  316. duration: 2 * 1000
  317. })
  318. } else {
  319. if (msgData.Type.toLowerCase() === 'linestateagent') {
  320. LineStateAgentBack(msgData)
  321. } else if (msgData.Type.toLowerCase() === 'monitor') {
  322. updateSeatMonitorlists(msgData)
  323. } else if (msgData.Type.toLowerCase() === 'waitcount') {
  324. console.log(msgData.Type)
  325. store.dispatch('ChangeWaitcountNumber', msgData.WaitCount)
  326. } else {
  327. // Message.error(`${rlt} !`)
  328. Message({
  329. dangerouslyUseHTMLString: true,
  330. message:
  331. '<div style="font-size:42px;font-weight: 700;text-align: center; width:80%;margin: 0 auto;">' +
  332. rlt +
  333. '</div>',
  334. offset: 400,
  335. center: true,
  336. type: 'error',
  337. duration: 2 * 1000
  338. })
  339. }
  340. }
  341. }
  342. }
  343. function updateSeatMonitorlists(msgData) {
  344. store.dispatch('ChangeMonitor', true) // 修改监听操作的返回值
  345. store.dispatch('ChangeMonitorstate', msgData.State) // 监控状态
  346. store.dispatch('ChangeMonitoragent', msgData.AgentID) // 监控坐席
  347. store.dispatch('ChangeMonitorexten', msgData.ExtenID) // 监控坐席
  348. }
  349. function getCallid(msgData) {
  350. window.localStorage.setItem('callid', msgData.CurrID)
  351. console.log(window.localStorage.getItem('callid'), '11')
  352. }
  353. // 签入
  354. function LoginBack(reState) {
  355. // 心跳检测开始
  356. // heartCheck.reset().start()
  357. cls = 0
  358. store.dispatch('LoginWs')
  359. store.dispatch('ChangeTopRightState', ['空闲', true])
  360. // 弹出任务信息
  361. store.dispatch('ChangeTask', true)
  362. let scoketDatas = {}
  363. if (Number(window.sessionStorage.getItem('storageSeatState')) === 2) {
  364. scoketDatas = {
  365. Type: 'SayFree',
  366. AgentID: window.localStorage.getItem('storageUsercode'),
  367. AgentExten: window.localStorage.getItem('ext')
  368. }
  369. Send(scoketDatas)
  370. } else if (Number(window.sessionStorage.getItem('storageSeatState')) === 5) {
  371. scoketDatas = {
  372. Type: 'SayBusy',
  373. AgentID: window.localStorage.getItem('storageUsercode'),
  374. AgentExten: window.localStorage.getItem('ext')
  375. }
  376. Send(scoketDatas)
  377. } else {
  378. window.sessionStorage.setItem('storageSeatState', 2)
  379. }
  380. }
  381. // 签出
  382. function LogoutBack(reState) {
  383. // 心跳检测关闭
  384. // heartCheck.reset()
  385. store.dispatch('LogoutWs')
  386. store.dispatch('ChangeTopRightState', ['已签出', false])
  387. // 重置初始化状态
  388. resetInitState()
  389. window.sessionStorage.setItem('storageSeatState', 0)
  390. getOperatonTime('2')
  391. console.log('签出2')
  392. }
  393. // 重置初始化状态
  394. function resetInitState() {
  395. store.dispatch('ChangeSeatState', 2) // 坐席状态(空闲)
  396. store.dispatch('ChangeLineState', 1) // 线路状态(空闲)
  397. store.dispatch('ChangeCallNum', '') // 顶部电话号码('')
  398. store.dispatch('ChangeCallType', 'MakeCall') // 发送的通话类型(默认是外呼)
  399. store.dispatch('ChangeTask', false) // 外呼任务信息是否显示
  400. store.dispatch('ChangeTaskFirst', true) // 外呼任务信息是否是第一次弹出
  401. }
  402. /**
  403. * 置忙 置闲
  404. * sayOption (点击置忙置闲后的返回值)
  405. * */
  406. function SetState(sayOption) {
  407. if (sayOption.State === 5) {
  408. store.dispatch('ChangeSeatState', 5)
  409. window.sessionStorage.setItem('storageSeatState', 5)
  410. window.sessionStorage.setItem('isBusyOrFree', 0)// 0是置忙1是置闲
  411. store.dispatch('ChangeTopRightState', ['忙碌', false])
  412. getOperatonTime('3')
  413. console.log('置忙3')
  414. } else if (sayOption.State === 2) {
  415. store.dispatch('ChangeSeatState', 2)
  416. window.sessionStorage.setItem('storageSeatState', 2)
  417. window.sessionStorage.setItem('isBusyOrFree', 1)// 0是置忙1是置闲
  418. store.dispatch('ChangeTopRightState', ['空闲', true])
  419. getOperatonTime('4')
  420. console.log('置闲4')
  421. }
  422. }
  423. /**
  424. * 置忙
  425. * sayOption (点击置忙置闲后的返回值)
  426. * */
  427. function SayBusyBack(sayOption) {
  428. window.sessionStorage.setItem('isBusyOrFree', 0)// 0是置忙1是置闲
  429. store.dispatch('ChangeSeatState', 5)
  430. if (sayOption.Type === 'SayBusy') {
  431. store.dispatch('ChangeTopRightState', ['忙碌', false])
  432. }
  433. }
  434. /**
  435. * 置闲
  436. * sayOption (点击置忙置闲后的返回值)
  437. * */
  438. function SayFreeBack(sayOption) {
  439. window.sessionStorage.setItem('isBusyOrFree', 1)// 0是置忙1是置闲
  440. store.dispatch('ChangeSeatState', 2)
  441. if (sayOption.Type === 'SayFree') {
  442. store.dispatch('ChangeTopRightState', ['空闲', true])
  443. }
  444. }
  445. // 坐席状态变化
  446. function agentstateagentBack(msgData) {
  447. switch (msgData.AgentState + '') {
  448. case '0':
  449. store.dispatch('ChangeTopRightState', ['离线', true])
  450. break // 离线
  451. case '1':
  452. store.dispatch('ChangeTopRightState', ['登录中', true])
  453. break // 登录中
  454. case '2':
  455. store.dispatch('ChangeTopRightState', ['空闲', true])
  456. break // 空闲
  457. case '3':
  458. store.dispatch('ChangeTopRightState', ['通话中', true])
  459. break // 通话中
  460. case '4':
  461. store.dispatch('ChangeTopRightState', ['话后处理中', true])
  462. break // 话后处理中
  463. case '5':
  464. store.dispatch('ChangeTopRightState', ['忙碌', true])
  465. break // 小休
  466. case '6':
  467. store.dispatch('ChangeTopRightState', ['振铃', true])
  468. break // 被请求
  469. case '7':
  470. store.dispatch('ChangeTopRightState', ['注销', true])
  471. break // 注销
  472. }
  473. }
  474. // 线路状态通知
  475. function LineStateAgentBack(linedata) {
  476. // 0分机不可用,1空闲,2摘机等待拨号,3正在拨号,4呼出振铃,5来电振铃,6通话中,7播放忙音中,8移除IP分机,10通话保持中
  477. // store.dispatch('ChangeTopRightState', [linedata.Result, true])
  478. switch (linedata.State) {
  479. // case '空闲':
  480. case 1:
  481. store.dispatch('ChangeLineState', 1)
  482. store.dispatch('ChangeCallNum', '') // 顶部电话号码('')
  483. store.dispatch('ChangeTopRightState', ['1111', true])
  484. break
  485. // case '摘机等待拨号':
  486. case 2:
  487. store.dispatch('ChangeLineState', 2)
  488. store.dispatch('ChangeTopRightState', ['摘机等待拨号', true])
  489. break
  490. // case '正在拨号':
  491. case 3:
  492. store.dispatch('ChangeLineState', 3)
  493. store.dispatch('ChangeTopRightState', ['正在拨号', true])
  494. break
  495. // case '呼出振铃':
  496. case 4:
  497. store.dispatch('ChangeLineState', 4)
  498. store.dispatch('ChangeTopRightState', ['呼出振铃', true])
  499. break
  500. // case '来电振铃':
  501. case 5:
  502. store.dispatch('ChangeLineState', 5)
  503. store.dispatch('ChangeTopRightState', ['来电振铃', true])
  504. break
  505. // case '通话中':
  506. case 6:
  507. store.dispatch('ChangeLineState', 6)
  508. store.dispatch('ChangeTopRightState', ['通话中', true])
  509. break
  510. // case '播放忙音中':
  511. case 7:
  512. store.dispatch('ChangeLineState', 7)
  513. store.dispatch('ChangeTopRightState', ['播放忙音中', true])
  514. break
  515. // case '移除IP分机':
  516. case 8:
  517. store.dispatch('ChangeLineState', 8)
  518. store.dispatch('ChangeTopRightState', ['移除IP分机', true])
  519. break
  520. // case '通话保持中':
  521. case 10:
  522. store.dispatch('ChangeLineState', 10)
  523. store.dispatch('ChangeTopRightState', ['通话保持中', true])
  524. break
  525. }
  526. }
  527. // 来电
  528. function IncomingBack(inComingData) {
  529. const inComingCallId = inComingData.CallID
  530. let inComingNumber = inComingData.Number
  531. calldDirection = 1
  532. store.dispatch('screenPopUpBoole', 1)
  533. if (inComingNumber.length > 11) {
  534. inComingNumber = inComingNumber.substr(1)
  535. // console.log(inComingNumber)
  536. }
  537. window.localStorage.setItem('callidSave', inComingData.CallID) // 用户的坐席组code
  538. router.push({
  539. name: 'CallScreen',
  540. path: '/callScreen',
  541. fullPath: '/callScreen',
  542. params: {
  543. callid: inComingCallId,
  544. telInNumber: inComingNumber
  545. }
  546. })
  547. store.dispatch('ChangeCallNum', inComingNumber)
  548. }
  549. // 挂断
  550. function DropCallBack() {
  551. store.dispatch('ChangeCallNum', '') // 顶部电话号码('')
  552. store.dispatch('ChangeCallType', 'MakeCall') // 发送的通话类型(默认是外呼)
  553. store.dispatch('screenPopUpBoole', 0) // calldDirection
  554. if (calldDirection) {
  555. const scoketDatas = {
  556. Type: 'SayBusy',
  557. AgentID: window.localStorage.getItem('storageUsercode'),
  558. AgentExten: window.localStorage.getItem('ext')
  559. }
  560. Send(scoketDatas)
  561. setTimeout(() => {
  562. if (window.sessionStorage.getItem('isBusyOrFree') === '0') {
  563. const scoketDatas = {
  564. Type: 'SayFree',
  565. AgentID: window.localStorage.getItem('storageUsercode'),
  566. AgentExten: window.localStorage.getItem('ext')
  567. }
  568. Send(scoketDatas)
  569. }
  570. }, 60000)
  571. calldDirection = 0
  572. } else {
  573. const scoketDatas = {
  574. Type: 'SayFree',
  575. AgentID: window.localStorage.getItem('storageUsercode'),
  576. AgentExten: window.localStorage.getItem('ext')
  577. }
  578. Send(scoketDatas)
  579. }
  580. // 当前在坐席监控中需要 更新坐席监控内坐席的状态
  581. const curentViews = store.state.tagsView.visitedViews
  582. for (let i = 0, len = curentViews.length; i < len; i++) {
  583. if (curentViews[i].name === 'seatMonitor') {
  584. // updateSeatMonitorlists()
  585. return
  586. }
  587. }
  588. }
  589. // 转接
  590. function TransferBack() {
  591. store.dispatch('ChangeCallNum', '') // 顶部电话号码('')
  592. store.dispatch('ChangeCallType', 'MakeCall') // 发送的通话类型(默认是外呼)
  593. }
  594. // 外呼 结果 弹出来电弹屏
  595. function MakeCallBack(callBackData) {
  596. const inComingNumber = store.getters.telCallNum
  597. const inComingCallId = callBackData.CallID
  598. }
  599. // 多方通话
  600. function MeetingBack() {
  601. store.dispatch('ChangeMeetingBackFlag', true)
  602. window.localStorage.setItem('meetingTransfer', 1)
  603. }
  604. // 多方通话回签
  605. function MeetingTakeBackFun() {
  606. store.dispatch('ChangeMeetingBackFlag', false)
  607. }
  608. // 录音返回
  609. function RecordPathBack() {}
  610. // 保持
  611. function HoldBack(holdData) {
  612. if (holdData.Result === true) {
  613. store.dispatch('ChangeLineState', 10)
  614. }
  615. }
  616. // 接回
  617. function RetrieveBack(RetrieveData) {
  618. // if (RetrieveData.Result === true) {
  619. // store.dispatch('ChangeLineState', 6)
  620. // }
  621. }
  622. // 更新坐席监控内坐席的状态
  623. // function updateSeatMonitorlists (moitorData) {
  624. // console.log(moitorData)
  625. // // store.dispatch('ChangeMonitor', true) // 修改监听操作的返回值
  626. // }
  627. // 获取当前在线坐席
  628. function getAgentList(data) {
  629. store.dispatch('GetOnlineSeatList', data.AgentList) // 监控坐席
  630. }
  631. function getOperatonTime(state) {
  632. const params = {
  633. state: state,
  634. token: localStorage.getItem('Admin-Token').split(' ')[1]
  635. }
  636. Teljournal(params)
  637. .then(response => {})
  638. .catch(result => {})
  639. }