PhoneScript.ts 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  1. import {ElMessage} from "element-plus";
  2. import router from '/@/router';
  3. import { storeToRefs } from 'pinia';
  4. import { WebsocketInterface } from "./websocket";
  5. import { useTelStatus } from '/@/stores/telStatus';
  6. import { useUserInfo } from '/@/stores/userInfo';
  7. import { useAppConfig } from '/@/stores/appConfig';
  8. import { TelStates, RestStates } from '/@/stores/interface';
  9. import { debounce } from '/@/utils/tools';
  10. import {restFlowDel, restFlowStart, telRestAdd, telRestProcess, telUnrestWex} from "/@/api/login/user";
  11. const storesUserInfo = useUserInfo();
  12. const { userInfos } = storeToRefs(storesUserInfo);
  13. const useTelStatusStore = useTelStatus();
  14. const { telStatusInfo } = storeToRefs(useTelStatusStore);
  15. const appConfigStore = useAppConfig();
  16. const { AppConfigInfo } = storeToRefs(appConfigStore);
  17. //定义当前登录的用户,在jquery的$(function(){})中对下面参数赋值, 全局变量,取值在PhoneScript.js中处理的,
  18. const SystemAttr = {
  19. CurrentUser: { "DepartmentID": "", "GongHao": "", "FenJi": "", "AgentGroupName": "" }
  20. }
  21. let timer: any = null; // 计时器
  22. let time = 0; // 计时时间
  23. // 开始计时
  24. const startTime = debounce(() => {
  25. // @ts-ignore
  26. let talkTime = telStatusInfo.value?.callTime ?? 0;
  27. if (talkTime) {
  28. time = Number(talkTime);
  29. timer = setInterval(() => {
  30. time++;
  31. useTelStatusStore.setCallTime(time);
  32. }, 1000);
  33. } else {
  34. timer= setInterval(() => {
  35. time++;
  36. useTelStatusStore.setCallTime(time);
  37. }, 1000);
  38. }
  39. }, 1000);
  40. // 结束计时
  41. const removeTimer = debounce(() => {
  42. time = 0;
  43. useTelStatusStore.clearCallTime();
  44. clearInterval(timer);
  45. }, 1000);
  46. // 小休原因
  47. let restReason: string = "";
  48. //音频接口对象
  49. export const VoiceInterfaceObject:any = {
  50. // 设置全局变量
  51. SetSendModel: function (params: any) {
  52. SystemAttr.CurrentUser.DepartmentID = params.DepartmentID || ""; // 部门ID
  53. SystemAttr.CurrentUser.GongHao = params.GongHao || ""; // 工号
  54. SystemAttr.CurrentUser.FenJi = params.FenJi || ""; // 分机
  55. SystemAttr.CurrentUser.AgentGroupName = params.AgentGroupName || ""; // 坐席组
  56. },
  57. /*
  58. * @@@@全局变量
  59. *
  60. * 当前实体对象
  61. * 下行JSON格式:{ "Action": "", "GongHao": "", "FenJi": "", "PlatFormCode": "", "Params": "" }
  62. * 上行JSON格式:{ "Action": "", "GongHao": "", "FenJi": "", "PlatFormCode": "", "Params": "", "Message": "" }
  63. */
  64. GetSendModel: function (action: string, params?: string) {
  65. let p_action = action || "";
  66. let p_params = params || "";
  67. return {"Action": p_action, "GongHao": SystemAttr.CurrentUser.GongHao, "FenJi": SystemAttr.CurrentUser.FenJi, "PlatFormCode": SystemAttr.CurrentUser.DepartmentID, "Params": p_params};
  68. },
  69. /*
  70. * @@@@事件触发
  71. *
  72. * 当前实体对象
  73. * 下行JSON格式:{ "Action": "", "GongHao": "", "FenJi": "", "PlatFormCode": "", "Params": "" }
  74. * 上行JSON格式:{ "Action": "", "GongHao": "", "FenJi": "", "PlatFormCode": "", "Params": "", "Message": "" }
  75. */
  76. //弹屏 回调
  77. Back_TelPhoneEvent: function (returnVal: { Message: string; Params: any; }) {
  78. let DialArray = returnVal.Message.split(",");
  79. let DialInfo:any = {};
  80. DialInfo.fromTel = DialArray[0]; //来电号码
  81. DialInfo.telGongHao = DialArray[1]; //来电工号
  82. DialInfo.telArea = DialArray[3]; //来电区域
  83. DialInfo.telGuid = DialArray[4]; //来电GUID
  84. DialInfo.telIVR = DialArray[5]; //来电IVR名称
  85. DialInfo.telType = returnVal.Params; // 0来电 1外呼 2转接
  86. console.info(returnVal.Message,DialInfo,'来电谈单');
  87. useTelStatusStore.setCallInfo({
  88. telGongHao: DialInfo.telGongHao,
  89. fromTel: DialInfo.fromTel,
  90. telArea: DialInfo.telArea,
  91. telGuid: DialInfo.telGuid,
  92. telIVR: DialInfo.telIVR,
  93. telType: DialInfo.telType,
  94. });
  95. // 设置电话状态 振铃中
  96. useTelStatusStore.setPhoneControlState(TelStates.ring);
  97. if(DialInfo.telType === '0'){ // 来电才展示弹屏
  98. // 跳转到录入工单页面
  99. router.push({
  100. name: 'orderAdd',
  101. params: {
  102. createBy: 'tel',
  103. telNo: DialInfo.fromTel,
  104. callId: DialInfo.telGuid,
  105. transfer: '12315',
  106. tagsViewName: '工单受理',
  107. },
  108. }).then(()=>{} );
  109. }
  110. },
  111. //弹屏 回调
  112. // Back_RegNumberState: function (returnVal: any) {
  113. // //Tel,GongHao,URL,Area,Guid,IVR,Remark
  114. // console.log(returnVal);
  115. // },
  116. //心跳 回调
  117. Back_keeplive: function (returnVal: any) {
  118. console.log(returnVal);
  119. },
  120. //登录
  121. Login: function () {
  122. const modelJson = this.GetSendModel("Login");
  123. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  124. if (returnVal != 1) {
  125. console.info(WebsocketInterface("GetError", returnVal));
  126. }
  127. },
  128. //登录回调
  129. Back_Login: function (returnVal: { Params: string; }) {
  130. if (returnVal.Params == "0") {
  131. WebsocketInterface("KeepAlive");
  132. // 设置分机号
  133. useTelStatusStore.setCallInfo({telsNo: SystemAttr.CurrentUser.FenJi});
  134. // 设置签入状态
  135. useTelStatusStore.setDutyState(true);
  136. // 设置电话状态
  137. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  138. this.SetGroupRole();// 设置组权限
  139. this.SetRecordRole();// 设置录音权限
  140. this.SetCallRole();// 设置呼叫权限
  141. ElMessage.success("登录语音系统成功!")
  142. } else {
  143. ElMessage.error("登录语音系统失败!")
  144. }
  145. },
  146. //设置用户权限
  147. SetGroupRole: function () {
  148. const modelJson = this.GetSendModel("SetGroupRole", SystemAttr.CurrentUser.AgentGroupName);
  149. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  150. if (returnVal != 1) {
  151. console.info(WebsocketInterface("GetError", returnVal));
  152. }
  153. },
  154. //设置用户权限 回调
  155. Back_SetGroupRole: function (returnVal: { Params: string; Message: any; }) {
  156. if (returnVal.Params == "0") {
  157. ElMessage.success(returnVal.Message)
  158. } else {
  159. console.info(returnVal.Message);
  160. ElMessage.error('设置组权限失败')
  161. }
  162. },
  163. // 设置录音权限
  164. SetRecordRole: function () {
  165. const modelJson = this.GetSendModel("SetRecRole", '0');
  166. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  167. if (returnVal != 1) {
  168. console.info(WebsocketInterface("GetError", returnVal));
  169. }
  170. },
  171. // 设置录音权限 回调
  172. Back_SetRecRole: function (returnVal: { Params: string; Message: any; }) {
  173. if (returnVal.Params == "0") {
  174. ElMessage.success(returnVal.Message)
  175. } else {
  176. console.info(returnVal.Message);
  177. ElMessage.error('设置录音权限失败!')
  178. }
  179. },
  180. // 设置呼叫权限
  181. SetCallRole: function () {
  182. const modelJson = this.GetSendModel("SetDialRole", '2');
  183. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  184. if (returnVal != 1) {
  185. console.info(WebsocketInterface("GetError", returnVal));
  186. }
  187. },
  188. // 设置呼叫权限 回调
  189. Back_SetDialRole: function (returnVal: { Params: string; Message: any; }) {
  190. console.log('设置呼叫权限回调',returnVal)
  191. if (returnVal.Params == "0") {
  192. ElMessage.success(returnVal.Message)
  193. } else {
  194. ElMessage.error('设置呼叫权限失败!');
  195. console.info(returnVal.Message);
  196. }
  197. },
  198. //登出 当前座席
  199. LogOut: function () {
  200. const modelJson = this.GetSendModel("LogOut");
  201. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  202. ElMessage.success("语音系统退出成功!")
  203. // 关闭websocket
  204. const a = WebsocketInterface('Close');
  205. if (returnVal != 1) {
  206. console.info(WebsocketInterface("GetError", returnVal));
  207. }
  208. },
  209. //强制登出
  210. F_LogOut: function (gongHao: any) {
  211. const modelJson = {"Action": "LogOut", "GongHao": gongHao, "FenJi": "", "PlatFormCode": SystemAttr.CurrentUser.DepartmentID, "Params": ""};
  212. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  213. if (returnVal != 1) {
  214. console.info(WebsocketInterface("GetError", returnVal));
  215. }
  216. },
  217. //登出回调
  218. Back_LogOut: function (returnVal: any) {
  219. console.info(returnVal);
  220. },
  221. //退出事件
  222. Back_NoLogin: function (returnVal: any) {
  223. ElMessage.error(returnVal.message)
  224. console.info(returnVal.message);
  225. },
  226. //示忙当前座席
  227. SetBusy: function (reason:string) {
  228. const modelJson = this.GetSendModel("SetBusy");
  229. restReason = reason || '';
  230. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  231. if (returnVal != 1) {
  232. console.info(WebsocketInterface("GetError", returnVal));
  233. }
  234. },
  235. //强制示忙座席
  236. F_SetBusy: function (gongHao: any) {
  237. const modelJson = {"Action": "SetBusy", "GongHao": gongHao, "FenJi": "", "PlatFormCode": SystemAttr.CurrentUser.DepartmentID, "Params": ""};
  238. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  239. if (returnVal != 1) {
  240. console.info(WebsocketInterface("GetError", returnVal));
  241. }
  242. },
  243. //示忙回调
  244. Back_SetBusy: function (returnVal: { Params: string; Message: any; }) {
  245. if (returnVal.Params == "0") {
  246. if (AppConfigInfo.value.isRestApproval) {
  247. // 如果小休需要审核
  248. telRestProcess().then((res: any) => {
  249. console.log('小休申请成功', res)
  250. // 设置电话状态小休中
  251. useTelStatusStore.setPhoneControlState(TelStates.rest);
  252. useTelStatusStore.setRest(RestStates.resting);
  253. ElMessage.success("小休开始!")
  254. }).catch((err: any) => {
  255. console.log('小休申请失败', err)
  256. restFlowDel().then(() => { // 删除小休流程
  257. });
  258. this.SetIdle(); // 调用失败示闲
  259. })
  260. }else{
  261. ElMessage.success("小休开始!")
  262. // 设置电话状态小休中
  263. useTelStatusStore.setPhoneControlState(TelStates.rest);
  264. useTelStatusStore.setRest(RestStates.resting);
  265. // 添加小休记录
  266. telRestAdd({reason: restReason}).then((res: any) => {
  267. console.log('小休记录添加成功 开始休息', res)
  268. }).catch((err: any) => {
  269. console.log('小休记录添加失败 开始休息', err)
  270. this.SetIdle(); // 调用失败示闲
  271. })
  272. }
  273. } else {
  274. console.info(returnVal.Message);
  275. ElMessage.error(returnVal.Message)
  276. }
  277. },
  278. //示闲当前座席
  279. SetIdle: function () {
  280. const modelJson = this.GetSendModel("SetIdle");
  281. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  282. if (returnVal != 1) {
  283. console.info(WebsocketInterface("GetError", returnVal));
  284. }else{
  285. }
  286. },
  287. //强制示闲座席
  288. F_SetIdle: function (gongHao: any) {
  289. const modelJson = {"Action": "SetIdle", "GongHao": gongHao, "FenJi": "", "PlatFormCode": SystemAttr.CurrentUser.DepartmentID, "Params": ""};
  290. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  291. if (returnVal != 1) {
  292. console.info(WebsocketInterface("GetError", returnVal));
  293. }
  294. },
  295. //示闲回调
  296. Back_SetIdle: function (returnVal: { Params: string; Message: any; }) {
  297. if (returnVal.Params == "0") {
  298. ElMessage.success("小休结束!")
  299. // 设置休息状态 设置未正常状态
  300. useTelStatusStore.setRest(RestStates.unRest);
  301. // 设置话机状态 结束休息改为签入状态
  302. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  303. telUnrestWex().then((res: any) => {
  304. console.log('小休记录修改成功 结束休息', res)
  305. }).catch((err: any) => {
  306. console.log('小休记录修改失败 结束休息', err)
  307. })
  308. } else {
  309. console.info(returnVal.Message);
  310. ElMessage.error(returnVal.Message)
  311. }
  312. },
  313. //保持
  314. KeepInTouch: function () {
  315. const modelJson = this.GetSendModel("KeepInTouch");
  316. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  317. if (returnVal != 1) {
  318. console.info(WebsocketInterface("GetError", returnVal));
  319. }
  320. },
  321. //保持回调
  322. Back_KeepInTouch: function (returnVal: { Params: string; Message: any; }) {
  323. if (returnVal.Params == "0") {
  324. // 设置电话状态
  325. useTelStatusStore.setHold(true);
  326. // 设置电话状态
  327. useTelStatusStore.setPhoneControlState(TelStates.onHold);
  328. ElMessage('开始保持');
  329. } else {
  330. console.info(returnVal.Message);
  331. }
  332. },
  333. //取消保持
  334. KeepCancelInTouch: function () {
  335. const modelJson = this.GetSendModel("KeepCancelInTouch");
  336. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  337. if (returnVal != 1) {
  338. console.info(WebsocketInterface("GetError", returnVal));
  339. }
  340. },
  341. //取消保持回调
  342. Back_KeepCancelInTouch: function (returnVal: { Params: string; Message: any; }) {
  343. if (returnVal.Params == "0") {
  344. // 设置电话状态 取消单个保持为通话中
  345. useTelStatusStore.setHold(false);
  346. // 设置电话状态
  347. useTelStatusStore.setPhoneControlState(TelStates.onCall);
  348. ElMessage('取消保持');
  349. } else {
  350. console.info(returnVal.Message);
  351. }
  352. },
  353. //开启事后
  354. TalkedDealBegin: function () {
  355. const modelJson = this.GetSendModel("KeepCancelInTouch");
  356. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  357. if (returnVal != 1) {
  358. console.info(WebsocketInterface("GetError", returnVal));
  359. }
  360. },
  361. //开启事后 回调
  362. Back_TalkedDealBegin: function (returnVal: any) {
  363. },
  364. //结束事后
  365. TalkedDealEnd: function () {
  366. },
  367. //结束事后 回调
  368. Back_TalkedDealEnd: function () {
  369. },
  370. //语音呼叫
  371. DialOut: function (phone: any) {
  372. const modelJson = this.GetSendModel("DialOut", phone);
  373. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  374. if (returnVal != 1) {
  375. console.info(WebsocketInterface("GetError", returnVal));
  376. }
  377. },
  378. // 语音呼叫 回调
  379. Back_DialOut: function (returnVal: any) {
  380. if (returnVal.Params == "0") {
  381. ElMessage.success(returnVal.Message)
  382. }else{
  383. ElMessage.error(returnVal.Message)
  384. }
  385. },
  386. // 语音呼叫 回调
  387. Back_dialOut: function (returnVal: any) {
  388. console.log(returnVal);
  389. if (returnVal.Params == "0") {
  390. }else{
  391. ElMessage.error(returnVal.Message)
  392. }
  393. },
  394. //视频呼叫
  395. VideoCall: function (phone: any) {
  396. const modelJson = this.GetSendModel("VideoCall", phone);
  397. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  398. if (returnVal != 1) {
  399. console.info(WebsocketInterface("GetError", returnVal));
  400. }
  401. },
  402. //挂断
  403. HangUp: function (phone?: any) {
  404. const modelJson = this.GetSendModel("HangUp", phone);
  405. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  406. if (returnVal != 1) {
  407. console.info(WebsocketInterface("GetError", returnVal));
  408. } else {
  409. closeWrVideo("videortmp");
  410. }
  411. },
  412. //挂断 回调
  413. Back_HangUp: function (returnVal: { Params: string; Message: any; }) {
  414. if (returnVal.Params == "0") {
  415. console.info(returnVal.Message);
  416. // 设置电话状态
  417. useTelStatusStore.setCallInfo({
  418. telArea: "", // 电话区号
  419. telGuid: "", // 电话guid
  420. telIVR: "", // 电话IVR
  421. telType: "", //来电 外呼 转接
  422. fromTel: "", // 来电号码
  423. });
  424. // 设置电话状态
  425. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  426. } else {
  427. console.info(returnVal.Message);
  428. }
  429. },
  430. //强拆 挂断
  431. Rtmp: function (phone: any) {
  432. const modelJson = this.GetSendModel("Rtmp", phone);
  433. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  434. if (returnVal != 1) {
  435. console.info(WebsocketInterface("GetError", returnVal));
  436. }
  437. },
  438. //自动外呼
  439. StartAutoDial: function (phone: any) {
  440. const modelJson = this.GetSendModel("StartAutoDial", phone);
  441. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  442. if (returnVal != 1) {
  443. console.info(WebsocketInterface("GetError", returnVal));
  444. }
  445. },
  446. //通知公告
  447. Notice: function (tels: string, content: string) {
  448. const param = tels + "|" + content;
  449. const modelJson = this.GetSendModel("Notice", param);
  450. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  451. if (returnVal != 1) {
  452. console.info(WebsocketInterface("GetError", returnVal));
  453. }
  454. },
  455. //外呼回调
  456. Back_Rtmp: function (returnVal: { Params: string; Rtsp: any; Message: any; }) {
  457. if (returnVal.Params == "0") {
  458. console.log(returnVal);
  459. const videoid = $("#videortmp").prop("id");
  460. const suuid = parseInt(String(Math.random() * 100000)) + '' + new Date().getTime();
  461. registerWrVideo(suuid, videoid, returnVal.Rtsp);
  462. //registerWrVideo(returnVal.CallGuid,videoid,returnVal.Rtsp);
  463. } else {
  464. console.info(returnVal.Message);
  465. }
  466. },
  467. //强拆 挂断
  468. F_HangUp: function (gongHao: any) {
  469. const modelJson = {"Action": "HangUp", "GongHao": gongHao, "FenJi": "", "PlatFormCode": SystemAttr.CurrentUser.DepartmentID, "Params": ""};
  470. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  471. if (returnVal != 1) {
  472. console.info(WebsocketInterface("GetError", returnVal));
  473. }
  474. },
  475. //转接
  476. TeleSwitch: function (gongHao: any) {
  477. const modelJson = this.GetSendModel("TeleSwitch", gongHao);
  478. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  479. if (returnVal != 1) {
  480. console.info(WebsocketInterface("GetError", returnVal));
  481. }
  482. },
  483. //转接 回调
  484. Back_TeleSwitch: function (returnVal: { Params: string; Message: any; }) {
  485. if (returnVal.Params == "0") {
  486. console.info(returnVal.Message,'转接成功');
  487. ElMessage.success(returnVal.Message);
  488. } else {
  489. console.info(returnVal.Message);
  490. }
  491. },
  492. // 转接挂机通知事件
  493. Back_TransferTrunkTalkingEnd: function (returnVal: { Params: string; Message: any; }) {
  494. console.log(returnVal,'转接挂断事件')
  495. // 设置电话状态
  496. useTelStatusStore.setCallInfo({
  497. telArea: "", // 电话区号
  498. telGuid: "", // 电话guid
  499. telIVR: "", // 电话IVR
  500. telType: "", //来电 外呼 转接
  501. fromTel: "", // 来电号码
  502. });
  503. useTelStatusStore.clearCallTime();
  504. // 设置电话状态
  505. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  506. },
  507. // 转接开始通知事件
  508. Back_BeginTransferTalking: function (returnVal: { Params: string; Message: any; }) {
  509. console.log(returnVal,'转接开始事件')
  510. // 设置电话状态
  511. useTelStatusStore.setCallInfo({
  512. telArea: "", // 电话区号
  513. telGuid: "", // 电话guid
  514. telIVR: "", // 电话IVR
  515. telType: "", //来电 外呼 转接
  516. fromTel: "", // 来电号码
  517. });
  518. useTelStatusStore.clearCallTime();
  519. // 设置电话状态
  520. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  521. },
  522. //代接
  523. InsteadOfTele: function (gonghao:any) {
  524. const modelJson = this.GetSendModel("InsteadOfTele", gonghao);
  525. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  526. if (returnVal != 1) {
  527. console.info(WebsocketInterface("GetError", returnVal));
  528. }
  529. },
  530. //代接 回调
  531. Back_InsteadOfTele: function (returnVal: { Params: string; Message: any; }) {
  532. if (returnVal.Params == "0") {
  533. console.info(returnVal.Message);
  534. } else {
  535. console.info(returnVal.Message);
  536. }
  537. },
  538. //强插
  539. CancleChannel: function (gongHao: any) {
  540. const modelJson = this.GetSendModel("CancleChannel", gongHao);
  541. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  542. if (returnVal != 1) {
  543. console.info(WebsocketInterface("GetError", returnVal));
  544. }
  545. },
  546. //强插 回调
  547. Back_CancleChannel: function (returnVal: { Params: string; Message: any; }) {
  548. if (returnVal.Params == "0") {
  549. console.info(returnVal.Message);
  550. } else {
  551. console.info(returnVal.Message);
  552. }
  553. },
  554. //监听
  555. LinkTele: function (gongHao: any) {
  556. const modelJson = this.GetSendModel("LinkTele", gongHao);
  557. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  558. if (returnVal != 1) {
  559. console.info(WebsocketInterface("GetError", returnVal));
  560. }
  561. },
  562. //开启会议 音频
  563. StartMeeting: function (meetId: string, tels: string) {
  564. const param = meetId + "|" + tels;
  565. const modelJson = this.GetSendModel("StartMeeting", param);
  566. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  567. if (returnVal != 1) {
  568. console.info(WebsocketInterface("GetError", returnVal));
  569. }
  570. },
  571. // 开启会议 音频 回调
  572. Back_StartMeeting: function (returnVal: any) {
  573. console.log(returnVal,'开启会议 音频 回调');
  574. },
  575. //开启会议 视频
  576. Back_OnMeeting: function (returnVal: any) {
  577. console.log(returnVal,'开启会议 音频 回调1');
  578. },
  579. //视频会议
  580. StartVideoMeeting: function (meetId: string, tels: string) {
  581. const param = meetId + "|" + tels;
  582. const modelJson = this.GetSendModel("StartVideoMeeting", param);
  583. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  584. if (returnVal != 1) {
  585. console.info(WebsocketInterface("GetError", returnVal));
  586. }
  587. },
  588. //开启会议 视频
  589. StartMeetingVideo: function (meetId: string, urls: string) {
  590. const param = meetId + "|" + urls;
  591. const modelJson = this.GetSendModel("StartMeetingVideo", param);
  592. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  593. if (returnVal != 1) {
  594. console.info(WebsocketInterface("GetError", returnVal));
  595. }
  596. },
  597. //视频推送
  598. GetMcuVideo: function (meetId: string, guid: string) {
  599. const param = meetId + "|" + guid;
  600. const modelJson = this.GetSendModel("GetMcuVideo", param);
  601. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  602. if (returnVal != 1) {
  603. console.info(WebsocketInterface("GetError", returnVal));
  604. }
  605. },
  606. //视频推送 回调
  607. Back_GetMcuVideo: function (returnVal: { Params: string; Message: any; }) {
  608. if (returnVal.Params == "0") {
  609. console.info(returnVal.Message);
  610. } else {
  611. console.info(returnVal.Message);
  612. }
  613. },
  614. //禁言
  615. ShutDownTalking: function (meetId: string, tel: string) {
  616. const param = meetId + "|" + tel;
  617. const modelJson = this.GetSendModel("ShutDownTalking", param);
  618. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  619. if (returnVal != 1) {
  620. console.info(WebsocketInterface("GetError", returnVal));
  621. }
  622. },
  623. //禁言 回调
  624. Back_ShutDownTalking: function (returnVal: { Params: string; Message: any; }) {
  625. if (returnVal.Params == "0") {
  626. console.info(returnVal.Message);
  627. } else {
  628. console.info(returnVal.Message);
  629. }
  630. },
  631. //踢人
  632. ConferGetOut: function (meetId: string, tel: string) {
  633. const param = meetId + "|" + tel;
  634. const modelJson = this.GetSendModel("ConferGetOut", param);
  635. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  636. if (returnVal != 1) {
  637. console.info(WebsocketInterface("GetError", returnVal));
  638. }
  639. },
  640. //踢人 回调
  641. Back_ConferGetOut: function (returnVal: { Params: string; Message: any; }) {
  642. if (returnVal.Params == "0") {
  643. console.info(returnVal.Message);
  644. } else {
  645. console.info(returnVal.Message);
  646. }
  647. },
  648. //禁言所有
  649. ShutDownAll: function (meetId: string) {
  650. const param = meetId + "|" + SystemAttr.CurrentUser.TelNum;
  651. const modelJson = this.GetSendModel("ShutDownAll", param);
  652. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  653. if (returnVal != 1) {
  654. ElMessage(WebsocketInterface("GetError", returnVal))
  655. }
  656. },
  657. //踢人 回调
  658. Back_ShutDownAll: function (returnVal: { Params: string; Message: any; }) {
  659. if (returnVal.Params == "0") {
  660. console.info(returnVal.Message);
  661. } else {
  662. console.info(returnVal.Message);
  663. }
  664. },
  665. //停止会议
  666. StopMeeting: function (meetId: any) {
  667. const modelJson = this.GetSendModel("StopMeeting", meetId);
  668. const returnVal = WebsocketInterface("Send", JSON.stringify(modelJson));
  669. //if (returnVal != 1) {
  670. // console.info(WebsocketInterface("GetError", returnVal));
  671. //}else{
  672. // closeWrVideo("video1");
  673. // closeWrVideo("video2");
  674. // closeWrVideo("video3");
  675. // closeWrVideo("video4");
  676. // closeWrVideo("video5");
  677. // closeWrVideo("video6");
  678. // closeWrVideo("video7");
  679. // closeWrVideo("video8");
  680. // closeWrVideo("video9");
  681. // $("video[name='meetvideo']").removeClass("play");
  682. //}
  683. },
  684. // 停止会议 回调
  685. Back_StopMeeting: function (returnVal: any) {
  686. console.log(returnVal);
  687. },
  688. //会议结束 回调
  689. Back_MeetingEnd: function (returnVal: any) {
  690. ElMessage('会议结束')
  691. console.log(returnVal);
  692. },
  693. //监听 回调
  694. Back_LinkTele: function (returnVal: { Params: string; Message: any; }) {
  695. if (returnVal.Params == "0") {
  696. console.info(returnVal.Message);
  697. } else {
  698. console.info(returnVal.Message);
  699. }
  700. },
  701. //分机注册状态回调
  702. Back_RegNumberState: function (returnVal: any) {
  703. console.log(returnVal);
  704. },
  705. //通话挂机事件
  706. Back_TalkingEnd: function (returnVal: { Params: string; Message: any; }) {
  707. console.info(returnVal.Message,'结束通话 挂机') //解析Message参数 有电话号码|电话唯一ID|录音文件名称
  708. useTelStatusStore.setCallInfo({
  709. telArea: "", // 电话区号
  710. telGuid: "", // 电话guid
  711. telIVR: "", // 电话IVR
  712. telType: "", //来电 外呼 转接
  713. fromTel: "", // 来电号码
  714. });
  715. useTelStatusStore.clearCallTime();
  716. // 关闭定时器
  717. removeTimer();
  718. // 设置电话状态
  719. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  720. },
  721. //振铃结束
  722. Back_UserRingEnd: function (returnVal: any) {
  723. const DialArray = returnVal.Message.split("|");
  724. const telNum = DialArray[0]; //来电号码
  725. const telGuid = DialArray[1]; //来电GUID
  726. const telVoiceName = DialArray[2]; // 录音文件名
  727. console.log(telNum,telGuid,telVoiceName)
  728. useTelStatusStore.setCallInfo({
  729. telArea: "", // 电话区号
  730. telGuid: "", // 电话guid
  731. telIVR: "", // 电话IVR
  732. telType: "", //来电 外呼 转接
  733. fromTel: "", // 来电号码
  734. });
  735. useTelStatusStore.clearCallTime();
  736. // 设置电话状态
  737. useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
  738. },
  739. //开始通话事件
  740. Back_BeginTalking: function (returnVal: { Params: string; Message: any; }) {
  741. console.info(returnVal.Message,'开始通话'); //解析Message参数 有电话号码|电话唯一ID|录音文件名称
  742. startTime();
  743. // 设置电话状态 通话中
  744. useTelStatusStore.setPhoneControlState(TelStates.onCall);
  745. },
  746. //获取视频流事件
  747. Back_RtmpVideoMeeting: function (returnVal: { Params: string; Rtsp: any; Tel: any; CallGuid: any; }) {
  748. console.info("Back_RtmpVideoMeeting");
  749. console.log(returnVal);
  750. if (returnVal.Params == "1") {
  751. return;
  752. }
  753. const vid = $("video[name='meetvideo']:not('.play')").eq(0);
  754. const vedioId = vid.prop("id");
  755. const _td = vid.closest("td");
  756. //var vedioId=$("#video1").prop("id");
  757. const uuid = parseInt(String(Math.random() * 100000)) + '' + new Date().getTime();
  758. registerWrVideo(uuid, vedioId, returnVal.Rtsp);
  759. //registerWrVideo(returnVal.CallGuid, vedioId, returnVal.Rtsp);
  760. _td.find("input[name='meet_num']").val(returnVal.Tel);
  761. _td.find("input[name='meet_guid']").val(returnVal.CallGuid);
  762. vid.addClass("play");
  763. },
  764. Back_EndVideoTalking: function (returnVal: { Params: string; Tel: string; }) {
  765. console.log(returnVal);
  766. if (returnVal.Params == "0") {
  767. const _td = $("input[name='meet_num'][value='" + returnVal.Tel + "']").closest("td");
  768. _td.find("input[name='meet_num']").val("");
  769. _td.find("input[name='meet_guid']").val("");
  770. _td.find("video").removeClass("play");
  771. closeWrVideo(_td.find("video").attr("id"));
  772. }
  773. },
  774. Back_StartVideoMeeting: function (returnVal: any) {
  775. console.log(returnVal);
  776. },
  777. Back_CloseRtmp: function (returnVal: any) {
  778. console.log(returnVal);
  779. },
  780. Back_VideoCall: function (returnVal: any) {
  781. console.log(returnVal);
  782. },
  783. Back_BeginVideoTalking: function (returnVal: any) {
  784. console.log(returnVal);
  785. },
  786. //排队信息推送
  787. Back_TelQuene: function (returnVal: any) {
  788. // Params: "0" 表示正在排队 Params: "1" 表示排队结束
  789. let telQuene = []; // 排队信息
  790. telQuene.push(returnVal);
  791. telQuene = telQuene.filter((item: any) => item.Params === '0');
  792. console.log(telQuene,'21');
  793. if (telQuene.length > 0) {
  794. ElMessage({
  795. message: `当前排队人数:${telQuene.length}`,
  796. type: 'info'
  797. });
  798. }
  799. },
  800. };