Files
xzlz_ksWeb/public/static/js/huaweiSDK/UMP_JS_SDK.js
13684185576 4d3ba657b2 考试
2025-07-16 19:49:47 +08:00

6421 lines
231 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(() => {
class UMPSDK {
constructor(config) {
this.appId = config.appId || "";
this.appSecret = config.appSecret || "";
this.url = config.url || ""; // 用于跨域代理
this.style = config.style || ""; // 来电卡片的style
this.callback = config.callback; // 非必填
this.logCallback = config.logCallback; // 非必填
this.accessToken = "";
this.mdcIP = config.mdcIP || "";
this.isdn = config.isdn || "";
this.isdnPwd = config.isdnPwd || "";
this.disAccount = config.disAccount || "";
// 卡片样式集合
this.cardStyle = {
voiceStyle: "",
videoStyle: "",
monitorStyle: "",
};
// 计时器集合,数组对象{cid: cid, timer: timer}
this.timer = {
voiceTimer: [],
videoTimer: [],
monitorTimer: [],
isCalling: false,
};
// yuv的player实例集合
this.player = {};
// 订阅群组isdn集合对象数组{cid: cid, groupId: groupId}
this.subscribGroupIsdn = [];
// 分发对象的集合对象
// 结示例{cid-xxx: [{isdn: isdn, isGroup: isGroup}]}
this.dispatchArr = {};
this.voice = {
style: "",
}; // 点呼业务
this.video = {}; // 视频呼叫
this.windowShare = {}; // 共享桌面
this.monitor = {}; // 视频监控
this.group = {
style: "",
}; // 群组业务
this.msg = {
fileName: "",
authorizationHeader: "",
//
msgid: "",
}; // 短彩信业务
this.metting = {
// 会议业务
Attendees: "", // 主动入会的会议成员信息list数组
isJoin: false, // 主动结束和被动入会离开状态锚点
audience: false, // 会议静音状态锚点
unJoinMetting: [], // 呼叫失败人员集合
userInfoList: [], // 查询用户设备能力
layoutStatus: false, // 分屏弹窗状态锚点
macStatus: false,
layoutType: [
{
id: 0,
icon: "ump-screen-layout-1",
name: "1屏",
type: "CP_1_1",
number: 1,
pic: 1,
},
{
id: 1,
icon: "ump-screen-layout-2",
name: "2屏",
type: "CP_2_1",
number: 2,
pic: 2,
},
{
id: 2,
icon: "ump-screen-layout-3",
name: "3屏",
type: "CP_3_4",
number: 3,
pic: 16,
},
{
id: 3,
icon: "ump-screen-layout-4",
name: "4屏",
type: "CP_4_1",
number: 4,
pic: 4,
},
{
id: 4,
icon: "ump-screen-layout-5",
name: "5屏",
type: "CP_5_1",
number: 5,
pic: 5,
},
{
id: 5,
icon: "ump-screen-layout-6",
name: "6屏",
type: "CP_6_1",
number: 6,
pic: 9,
},
{
id: 6,
icon: "ump-screen-layout-7-1",
name: "7屏",
type: "CP_7_1",
number: 7,
pic: 16,
},
{
id: 7,
icon: "ump-screen-layout-7-2",
name: "7屏",
type: "CP_7_2",
number: 7,
pic: 16,
},
{
id: 8,
icon: "ump-screen-layout-8",
name: "8屏",
type: "CP_8_1",
number: 8,
pic: 16,
},
{
id: 9,
icon: "ump-screen-layout-9",
name: "9屏",
type: "CP_9_1",
number: 9,
pic: 9,
},
{
id: 10,
icon: "ump-screen-layout-10-1",
name: "10屏",
type: "CP_10_1",
number: 10,
pic: 16,
},
{
id: 11,
icon: "ump-screen-layout-10-2",
name: "10屏",
type: "CP_10_5",
number: 10,
pic: 16,
},
{
id: 12,
icon: "ump-screen-layout-13",
name: "13屏",
type: "CP_13_5",
number: 13,
pic: 16,
},
{
id: 13,
icon: "ump-screen-layout-16",
name: "16屏",
type: "CP_16_1",
number: 16,
pic: 16,
},
], // 分屏模式
choseLayoutType: "CP_4_1", // 存储用户选择的画面多屏布局模式,默认四屏
memberList: [], // 多画面广播成员列表,
girdNum: [1, 2, 3, 4], // 会场布局网格数量,
gridClassName: ["grid0", "grid1", "grid2", "grid3"], // 布局的网格类名集合,
setGridPerson: [], // 页面渲染的选中布局的入会人员
setPageGridPerson: [], // 存储点击保存的选中布局的入会人员
style: "",
cid: "", // 会议计时器cid
}; // 会议业务
this.gis = {}; // gis订阅
this.subscribe = {}; // 订阅用户
this.department = {}; // 部门
this.icp = {}; // 返回上层实例对象
this.getTokenIntervalTimer = null; // 获取token计时器
this.getTokenTime = 0; // 获取token的时间
this.isUMPUserOut = false; // 用户是否被踢出
this.wedcSDK = "";
this.Emergency = []; //紧急组呼
this.isUMPUserOutTimer = null; // 用户是否被踢出计时器
this.downloadUrl =
"http://171.221.254.50:8009/mspversion/";
this.init();
}
// 初始化
async init() {
// 显示版本号
var sdkVersion = "022.650.191";
// document.getElementById("ump-demo-version").innerHTML ="版本号:" + sdkVersion;
if (!this.logCallback) {
this.logCallback = (info) => {
console.log(info);
};
}
console.log(909090);
this.initEnum();
this.initICPSDK();
// 本地缓存通话记录
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory")) || [];
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
// 本地缓存会议记录
let meetingHistory =
JSON.parse(localStorage.getItem("meetingHistory")) || [];
localStorage.setItem("meetingHistory", JSON.stringify(meetingHistory));
}
// 初始化icpsdk
initICPSDK() {
window.onfocus = () => {
clearTimeout(this.isUMPUserOutTimer);
this.isUMPUserOutTimer = setTimeout(() => {
console.log("页面聚焦", this.isUMPUserOut, this);
if (this.isUMPUserOut) {
this.isUMPUserOut = false;
this.initICPSDK();
}
}, 500);
};
let config = {
serverWSPort: "8002",
serverAddress: "171.221.254.50",
serverHttpPort: "8002",
debugMode: "false",
mode: "wssflow",
mediaType: "2",
ringFlag: "0",
ssl_enable: true,
videoConfLocalWindow: false,
};
config["sdkStatusNotify"] = (data) => {
console.log(data, "+++++++++++++++++++++++++++++");
if (data.status === "0") {
this.modifyMdcIp();
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"🚀等待udc登录初始化icpsdk成功" + JSON.stringify(data)
)
);
}
} else if (data.status === "1") {
// if (this.callback) {
// this.callback('❗初始化icpsdk异常')
// }
this.showMessage(
"❗通信插件异常请点击【下载】后进行【解压安装】确认右下角MSP🌱点亮",
"error",
"showHrefID",
"targetID"
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"❗初始化icpsdk异常" + JSON.stringify(data)
)
);
}
} else if (data.status === "2") {
// if (this.callback) {
// this.callback('❗初始化icpsdk异常')
// }
this.showMessage(
"❗通信插件异常请点击【下载】后进行【解压安装】确认右下角MSP🌱点亮",
"error",
"showHrefID",
"targetID"
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"❗初始化icpsdk异常" + JSON.stringify(data)
)
);
}
} else if (data.status === "3") {
// if (this.callback) {
// this.callback('❗初始化icpsdk异常')
// }
this.showMessage(
"❗通信插件异常请点击【下载】后进行【解压安装】确认右下角MSP🌱点亮",
"error",
"showHrefID",
"targetID"
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"❗初始化icpsdk异常" + JSON.stringify(data)
)
);
}
} else {
// if (this.callback) {
// this.callback('❗初始化icpsdk异常')
// }
this.showMessage(
"❗通信插件异常请点击【下载】后进行【解压安装】确认右下角MSP🌱点亮",
"error",
"showHrefID",
"targetID"
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"❗初始化icpsdk异常" + JSON.stringify(data)
)
);
}
}
};
this.wedcSDK = new ICPSDK(config);
window.ICPSDK = this.wedcSDK;
this.initSDKEvent();
}
// 修改mdcip
modifyMdcIp() {
cloudICP.dispatch.webSocket.getLocalIp({
callback: (data) => {
let currentIp = data.mdcip;
console.log(
this.wedcSDK.config.mspVersion,
data.mspVersion,
"*****************"
);
if (this.wedcSDK.config.mspVersion == data.mspVersion) {
this.removeMsgDom();
} else {
this.downloadUrl =
this.downloadUrl + data.mspVersion + "/eSDK_ICP_MSP.zip";
this.showMessage(
"❗通信插件异常请点击【下载】后进行【解压安装】确认右下角MSP🌱点亮",
"error",
"showHrefID",
"targetID"
);
}
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"当前地址:" + currentIp + "服务器地址:" + this.mdcIP
)
);
}
if (this.mdcIP && this.mdcIP !== currentIp) {
cloudICP.dispatch.webSocket.ModifyMdcIp({
mdcip: this.mdcIP,
callback: (data) => {
if (data.mdc_result === 0) {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("🚀修改mdcip成功初始化成功")
);
}
} else {
// if (this.callback) {
// this.callback('❗修改mdcip失败')
// }
this.showMessage(
"修改mdcip失败请重新安装插件或联系管理员!!!",
"error",
"showHrefID"
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("❗修改mdcip失败初始化失败")
);
}
}
},
});
} else {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("🚀mdcip无需修改初始化成功")
);
}
}
// 根据传入disAccount指定参数判断是否调用迪艾斯查询账户密码接口
if (this.disAccount && this.disAccount.length > 0) {
fetch("/oauth/v2/getUserInfoByDs", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json, text/plain, */*",
},
body: JSON.stringify({
dsAccount: this.disAccount,
}),
})
.then((response) => response.json())
.then((data) => {
if (data.data) {
this.showMessage("账号密码查询成功!", "success");
console.log("迪艾斯账号密码查询成功:", data);
this.isdn = data.data.isdn;
this.isdnPwd = data.data.password;
this.loginUdc();
}
})
.catch((error) => {
console.error("迪艾斯账号密码查询失败:", error);
this.showMessage("账号密码查询失败!", "error");
});
} else {
this.loginUdc();
}
},
});
}
// 登录udc
loginUdc() {
console.log(
this.isdn,
this.isdnPwd,
"查看迪艾斯账户密码是否赋值成功-unifiedLogin()"
);
cloudICP.dispatch.auth.unifiedLogin({
user: this.isdn,
password: this.isdnPwd,
force: "true",
callback: (rsp) => {
if (rsp.rsp === "0") {
this.initVoiceHandler();
this.initVideoHandler();
this.initWindowShare();
this.initMonitorHandler();
this.initGroupHandler();
this.initMessageHandler();
this.initMetingHandler();
this.initGis();
this.initSubscribeUserStatus();
this.initQueryGroup();
this.initDepartment();
this.initIcp();
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("🚀登录udc成功" + JSON.stringify(rsp))
);
this.queryingTheConferenceStatus();
// this.getUserInfo()
}
if (this.callback) {
this.callback(rsp);
}
} else {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("❗登录udc失败" + JSON.stringify(rsp))
);
}
if (this.callback) {
this.callback(rsp);
}
}
},
});
}
//登出
logout() {
cloudICP.dispatch.auth.unifiedLogout({
callback: (data) => {
if (data.rsp == 0) {
if (this.logCallback) {
this.wedcSDK = null;
window.ICPSDK = null;
loadICPSDKScript();
this.logCallback(
UMPSDK.logInfoFormat("🚀退出udc成功" + JSON.stringify(data))
);
this.showMessage("🚀退出udc成功", "success");
}
} else {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("🚀退出登录udc失败" + JSON.stringify(data))
);
this.showMessage("🚀退出udc失败", "error");
}
}
},
});
}
// ==================================工具函数==================================
/**
* 执行注册事件
* @param {Object} obj {eventType: string, eventName: string, callback: function}
*/
static sdkRegister(obj) {
const findIndex = UMPSDK.eventList.findIndex(
(ite) =>
ite.eventType === obj.eventType && ite.eventName === obj.eventName
);
if (findIndex !== -1) {
UMPSDK.splice(findIndex, 1, obj);
} else {
UMPSDK.eventList.push(obj);
}
}
sdkRegisterHandler(eventType, eventName, data) {
const findItem = UMPSDK.eventList.find(
(ite) => ite.eventType === eventType && ite.eventName === eventName
);
if (findItem && typeof findItem.callback === "function") {
findItem.callback(data);
}
}
// 处理时间格式 00:00:00
static timeHandler(time) {
if (time || time === 0) {
const hours = Math.floor(time / (60 * 60));
const minutes = Math.floor((time % (60 * 60)) / 60);
const remainingSeconds = time % 60;
return (
(hours < 10 ? "0" + hours : hours) +
":" +
(minutes < 10 ? "0" + minutes : minutes) +
":" +
(remainingSeconds < 10 ? "0" + remainingSeconds : remainingSeconds)
);
} else {
return "";
}
}
// 格式化时间 YYYY=年2019 YY=年19 MM=月 DD=天 hh:时 mm:分 ss:秒
static dateFormat(type, val) {
const date = val
? new Date(/^[0-9]*$/g.test(val) ? Number(val) : val)
: new Date();
const YYYY = String(date.getFullYear());
const YY = String(date.getFullYear()).substring(2);
const m = date.getMonth() + 1;
const MM = m > 9 ? String(m) : "0" + m;
const d = date.getDate();
const DD = d > 9 ? String(d) : "0" + d;
const h = date.getHours();
const hh = h > 9 ? String(h) : "0" + h;
const $m = date.getMinutes();
const mm = $m > 9 ? String($m) : "0" + $m;
const s = date.getSeconds();
const ss = s > 9 ? String(s) : "0" + s;
const obj = { YYYY, YY, MM, DD, hh, mm, ss };
return type.replace(
/(YYYY)|(MM)|(DD)|(hh)|(mm)|(ss)/g,
(key) => obj[key]
);
}
// 格式化日志信息
static logInfoFormat(text) {
return `[${UMPSDK.dateFormat("YYYY-MM-DD hh:mm:ss")}]${text}`;
}
//查询用户信息
getUserInfo() {
let param = {
limit: "5000",
callback: (data) => {
if (data.rsp === "0") {
this.metting.userInfoList = [...data.list];
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询用户信息" + JSON.stringify(data))
);
}
} else {
this.logCallback(
UMPSDK.logInfoFormat("查询用户信息" + JSON.stringify(data))
);
}
},
};
cloudICP.dispatch.query.queryUserListV1(param);
}
// ==================================工具函数==================================
// ===================================枚举=====================================
initEnum() {
this.CommunicateStatusEnum = {
"OnDialOutProceeding-2005": "连接中",
"OnDialOutProceeding-3004": "连接中",
"OnDialOutRinging-2006": "振铃中",
"OnDialOutRinging-3005": "振铃中",
"OnCallConnect-2003": "通话中",
"OnCallConnect-2007": "通话中",
"OnDialOutFailure-2013": "被叫忙",
"OnDialOutFailure-2016": "没有权限外呼",
"OnDialOutFailure-2017": "被叫没有应答,超时",
"OnDialOutFailure-2018": "被叫号码不存在",
"OnDialOutFailure-2024": "被叫号码未在线或被叫号码挂断呼叫",
"OnDialOutFailure-2049": "对端不支持该操作",
"OnDialOutFailure-2052": "被叫号码没有呼入权限",
"OnDialOutFailure-2023": "对端不支持所需的音频格式",
"OnDialOutFailure-2033": "远程断电",
"OnDialOutFailure-2048": "本端不支持该操作",
"OnDialOutFailure-3013": "对端忙",
"OnDialOutFailure-3014": "没有视频点呼权限",
"OnDialOutFailure-3015": "对端超时",
"OnDialOutFailure-3016": "对端号码不存在",
"OnDialOutFailure-3021": "对端未在线或被对端挂断呼叫",
"OnDialOutFailure-3044": "本端不支持该操作",
"OnDialOutFailure-3045":
"对端不支持该操作,可能是没有权限,或者是不支持该分辨率",
"OnDialOutFailure-3048": "对端没有权限",
"OnDialInRinging-2002": "语音呼叫",
"OnDialInRinging-3002": "视频呼叫",
"OnConfDialInRinging-3002": "视频会议",
"OnDialInRinging-3011": "视频分发",
"OnSendDispSMSResult-1": "业务不支持,如对方不支持加密短信或无权限等",
"OnSendDispSMSResult-2": "VPN权限非法",
"OnSendDispSMSResult-3": "对方号码不存在",
"OnSendDispSMSResult-5": "号码被锁定",
"OnSendDispMMSResult-1": "业务不支持,如对方不支持加密短信或无权限等",
"OnSendDispMMSResult-2": "VPN权限非法",
"OnSendDispMMSResult-3": "对方号码不存在",
"OnSendDispMMSResult-5": "号码被锁定",
"OnSendDispMMSResult-6": "无效msgid",
"OnVideoDispatchFailure-40097": "服务器端返回错误, 操作被调度机拒绝",
"OnVideoDispatchFailure-40106": "已经存在,重复分发",
"OnVideoDispatchFailure-40107": "该用户不存在",
"OnVideoDispatchFailure-40108": "该用户没有注册",
"OnVideoDispatchFailure-40109": "定时器调度失败",
"OnVideoDispatchFailure-40110": "调度机转接失败",
"OnVideoDispatchFailure-40117": "版本不匹配",
"OnVideoDispatchFailure-40121": "目标正在通话中,拒绝调度台抢话",
"OnVideoDispatchFailure-40122": "该视频源转发的数量已经超过系统限制",
"OnVideoDispatchFailure-40124": "版本不支持",
"OnVideoDispatchFailure-40126": "号码错误",
"OnVideoDispatchFailure-40134": "本地IP地址无效",
"OnVideoDispatchFailure-40151": "视频分发或转接失败vpn不支持",
"OnVideoDispatchFailure-40154": "转码繁忙,请尝试不转码发送",
"OnVideoDispatchFailure-40155": "调度机取消转接未允许",
"OnVideoDispatchFailure-40156": "调度机已完成取消转接",
"OnVideoDispatchFailure-40157": "调度机取消转接失败",
"OnVideoDispatchFailure-40158": "无权限",
"OnVideoDispatchFailure-40159": "用户不支持",
"OnVideoDispatchFailure-40164": "会话存在",
"OnVideoDispatchFailure-40166": "操作不被接受,因为正在请求保持呼叫中",
"OnVideoDispatchStatusNotify-4021": "connection",
"OnVideoDispatchStatusNotify-4022": "calling",
"OnVideoDispatchStatusNotify-4023": "holdup",
};
}
// ===================================枚举=====================================
// ==================================公共组件==================================
/**
* 消息提示
* @param text 提示内容
* @param type message的类型可选success、warning、error
*/
showMessage(text, type = "success", showHrefID, targetID) {
const tipDomNum = $(".ump-sdk-message").length || 0;
const targetDom = $(`#ump-sdk-message-${targetID}`);
if (targetDom.length && targetID) return;
const tipDom =
$(`<div class="ump-sdk ump-sdk-message" id="ump-sdk-message-${targetID}" style="top: ${
(tipDomNum + 1) * 40
}px">
<div class="ump-sdk-message-text-warpper">
<div class="ump-sdk-message-img-${type}"></div>
<div>${text}</div>
</div>
<div id="ump-sdk-message-${showHrefID}" class="ump-sdk-message-erds">MSP下载链接<a target="_blank" href=${
this.downloadUrl
}>点击下载MSP</a></div>
</div>`);
$("body").append(tipDom);
if (showHrefID && targetID) return;
setTimeout(() => {
tipDom.remove();
const tipDomArr = Array.from(
document.getElementsByClassName("ump-sdk-message")
);
tipDomArr.forEach((ite, idx) => {
ite.style.top = `${(idx + 1) * 40}px`;
});
}, 3000);
}
removeMsgDom() {
setTimeout(() => {
const targetDom = document.getElementById("ump-sdk-message-targetID");
if (targetDom) {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("🚗🚗🚗执行移除-检测版本匹配弹窗")
);
}
console.log(
targetDom,
"=============检测版本匹配弹窗移除是否执行=========(获取节点成功)"
);
targetDom.remove();
} else {
console.log(
targetDom,
"=============检测版本匹配弹窗移除是否执行=========(获取节点失败)"
);
}
}, 400);
}
createYuvPlayer(data, el) {
const wsUrl = data["value"]["wssUrl"];
const playerConfig = {
wsUrl,
el, //播放器挂载的 DOM
sharpType: {
width: 800,
height: 450,
},
cid: data["value"]["cid"],
};
try{
msp_player = new MSP_PLAYER(playerConfig);
} catch(error) {
console.log("msp_player",msp_player);
}
return msp_player;
}
// 拖动函数
draggable(elementId) {
const draggableElement = document.getElementById(elementId);
let isDragging = false;
let startX = 0;
let startY = 0;
draggableElement.addEventListener("mousedown", function (event) {
if (isDraggingEnabled()) {
isDragging = true;
startX = event.clientX - draggableElement.offsetLeft;
startY = event.clientY - draggableElement.offsetTop;
}
});
document.addEventListener("mousemove", function (event) {
if (isDragging) {
var newX = event.clientX - startX;
var newY = event.clientY - startY;
draggableElement.style.left = newX + "px";
draggableElement.style.top = newY + "px";
}
});
document.addEventListener("mouseup", function () {
isDragging = false;
});
function isDraggingEnabled() {
// 添加你的条件判断逻辑来决定是否允许拖动
// 返回 true 表示允许拖动,返回 false 表示禁用拖动
return true;
}
return {
disableDragging: function () {
isDraggingEnabled = function () {
return false;
};
draggableElement.style = ""; // 移除内联样式
},
enableDragging: function () {
isDraggingEnabled = function () {
return true;
};
},
};
}
// ==================================公共组件==================================
// 清除timer
clearTimerHandler(type, cid) {
const findItem = this.timer[type].find((ite) => ite.cid === cid);
if (findItem) {
clearInterval(findItem.timer);
}
}
// 注册事件
initSDKEvent() {
let that = this;
// ===========================MSPNotify媒体状态事件==================================
// 开始共享桌面结果通知
cloudICP.dispatch.event.register({
eventType: "MSPNotify",
eventName: "OnStartWindowShare",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("MSPNotify", "OnStartWindowShare", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"开始共享桌面结果通知OnStartWindowShare" + JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
this.showMessage("开始共享桌面成功✔✔✔", "successs");
} else if (data.rsp === "1") {
this.showMessage(
"开始共享桌面失败-未检测到本地摄像头❌❌❌",
"error"
);
} else if (data.rsp === "3") {
this.showMessage("开始共享桌面失败-会话cid 不存在❌❌❌", "error");
} else if (data.rsp === "4") {
this.showMessage("开始共享桌面失败-窗口不可见❌❌❌", "error");
} else if (data.rsp === "6") {
this.showMessage(
"开始共享桌面失败-找不到指定的共享窗口名❌❌❌",
"error"
);
}
},
});
// 停止共享桌面结果通知620版本未提供
// cloudICP.dispatch.event.register({
// eventType: 'MSPNotify',
// eventName: 'OnStopWindowShare',
// callback: (data)=>{
// // UMPSDK触发注册事件
// this.sdkRegisterHandler('VoiceNotify', 'OnUserStatusNotify', data)
// if (this.logCallback) {
// this.logCallback(
// UMPSDK.logInfoFormat('停止共享桌面结果通知OnStopWindowShare' + JSON.stringify(data))
// )
// }
// }
// })
// ===========================VoiceNotify语音状态事件==================================
// 用户状态通知
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnUserStatusNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnUserStatusNotify", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"用户状态通知OnUserStatusNotify" + JSON.stringify(data)
)
);
}
},
});
// 注册外呼呼出事件
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnDialOutProceeding",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnDialOutProceeding", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"呼出事件OnDialOutProceeding" + JSON.stringify(data)
)
);
}
// 语音点呼外呼
if (data.rsp === "2005" && data.value.calltype === "voice") {
this.openVoiceDialog(data, this.cardStyle.voiceStyle);
// 向本地添加呼出记录
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
data.value.startTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm:ss");
data.value.status = true;
data.value.callState = 0; // 呼出
phoneHistory.push(data.value);
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
}
// 视频点呼外呼
if (data.rsp === "3004" && data.value.calltype === "video") {
this.openVideoDialog(data, this.cardStyle.videoStyle);
}
// 监控发起
if (data.rsp === "3004" && data.value.calltype === "monitor") {
this.openMonitorDialog(data, this.cardStyle.monitorStyle);
}
},
});
// 注册呼出失败事件
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnDialOutFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnDialOutFailure", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"呼出失败事件OnDialOutFailure" + JSON.stringify(data)
)
);
}
// 语音呼出失败
if (data.value.calltype === "voice") {
this.openVoiceDialog(data);
setTimeout(() => {
const voiceDom = $(`#ump-sdk-voice-out-dialog-${data.value.cid}`);
this.timer.isCalling = false;
voiceDom && voiceDom.remove();
}, 10000);
// 呼出失败,修改通话记录状态,并记录结束时间
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
phoneHistory.map((item) => {
if (item.cid === data.value.cid) {
item.endTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
item.status = false;
}
});
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
}
// 视频呼出失败
if (data.value.calltype === "video") {
this.openVideoDialog(data);
setTimeout(() => {
const videoDom = $(`#ump-sdk-video-out-dialog-${data.value.cid}`);
this.timer.isCalling = false;
videoDom && videoDom.remove();
}, 10000);
}
// 监控呼出失败
if (data.value.calltype === "monitor") {
this.openMonitorDialog(data);
}
},
});
// 注册呼出回铃事件
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnDialOutRinging",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnDialOutRinging", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"呼出振铃事件OnDialOutRinging" + JSON.stringify(data)
)
);
}
// 语音点呼呼出振铃
if (data.rsp === "2006" && data.value.calltype === "voice") {
this.openVoiceDialog(data, this.voice.style);
}
// 视频点呼呼出振铃
if (data.rsp === "3005" && data.value.calltype === "video") {
this.openVideoDialog(data, this.voice.style);
}
// 监控呼出振铃
if (data.rsp === "3005" && data.value.calltype === "monitor") {
this.openMonitorDialog(data);
}
},
});
// 注册呼入振铃事件
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnDialInRinging",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnDialInRinging", data);
// 向本地添加呼入记录
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
data.value.startTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
data.value.status = true;
data.value.callState = 1; // 呼入
phoneHistory.push(data.value);
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"呼入振铃事件OnDialInRinging" + JSON.stringify(data)
)
);
}
if (this.timer.isCalling) {
const { cid, calltype } = data.value;
switch (calltype) {
case "voice":
cloudICP.dispatch.voice.reject({
cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"拒接语音点呼" + JSON.stringify(rsp)
)
);
// 向本地添加拒听呼入记录
let phoneHistory = JSON.parse(
localStorage.getItem("phoneHistory")
);
phoneHistory.map((item) => {
if (item.cid === cid) {
item.endTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
item.status = false;
}
});
localStorage.setItem(
"phoneHistory",
JSON.stringify(phoneHistory)
);
}
},
});
break;
case "video":
cloudICP.dispatch.video.reject({
cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"拒接视频点呼" + JSON.stringify(rsp)
)
);
}
},
});
break;
case "dispatch":
cloudICP.dispatch.video.reject({
cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"拒接视频分发" + JSON.stringify(rsp)
)
);
}
},
});
break;
}
return;
}
this.callerCard(data);
},
});
// 注册通话事件
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnCallConnect",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnCallConnect", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"建立连接事件OnCallConnect" + JSON.stringify(data)
)
);
}
// 语音呼入或呼出
if (
["2003", "2007"].includes(data.rsp) &&
data.value.calltype === "voice"
) {
this.openVoiceDialog(data, this.voice.style);
}
// 视频呼叫呼入或者呼出
if (
["3003", "3006"].includes(data.rsp) &&
data.value.calltype === "video"
) {
this.openVideoDialog(data, this.cardStyle.videoStyle);
}
// 监控呼入或呼出连接
if (
["3003", "3006"].includes(data.rsp) &&
["monitor", "dispatch"].includes(data.value.calltype)
) {
this.openMonitorDialog(data, this.cardStyle.monitorStyle);
}
},
});
// 注册通话挂机事件
cloudICP.dispatch.event.register({
eventType: "VoiceNotify",
eventName: "OnCallRelease",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("VoiceNotify", "OnCallRelease", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"通话挂机OnCallRelease" + JSON.stringify(data)
)
);
}
this.timer.isCalling = false;
const callerCardDom = $(`#ump-sdk-caller-card-${data.value.cid}`);
callerCardDom && callerCardDom.remove();
// 语音非本端挂机
if (data.rsp === "2009" && data.value.calltype === "voice") {
this.clearTimerHandler("voiceTimer", data.value.cid);
const voiceDom = $(`#ump-sdk-voice-out-dialog-${data.value.cid}`);
voiceDom && voiceDom.remove();
// 语音挂机,修改通话记录状态,并记录结束时间
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
phoneHistory.map((item) => {
if (item.cid === data.value.cid) {
item.endTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
item.status = true;
}
});
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
}
if (data.rsp === "2010" && data.value.calltype === "voice") {
// 语音挂机,修改通话记录状态,并记录结束时间
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
phoneHistory.map((item) => {
if (item.cid === data.value.cid) {
item.endTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
item.status = true;
}
});
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
}
if (data.rsp === "2011" && data.value.calltype === "voice") {
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
phoneHistory.map((item) => {
if (item.cid === data.value.cid) {
item.endTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
item.status = false;
}
});
localStorage.setItem("phoneHistory", JSON.stringify(phoneHistory));
}
// 视频呼叫非本端挂机
if (data.rsp === "3008" && data.value.calltype === "video") {
const videoOutDom = $(
`#ump-sdk-video-out-dialog-${data.value.cid}`
);
videoOutDom && videoOutDom.remove();
this.clearTimerHandler("videoTimer", data.value.cid);
const videoDom = $(`#ump-sdk-video-box-${data.value.cid}`);
videoDom && videoDom.remove();
if (this.player[`player${data.value.cid}`]) {
this.player[`player${data.value.cid}`].stop();
this.player[`player${data.value.cid}`] = null;
delete this.player[`player${data.value.cid}`];
}
}
// 视频监控非本端挂机
if (
data.rsp === "3008" &&
["dispatch", "monitor"].includes(data.value.calltype)
) {
const videoOutDom = $(
`#ump-sdk-video-out-dialog-${data.value.cid}`
);
videoOutDom && videoOutDom.remove();
this.clearTimerHandler("monitorTimer", data.value.cid);
delete this.dispatchArr[data.value.cid];
const monitorDom = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid}`
);
const dispatchDom = $(
`#ump-sdk-monitor-out-dialog-dispatch-dialog-mask-${data.value.cid}`
);
monitorDom && monitorDom.remove();
dispatchDom && dispatchDom.remove();
if (this.player[`player${data.value.cid}`]) {
this.player[`player${data.value.cid}`].stop();
this.player[`player${data.value.cid}`] = null;
delete this.player[`player${data.value.cid}`];
}
}
},
});
// ===========================VoiceNotify语音状态事件==================================
// ===========================VideoNotify视频分发相关==================================
// 视频分发成功事件
cloudICP.dispatch.event.register({
eventType: "VideoNotify",
eventName: "OnVideoDispatchSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"VideoNotify",
"OnVideoDispatchSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频分发成功事件OnVideoDispatchSuccess" + JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
this.showMessage("视频分发成功", "success");
}
},
});
// 视频分发成功事件
cloudICP.dispatch.event.register({
eventType: "VideoNotify",
eventName: "OnVideoDispatchFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"VideoNotify",
"OnVideoDispatchFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频分发失败事件OnVideoDispatchFailure" + JSON.stringify(data)
)
);
}
const des =
this.CommunicateStatusEnum[`OnVideoDispatchFailure${data.rsp}`];
this.showMessage("视频分发失败:" + des, "error");
},
});
// 视频取消分发成功事件
cloudICP.dispatch.event.register({
eventType: "VideoNotify",
eventName: "OnCancelVideoDispatchSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"VideoNotify",
"OnCancelVideoDispatchSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频取消分发成功事件OnVideoDispatchSuccess" +
JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
this.showMessage("视频取消分发成功", "success");
}
},
});
// 视频取消分发失败事件
cloudICP.dispatch.event.register({
eventType: "VideoNotify",
eventName: "OnCancelVideoDispatchFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"VideoNotify",
"OnCancelVideoDispatchFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频取消分发失败事件OnVideoDispatchFailure" +
JSON.stringify(data)
)
);
}
const des =
this.CommunicateStatusEnum[`OnVideoDispatchFailure${data.rsp}`];
this.showMessage("视频取消分发失败:" + des, "error");
},
});
// 视频分发状态
cloudICP.dispatch.event.register({
eventType: "VideoNotify",
eventName: "OnVideoDispatchStatusNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"VideoNotify",
"OnVideoDispatchStatusNotify",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频分发状态OnVideoDispatchStatusNotify" + JSON.stringify(data)
)
);
}
const status =
this.CommunicateStatusEnum[
`OnVideoDispatchStatusNotify-${data.rsp}`
];
this.changeDispatchLiDomStatus(data, status);
},
});
// ===========================VideoNotify视频分发相关==================================
//===============================MsNotify短信相关======================================
// 短信发送通知
cloudICP.dispatch.event.register({
eventType: "MsNotify",
eventName: "OnSendDispSMSResult",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("MsNotify", "OnSendDispSMSResult", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"短信发送通知OnSendDispSMSResult" + JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
this.showMessage("短信发送成功", "success");
} else {
const des =
this.CommunicateStatusEnum[`OnSendDispSMSResult-${data.rsp}`];
if (des) {
this.showMessage("短信发送失败:" + des, "error");
} else {
this.showMessage("短信发送失败", "error");
}
}
},
});
//短信接收
cloudICP.dispatch.event.register({
eventType: "MsNotify",
eventName: "OnRecvDispSMSNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("MsNotify", "OnRecvDispSMSNotify", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"短信接收通知OnRecvDispSMSNotify" + JSON.stringify(data)
)
);
}
},
});
// 彩信发送通知
cloudICP.dispatch.event.register({
eventType: "MsNotify",
eventName: "OnSendDispMMSResult",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("MsNotify", "OnSendDispMMSResult", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"彩信发送通知OnSendDispMMSResult" + JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
this.showMessage("彩信发送成功", "success");
} else {
const des =
this.CommunicateStatusEnum[`OnSendDispMMSResult-${data.rsp}`];
if (des) {
this.showMessage("彩信发送失败:" + des, "error");
} else {
this.showMessage("彩信发送失败", "error");
}
}
},
});
//彩信接收通知
cloudICP.dispatch.event.register({
eventType: "MsNotify",
eventName: "OnRecvDispMMSNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("MsNotify", "OnRecvDispMMSNotify", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"彩信接收通知OnRecvDispMMSNotify" + JSON.stringify(data)
)
);
}
},
});
//===============================MsNotify短信相关======================================
//============================GroupCallNotify群组相关==================================
// 注册组呼开始事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGroupCallPTTStart",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGroupCallPTTStart",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼开始OnTalkingGroupCallPTTStart" + JSON.stringify(data)
)
);
}
this.Emergency.push("普通组呼");
this.openGroupDialog(data, this.group.style);
this.subscribGroupIsdn.forEach((ite) => {
if (ite.groupId === data.value.grpid) {
ite.cid = data.value.cid;
}
});
},
});
// 注册紧急组呼开始事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGourpEmergencyCallStart",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGourpEmergencyCallStart",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"紧急组呼开始OnTalkingGourpEmergencyCallStart" +
JSON.stringify(data)
)
);
}
this.Emergency.push("紧急组呼");
this.openGroupDialog(data, this.group.style);
this.subscribGroupIsdn.forEach((ite) => {
if (ite.groupId === data.value.grpid) {
ite.cid = data.value.cid;
}
});
},
});
// 注册组呼发起失败事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGroupCallFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGroupCallFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼发起失败OnTalkingGroupCallFailure" + JSON.stringify(data)
)
);
}
this.showMessage("组呼发起失败", "error");
},
});
// 注册组呼抢权或放权失败事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGroupCallPTTFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGroupCallPTTFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼抢权或放权失败OnTalkingGroupCallPTTFailure" +
JSON.stringify(data)
)
);
}
this.showMessage("组呼抢权或放权失败", "error");
},
});
// 注册组呼权限更新事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGroupCallPTTNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGroupCallPTTNotify",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼权限更新OnTalkingGroupCallPTTNotify" + JSON.stringify(data)
)
);
}
this.openGroupDialog(data, this.group.style);
},
});
// 注册组呼资源通知
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnGroupCallStatusNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnGroupCallStatusNotify",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼资源通知OnGroupCallStatusNotify" + JSON.stringify(data)
)
);
}
},
});
// 注册组呼空闲事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGroupCallPTTIdle",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGroupCallPTTIdle",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼空闲OnTalkingGroupCallPTTIdle" + JSON.stringify(data)
)
);
}
this.Emergency = [];
this.openGroupDialog(data, this.group.style);
},
});
// 注册组呼抢权或放权成功事件
cloudICP.dispatch.event.register({
eventType: "GroupCallNotify",
eventName: "OnTalkingGroupCallPTTSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"GroupCallNotify",
"OnTalkingGroupCallPTTSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"组呼抢权或放权成功OnTalkingGroupCallPTTSuccess" +
JSON.stringify(data)
)
);
}
this.openGroupDialog(data, this.group.style);
},
});
//============================PhoneConfNotify会议相关==================================
// 增加与会成员成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnAddConfMembersSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnAddConfMembersSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"增加与会成员成功OnAddConfMembersSuccess" + JSON.stringify(data)
)
);
that.showMessage(
"增加与会成员成功,请等待用户接听📞📞📞",
"success"
);
}
},
});
// 增加与会成员失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnAddConfMembersFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnAddConfMembersFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"增加与会成员失败OnAddConfMembersFailure" + JSON.stringify(data)
)
);
that.showMessage(
`❌❌❌增加与会成员失败,错误码:${data.rsp}`,
"error"
);
}
},
});
// 创建音视频会议成功通知
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnCreateConfSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnCreateConfSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"音视频会议创建成功OnCreateConfSuccess" + JSON.stringify(data)
)
);
}
this.metting.infoMation = data;
},
});
// 创建音视频会议失败通知
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnCreateConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnCreateConfFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"音视频会议创建失败OnCreateConfFailure" + JSON.stringify(data)
)
);
}
if (data.rsp === "-40205") {
this.showMessage("音视频会议SMC接口调用失败", "error");
} else if (data.rsp === "-40200") {
this.showMessage("会议不存在", "error");
} else if (data.rsp === "-40206") {
this.showMessage("会议系统断开", "error");
} else if (data.rsp === "-40204") {
this.showMessage("正在创建会议", "error");
} else if (data.rsp === "-40203") {
this.showMessage("不是会议主席", "error");
} else if (data.rsp === "-40202") {
this.showMessage("未加入会议", "error");
} else {
}
},
});
// 会议状态通知
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfStatusNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnConfStatusNotify",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"会议状态通知OnConfStatusNotify" + JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
this.metting.Attendees = Object.assign({}, data.value);
let confMembersList = data.value.confMembersStatus;
this.metting.memberList = [];
$(".ump-sdk-metting-right-userList-top").remove();
if (confMembersList && confMembersList.length > 0) {
confMembersList.map((items, index) => {
// 将主持人置顶
if (items.number == data.value.confStatus.chair) {
confMembersList.unshift(confMembersList.splice(index, 1)[0]);
}
if (items.participantStatus === "Connected") {
// 收集入会人员用于多屏广播
let result = this.metting.memberList.every((item) => {
return item.number !== items.number;
});
if (result) {
this.metting.memberList.push(items);
}
}
});
this.metting.unJoinMetting = [];
confMembersList.forEach((item, index) => {
if (item.participantStatus === "Disconnected") {
// 获取未入会成员集合
this.metting.unJoinMetting.push(item.number);
}
const Dom = $(`<div class="ump-sdk-metting-right-userList-top">
<div class="ump-sdk-metting-right-userList-icon"></div>
<div class="ump-sdk-metting-right-userList-Emcee ump-sdk-metting-right-userList-Emcee-${item.number}"><span class="ump-sdk-metting-right-user-Emcee-${item.number}">主持人</span><span class="ump-sdk-metting-right-userList-Emcee-isdn">${item.number}</span></div>
<div class="ump-sdk-metting-right-userList-Horne ump-sdk-metting-right-userList-Horne-${item.number}"></div>
<div class="ump-sdk-metting-right-userList-MIC ump-sdk-metting-right-userList-MIC-${item.number}" isdn="${item.number}" chair="${data.value.confStatus.chair}" title="取消静音"></div>
<div class="ump-sdk-metting-right-userList-talking ump-sdk-metting-right-userList-talking-${item.number}" isdn="${item.number}" chair="${data.value.confStatus.chair}" title="开启静音"></div>
<div class="ump-sdk-metting-right-userList-unconnected ump-sdk-metting-right-userList-unconnected-${item.number}" title="成员离会"></div>
<div class="ump-sdk-meeting-right-userList-menu ump-sdk-meeting-right-userList-menu-${item.number}" index="${index}">
<div class="ump-sdk-metting-right-meetingContextMenu-box" index="${index}">
<ul class="ump-sdk-metting-right-meetingContextMenu-ul">
<li class="ump-sdk-metting-right-meetingContextMenu-li ump-sdk-metting-right-meetingContextMenu-li-chairperson" isdn="${item.number}">转让主席</li>
<li class="ump-sdk-metting-right-meetingContextMenu-li ump-sdk-metting-right-meetingContextMenu-li-Recall" isdn="${item.number}">重新呼叫</li>
<li class="ump-sdk-metting-right-meetingContextMenu-li ump-sdk-metting-right-meetingContextMenu-li-Remove" isdn="${item.number}">移除会场</li>
<li style="display: none" class="ump-sdk-metting-right-meetingContextMenu-li" isdn="${item}">挂断会议</li>
</ul>
</div>
</div>
</div>`);
$("#ump-sdk-metting-right-userList-otherUser").append(Dom);
// 获取dom节点根据会议状态通知更新dom节点渲染内容
const Emcee = document.getElementsByClassName(
`ump-sdk-metting-right-user-Emcee-${item.number}`
)[0];
if (Emcee) {
if (item.number == data.value.confStatus.chair) {
// 会议主席
Emcee.style.display = "block";
} else {
Emcee.style.display = "none";
}
}
const chairperson = document.getElementsByClassName(
`ump-sdk-meeting-right-userList-menu-${item.number}`
)[0];
if (chairperson) {
if (
data.value.confStatus.chair === this.isdn &&
item.number !== this.isdn
) {
chairperson.style.display = "block";
} else {
chairperson.style.display = "none";
}
}
const Horne = document.getElementsByClassName(
`ump-sdk-metting-right-userList-Horne-${item.number}`
)[0];
if (Horne) {
if (item.number == data.value.confStatus.broadcast) {
// 正在被广播的成员
Horne.style.display = "block";
} else {
Horne.style.display = "none";
}
}
const MIC = document.getElementsByClassName(
`ump-sdk-metting-right-userList-MIC-${item.number}`
)[0];
const talking = document.getElementsByClassName(
`ump-sdk-metting-right-userList-talking-${item.number}`
)[0];
if (MIC && talking) {
if (item.isMute == 1) {
// 是否静音
MIC.style.display = "block";
talking.style.display = "none";
} else {
MIC.style.display = "none";
talking.style.display = "block";
}
if (item.participantStatus === "Disconnected") {
MIC.style.display = "none";
talking.style.display = "none";
}
}
const unconnected = document.getElementsByClassName(
`ump-sdk-metting-right-userList-unconnected-${item.number}`
)[0];
if (unconnected) {
if (item.participantStatus === "Disconnected") {
// 是否入会
unconnected.style.display = "block";
} else {
unconnected.style.display = "none";
}
const audio = document.getElementsByClassName(
"ump-sdk-metting-audio"
)[0];
const mute = document.getElementsByClassName(
"ump-sdk-metting-mute"
)[0];
if (item.number == this.isdn) {
if (item.isMute === "1") {
this.metting.MicTarget = false;
audio.style.display = "none";
mute.style.display = "block";
} else {
this.metting.MicTarget = true;
audio.style.display = "block";
mute.style.display = "none";
}
}
}
const mettingOnlineDom = document.getElementById(
"ump-sdk-metting-right-participant-online"
);
const mettingTotleDom = document.getElementById(
"ump-sdk-metting-right-participant-totle"
);
if (mettingTotleDom) {
mettingTotleDom.innerText = confMembersList.length
? confMembersList.length
: 0;
}
if (mettingOnlineDom) {
mettingOnlineDom.innerText = confMembersList.length
? confMembersList.length - this.metting.unJoinMetting.length
: 0;
}
});
}
let dom = document.getElementById("ump-sdk-metting-endConference"); //根据Id获取元素
if (this.isdn == data.value.confStatus.chair) {
if (dom) {
dom.innerText = "结束会议";
}
} else {
if (dom) {
dom.innerText = "离开会议";
}
}
// 根据本端是否为主席进行模块展示和隐藏
const meetRightActionDom = document.getElementsByClassName(
"ump-sdk-metting-right-userList-fotterAction"
)[0];
const meetlayoutSetDom = document.getElementsByClassName(
"ump-sdk-metting-headerInfo-TimesBox-videoLayout-set"
)[0];
const meetActiveDom = document.getElementsByClassName(
"ump-sdk-metting-requests"
)[0];
if (data.value.confStatus.chair !== this.isdn) {
meetRightActionDom.style.display = "none";
meetlayoutSetDom.style.display = "none";
meetActiveDom.style.display = "none";
} else {
if (meetRightActionDom && meetlayoutSetDom && meetActiveDom) {
meetRightActionDom.style.display = "flex";
meetlayoutSetDom.style.display = "block";
meetActiveDom.style.display = "block";
}
}
}
},
});
// 结束会议成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnEndConfSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnEndConfSuccess", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"结束会议成功OnEndConfSuccess" + JSON.stringify(data)
)
);
}
},
});
// 结束会议失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnEndConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnEndConfFailure", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"结束会议失败OnEndConfFailure" + JSON.stringify(data)
)
);
}
},
});
// 订阅会议成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnSubscribeConfSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnSubscribeConfSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"订阅会议成功OnSubscribeConfSuccess" + JSON.stringify(data)
)
);
}
},
});
// 订阅会议失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnSubscribeConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnSubscribeConfFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"订阅会议失败OnSubscribeConfFailure" + JSON.stringify(data)
)
);
}
},
});
// 去订阅会议成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnUnsubscribeConfSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnUnsubscribeConfSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"去订阅会议成功OnUnsubscribeConfSuccess" + JSON.stringify(data)
)
);
}
},
});
// 去订阅会议失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnUnsubscribeConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnUnsubscribeConfFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"去订阅会议失败OnUnsubscribeConfFailure" + JSON.stringify(data)
)
);
}
},
});
// 会议呼出回铃事件
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfDialOutRinging",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnConfDialOutRinging",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"会议呼出回铃事件OnConfDialOutRinging" + JSON.stringify(data)
)
);
}
},
});
// 会议呼入振铃事件
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfDialInRinging",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnConfDialInRinging",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"会议呼入振铃事件OnConfDialInRinging" + JSON.stringify(data)
)
);
}
if (data.rsp === "3002") {
// 视频会议呼入振铃事件
this.callerCard(data);
}
},
});
// 会议通话事件
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfConnect",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnConfConnect", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"会议通话事件OnConfConnect" + JSON.stringify(data)
)
);
}
if (data.rsp === "3006" || data.rsp === "2007") {
// 视频呼入会议通话事件
this.openMettingDialog(data, this.metting.style);
let dom = document.getElementById("ump-sdk-metting-endConference"); //根据Id获取元素
if (dom) {
dom.innerText = "离开会议";
}
}
if (data.rsp === "3003" || data.rsp === "2003") {
// 视频呼出会议通话事件
this.openMettingDialog(data, this.metting.style);
console.log(
this.metting.infoMation,
"==========infoMation========="
);
let dom = document.getElementById("ump-sdk-metting-endConference"); //根据Id获取元素
if (dom && this.metting.isJoin) {
dom.innerText = "结束会议";
}
// this.conferenceVideoWall(data) // 广播会议
}
let meetingHistory = JSON.parse(
localStorage.getItem("meetingHistory")
);
data.value.creater = `${data.value.caller} 创建会议`;
data.value.startTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
meetingHistory.push(data.value);
localStorage.setItem(
"meetingHistory",
JSON.stringify(meetingHistory)
);
},
});
// 会议释放事件
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfRelease",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnConfRelease", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"会议释放事件OnConfRelease" + JSON.stringify(data)
)
);
}
if (data.rsp === "3008") {
// 视频非本端挂机事件
UMPSDK.logInfoFormat("视频非本端挂机事件" + JSON.stringify(data));
const dom = document.getElementById(
`ump-sdk-metting-out-dialog-${data.value.confId}`
);
if (dom) {
dom.remove();
}
this.showMessage("会议已结束 ❗❗❗", "warning");
}
if (data.rsp === "3009") {
// 视频本端挂机事件
UMPSDK.logInfoFormat("视频本端挂机事件" + JSON.stringify(data));
}
if (data.rsp === "3010") {
// 视频请求被取消
UMPSDK.logInfoFormat("视频本端挂机事件" + JSON.stringify(data));
}
if (data.rsp === "3013") {
// 视频对端正忙
UMPSDK.logInfoFormat("视频对端正忙" + JSON.stringify(data));
}
},
});
// 会议通话失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnConfFailure", data);
if (this.logCallback) {
const des =
this.CommunicateStatusEnum[`OnDialOutFailure-${data.rsp}`];
this.logCallback(
UMPSDK.logInfoFormat(
`${des}-OnConfFailure` + JSON.stringify(data)
)
);
}
},
});
// 静音会议成员成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnMuteConfMemberSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnMuteConfMemberSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"静音会议成员成功OnMuteConfMemberSuccess" + JSON.stringify(data)
)
);
}
},
});
// 静音会议成员失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnMuteConfMemberFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnMuteConfMemberFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"静音会议成员失败OnMuteConfMemberFailure" + JSON.stringify(data)
)
);
}
},
});
// 取消静音会议成员成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnUnmuteConfMemberSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnUnmuteConfMemberSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"取消静音会议成员成功OnUnmuteConfMemberSuccess" +
JSON.stringify(data)
)
);
}
},
});
// 取消静音会议成员失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnUnmuteConfMemberFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnUnmuteConfMemberFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"取消静音会议成员失败OnUnmuteConfMemberFailure" +
JSON.stringify(data)
)
);
}
},
});
// 静音会议成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnMuteConfSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnMuteConfSuccess", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"静音会议成功OnMuteConfSuccess" + JSON.stringify(data)
)
);
}
},
});
// 静音会议失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnMuteConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("PhoneConfNotify", "OnMuteConfFailure", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"静音会议失败OnMuteConfFailure" + JSON.stringify(data)
)
);
}
},
});
// 取消静音会议成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnUnmuteConfSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnUnmuteConfSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"取消静音会议成功OnUnmuteConfSuccess" + JSON.stringify(data)
)
);
}
},
});
// 取消静音会议失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnUnmuteConfFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnUnmuteConfFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"取消静音会议失败OnUnmuteConfFailure" + JSON.stringify(data)
)
);
}
},
});
// 查看调度员所在的会议信息结果
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnQueryConfListByAttendeeResult",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnQueryConfListByAttendeeResult",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"查看调度员所在的会议信息结果OnQueryConfListByAttendeeResult" +
JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
let list = data.value.confInfos;
if (list.length > 0) {
list.forEach((item) => {
// 清空用户未结束会议,然后再创建新的会议
let param = {
confId: item.confId,
callback: function (data) {},
};
console.log(
"清空用户未结束会议,然后再创建新的会议❌❌❌❌❌❌"
);
cloudICP.dispatch.conf.endConf(param);
});
}
}
},
});
// 查询会议列表结果-成功事件
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnRecvConfListNotifySuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnRecvConfListNotifySuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"查询会议列表结果-成功事件OnRecvConfListNotifySuccess" +
JSON.stringify(data)
)
);
}
if (data.rsp === "0") {
if (data.value.length > 0) {
} else {
this.showMessage("该会议的详细信息为空", "error");
}
}
},
});
// 查询会议列表结果-失败事件
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnRecvConfListNotifyFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnRecvConfListNotifyFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"查询会议列表结果-失败事件OnRecvConfListNotifyFailure" +
JSON.stringify(data)
)
);
}
},
});
// 广播与会者成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnBroadcastConfMemberSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnBroadcastConfMemberSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"广播与会者成功OnBroadcastConfMemberSuccess" +
JSON.stringify(data)
)
);
}
},
});
// 广播与会者失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnBroadcastConfMemberFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnBroadcastConfMemberFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"广播与会者失败OnBroadcastConfMemberFailure" +
JSON.stringify(data)
)
);
}
},
});
// 重呼成员成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnCallConfMemberSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnCallConfMemberSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"重呼成员成功OnCallConfMemberSuccess" + JSON.stringify(data)
)
);
}
},
});
// 重呼成员失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnCallConfMemberFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnCallConfMemberFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"重呼成员失败OnCallConfMemberFailure" + JSON.stringify(data)
)
);
}
},
});
// 切换会议主席成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfSetChairmanSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnConfSetChairmanSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"切换会议主席成功OnConfSetChairmanSuccess" +
JSON.stringify(data)
)
);
}
},
});
// 切换会议主席失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnConfSetChairmanFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnConfSetChairmanFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"切换会议主席失败OnConfSetChairmanFailure" +
JSON.stringify(data)
)
);
}
},
});
// 删除成员成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnDelConfMembersSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnDelConfMembersSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"删除成员成功OnDelConfMembersSuccess" + JSON.stringify(data)
)
);
}
},
});
// 删除成员失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnDelConfMembersFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnDelConfMembersFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"删除成员失败OnDelConfMembersFailure" + JSON.stringify(data)
)
);
}
},
});
// 广播多画面成功
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnBroadcastMixPictureSuccess",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnBroadcastMixPictureSuccess",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"广播多画面成功OnBroadcastMixPictureSuccess" +
JSON.stringify(data)
)
);
}
},
});
// 广播多画面失败
cloudICP.dispatch.event.register({
eventType: "PhoneConfNotify",
eventName: "OnBroadcastMixPictureFailure",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"PhoneConfNotify",
"OnBroadcastMixPictureFailure",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"广播多画面失败OnBroadcastMixPictureFailure" +
JSON.stringify(data)
)
);
}
},
});
//============================ModuleNotify模块状态通知==================================
// 模块掉线
cloudICP.dispatch.event.register({
eventType: "ModuleNotify",
eventName: "OnDisConnection",
callback: (data) => {
this.removeMsgDom();
console.log("模块掉线", data);
this.isUMPUserOut = true;
// UMPSDK触发注册事件
this.sdkRegisterHandler("ModuleNotify", "OnDisConnection", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"模块掉线OnDisConnection" + JSON.stringify(data)
)
);
}
},
});
// 模块链接成功
cloudICP.dispatch.event.register({
eventType: "ModuleNotify",
eventName: "OnConnection",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("ModuleNotify", "OnConnection", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"模块连接成功OnConnection" + JSON.stringify(data)
)
);
}
},
});
// 用户被踢出
cloudICP.dispatch.event.register({
eventType: "ModuleNotify",
eventName: "OnDispatchKickOutNotifyEvent",
callback: (data) => {
console.log("用户被踢出", data);
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"ModuleNotify",
"OnDispatchKickOutNotifyEvent",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"用户被踢出OnDispatchKickOutNotifyEvent" + JSON.stringify(data)
)
);
}
},
});
// 账号被删除
cloudICP.dispatch.event.register({
eventType: "ModuleNotify",
eventName: "OnDeleteAccountNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler(
"ModuleNotify",
"OnDeleteAccountNotify",
data
);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"账号被删除OnDeleteAccountNotify" + JSON.stringify(data)
)
);
}
},
});
//============================ModuleNotify模块状态通知==================================
//============================GisNotify-GIS状态通知==================================
// GIS上报通知
cloudICP.dispatch.event.register({
eventType: "GisNotify",
eventName: "OnRecvGISNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("GisNotify", "OnRecvGISNotify", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"GIS上报通知OnRecvGISNotify" + JSON.stringify(data)
)
);
}
},
});
cloudICP.dispatch.event.register({
eventType: "GisNotify",
eventName: "OnRecvGISTrackNotify",
callback: (data) => {
// UMPSDK触发注册事件
this.sdkRegisterHandler("GisNotify", "OnRecvGISTrackNotify", data);
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"终端gis历史轨迹通知OnRecvGISNotify" + JSON.stringify(data)
)
);
}
},
});
//============================GisNotify-GIS状态通知==================================
}
// 来电卡片
callerCardStyle(style) {
this.voice.style = style ? style : "";
this.cardStyle.voiceStyle = style ? style : "";
}
callerCard(data) {
this.timer.isCalling = true;
const style = this.voice.style;
const cardDom = $(
`<div class="ump-sdk ump-sdk-communicate-card ump-sdk-caller-card" style="background:${
style.bgColor
};right:${style.posX};bottom:${style.posY};width:${
style.width
};height:${style.height};border-color:${style.borderColor}"
}" id=${"ump-sdk-caller-card-" + data.value.cid}>
<div class="ump-sdk-caller-card-title">${
data.value.calltype === "dispatch"
? data.value.src
: data.value.caller
}</div>
<div class="ump-sdk-caller-card-tip" data-time="0">${
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
}-来电</div>
<div class="ump-sdk-caller-card-bottom">
<div class="ump-sdk-caller-card-answer"></div>
<div class="ump-sdk-caller-card-hang-up"></div>
</div>
</div>`
);
$("body").append(cardDom);
$(".ump-sdk-caller-card-answer").click(() => {
cardDom.remove();
// 语音呼入接听场景
if (data.rsp === "2002") {
this.createVoiceDialogDom(data, this.cardStyle.voiceStyle);
cloudICP.dispatch.voice.answer({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("语音接听来电" + JSON.stringify(rsp))
);
}
},
});
}
// 视频呼入接听场景
if (data.rsp === "3002") {
if (data.eventName === "OnConfDialInRinging") {
// 如果事件类型是视频会议呼入
cloudICP.dispatch.conf.acceptVideoConf({
cid: data.value.cid,
windowInfo: {
width: 800,
height: 450,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频会议被动入会接受" + JSON.stringify(rsp)
)
);
}
},
});
} else {
// 如果事件类型是其他
cloudICP.dispatch.video.answer({
cid: data.value.cid,
windowInfo: {
width: 800,
height: 450,
videoConfLocalWindow: false,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("视频接听来电" + JSON.stringify(rsp))
);
}
},
});
}
}
// 视频分发接听场景
if (data.rsp === "3011") {
this.createMonitorDialogDom(data, this.cardStyle.monitorStyle);
cloudICP.dispatch.video.answer({
cid: data.value.cid,
windowInfo: {
width: 800,
height: 450,
videoConfLocalWindow: false,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("视频分发来电" + JSON.stringify(rsp))
);
}
},
});
}
});
$(".ump-sdk-caller-card-hang-up").click(() => {
this.timer.isCalling = false;
cardDom.remove();
// 语音呼入拒接场景
if (data.rsp === "2002") {
cloudICP.dispatch.voice.reject({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("语音拒接来电" + JSON.stringify(rsp))
);
// 拒绝来电,修改通话记录状态,并记录结束时间
let phoneHistory = JSON.parse(
localStorage.getItem("phoneHistory")
);
phoneHistory.map((item) => {
if (item.cid === data.value.cid) {
item.endTime = UMPSDK.dateFormat("YYYY-MM-DD hh:mm");
item.status = false;
}
});
localStorage.setItem(
"phoneHistory",
JSON.stringify(phoneHistory)
);
}
},
});
}
// 视频呼入拒接场景
if (data.rsp === "3002") {
if (data.eventName === "OnConfDialInRinging") {
// 如果事件类型是视频会议呼入
cloudICP.dispatch.conf.rejectVideoConf({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频会议被动入会拒绝" + JSON.stringify(rsp)
)
);
}
},
});
} else {
cloudICP.dispatch.video.reject({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("视频拒接来电" + JSON.stringify(rsp))
);
}
},
});
}
}
// 视频分发拒接场景
if (data.rsp === "3011") {
cloudICP.dispatch.video.reject({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("视频分发拒接" + JSON.stringify(rsp))
);
}
},
});
}
});
}
// 语音点呼
initVoiceHandler() {
/**
* 打开语音呼叫组件
* @param target 对端号码
* @param style 卡片样式
*/
this.voice.dial = (target, style, id) => {
this.voice.id = id; // 传入id时为内嵌模式获取id
if (this.timer.isCalling) {
this.showMessage("正在通话中,请稍后再试", "warning");
return;
}
if (!target) {
this.showMessage("请输入对端isdn号码", "warning");
return;
}
const param = {
to: target,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("发起语音点呼" + JSON.stringify(rsp))
);
}
this.cardStyle.voiceStyle = style;
this.voice.style = style;
},
};
cloudICP.dispatch.voice.dial(param);
};
}
createVoiceDialogDom(data, style) {
let id = this.voice.id || ""; // 内嵌模式获取id
this.timer.isCalling = true;
this.style = style; // 保持主题变更时,主叫和被叫卡片风格保持一致
const divDom = $(
`<div class="ump-sdk ump-sdk-communicate-card ump-sdk-voice-out-dialog ${
id ? "ump-sdk-communicate-dialog_embedded" : ""
}" style="background:${style.bgColor};right:${style.posX};bottom:${
style.posY
};width:${style.width};height:${style.height};border-color:${
style.borderColor
}" id=${"ump-sdk-voice-out-dialog-" + data.value.cid}>
<div class="ump-sdk-voice-out-dialog-title">${data.value.callee}</div>
<div class="ump-sdk-voice-out-dialog-tip" data-time="0">语音呼叫-${
data.rsp === "2002"
? "连接中"
: this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
}</div>
<div class="ump-sdk-voice-out-dialog-hang-up"></div>
</div>`
);
if (id) {
// 传入id则弹窗嵌入到此id所在DOM内
$(`#${id}`).append(divDom);
} else {
// 无id则弹窗嵌入到body内
$("body").append(divDom);
}
this.voice.id = ""; // 重置id
this.voice.Dom = divDom;
this.voice.cid = data.value.cid;
$(".ump-sdk-voice-out-dialog-hang-up").click(() => {
this.clearTimerHandler("voiceTimer", data.value.cid);
this.timer.isCalling = false;
divDom.remove();
cloudICP.dispatch.voice.release({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("语音主动挂断" + JSON.stringify(rsp))
);
}
},
});
});
}
// 外部调用,移除语音通话组件
reMoveVioceCallDom() {
if (!this.voice.Dom) return;
this.clearTimerHandler("voiceTimer", this.voice.cid);
this.timer.isCalling = false;
this.voice.Dom.remove();
cloudICP.dispatch.voice.release({
cid: this.voice.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("语音主动挂断" + JSON.stringify(rsp))
);
}
},
});
}
openVoiceDialog(data, style) {
switch (data.eventName) {
// 呼出事件
case "OnDialOutProceeding":
this.createVoiceDialogDom(data, style);
break;
// 呼出失败
case "OnDialOutFailure":
const tipDomFail = $(
`#ump-sdk-voice-out-dialog-${data.value.cid} .ump-sdk-voice-out-dialog-tip`
);
tipDomFail.text(
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
);
break;
// 振铃事件
case "OnDialOutRinging":
const tipDomRinging = $(
`#ump-sdk-voice-out-dialog-${data.value.cid} .ump-sdk-voice-out-dialog-tip`
);
tipDomRinging.text(
"语音呼叫-" +
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
);
break;
// 通话建立
case "OnCallConnect":
const timer = setInterval(() => {
const tipDom = $(
`#ump-sdk-voice-out-dialog-${data.value.cid} .ump-sdk-voice-out-dialog-tip`
);
const timeNum = Number(tipDom.attr("data-time")) + 1;
tipDom.attr("data-time", timeNum);
tipDom.text(
`${
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
}-${UMPSDK.timeHandler(timeNum)}`
);
}, 1000);
const obj = {
cid: data.value.cid,
timer,
};
this.timer.voiceTimer.push(obj);
break;
}
}
// 创建语音记录卡片
initPhoneHistoryCard(
phoneCaller,
phoneCallee,
phoneStartTime,
phoneEnd,
phoneState,
style
) {
const DOM = document.getElementById(
"ump-sdk-communicate-phoneHistory-card"
);
if (DOM) {
DOM.remove();
}
let phoneHistory = JSON.parse(localStorage.getItem("phoneHistory"));
let filterArray = [];
if (!phoneCaller && !phoneCallee && !phoneStartTime && !phoneEnd) {
// 如果没有任何筛选条件直接根据isdn筛选
filterArray = phoneHistory.filter(
(phone) => this.isdn == phone.caller || this.isdn == phone.callee
);
} else {
// 进行条件筛选
filterArray = phoneHistory.filter((phone) => {
const phoneStart = new Date(phone.startTime);
const phoneEndTime = new Date(phone.endTime);
let matches = true;
// 判断是否是当前登录isdn
if (this.isdn != phone.caller && this.isdn != phone.callee) {
matches = false;
}
// 根据 主叫 筛选
if (phoneCaller && phone.caller.indexOf(phoneCaller) === -1) {
matches = false;
}
// 根据 被叫 筛选
if (phoneCallee && phone.callee.indexOf(phoneCallee) === -1) {
matches = false;
}
// 根据 开始时间 筛选
if (phoneStartTime && phoneStart < new Date(phoneStartTime)) {
matches = false;
}
// 根据 结束时间 筛选
if (phoneEnd && phoneEndTime > new Date(phoneEnd)) {
matches = false;
}
// 过滤出开始时间和结束时间在传入范围内的记录
if (phoneStartTime && phoneEnd) {
const startRange = new Date(phoneStartTime);
const endRange = new Date(phoneEnd);
// 判断通话是否在给定的时间范围内
if (
!(phoneStart >= startRange && phoneStart <= endRange) && // 开始时间在范围内
!(phoneEndTime >= startRange && phoneEndTime <= endRange) // 结束时间在范围内
) {
matches = false;
}
}
return matches;
});
}
console.log(
phoneState,
typeof phoneState,
filterArray,
"======phoneState====="
);
if (phoneState !== "9") {
filterArray = filterArray.filter((item) => {
return item.callState == phoneState;
});
}
console.log(phoneState, filterArray, "======phoneState111111=====");
filterArray.reverse();
if (filterArray.length > 0) {
const historyDom = $(`
<div class="ump-sdk ump-sdk-communicate-phoneHistory-card" id="ump-sdk-communicate-phoneHistory-card" style="${style}">
<div class="ump-sdk-phoneHistory-title">
<span class="ump-sdk-phoneHistory-title-name">通话记录</span>
<span class="ump-sdk-phoneHistory-title-esc" id="ump-sdk-phoneHistory-title-esc"></span>
</div>
<div class="ump-sdk-phoneHistory-warpper">
${filterArray
.map((item) => {
return `<div class="ump-sdk-phoneHistory-body">
<span style="${
item.callState === 0 && item.status ? "" : "display:none"
}" class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-icon ump-sdk-phoneHistory-icon-callee0"></span>
<span style="${
item.callState === 0 && !item.status ? "" : "display:none"
}" class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-icon ump-sdk-phoneHistory-icon-callee1"></span>
<span style="${
item.callState === 1 && item.status ? "" : "display:none"
}" class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-icon ump-sdk-phoneHistory-icon-caller0"></span>
<span style="${
item.callState === 1 && !item.status ? "" : "display:none"
}" class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-icon ump-sdk-phoneHistory-icon-caller1"></span>
<span class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-caller">主叫:${
item.caller
}</span>
<span class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-caller">被叫:${
item.callee
}</span>
<span class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-startTime">${
item.startTime
}</span>
<span class="ump-sdk-phoneHistory-span ump-sdk-phoneHistory-endTime">${
item.endTime
}</span>
</div>`;
})
.join("")}
</div>
</div>
`);
$("body").append(historyDom);
} else {
this.showMessage("查询数据为空、请重新输入查询条件");
}
// 关闭弹窗
$("#ump-sdk-phoneHistory-title-esc").click(() => {
const DOMCard = document.getElementById(
"ump-sdk-communicate-phoneHistory-card"
);
if (DOMCard) {
DOMCard.remove();
}
});
}
// 创建会议记录卡片
initMeetingHistoryCard(meetingCaller, meetingStartTime, meetingEnd, style) {
const DOM = document.getElementById(
"ump-sdk-communicate-meetingHistory-card"
);
if (DOM) {
DOM.remove();
}
let meetingHistory = JSON.parse(localStorage.getItem("meetingHistory"));
let filterArray = [];
if (!meetingCaller && !meetingStartTime && !meetingEnd) {
filterArray = meetingHistory.filter(
(meeting) => this.isdn == meeting.caller
);
} else {
filterArray = meetingHistory.filter((meeting) => {
const meetingStart = new Date(meeting.startTime); // 转换会议的开始时间为 Date 对象
let matches = true;
//判断是否是当前登录isdn
if (this.isdn != meeting.caller) {
matches = false;
}
// 根据 会议标题 筛选
if (meetingCaller && meeting.creater.indexOf(meetingCaller) === -1) {
matches = false;
}
// 根据 开始时间 筛选
if (meetingStartTime && meetingStart < new Date(meetingStartTime)) {
matches = false;
}
// 根据 结束时间 筛选
if (meetingEnd && meetingStart > new Date(meetingEnd)) {
matches = false;
}
return matches;
});
}
if (filterArray.length > 0) {
const historyDom = $(`
<div class="ump-sdk ump-sdk-communicate-meetingHistory-card" id="ump-sdk-communicate-meetingHistory-card" style="${style}">
<div class="ump-sdk-meetingHistory-title">
<span class="ump-sdk-meetingHistory-title-name">会议记录</span>
<span class="ump-sdk-meetingHistory-title-esc" id="ump-sdk-meetingHistory-title-esc"></span>
</div>
<div class="ump-sdk-meetingHistory-warpper">
${filterArray
.map((item) => {
return `<div class="ump-sdk-meetingHistory-body">
<div>会议主题:${item.creater}</div>
<div>会议主席:${item.caller}</div>
<div>会议开始时间:${item.startTime}</div>
</div>`;
})
.join("")}
</div>
</div>
`);
$("body").append(historyDom);
} else {
this.showMessage("查询数据为空、请重新输入查询条件");
}
// 关闭弹窗
$("#ump-sdk-meetingHistory-title-esc").click(() => {
const DOMCard = document.getElementById(
"ump-sdk-communicate-meetingHistory-card"
);
if (DOMCard) {
DOMCard.remove();
}
});
}
// 视频呼叫
initVideoHandler() {
this.queryCameraAbility().then((res) => {
this.video.dial = (target, style, id) => {
this.video.id = id; // 传入id时为内嵌模式保存id
if (this.timer.isCalling) {
this.showMessage("正在通话中,请稍后再试", "warning");
return;
}
if (!target) {
this.showMessage("请输入对端isdn号码", "warning");
return;
}
const param = {
to: target,
dialVideoParam: {
fmt: res,
showToolbar: 1,
mode: "wssflow",
width: 800,
height: 450,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("发起视频点呼" + JSON.stringify(rsp))
);
}
this.cardStyle.videoStyle = style;
},
};
cloudICP.dispatch.video.dialVideo(param);
};
});
}
// 共享桌面
initWindowShare() {
this.windowShare.dial = (cid, windowName) => {
const param = {
cid: cid,
windowName: windowName,
callback: (data) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("开始共享桌面" + JSON.stringify(data))
);
}
},
};
cloudICP.dispatch.device.startWindowShare(param);
};
this.windowShare.stop = (cid) => {
const param = {
cid: cid,
callback: (data) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("停止共享桌面" + JSON.stringify(data))
);
}
},
};
cloudICP.dispatch.device.stopWindowShare(param);
};
}
queryCameraAbility(type) {
// 查询摄像头能力
return new Promise((resolve, reject) => {
let param = {
callback: (data) => {
if (data.rsp === "0") {
let abilityNum = data.camera_ability;
let numStr = "";
switch (true) {
case abilityNum == 1:
numStr = "QCIF";
break;
case abilityNum > 1 && abilityNum <= 3:
numStr = "CIF";
break;
case abilityNum > 3 && abilityNum <= 7:
numStr = "D1";
break;
case abilityNum > 7 && abilityNum <= 15:
numStr = "720P";
break;
case abilityNum > 15 && abilityNum <= 31:
numStr = "1080P";
break;
case abilityNum > 31 && abilityNum <= 63:
numStr = "2K";
break;
case abilityNum > 63 && abilityNum <= 127:
numStr = "4K";
break;
default:
numStr = type === "monitor" ? "4K" : "1080P";
break;
}
resolve(numStr);
} else {
resolve(type === "monitor" ? "4K" : "1080P");
}
},
};
cloudICP.dispatch.device.queryCameraAbility(param);
});
}
createVideoDialogDom(data, style) {
let id = this.video.id || ""; // 内嵌模式获取id
this.timer.isCalling = true;
const divDom = $(
`<div class="ump-sdk ump-sdk-communicate-card ump-sdk-video-out-dialog ${
id ? "ump-sdk-communicate-dialog_embedded" : ""
}" style="background:${style.bgColor};right:${style.posX};bottom:${
style.posY
};width:${style.width};height:${style.height};border-color:${
style.borderColor
}" id=${"ump-sdk-video-out-dialog-" + data.value.cid}>
<div class="ump-sdk-video-out-dialog-title">${data.value.callee}</div>
<div class="ump-sdk-video-out-dialog-tip" data-time="0">视频呼叫-${
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
}</div>
<div class="ump-sdk-video-out-dialog-hang-up" />
</div>`
);
if (id) {
// 传入id则弹窗嵌入到此id所在DOM内
$(`#${id}`).append(divDom);
} else {
// 无id则弹窗嵌入到body内
$("body").append(divDom);
}
this.video.Dom = divDom;
this.video.cid = data.value.cid;
$(".ump-sdk-video-out-dialog-hang-up").click(() => {
divDom.remove();
cloudICP.dispatch.video.release({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("视频主动挂断" + JSON.stringify(rsp))
);
}
},
});
});
}
openVideoDialog(data, style) {
switch (data.eventName) {
// 呼出事件
case "OnDialOutProceeding":
this.createVideoDialogDom(data, style);
break;
// 呼出失败
case "OnDialOutFailure":
const tipDomFail = $(
`#ump-sdk-video-out-dialog-${data.value.cid} .ump-sdk-video-out-dialog-tip`
);
tipDomFail.text(
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
);
break;
// 振铃事件
case "OnDialOutRinging":
const tipDomRinging = $(
`#ump-sdk-video-out-dialog-${data.value.cid} .ump-sdk-video-out-dialog-tip`
);
tipDomRinging.text(
"视频呼叫-" +
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
);
break;
// 通话建立
case "OnCallConnect":
const videoPlayerDom = $(
`<div class="ump-sdk ump-sdk-video-box ${
this.video.id ? "ump-sdk-communicate-dialog_embedded" : ""
}"" style="left:${style.posX};top:${style.posY};width:${
style.width
};height:${style.height}" id=${
"ump-sdk-video-box-" + data.value.cid
}>
<div class="ump-sdk-video-player-continer" " id=${
"ump-sdk-video-player-" + data.value.cid
}></div>
<div class="ump-sdk-video-info-box">
<span class="ump-sdk-video-target">${
data.rsp == "3003" ? data.value.callee : data.value.caller
}</span>
<span class="ump-sdk-video-timeTip" id="${
"ump-sdk-video-timeTip-" + data.value.cid
}" data-time="0"></span>
</div>
<div class="ump-sdk-video-zoom-box" >
<span class="ump-sdk-video-zoomOut ${
this.video.id ? "ump-sdk-video-zoomOut-nest" : ""
}"" id=${"ump-sdk-video-zoomOut-" + data.value.cid}></span>
<span class="ump-sdk-video-zoomIn ${
this.video.id ? "ump-sdk-video-zoomIn-nest" : ""
}"" id=${"ump-sdk-video-zoomIn-" + data.value.cid}></span>
</div>
<span class="ump-sdk-video-close" style="${
this.video.id ? "display:none" : ""
}" id=${"ump-sdk-video-close-" + data.value.cid}></span>
<div class="ump-sdk-video-mute-box">
<span class="ump-sdk-video-mute" id=${
"ump-sdk-video-mute-" + data.value.cid
}></span>
<span class="ump-sdk-video-unMute" id=${
"ump-sdk-video-unMute-" + data.value.cid
}></span>
</div>
<div class="ump-sdk-video-volume" id=${
"ump-sdk-video-volume-" + data.value.cid
}>
<div class="ump-sdk-video-volume-volume-range-box" data-show="0" id=${
"ump-sdk-video-volume-volume-range-box-" + data.value.cid
}>
<input onchange="document.getElementById('ump-sdk-video-volume-text').innerText=value" class="ump-sdk-video-range" value="50" type="range" min="0" max="100" id=${
"ump-sdk-video-volume-range-" + data.value.cid
}>
<span id="ump-sdk-video-volume-text">50</span>
</div>
</div>
<span class="ump-sdk-video-hanging-up" id=${
"ump-sdk-video-hanging-up-" + data.value.cid
}></span>
</div>`
);
if (this.video.id) {
// 传入id则弹窗嵌入到此id所在DOM内
$(`#${this.video.id}`).append(videoPlayerDom);
} else {
// 无id则弹窗嵌入到body内
$("body").append(videoPlayerDom);
}
const draggableInstance = this.draggable(
"ump-sdk-video-box-" + data.value.cid
);
if (this.video.id) {
draggableInstance.disableDragging();
}
const playerDom = document.getElementById(
`ump-sdk-video-player-${data.value.cid}`
);
const hangingUpDom = document.getElementById(
`ump-sdk-video-out-dialog-${data.value.cid}`
);
try{
this.player[`player${data.value.cid}`] = this.createYuvPlayer(
data,
playerDom
);
}
catch(error) {
console.log("MSP_Player",error)
}
this.video.data = data;
this.video.cid = data.value.cid;
// 建立通话直接移除右下角小卡片
hangingUpDom && hangingUpDom.remove();
$(".ump-sdk-video-close").click(() => {
// 关闭视频呼叫
this.closeVideo(
data,
document.getElementById(`ump-sdk-video-box-${data.value.cid}`)
);
});
$(".ump-sdk-video-hanging-up").click(() => {
// 挂断视频呼叫
this.closeVideo(
data,
document.getElementById(`ump-sdk-video-box-${data.value.cid}`)
);
});
$(".ump-sdk-video-mute").click(() => {
// 静音
const param = {
cid: data.value.cid,
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频通话静音操作" + JSON.stringify(res)
)
);
}
},
};
cloudICP.dispatch.device.muteMic(param);
const unMuteDemo = document.getElementById(
`ump-sdk-video-unMute-${data.value.cid}`
);
const MuteDemo = document.getElementById(
`ump-sdk-video-mute-${data.value.cid}`
);
MuteDemo.style.display = "none";
unMuteDemo.style.display = "block";
});
$(".ump-sdk-video-unMute").click(() => {
// 取消静音
const param = {
cid: data.value.cid,
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频通话取消静音操作" + JSON.stringify(res)
)
);
}
},
};
cloudICP.dispatch.device.unmuteMic(param);
const unMuteDemo = document.getElementById(
`ump-sdk-video-unMute-${data.value.cid}`
);
const MuteDemo = document.getElementById(
`ump-sdk-video-mute-${data.value.cid}`
);
MuteDemo.style.display = "block";
unMuteDemo.style.display = "none";
});
$(".ump-sdk-video-volume").click(() => {
// 音量组件控制
const volumeDom = document.getElementById(
`ump-sdk-video-volume-volume-range-box-${data.value.cid}`
);
if (volumeDom && volumeDom.dataset.show === "1") {
volumeDom.dataset.show = "0";
volumeDom.style.display = "none";
} else {
volumeDom.dataset.show = "1";
volumeDom.style.display = "block";
}
});
$(".ump-sdk-video-range").click((e) => {
e.stopPropagation();
});
$(".ump-sdk-video-range").mousedown((e) => {
e.stopPropagation();
});
$(".ump-sdk-video-range").mouseup((e) => {
// 音量调节
e.stopPropagation();
const param = {
cid: data.value.cid,
volume: $(`#ump-sdk-video-volume-range-${data.value.cid}`).val(),
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("音量调节" + JSON.stringify(res))
);
}
},
};
cloudICP.dispatch.device.setVolume(param);
});
$(".ump-sdk-video-zoomIn").click(() => {
// 全屏
draggableInstance.disableDragging();
const width = document.body.clientWidth;
const height = document.body.clientHeight;
const zoomOut = document.getElementById(
`ump-sdk-video-zoomOut-${data.value.cid}`
);
const zoomIn = document.getElementById(
`ump-sdk-video-zoomIn-${data.value.cid}`
);
const box = document.getElementById(
`ump-sdk-video-box-${data.value.cid}`
);
box.style.width = width + "px";
box.style.height = height + "px";
zoomOut.style.display = "block";
zoomIn.style.display = "none";
if (this.video.id) {
// 传入id则弹窗嵌入到此id所在DOM内
box.style.position = "fixed";
// box.style.top = '0';
// box.style.left = '0';
// box.style.right = 'unset';
// box.style.bottom = 'unset';
// box.style.transform = 'unset';
$("body").append(box);
}
this.player[`player${data.value.cid}`].changeVideResolution({
width: parseInt(width),
height: parseInt(height),
});
});
$(".ump-sdk-video-zoomOut").click(() => {
// 退出全屏
if (this.video.id) {
draggableInstance.disableDragging();
} else {
draggableInstance.enableDragging();
}
const zoomOut = document.getElementById(
`ump-sdk-video-zoomOut-${data.value.cid}`
);
const zoomIn = document.getElementById(
`ump-sdk-video-zoomIn-${data.value.cid}`
);
const box = document.getElementById(
`ump-sdk-video-box-${data.value.cid}`
);
if (!this.video.id) {
box.style.width = style.width ? style.width : "800px";
box.style.height = style.height ? style.height : "450px";
} else {
console.log("视频点呼传入的style", style);
}
zoomOut.style.display = "none";
zoomIn.style.display = "block";
let styleWidth = style.width ? style.width.replace("px", "") : "";
let styleHeight = style.height
? style.height.replace("px", "")
: "";
if (this.video.id) {
// 传入id则弹窗嵌入到此id所在DOM内
box.style.position = "relative";
// box.style.top = '50%';
// box.style.left = '50%';
// box.style.right = 'unset';
// box.style.bottom = 'unset';
// box.style.transform = 'translate(-50%,-50%)';
$(`#${this.video.id}`).append(box);
}
this.player[`player${data.value.cid}`].changeVideResolution({
width: style.width ? parseInt(styleWidth) : 800,
height: parseInt(style.height) ? styleHeight : 450,
});
});
const videoTimer = setInterval(() => {
// 通话计时
const tipDom = $(`.ump-sdk-video-timeTip`);
const timeNum = Number(tipDom.attr("data-time")) + 1;
tipDom.attr("data-time", timeNum);
tipDom.text(`${UMPSDK.timeHandler(timeNum)}`);
}, 1000);
const obj = {
cid: data.value.cid,
timer: videoTimer,
};
let styleWidth = style.width ? style.width.replace("px", "") : "";
let styleHeight = style.width ? style.height.replace("px", "") : "";
this.timer.videoTimer.push(obj);
this.player[`player${data.value.cid}`].changeVideResolution({
width: style.width ? parseInt(styleWidth) : 800,
height: parseInt(style.height) ? styleHeight : 450,
});
break;
}
}
closeVideo(data, el) {
this.video.id = ""; // 重置id
// 主动关闭、挂断视频
this.clearTimerHandler("videoTimer", data.value.cid);
this.timer.isCalling = false;
el.remove();
cloudICP.dispatch.video.release({
cid: data.value.cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("视频主动挂断" + JSON.stringify(rsp))
);
}
if (this.player[`player${data.value.cid}`]) {
this.player[`player${data.value.cid}`].stop();
this.player[`player${data.value.cid}`] = null;
delete this.player[`player${data.value.cid}`];
}
},
});
}
// 外部调用,移除视频通话组件
reMoveMoniterCallDom() {
this.closeVideo(
this.video.data,
document.getElementById(`ump-sdk-video-box-${this.video.cid}`)
);
}
// 视频监控
initMonitorHandler() {
this.monitor.dial = (target, fmt, mute, confirm, camera, style, id) => {
this.monitor.id = id; // 传入id时为内嵌模式保存id
const monitorDialog = document.getElementsByClassName(
`ump-sdk-monitor-out-dialog-src-${target}`
);
if (monitorDialog.length) {
this.showMessage("该摄像头监控已打开", "warning");
return;
}
if (!target) {
this.showMessage("请输入对端isdn号码", "warning");
return;
}
const param = {
to: target,
monitorParam: {
fmt: fmt || "4K",
mute: mute || "0",
confirm: confirm || "0",
camera: camera || "0",
mode: "wssflow",
width: 800,
height: 450,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("发起视频监控" + JSON.stringify(rsp))
);
}
this.cardStyle.monitorStyle = style ? style : "";
},
};
cloudICP.dispatch.video.monitorVideo(param);
};
}
createMonitorDialogDom(data, style) {
// 有id时屏蔽全屏按钮与关闭按钮, 内嵌弹窗时使用id
let id = this.monitor.id || "";
const callee =
data.value.calltype === "dispatch" ? data.value.src : data.value.callee;
const divDom = $(`
<div class="ump-sdk ump-sdk-monitor-card ump-sdk-monitor-out-dialog ump-sdk-monitor-out-dialog-src-${callee} ${
id ? "ump-sdk-monitor-card_embedded" : ""
}" style="left:${style.posX};top:${style.posY};width:${
style.width
};height:${style.height}" src="${callee}" data-cid=${
data.value.cid
} id="${"ump-sdk-monitor-out-dialog-" + data.value.cid}">
<div class="ump-sdk-monitor-player" id=${
"ump-sdk-monitor-player-" + data.value.cid
}></div>
<div class="ump-sdk-monitor-status">
<div class="ump-sdk-monitor-out-dialog-tip">${
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
}</div>
</div>
<div class="ump-sdk-monitor-info">
<div class="ump-sdk-monitor-out-dialog-title">
<div class="ump-sdk-monitor-out-dialog-title-username" data-time="0">${callee}</div>
<div class="ump-sdk-monitor-out-dialog-title-tool">
<div class="ump-sdk-monitor-out-dialog-title-tool-full" id="ump-sdk-monitor-out-dialog-title-tool-full-${
data.value.cid
}" title="全屏"></div>
<div class="ump-sdk-monitor-out-dialog-title-tool-not-full" id="ump-sdk-monitor-out-dialog-title-tool-not-full-${
data.value.cid
}" title="退出全屏"></div>
<div class="ump-sdk-monitor-out-dialog-title-tool-close" style="${
id ? "display:none" : ""
}" id="ump-sdk-monitor-out-dialog-title-tool-close-${
data.value.cid
}" title="关闭"></div>
</div>
</div>
<div class="ump-sdk-monitor-out-dialog-bottom">
<div class="ump-sdk-monitor-out-dialog-bottom-left">
<div class="ump-sdk-monitor-out-dialog-mute" id="ump-sdk-monitor-out-dialog-mute-${
data.value.cid
}" title="静音"></div>
<div class="ump-sdk-monitor-out-dialog-unmute" id="ump-sdk-monitor-out-dialog-unmute-${
data.value.cid
}" title="取消静音"></div>
<div class="ump-sdk-monitor-out-dialog-dispatch" id="ump-sdk-monitor-out-dialog-dispatch-${
data.value.cid
}" title="分发"></div>
</div>
<div class="ump-sdk-monitor-out-dialog-bottom-right">
<div class="ump-sdk-monitor-out-dialog-hang-up" id="ump-sdk-monitor-out-dialog-hang-up-${
data.value.cid
}" title="挂断"></div>
</div>
<ul class="ump-sdk-monitor-out-dialog-dispatch-container" data-show="0"></ul>
</div>
</div>
</div>
`);
if (id) {
// 传入id则弹窗嵌入到此id所在DOM内
$(`#${id}`).append(divDom);
} else {
// 无id则弹窗嵌入到body内
$("body").append(divDom);
}
// this.monitor.id = ''; // 重置id
// 初始化拖拽
const draggableInstance = this.draggable(
"ump-sdk-monitor-out-dialog-" + data.value.cid
);
if (id) {
// 传入id则弹窗禁用拖拽功能
draggableInstance.disableDragging();
}
// 初始化分发对象
this.dispatchArr[`cid-${data.value.cid}`] = [];
// 关闭弹窗
const closeMonitorHandler = (cid, dialogDom) => {
this.clearTimerHandler("monitorTimer", cid);
delete this.dispatchArr[cid];
dialogDom.remove();
this.monitor.id = ""; // 重置id
cloudICP.dispatch.video.release({
cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("监控主动挂断" + JSON.stringify(rsp))
);
}
if (this.player[`player${cid}`]) {
this.player[`player${cid}`].stop();
this.player[`player${cid}`] = null;
delete this.player[`player${cid}`];
}
},
});
};
$(`#ump-sdk-monitor-out-dialog-hang-up-${data.value.cid}`).click(() => {
closeMonitorHandler(data.value.cid, divDom);
});
$(`#ump-sdk-monitor-out-dialog-title-tool-close-${data.value.cid}`).click(
() => {
closeMonitorHandler(data.value.cid, divDom);
}
);
// 全屏
$(`#ump-sdk-monitor-out-dialog-title-tool-full-${data.value.cid}`).click(
() => {
const monitorCardDom = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid}`
);
const fullDom = $(
`#ump-sdk-monitor-out-dialog-title-tool-full-${data.value.cid}`
);
const notFullDom = $(
`#ump-sdk-monitor-out-dialog-title-tool-not-full-${data.value.cid}`
);
monitorCardDom.addClass("ump-sdk-monitor-card-full-width-height");
fullDom.attr("style", "display: none");
notFullDom.attr("style", "display: block");
// 全屏后禁止拖动,并且清空内联样式
draggableInstance.disableDragging();
if (this.monitor.id) {
// 传入id则弹窗嵌入到此id所在DOM内
const targetDom = document.getElementById(
`ump-sdk-monitor-out-dialog-${data.value.cid}`
);
targetDom.style.position = "fixed";
targetDom.style.top = "0";
targetDom.style.left = "0";
targetDom.style.right = "unset";
targetDom.style.bottom = "unset";
targetDom.style.transform = "unset";
$("body").append(targetDom);
}
if (this.player[`player${data.value.cid}`]) {
this.player[`player${data.value.cid}`].changeVideResolution({
width: parseInt(monitorCardDom.width()),
height: parseInt(monitorCardDom.height()),
});
}
}
);
// 退出全屏
$(
`#ump-sdk-monitor-out-dialog-title-tool-not-full-${data.value.cid}`
).click(() => {
if (this.monitor.id) {
// 传入id则弹窗嵌入到此id所在DOM内
draggableInstance.disableDragging();
} else {
// 还原后可以拖动
draggableInstance.enableDragging();
}
const monitorCardDom = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid}`
);
const fullDom = $(
`#ump-sdk-monitor-out-dialog-title-tool-full-${data.value.cid}`
);
const notFullDom = $(
`#ump-sdk-monitor-out-dialog-title-tool-not-full-${data.value.cid}`
);
monitorCardDom.removeClass("ump-sdk-monitor-card-full-width-height");
fullDom.attr("style", "display: block");
notFullDom.attr("style", "display: none");
if (this.monitor.id) {
// 传入id则弹窗嵌入到此id所在DOM内
const targetDom = document.getElementById(
`ump-sdk-monitor-out-dialog-${data.value.cid}`
);
targetDom.style.position = "relative";
targetDom.style.top = "50%";
targetDom.style.left = "50%";
targetDom.style.right = "unset";
targetDom.style.bottom = "unset";
targetDom.style.transform = "translate(-50%,-50%)";
$(`#${this.monitor.id}`).append(targetDom);
}
if (this.player[`player${data.value.cid}`]) {
this.player[`player${data.value.cid}`].changeVideResolution({
width: parseInt(monitorCardDom.width()),
height: parseInt(monitorCardDom.height()),
});
}
});
// 静音与取消静音操作
const muteOrUnmuteHandlrt = (volume, cid) => {
const muteDom = $(`#ump-sdk-monitor-out-dialog-mute-${cid}`);
const unmuteDom = $(`#ump-sdk-monitor-out-dialog-unmute-${cid}`);
if (volume === "0") {
muteDom.attr("style", "display: none");
unmuteDom.attr("style", "display: block");
} else {
muteDom.attr("style", "display: block");
unmuteDom.attr("style", "display: none");
}
cloudICP.dispatch.device.setVolume({
cid,
volume,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
(volume === "0" ? "静音扬声器" : "解除静音扬声器") +
JSON.stringify(rsp)
)
);
}
},
});
};
// 静音
$(`#ump-sdk-monitor-out-dialog-mute-${data.value.cid}`).click(() => {
muteOrUnmuteHandlrt("0", data.value.cid);
});
// 取消静音
$(`#ump-sdk-monitor-out-dialog-unmute-${data.value.cid}`).click(() => {
muteOrUnmuteHandlrt("100", data.value.cid);
});
// 分发弹窗
$(`#ump-sdk-monitor-out-dialog-dispatch-${data.value.cid}`).click(() => {
const dispatchDom = $(`
<div class="ump-sdk ump-sdk-monitor-out-dialog-dispatch-dialog-mask" id="ump-sdk-monitor-out-dialog-dispatch-dialog-mask-${
data.value.cid
}">
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog" id=${
"ump-sdk-monitor-out-dialog-dispatch-dialog-" + data.value.cid
}>
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-head">
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-title">视频分发</div>
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-close"></div>
</div>
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-content">
<label>
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-inputname">人员、设备</div>
<div>
<input class="ump-sdk-monitor-out-dialog-dispatch-person" type="text" placeholder="输入人员、设备isdn号多个以英文逗号隔开" autocomplete="off"/>
</div>
</label>
<label>
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-inputname">群组</div>
<div>
<input class="ump-sdk-monitor-out-dialog-dispatch-group" type="text" placeholder="输入群组isdn号多个以英文逗号隔开" autocomplete="off"/>
</div>
</label>
</div>
<div class="ump-sdk-monitor-out-dialog-dispatch-dialog-bottom">
<button type="button">提交</button>
</div>
</div>
</div>
`);
$("body").append(dispatchDom);
$(".ump-sdk-monitor-out-dialog-dispatch-dialog-close").click(() => {
dispatchDom.remove();
});
$(".ump-sdk-monitor-out-dialog-dispatch-dialog-bottom").click(() => {
const personValue = $(
".ump-sdk-monitor-out-dialog-dispatch-dialog-content .ump-sdk-monitor-out-dialog-dispatch-person"
)
.val()
.trim();
const groupValue = $(
".ump-sdk-monitor-out-dialog-dispatch-dialog-content .ump-sdk-monitor-out-dialog-dispatch-group"
)
.val()
.trim();
const dispatchCallbackHandler = (
dispatchRes,
dispatchDom,
personValue,
groupValue
) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"视频分发操作" + JSON.stringify(dispatchRes)
)
);
}
if (dispatchRes.rsp === "0") {
dispatchDom.remove();
if (
!$(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-dispatch-list`
).length
) {
$(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-dispatch`
).after(
`<div class="ump-sdk-monitor-out-dialog-dispatch-list" title="分发列表"></div>`
);
$(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-dispatch-list`
).click(() => {
const containerDom = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-dispatch-container`
);
if (containerDom.attr("data-show") === "0") {
containerDom.show();
containerDom.attr("data-show", "1");
} else {
containerDom.hide();
containerDom.attr("data-show", "0");
}
});
}
const allItem = [
...personValue
.split(",")
.filter((ele) => ele.trim())
.map((e) => ({ isdn: e, isGroup: false })),
...groupValue
.split(",")
.filter((ele) => ele.trim())
.map((e) => ({ isdn: e, isGroup: true })),
];
allItem.forEach((e) => {
if (
!this.dispatchArr[`cid-${data.value.cid}`].some(
(ele) => ele.isdn === e.isdn && ele.isGroup === e.isGroup
)
) {
this.dispatchArr[`cid-${data.value.cid}`].push({
isdn: e.isdn,
isGroup: e.isGroup,
});
const dom =
$(`<li class="ump-sdk-monitor-out-dialog-dispatch-item" id="ump-sdk-monitor-out-dialog-dispatch-item-${e.isdn}">
<div class="ump-sdk-monitor-out-dialog-dispatch-item-name">${e.isdn}</div>
<div class="ump-sdk-monitor-out-dialog-dispatch-item-status ump-sdk-monitor-out-dialog-dispatch-item-status-connection"
data-isgroup=${e.isGroup} data-id=${e.isdn}
></div>
</li>`);
$(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-dispatch-container`
).append(dom);
}
// 针对群组的状态单独改变
if (e.isGroup) {
const groupStatus = "calling";
const groupData = {
eventName: "OnVideoDispatchStatusNotify",
rsp: "4021",
value: {
src: callee,
peerid: e.isdn,
},
};
this.changeDispatchLiDomStatus(groupData, groupStatus);
}
});
}
};
// 分发人员
if (personValue) {
const dispatchPersonArr = personValue
.split(",")
.filter((ele) => ele.trim())
.map((e) => ({ isdn: e }));
const param = {
src: callee,
fmt: "NO",
dest: dispatchPersonArr,
callback: (dispatchRes) => {
dispatchCallbackHandler(
dispatchRes,
dispatchDom,
personValue,
groupValue
);
},
};
cloudICP.dispatch.video.dispatchVideo(param);
}
// 分发群组
if (groupValue) {
const dispatchGroupArr = groupValue
.split(",")
.filter((ele) => ele.trim())
.map((e) => ({ isdn: e }));
const param = {
src: callee,
fmt: "CIF",
dest: [],
destGroups: dispatchGroupArr,
callback: (dispatchRes) => {
dispatchCallbackHandler(
dispatchRes,
dispatchDom,
personValue,
groupValue
);
},
};
cloudICP.dispatch.video.dispatchVideo(param);
}
});
});
}
removeMonitorDom(cid) {
let dialogDom = document.getElementById(
`ump-sdk-monitor-out-dialog-${cid}`
);
this.clearTimerHandler("monitorTimer", cid);
delete this.dispatchArr[cid];
dialogDom.remove();
this.monitor.id = ""; // 重置id
cloudICP.dispatch.video.release({
cid,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("监控主动挂断" + JSON.stringify(rsp))
);
}
if (this.player[`player${cid}`]) {
this.player[`player${cid}`].stop();
this.player[`player${cid}`] = null;
delete this.player[`player${cid}`];
}
},
});
}
changeDispatchLiDomStatus(data, status) {
const liIcon = $(
`.ump-sdk-monitor-out-dialog-src-${data.value.src} #ump-sdk-monitor-out-dialog-dispatch-item-${data.value.peerid} .ump-sdk-monitor-out-dialog-dispatch-item-status`
);
liIcon.attr(
"class",
`ump-sdk-monitor-out-dialog-dispatch-item-status ump-sdk-monitor-out-dialog-dispatch-item-status-${status}`
);
liIcon.attr("title", "");
liIcon.unbind("click");
if (status === "calling") {
liIcon.attr("title", "取消视频分发");
liIcon.click(() => {
const isGroup = liIcon.attr("data-isgroup");
let param = null;
if (isGroup === "true") {
param = {
src: data.value.src,
dest: "",
destGroup: liIcon.attr("data-id"),
callback: (resData) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"取消对群组分发" + JSON.stringify(resData)
)
);
}
if (resData.rsp === "0") {
this.changeDispatchLiDomStatus(data, "holdup");
}
},
};
} else {
param = {
src: data.value.src,
dest: liIcon.attr("data-id"),
callback: (resData) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"取消对人员设备分发" + JSON.stringify(resData)
)
);
}
},
};
}
cloudICP.dispatch.video.cancelVideoDispatch(param);
});
}
}
openMonitorDialog(data, style) {
switch (data.eventName) {
// 呼出事件
case "OnDialOutProceeding":
this.createMonitorDialogDom(data, style);
break;
// 呼出失败
case "OnDialOutFailure":
const tipDomFail = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-tip`
);
tipDomFail.text(
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
);
break;
// 振铃事件
case "OnDialOutRinging":
const tipDomRinging = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-tip`
);
tipDomRinging.text(
this.CommunicateStatusEnum[data.eventName + "-" + data.rsp]
);
break;
// 通话建立
case "OnCallConnect": {
const tipDomRinging = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-tip`
);
tipDomRinging.text("");
const timer = setInterval(() => {
const tipDom = $(
`#ump-sdk-monitor-out-dialog-${data.value.cid} .ump-sdk-monitor-out-dialog-title .ump-sdk-monitor-out-dialog-title-username`
);
const timeNum = Number(tipDom.attr("data-time")) + 1;
tipDom.attr("data-time", timeNum);
tipDom.text(
`${
data.value.calltype === "dispatch"
? data.value.src
: data.value.callee
} ${UMPSDK.timeHandler(timeNum)}`
);
}, 1000);
try{
this.player[`player${data.value.cid}`] = this.createYuvPlayer(
data,
document.getElementById(
`${"ump-sdk-monitor-player-" + data.value.cid}`
)
);
}
catch(error) {
console.log("MSP_Player",error)
}
const obj = {
cid: data.value.cid,
timer,
};
this.timer.monitorTimer.push(obj);
break;
}
}
}
// 短彩信业务
initMessageHandler() {
/**
* 初始化短彩信业务
* @param {Array} targets 对端isdn组成的数组
* @param {String} content 短信文本内容
* @param {Object} attchement 附件File对象
*/
this.msg.send = async (targets, content, attchement) => {
if (!targets || !targets.length) {
this.showMessage("请输入对端isdn号码", "warning");
return;
}
if (!content && !attchement) {
this.showMessage("请输入短彩信内容", "warning");
return;
}
// 短信发送
if (content) {
const msgidArr = targets.map((ite, index) => {
const currentTime = new Date();
return currentTime.getTime() + index;
});
const param = {
dest: targets.join(";"),
msgid: msgidArr.join(";"),
content,
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("短信发送结果" + JSON.stringify(res))
);
}
},
};
cloudICP.dispatch.sms.sendDispSMS(param);
}
// 彩信发送
if (attchement) {
if (attchement.size / 1024 / 1024 > 20) {
this.showMessage("附件最大不超过20M", "warning");
return;
}
let fileBuffer;
const reader = new FileReader();
// 文件读取成功后的回调函数
reader.onload = function (e) {
// e.target.result为文件的二进制数据
fileBuffer = e.target.result;
};
reader.readAsArrayBuffer(attchement);
const attachThumb = await this.getAttachThumb(attchement);
const authorization = await this.attachAuthorization();
const res = await this.uploadAttachment(attchement, fileBuffer);
if (res == 200) {
const dest = targets.map((ite) => {
return {
isdn: ite,
msgid: this.msg.msgid,
};
});
const param = {
dest,
content: "",
attach: attchement.name,
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("彩信发送结果" + JSON.stringify(res))
);
}
},
};
if (attachThumb) {
param.attach_thumb = attachThumb;
}
cloudICP.dispatch.sms.sendDispMMS(param);
} else {
this.showMessage("彩信发送失败", "error");
}
}
};
}
// 附件鉴权
async attachAuthorization() {
// 鉴权
try {
const postUrl = await fetch("/attachment", {
method: "GET",
})
.then((response) => {
if (response.status === 401) {
const wwwAuthenticate = response.headers.get("WWW-Authenticate");
// 解析 WWW-Authenticate 头部中的参数
this.parseWWWAuthenticate(wwwAuthenticate);
return null;
}
})
.catch((err) => {
console.log(err);
});
} catch (err) {
console.log("请求失败");
}
}
async uploadAttachment(file, fileBuffer) {
const formData = new FormData();
formData.append("file", new Blob([fileBuffer]));
formData.append("userid", this.isdn);
const uploadtTime = String(new Date().getTime());
this.msg.msgid = uploadtTime;
formData.append("date", uploadtTime);
formData.append("msgid", uploadtTime);
return new Promise((resolve) => {
fetch("/attachment", {
method: "POST",
headers: {
Authorization: this.msg.authorizationHeader,
},
body: formData,
}).then((response) => {
if (response.status == 200) {
if (this.logCallback) {
this.logCallback(UMPSDK.logInfoFormat("🚀附件上传成功"));
}
resolve(response.status);
} else {
if (this.logCallback) {
this.logCallback(UMPSDK.logInfoFormat("❗附件上传失败"));
}
resolve("");
}
});
});
}
// 处理返回的wwwAuthenticate
parseWWWAuthenticate(header) {
const params = {};
const parts = header.split(","); // 根据逗号分隔多个参数
parts[1] = parts[1] + "," + parts[2];
parts.splice(2, 1);
parts.forEach((part) => {
const [key, value] = part.split("=");
params[key.trim()] = value.replace(/"/g, "").trim(); // 去掉引号
});
// return params;
this.handleAuthorization(params);
}
// 处理鉴权
handleAuthorization(params) {
const username = this.isdn;
const password = this.isdnPwd;
const method = "POST";
const uri = "/attachment"; // 请求的 URI
const qop = "auth";
const algorithm = "SHA-256";
// 计算 A1 和 A2
const A1 = `${username}:${params["Digest realm"]}:${password}`;
const A2 = `${method}:${uri}`;
// 计算响应
const nonceCount = "00000001"; // 计数器,通常是 1
const cnonce = this.generateCnonce(); // 客户端生成的 nonce
// const qop = 'auth'; // 质量保护
const response = sha256(
`${sha256(A1)}:${params.nonce}:${nonceCount}:${cnonce}:${qop}:${sha256(
A2
)}`
);
// 生成 Authorization 头部
const authorizationHeader = `Digest username="${username}", realm="${params["Digest realm"]}", nonce="${params.nonce}", uri="${uri}", algorithm="${algorithm}", qop=${qop}, nc=${nonceCount}, cnonce="${cnonce}", response="${response}", opaque="${params.opaque}"`;
this.msg.authorizationHeader = authorizationHeader;
}
// 在浏览器环境中使用window.cryptoAPI 生成conce
generateCnonce(length = 16) {
const array = new Uint8Array(length);
window.crypto.getRandomValues(array);
return Array.from(array, (byte) =>
("0" + byte.toString(16)).slice(-2)
).join("");
}
getAttachThumb(attchement) {
return new Promise((resolve) => {
if (["image/jpeg", "image/png"].includes(attchement.type)) {
// 获取图片缩略图
const reader = new FileReader();
reader.readAsDataURL(attchement);
// 调整缩略图尺寸或者质量,防止出现请求体过大的问题
reader.onload = function (e) {
const img = document.createElement("img");
img.src = e.target.result;
img.crossOrigin = "anonymous"; // 添加跨域属性
img.onload = function () {
const canvas = document.createElement("canvas");
const { naturalWidth, naturalHeight } = img;
const targetWidth = 200; // 设置缩略图的宽度
const targetHeight = Math.round(
(targetWidth * naturalHeight) / naturalWidth
); // 按比例计算缩略图的高度
canvas.width = targetWidth;
canvas.height = targetHeight;
const context = canvas.getContext("2d");
context.drawImage(img, 0, 0, targetWidth, targetHeight);
const arr = canvas.toDataURL("image/jpeg").split("base64,");
resolve(arr[1] || "");
};
};
} else if (["video/mp4"].includes(attchement.type)) {
// 获取视频缩略图
const url = URL.createObjectURL(attchement);
const video = document.createElement("video");
video.setAttribute("crossOrigin", "anonymous");
video.setAttribute("preload", "metadata");
video.setAttribute("src", url);
video.currentTime = 1; // 视频开始可能是黑屏状态
video.addEventListener("loadeddata", function () {
const canvas = document.createElement("canvas");
const { videoWidth, videoHeight } = video;
canvas.width = videoWidth;
canvas.height = videoHeight;
canvas
.getContext("2d")
.drawImage(video, 0, 0, videoWidth, videoHeight);
const arr = canvas.toDataURL("image/jpeg").split("base64,");
resolve(arr[1] || "");
});
} else {
resolve("");
}
});
}
// 群组业务
GroupCardStyle(style) {
this.group.style = style;
}
initGroupHandler() {
/**
* 初始化群组业务
* @param {String} groupId 群组isdn
* @param {String} style 卡片样式
*/
this.group.open = (groupId, style) => {
if (!groupId) {
this.showMessage("请输入群组的isdn", "warning");
return;
}
if (this.subscribGroupIsdn.some((ite) => ite.groupId === groupId)) {
this.showMessage("该群组已订阅", "warning");
return;
}
const param = {
grpid: groupId,
callback: (res) => {
if (res.rsp === "0") {
this.subscribGroupIsdn.push({ cid: "", groupId });
const obj = {
isInit: true,
value: {
grpid: groupId,
},
};
this.openGroupDialog(obj, style);
} else {
this.showMessage("群组订阅失败" + res.desc, "error");
}
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("群组订阅操作" + JSON.stringify(res))
);
}
},
};
cloudICP.dispatch.group.subjoinTalkingGroup(param); // 订阅并自动加入组呼
};
}
openGroupDialog(data, style) {
console.log(data, style);
console.log(this.Emergency);
if (data.isInit) {
const groupDom = $(
`<div class="ump-sdk ump-sdk-group-card" style="background:${
style.bgColor
};left:${style.posX};top:${style.posY};width:${style.width};height:${
style.height
};border-color:${style.borderColor};" id=${
"ump-sdk-group-card-" + data.value.grpid
}>
<div class="ump-sdk-group-card-tip">
<span>群组:${data.value.grpid}</span>
<div style="display: flex;align-items: center;height:12px">
<svg style="cursor: pointer;height:12px" width="16" heigth="12" t="1734574453170" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3377" width="200" height="200"><path d="M853.333333 544H170.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h682.666666c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" p-id="3378" fill="#ffffff"></path></svg>
<div style="margin-left:8px;" class="ump-sdk-group-card-close-btn"></div>
</div>
</div>
<div class="ump_sdk_group_card_speaker">
<div id="" class="ump-sdk-group-card-speaker" style="${
data.value.speaker ? "opacity: 1" : "opacity: 0"
}">
<span class="ump-sdk-group-card-speaker-name">${
data.value.speaker
} 主讲中</span>
<div class="ump-sdk-group-card-voice-effect">
<span class="ump-sdk-group-card-voice-item"></span>
<span class="ump-sdk-group-card-voice-item"></span>
<span class="ump-sdk-group-card-voice-item"></span>
<span class="ump-sdk-group-card-voice-item"></span>
<span class="ump-sdk-group-card-voice-item"></span>
</div>
</div>
</div>
<div class="ump-sdk-group-card-content-box" style="width: 70px;height: 70px;display: flex;align-items: center;justify-content: center;cursor: move;">
<div class="ump-sdk-group-card-content" style="width: 60px;height: 60px;display: flex;align-items: center;justify-content: center;cursor: pointer;">
<div class="ump-sdk-group-card-btn ump-sdk-group-card-btn-no-speaker" title="按住进行组呼">
<div class="ump-sdk-group-card-btn-talking">
<div class="ump-sdk-group-card-btn-talking-item"></div>
<div class="ump-sdk-group-card-btn-talking-item"></div>
<div class="ump-sdk-group-card-btn-talking-item"></div>
<div class="ump-sdk-group-card-btn-talking-item"></div>
<div class="ump-sdk-group-card-btn-talking-item"></div>
<div class="ump-sdk-group-card-btn-talking-item"></div>
</div>
</div>
</div>
</div>
<div class="ump-sdk-group-card-expansion-box" >
<span class="ump-sdk-group-card-expansion-btn" data-isExpansion="0">展开成员</span>
</div>
<div class="ump-sdk-group-card-member-box"></div>
</div>`
);
// 点击 SVG 时,只显示 .ump-sdk-group-card-content
groupDom.find("svg").on("click", function () {
$(this)
.closest(".ump-sdk-group-card")
.css({
width: "70px",
height: "70px",
})
.find(
".ump-sdk-group-card-tip, .ump_sdk_group_card_speaker, .ump-sdk-group-card-expansion-box, .ump-sdk-group-card-member-box"
)
.hide();
});
// 点击 .ump-sdk-group-card-content 时,恢复之前的内容
groupDom.find(".ump-sdk-group-card-content").on("click", function () {
const parentCard = $(this).closest(".ump-sdk-group-card");
parentCard
.css({
width: "260px",
height: "auto",
})
.find(
".ump-sdk-group-card-tip, .ump_sdk_group_card_speaker, .ump-sdk-group-card-expansion-box, .ump-sdk-group-card-member-box"
)
.show();
});
groupDom
.find(".ump-sdk-group-card-btn-no-speaker")
.on("click", function (event) {
event.stopPropagation();
});
$("body").append(groupDom);
this.draggable(`ump-sdk-group-card-${data.value.grpid}`);
// 关闭群组卡片
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-close-btn`
).click(async () => {
this.unsubscribeTalkingGroup(data.value.grpid, groupDom);
});
// 组呼发起
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-btn`
).mousedown(() => {
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-btn`
).addClass("ump-sdk-group-card-btn-speaker");
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-btn-talking`
).attr("style", "display: block;");
const param = {
grpid: data.value.grpid,
callback: (res) => {
if (res.rsp !== "0") {
this.showMessage("组呼发起失败" + res.desc, "error");
}
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("组呼发起" + JSON.stringify(res))
);
}
},
};
cloudICP.dispatch.group.pttTalkingGroup(param);
});
// 组呼放权
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-btn`
).mouseup(() => {
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-btn`
).removeClass("ump-sdk-group-card-btn-speaker");
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-btn-talking`
).attr("style", "display: none;");
const param = {
grpid: data.value.grpid,
callback: (res) => {
if (res.rsp !== "0") {
this.showMessage("组呼放权失败" + res.desc, "error");
}
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("组呼放权" + JSON.stringify(res))
);
}
},
};
cloudICP.dispatch.group.pttreleaseTalkingGroup(param);
});
// 展开成员
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-expansion-btn`
).click(async () => {
const expansionBtnDom = $(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-expansion-btn`
);
const memberBoxDom = $(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-member-box`
);
if (expansionBtnDom.attr("data-isExpansion") === "0") {
expansionBtnDom.text("收起成员");
expansionBtnDom.attr("data-isExpansion", "1");
memberBoxDom.children().remove();
// const resArr = await this.getGroupMember(data.value.grpid)
let params = {
grpid: data.value.grpid,
callback: (data) => {
console.log(data, "========data============");
if (data.rsp === "0") {
const resArr = data.list;
this.logCallback(
UMPSDK.logInfoFormat(
"查询群组成员成功" + JSON.stringify(data)
)
);
if (resArr && resArr.length > 0) {
resArr.forEach((ite) => {
const childrenDom = $(
`<p class="ump-sdk-group-card-member-p">${ite.isdn}</p>`
);
memberBoxDom.append(childrenDom);
});
}
} else {
this.logCallback(
UMPSDK.logInfoFormat(
"查询群组成员失败" + JSON.stringify(data)
)
);
}
},
};
cloudICP.dispatch.query.queryTalkingGroupMembersV1(params); // 无法对派接组进行查询
} else {
expansionBtnDom.text("展开成员");
expansionBtnDom.attr("data-isExpansion", "0");
memberBoxDom.children().remove();
}
});
} else if (data && data.value && data.value.speaker) {
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-speaker`
).attr("style", "opacity: 1;");
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-speaker-name`
).text(`${data.value.speaker} 主讲中`);
if (this.Emergency.includes("紧急组呼")) {
$(`#ump-sdk-group-card-${data.value.grpid}`)
.addClass("border-red")
.removeClass("border-none");
}
} else if (data && data.value && !data.value.speaker) {
$(
`#ump-sdk-group-card-${data.value.grpid} .ump-sdk-group-card-speaker`
).attr("style", "opacity: 0;");
if (!this.Emergency.includes("紧急组呼")) {
$(`#ump-sdk-group-card-${data.value.grpid}`)
.addClass("border-none")
.removeClass("border-red");
}
}
}
unsubscribeTalkingGroup(grpid, groupDom) {
// 去订阅
const param = {
grpid,
callback: (result) => {
if (result.rsp === "0") {
groupDom.remove();
this.subscribGroupIsdn = this.subscribGroupIsdn.filter(
(ite) => ite.groupId !== grpid
);
this.showMessage("群组去订阅成功", "success");
} else {
this.showMessage("群组去订阅失败" + result.desc, "error");
}
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("群组去订阅操作" + JSON.stringify(result))
);
}
},
};
cloudICP.dispatch.group.unsubscribeTalkingGroup(param);
}
getGroupMember(groupId) {
return new Promise((resolve) => {
fetch(this.url + "/api/v2/resource/groups/" + groupId, {
method: "GET",
headers: {
Authorization: "token " + this.accessToken,
},
})
.then((response) => response.json())
.then((data) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("获取群组成员:" + JSON.stringify(data))
);
}
if (data && data.data && Array.isArray(data.data.member)) {
resolve(data.data.member);
} else {
resolve([]);
}
})
.catch((error) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"❗获取群组成员失败:" + JSON.stringify(error)
)
);
}
resolve([]);
});
});
}
//============================会议相关业务代码==================================
// 会议初始化构造函数
meetingCardStyle(style) {
this.metting.style = style;
}
initMetingHandler() {
this.metting.dial = (mettingType, obj, style) => {
console.log(obj, "----------------------");
this.metting.style = style;
const mettingDialog = document.getElementsByClassName(
`ump-sdk-metting-out-dialog`
);
if (mettingDialog.length) {
this.showMessage("会议已存在", "warning");
return;
}
let param = "";
this.metting.isJoin = false;
this.metting.carmerStatus = obj.carmerStatus;
this.metting.macStatus = obj.macStatus;
obj.memberInfos.forEach((ite, index) => {
let result = this.metting.userInfoList.find(
(item) => item.isdn === ite.number
);
if (result) {
if (result.category === "1") {
ite.isCamera = "true";
} else {
ite.isCamera = "false";
}
if (result.category === "1") {
ite.h265 = "true";
} else {
ite.h265 = "false";
}
} else {
ite.isCamera = "false";
ite.h265 = "false";
}
});
console.log(
obj.memberInfos,
"=============根据用户能力设置isCamera、h265的值================"
);
if (mettingType === "immediately") {
// 即时会议
param = {
isVideo: String(obj.carmerStatus),
confRate: obj.confRate || "",
memberInfos: obj.memberInfos || [],
windowInfo: obj.windowInfo || {
mode: "wssflow",
width: 800,
height: 450,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("发起即时会议" + JSON.stringify(rsp))
);
}
this.cardStyle.monitorStyle = obj.style;
},
};
console.log(param, "==========即时会议参数============");
cloudICP.dispatch.conf.createConf(param);
} else if (mettingType === "appoint") {
// 预约会议
param = {
isVideo: "true",
confRate: "",
time: obj.time || "",
timeZone: obj.timeZone || "",
timeZoneName: obj.timeZoneName || "",
memberInfos: obj.memberInfos || [],
windowInfo: obj.windowInfo || {
mode: "wssflow",
width: 800,
height: 450,
showToolbar: 0,
posX: 0,
posY: 0,
},
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("发起预约会议" + JSON.stringify(rsp))
);
}
this.cardStyle.monitorStyle = obj.style;
},
};
console.log(param, "==========预约会议参数============");
cloudICP.dispatch.conf.createConf(param);
}
};
}
/*静音会议*/
muteConference(data) {
let param = {
confId: data.value.confId,
isMute: JSON.stringify(this.metting.macStatus),
number: this.isdn,
callback: (data) => {},
};
cloudICP.dispatch.conf.muteConfMember(param);
}
/*会议上墙*/
conferenceVideoWall(data) {
if (this.metting.carmerStatus) {
let param = {
confId: data.value.confId,
number: this.isdn,
callback: (data) => {},
};
cloudICP.dispatch.conf.broadcastConfMember(param);
}
}
// 主动入会
async activeMetting(obj, style) {
this.metting.style = style;
let param = {
confId: obj.confId,
unifiedAccessCode: obj.unifiedAccessCode,
passcode: obj.passcode,
isVideo: "true",
windowInfo: {
width: 800,
height: 450,
},
callback: (data) => {
if (data.rsp === "0") {
this.logCallback(
UMPSDK.logInfoFormat("主动入会成功" + JSON.stringify(data))
);
} else {
this.logCallback(
UMPSDK.logInfoFormat("主动入会失败" + JSON.stringify(data))
);
}
},
};
this.metting.Attendees = []; // 主动入会的会议成员信息list数组
this.metting.isJoin = true; // 加入会议和创建会议都会进入3003状态码因此采用锚点进行区分
cloudICP.dispatch.conf.joinConf(param);
}
// 查询调度员调度员是否存在未退出会议
queryingTheConferenceStatus() {
let param = {
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
"查询当前登录坐席是否存在会议" + JSON.stringify(rsp)
)
);
}
},
};
cloudICP.dispatch.conf.queryConfListByAttendee(param);
}
closeMetting(data) {
let dom = document.getElementsByClassName(
"ump-sdk-metting-endConference"
)[0];
if (dom.innerHTML === "离开会议") {
let param = {
cid: data.value.cid,
callback: (res) => {
if (res.rsp === "0") {
UMPSDK.logInfoFormat("离开会议成功" + JSON.stringify(res));
} else {
UMPSDK.logInfoFormat("离开会议失败" + JSON.stringify(res));
}
},
};
console.log("主动离开会议,容器移除❌❌❌");
cloudICP.dispatch.conf.exitVideoConf(param);
const dom = document.getElementById(
`ump-sdk-metting-out-dialog-${data.value.confId}`
);
if (dom) {
dom.remove();
}
} else {
let param = {
confId: data.value.confId,
callback: (res) => {
if (res.rsp === "0") {
UMPSDK.logInfoFormat("主动结束成功" + JSON.stringify(res));
} else {
UMPSDK.logInfoFormat("主动结束失败" + JSON.stringify(res));
}
},
};
console.log("主动结束会议,容器移除❌❌❌");
cloudICP.dispatch.conf.endConf(param);
const dom = document.getElementById(
`ump-sdk-metting-out-dialog-${data.value.confId}`
);
if (dom) {
dom.remove();
}
}
this.clearTimerHandler("videoTimer", this.metting.cid);
this.metting.setGridPerson = [];
this.metting.setPageGridPerson = [];
this.metting.cid = null;
}
// 根据画面布局,设置会场布局生成的网格数量
getGirdNum(type) {
switch (
type // 会场布局样式与画面布局保持一致,设置布局网格
) {
case "CP_1_1":
return (this.metting.girdNum = [1]);
break;
case "CP_2_1":
return (this.metting.girdNum = [1, 2]);
break;
case "CP_3_4":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_4_1":
return (this.metting.girdNum = [1, 2, 3, 4]);
break;
case "CP_5_1":
return (this.metting.girdNum = [1, 2, 3, 4, 5]);
break;
case "CP_6_1":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_7_1":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_7_2":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_8_1":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_9_1":
return (this.metting.girdNum = [1, 2, 3, 4, 5, 6, 7, 8, 9]);
break;
case "CP_10_1":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_10_5":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_13_5":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
case "CP_16_1":
return (this.metting.girdNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]);
break;
}
}
// 根据type类型获取不同布局的网格类名集合
getGridClassName(type) {
switch (
type // 会场布局样式与画面布局保持一致,设置布局网格
) {
case "CP_1_1":
return (this.metting.gridClassName = ["grid0"]);
break;
case "CP_2_1":
return (this.metting.gridClassName = ["grid0", "grid1"]);
break;
case "CP_3_4":
return (this.metting.gridClassName = ["grid0", "grid1", "grid2"]);
break;
case "CP_4_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
]);
break;
case "CP_5_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
]);
break;
case "CP_6_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
]);
break;
case "CP_7_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
]);
break;
case "CP_7_2":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
]);
break;
case "CP_8_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
"grid7",
]);
break;
case "CP_9_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
"grid7",
"grid8",
]);
break;
case "CP_10_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
"grid7",
"grid8",
"grid9",
]);
break;
case "CP_10_5":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
"grid7",
"grid8",
"grid9",
]);
break;
case "CP_13_5":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
"grid7",
"grid8",
"grid9",
"grid10",
"grid11",
"grid12",
]);
break;
case "CP_16_1":
return (this.metting.gridClassName = [
"grid0",
"grid1",
"grid2",
"grid3",
"grid4",
"grid5",
"grid6",
"grid7",
"grid8",
"grid9",
"grid10",
"grid11",
"grid12",
"grid13",
"grid14",
"grid15",
]);
break;
}
}
// 创建会议弹窗
openMettingDialog(data, style) {
const callee =
data.value.calltype === "dispatch" ? data.value.src : data.value.callee;
let whetherToViewParticipants = true;
const mettDom = $(`
<div class="ump-sdk ump-sdk-metting-card" style="background:${
style.bgColor
};left:${style.posX};top:${style.posY};width:${style.width};height:${
style.height
};border-color:${style.borderColor}" id="${
"ump-sdk-metting-out-dialog-" + data.value.confId
}">
<div style="background:${style.bgColor};border-color:${
style.borderColor
}" class="ump-sdk-metting-headerInfo">
<div class="ump-sdk-metting-headerInfo-userCreate">
<span class="ump-sdk-metting-headerInfo-userCreate-title">${
data.value.caller
}<span> 创建会议</span></span>
<span class="ump-sdk-metting-headerInfo-userCreate-info" id="${
"ump-sdk-metting-headerInfo-userCreate-info-" + data.value.cid
}"></span>
<div class="ump-sdk-metting-headerInfo-userCreate-info-showCard">
<div class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo">
<span class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-label">会议信息:</span>
<span class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-copy"></span>
</div>
<div class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetID">
<span class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-label">会议ID</span>
<span>${this.metting.infoMation?.value.confId}</span>
</div>
<div class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetType">
<span class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-label">会议类型:</span>
<span>视频会议</span>
</div>
<div class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetPwd">
<span class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-label">会议密码:</span>
<span>${this.metting.infoMation?.value.passcode}</span>
</div>
<div class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetCid">
<span class="ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-label">接入号:</span>
<span>${
this.metting.infoMation?.value.unifiedAccessCode
}</span>
</div>
</div>
</div>
<div class="ump-sdk-metting-headerInfo-TimesBox">
<div class="ump-sdk-metting-headerInfo-TimesBox-meetStart">会议已开始:</div>
<div class="ump-sdk-metting-headerInfo-TimesBox-timeNow" data-time="0"></div>
<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout" id="ump-sdk-metting-headerInfo-TimesBox-videoLayout-grad">
<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-icon"></div>
<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-set">画面布局</div>
<div style="${
this.metting.style
}" class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout">
<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout-ul">
${this.metting.layoutType
.map((item) => {
return `<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout-li ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout-li-${item.icon}">
<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout-icon ${item.icon}" type="${item.type}" ></div>
<div class="ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout-typeName">${item.name}</div>
</div>`;
})
.join("")}
</div>
</div>
</div>
</div>
<div class="ump-sdk-metting-headerInfo-ActionsBox">
<div class="ump-sdk-metting-headerInfo-ActionsBox-square" id="ump-sdk-metting-headerInfo-ActionsBox-square"></div>
<div class="ump-sdk-metting-headerInfo-ActionsBox-not-square" id="ump-sdk-metting-headerInfo-ActionsBox-not-square"></div>
<div class="ump-sdk-metting-headerInfo-ActionsBox-close"></div>
</div>
<div></div>
<div></div>
</div>
<div style="background:${style.bgColor};border-color:${
style.borderColor
}" class="ump-sdk-metting-player" id="${
"ump-sdk-metting-player-" + data.value.cid
}"></div>
<div style="background:${style.bgColor};border-color:${
style.borderColor
}" class="ump-sdk-metting-footerActive">
<div class="ump-sdk-metting-box">
<div class="ump-sdk-metting-Mic">
<div class="ump-sdk-metting-audio"> </div>
<div class="ump-sdk-metting-mute"> </div>
<div class="ump-sdk-metting-text">静音</div>
</div>
<div class="ump-sdk-metting-requests">
<div class="ump-sdk-metting-requestsimg"></div>
<div class="ump-sdk-metting-text">邀请</div>
</div>
<div class="ump-sdk-metting-requests-person">
<textarea placeholder="请输入isdn并以英文逗号分割" class="ump-sdk-metting-requests-input" id="ump-sdk-metting-requests-input-${
data.value.caller
}"></textarea>
</div>
<div class="ump-sdk-metting-viewAttendees">
<div class="ump-sdk-metting-viewAttendees-img"></div>
<div class="ump-sdk-metting-text ump-sdk-metting-viewAttendees-open">查看与会者</div>
<div class="ump-sdk-metting-text ump-sdk-metting-viewAttendees-close">关闭与会者</div>
</div>
</div>
<button class="ump-sdk-metting-endConference" id="ump-sdk-metting-endConference">结束会议</button>
</div>
<div style="background:${style.bgColor};border-color:${
style.borderColor
}" class="ump-sdk-metting-right">
<div class="ump-sdk-metting-right-participant">与会者(<span id="ump-sdk-metting-right-participant-online">1</span>/<span id="ump-sdk-metting-right-participant-totle">3</span></div>
<div class="ump-sdk-metting-right-userList">
<div class="ump-sdk-metting-right-userList-top" id="ump-sdk-metting-right-userList-top"></div>
<div class="ump-sdk-metting-right-userList-otherUser" id="ump-sdk-metting-right-userList-otherUser"></div>
<div class="ump-sdk-metting-right-userList-fotterAction">
<div class="ump-sdk-metting-right-userList-fotterAction-audience" id="ump-sdk-metting-right-userList-fotterAction-audience">全场静音</div>
<div class="ump-sdk-metting-right-userList-fotterAction-allcall" id="ump-sdk-metting-right-userList-fotterAction-allcall">一键呼叫</div>
<div class="ump-sdk-metting-right-userList-fotterAction-setLayout" id="ump-sdk-metting-right-userList-fotterAction-setLayout">会场布局</div>
</div>
</div>
</div>
<div style="background:${style.bgColor};border-color:${
style.borderColor
}" class="ump-sdk-meeting-layout">
<div class="ump-sdk-meeting-layout-header">
<div class="ump-sdk-meeting-layout-header-title">会场设置</div>
<div class="ump-sdk-meeting-layout-header-ESC"></div>
</div>
<div class="ump-sdk-meeting-layout-content">
<div class="ump-sdk-meeting-layout-content-left">
<div class="ump-sdk-meeting-layout-content-left-title">与会成员列表</div>
<div class="ump-sdk-meeting-layout-content-left-personBox" id="ump-sdk-meeting-layout-content-left-personBox"></div>
</div>
<div class="ump-sdk-meeting-layout-content-middle">
<div class="ump-sdk-meeting-layout-content-middle-iconbox">
<div class="ump-sdk-meeting-layout-content-middle-iconbox-num1"></div>
<div class="ump-sdk-meeting-layout-content-middle-iconbox-num2"></div>
</div>
</div>
<div class="ump-sdk-meeting-layout-content-right">
<div class="ump-sdk-meeting-layout-content-right-header">
<div class="ump-sdk-meeting-layout-content-right-header-title">会场布局预案</div>
<div class="ump-sdk-meeting-layout-content-right-header-clear">一键清空</div>
</div>
<div class="ump-sdk-meeting-layout-content-right-content" id="ump-sdk-meeting-layout-content-right-content">
</div>
</div>
</div>
<div class="ump-sdk-meeting-layout-footer">
<div class="ump-sdk-meeting-layout-footer-cancel">取消</div>
<div class="ump-sdk-meeting-layout-footer-sure">确定</div>
</div>
</div>
</div>
`);
$("body").append(mettDom);
let that = this;
const draggableInstance = this.draggable(
`ump-sdk-metting-out-dialog-${data.value.confId}`
);
const meetPlayerDom = document.getElementById(
`${"ump-sdk-metting-player-" + data.value.cid}`
);
const videoTimer = setInterval(() => {
// 通话计时
const tipDom = $(`.ump-sdk-metting-headerInfo-TimesBox-timeNow`);
const timeNum = Number(tipDom.attr("data-time")) + 1;
tipDom.attr("data-time", timeNum);
tipDom.text(`${UMPSDK.timeHandler(timeNum)}`);
}, 1000);
const obj = {
cid: data.value.cid,
timer: videoTimer,
};
// 链接会议
this.timer.videoTimer.push(obj);
this.metting.cid = data.value.cid;
try{
this.player[`player${data.value.cid}`] = this.createYuvPlayer(
data,
meetPlayerDom
);
}
catch(error) {
console.log("MSP_Player",error);
};
try{
this.player[`player${data.value.cid}`].changeVideResolution({
width: 800,
height: 450,
});
} catch(error) {
console.log("MSP_Player",error);
}
// 点击查看会议详情
let MettingInfoTarget = false;
let MettingInfoCard = document.getElementsByClassName(
"ump-sdk-metting-headerInfo-userCreate-info-showCard"
)[0];
$(".ump-sdk-metting-headerInfo-userCreate-info").click(() => {
MettingInfoTarget = !MettingInfoTarget;
if (MettingInfoTarget) {
MettingInfoCard.style.display = "block";
} else {
MettingInfoCard.style.display = "none";
}
});
// 按钮主动结束会议
$(".ump-sdk-metting-endConference").click(() => {
this.closeMetting(data);
});
// X按钮主动结束会议
$(".ump-sdk-metting-headerInfo-ActionsBox-close").click(() => {
this.closeMetting(data);
});
// 全屏会议
$(`#ump-sdk-metting-headerInfo-ActionsBox-square`).click(() => {
const mettingCardDom = $(
`#ump-sdk-metting-out-dialog-${data.value.confId}`
);
const square = document.getElementById(
`ump-sdk-metting-headerInfo-ActionsBox-square`
);
const notsquare = document.getElementById(
`ump-sdk-metting-headerInfo-ActionsBox-not-square`
);
const headerBox = document.getElementsByClassName(
"ump-sdk-metting-headerInfo"
)[0];
const footerBox = document.getElementsByClassName(
"ump-sdk-metting-footerActive"
)[0];
const viewAttendees = document.getElementsByClassName(
"ump-sdk-metting-viewAttendees"
)[0];
const requests = document.getElementsByClassName(
"ump-sdk-metting-requests"
)[0];
mettingCardDom.addClass("ump-sdk-metting-card-full-width-height");
square.style.display = "none";
viewAttendees.style.display = "none";
requests.style.display = "none";
notsquare.style.display = "block";
headerBox.style.top = "0px";
headerBox.style.width = "100vw";
footerBox.style.bottom = "0px";
footerBox.style.width = "100vw";
footerBox.style.background = "rgba(0,0,0,0)";
headerBox.style.background = "rgba(0,0,0,0)";
// 全屏后禁止拖动,并且清空内联样式
draggableInstance.disableDragging();
console.log(mettingCardDom.width(), mettingCardDom.height());
if (this.player[`player${data.value.cid}`]) {
this.player[`player${data.value.cid}`].changeVideResolution({
width: parseInt(mettingCardDom.width()),
height: parseInt(mettingCardDom.height()),
});
}
});
// 结束全屏
$("#ump-sdk-metting-headerInfo-ActionsBox-not-square").click(() => {
const mettingCardDom = $(
`#ump-sdk-metting-out-dialog-${data.value.confId}`
);
const square = document.getElementById(
`ump-sdk-metting-headerInfo-ActionsBox-square`
);
const notsquare = document.getElementById(
`ump-sdk-metting-headerInfo-ActionsBox-not-square`
);
const headerBox = document.getElementsByClassName(
"ump-sdk-metting-headerInfo"
)[0];
const footerBox = document.getElementsByClassName(
"ump-sdk-metting-footerActive"
)[0];
const viewAttendees = document.getElementsByClassName(
" ump-sdk-metting-viewAttendees"
)[0];
const requests = document.getElementsByClassName(
"ump-sdk-metting-requests"
)[0];
square.style.display = "block";
viewAttendees.style.display = "block";
requests.style.display = "block";
notsquare.style.display = "none";
headerBox.style.top = "-50px";
footerBox.style.bottom = "-100px";
footerBox.style.width = style.width ? style.width : "800px";
footerBox.style.background = style.bgColor ? style.bgColor : "#044069";
headerBox.style.background = style.bgColor ? style.bgColor : "#044069";
if (this.metting.viewAttendeesTarget) {
let styleWidth = style.width ? style.width.replace("px", "") : "";
headerBox.style.width = style.width
? `${styleWidth + 200}px`
: "1000px";
} else {
headerBox.style.width = style.width ? style.width : "800px";
}
draggableInstance.enableDragging();
mettingCardDom.removeClass("ump-sdk-metting-card-full-width-height");
if (this.player[`player${data.value.cid}`]) {
let styleWidth = style.width ? style.width.replace("px", "") : "";
let styleHeight = style.height ? style.height.replace("px", "") : "";
this.player[`player${data.value.cid}`].changeVideResolution({
width: style.width ? parseInt(styleWidth) : 800,
height: style.height ? parseInt(styleHeight) : 450,
});
}
});
// 点击查看与会者、关闭与会者
const viewAttendeesOpen = document.getElementsByClassName(
"ump-sdk-metting-viewAttendees-open"
)[0];
const viewAttendeesClose = document.getElementsByClassName(
"ump-sdk-metting-viewAttendees-close"
)[0];
const AttendeesRightCard = document.getElementsByClassName(
"ump-sdk-metting-right"
)[0];
const headerBox = document.getElementsByClassName(
"ump-sdk-metting-headerInfo"
)[0];
this.metting.viewAttendeesTarget = false;
$(".ump-sdk-metting-viewAttendees").click(() => {
this.metting.viewAttendeesTarget = !this.metting.viewAttendeesTarget;
if (this.metting.viewAttendeesTarget) {
let styleWidth = style.width ? style.width.replace("px", "") : "";
headerBox.style.width = style.width
? `${styleWidth + 200}px`
: "1000px";
AttendeesRightCard.style.display = "block";
viewAttendeesOpen.style.display = "none";
viewAttendeesClose.style.display = "block";
} else {
headerBox.style.width = style.width ? style.width : "800px";
AttendeesRightCard.style.display = "none";
viewAttendeesOpen.style.display = "block";
viewAttendeesClose.style.display = "none";
}
});
// 复制会议信息
$(
".ump-sdk-metting-headerInfo-userCreate-info-showCard-meetInfo-copy"
).click(() => {
const info = `会议id:${data.value.confId},会议类型:视频会议,会议密码:'',接入号:${data.value.caller}`;
var aux = document.createElement("input");
aux.setAttribute("value", info);
document.body.appendChild(aux);
aux.select();
document.execCommand("copy");
document.body.removeChild(aux);
this.showMessage("复制内容成功", "success");
});
// 开启、关闭麦克风静音
const audio = document.getElementsByClassName("ump-sdk-metting-audio")[0];
const mute = document.getElementsByClassName("ump-sdk-metting-mute")[0];
$(".ump-sdk-metting-Mic").click(() => {
this.metting.MicTarget = this.metting.MicTarget;
if (this.metting.MicTarget) {
audio.style.display = "none";
mute.style.display = "block";
let param = {
confId: data.value.confId,
isMute: "true",
number: this.isdn,
callback: (res) => {
// 回调处理:日志记录
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
`禁用(${this.isdn})的麦克风` + JSON.stringify(res)
)
);
}
},
};
cloudICP.dispatch.conf.muteConfMember(param);
} else {
audio.style.display = "block";
mute.style.display = "none";
let param = {
confId: data.value.confId,
isMute: "false",
number: this.isdn,
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(
`启用(${this.isdn})的麦克风` + JSON.stringify(res)
)
);
}
},
};
console.log(param, "=========param============");
cloudICP.dispatch.conf.muteConfMember(param);
}
});
// 邀请与会者
const requestsInput = document.getElementById(
`ump-sdk-metting-requests-input-${data.value.caller}`
);
let requestsTarget = false;
$(".ump-sdk-metting-requests").click(() => {
requestsTarget = !requestsTarget;
if (requestsTarget) {
requestsInput.style.display = "block";
} else {
requestsInput.style.display = "none";
}
});
$(".ump-sdk-metting-requests-input").blur(() => {
requestsTarget = !requestsTarget;
const requestsInput = document.getElementById(
`ump-sdk-metting-requests-input-${data.value.caller}`
);
if (requestsTarget) {
requestsInput.style.display = "block";
} else {
requestsInput.style.display = "none";
}
let requestsInputValue = requestsInput.value.split(","); // 获取邀请成员的数组
let memberInfos = [];
if (requestsInputValue.length == 0) {
this.showMessage("请输入邀请入会者isdn");
return;
}
requestsInputValue.forEach((item) => {
memberInfos.push({
number: item,
name: item,
isCamera: "true",
isWatchOnly: "false",
h265: "true",
});
});
let param = {
confId: data.value.confId,
memberInfos: memberInfos,
callback: (res) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat(`邀请成员入会` + JSON.stringify(res))
);
}
},
};
cloudICP.dispatch.conf.addConfMembers(param);
});
// 全场静音
$(".ump-sdk-metting-right-userList-fotterAction-audience").click(() => {
let dom = document.getElementById(
"ump-sdk-metting-right-userList-fotterAction-audience"
); //根据Id获取元素
this.metting.audience = !this.metting.audience;
let param;
if (this.metting.audience) {
// 全场会议静音
param = {
confId: data.value.confId,
isMute: "true",
callback: (data) => {},
};
if (dom) {
dom.innerText = "解除静音";
}
} else {
// 全场会议静音取消
param = {
confId: data.value.confId,
isMute: "false",
callback: (data) => {},
};
if (dom) {
dom.innerText = "全场静音";
}
}
cloudICP.dispatch.conf.muteConf(param);
});
// 一键呼叫
$(".ump-sdk-metting-right-userList-fotterAction-allcall").click(() => {
this.metting.unJoinMetting.forEach((item) => {
let param = {
confId: data.value.confId,
memberInfo: {
number: item,
},
callback: (data) => {},
};
cloudICP.dispatch.conf.callConfMember(param);
});
});
// 禁用麦克风
$(document).on(
"click",
".ump-sdk-metting-right-userList-MIC",
function (e) {
let dom = $(e.target);
let isdn = dom.attr("isdn");
let chair = dom.attr("chair");
if (that.isdn === chair) {
// 如果是主席才能使用此功能
let param = {
confId: data.value.confId,
isMute: "false",
number: isdn,
callback: (data) => {},
};
cloudICP.dispatch.conf.muteConfMember(param);
}
}
);
$(document).on(
"click",
".ump-sdk-metting-right-userList-talking",
function (e) {
let dom = $(e.target);
let isdn = dom.attr("isdn");
let chair = dom.attr("chair");
if (that.isdn === chair) {
// 如果是主席才能使用此功能
let param = {
confId: data.value.confId,
isMute: "true",
number: isdn,
callback: (data) => {},
};
cloudICP.dispatch.conf.muteConfMember(param);
}
}
);
// 鼠标事件控制人员操作菜单组件显隐
$(document).on(
"mouseenter",
".ump-sdk-meeting-right-userList-menu",
function (e) {
let dom = $(e.target);
let index = dom.attr("index");
let menuDom = document.getElementsByClassName(
"ump-sdk-metting-right-meetingContextMenu-box"
)[index];
if (menuDom) {
menuDom.style.display = "block";
}
}
);
$(document).on(
"mouseleave",
".ump-sdk-meeting-right-userList-menu",
function (e) {
let dom = $(e.target);
let index = dom.attr("index");
let menuDom = document.getElementsByClassName(
"ump-sdk-metting-right-meetingContextMenu-box"
)[index];
if (menuDom) {
menuDom.style.display = "none";
}
}
);
$(document).on(
"mouseleave",
".ump-sdk-metting-right-meetingContextMenu-box",
function (e) {
let dom = $(e.target);
let index = dom.attr("index");
let menuDom = document.getElementsByClassName(
"ump-sdk-metting-right-meetingContextMenu-box"
)[index];
if (menuDom) {
menuDom.style.display = "none";
}
}
);
// 转让主席
$(document).on(
"click",
".ump-sdk-metting-right-meetingContextMenu-li-chairperson",
function (e) {
let dom = $(e.target);
let isdn = dom.attr("isdn");
/*遍历用户信息,查询转让对象的能力*/
that.metting.userInfoList.map((item) => {
if (item.isdn == isdn) {
if (item.category == 0) {
let param = {
confId: data.value.confId,
applier: isdn,
callback: (data) => {
that.logCallback(
UMPSDK.logInfoFormat("转让主席:" + JSON.stringify(data))
);
},
};
cloudICP.dispatch.conf.setChairman(param);
} else {
that.showMessage(
"不可转让主席给非坐席用户",
"warning",
null,
"targetID"
);
}
}
});
}
);
// 重呼成员
$(document).on(
"click",
".ump-sdk-metting-right-meetingContextMenu-li-Recall",
function (e) {
let dom = $(e.target);
let isdn = dom.attr("isdn");
let param = {
confId: data.value.confId,
memberInfo: {
number: isdn,
},
callback: () => {},
};
cloudICP.dispatch.conf.callConfMember(param);
}
);
// 移除成员
$(document).on(
"click",
".ump-sdk-metting-right-meetingContextMenu-li-Remove",
function (e) {
let dom = $(e.target);
let isdn = dom.attr("isdn");
let param = {
confId: data.value.confId,
memberInfo: {
number: isdn,
},
callback: () => {},
};
cloudICP.dispatch.conf.delConfMember(param);
}
);
// 控制画面布局显隐
$(".ump-sdk-metting-headerInfo-TimesBox-videoLayout-icon").click(() => {
this.metting.layoutStatus = !this.metting.layoutStatus;
let dom = document.getElementsByClassName(
"ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout"
)[0];
if (this.metting.layoutStatus) {
dom.style.display = "block";
} else {
dom.style.display = "none";
}
});
// 设置画面布局
$(
".ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout-icon"
).click((e) => {
let layuot = document.getElementsByClassName(
"ump-sdk-metting-headerInfo-TimesBox-videoLayout-setLayout"
)[0];
let dom = $(e.target);
let type = dom.attr("type");
this.metting.choseLayoutType = type; // 存储用户选择的画面布局模式,用于设置会场布局
this.getGirdNum(type);
this.getGridClassName(type);
let numberList = [];
this.metting.memberList.forEach((item) => {
numberList.push({ number: String(item.number) });
});
let param = {
confId: data.value.confId,
mixPictureType: type,
memberInfos: numberList,
callback: () => {
this.metting.layoutStatus = false;
layuot.style.display = "none";
},
};
console.log(param, "分屏被调用了");
cloudICP.dispatch.conf.broadcastMixPicture(param);
});
// 打开设置会场布局弹窗
$(".ump-sdk-metting-right-userList-fotterAction-setLayout").click(() => {
const isPersonDom = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-left-personBox-list"
)[0];
if (isPersonDom) return; // 判断节点是否已添加,避免节点重复
const layoutDom = document.getElementsByClassName(
"ump-sdk-meeting-layout"
)[0];
layoutDom.style.display = "block";
// 添加入会人员节点
const personDom = $(`
<div class="ump-sdk-meeting-layout-content-left-personBox-list">
${that.metting.memberList
.map((item, index) => {
return ` <div class="ump-sdk-meeting-layout-content-left-personBox-list-line">
<i class="ump-sdk-meeting-layout-content-left-personBox-list-line-icon"></i>
<span class="ump-sdk-meeting-layout-content-left-personBox-list-line-isdn" key="${index}" number="${item.number}">${item.number}</span>
</div>`;
})
.join("")}
</div>
`);
// 布局网格容器
const personDom2 = $(`
<div style="${
this.metting.style
}" class="ump-sdk-meeting-layout-content-right-content-box gird-model-${
that.metting.choseLayoutType
}">
${that.metting.girdNum
.map((item, index) => {
return `<div class="ump-sdk-meeting-layout-content-right-content-cardmini grid${index}
id="ump-sdk-meeting-layout-content-right-content-card-${index}"></div>`;
})
.join("")}
</div>
`);
$("#ump-sdk-meeting-layout-content-left-personBox").append(personDom);
$(".ump-sdk-meeting-layout-content-right-content").append(personDom2);
//已保存的
console.log(
that.metting.setPageGridPerson,
"保存保存保存保存保存保存保存保存保存保存保存"
);
console.log(
that.metting.setGridPerson,
"页面渲染页面渲染页面渲染页面渲染页面渲染页面渲染页面渲染"
);
that.metting.setGridPerson = JSON.parse(
JSON.stringify(that.metting.setPageGridPerson)
);
if (
that.metting.setGridPerson &&
that.metting.setGridPerson.length > 0
) {
that.metting.setGridPerson.forEach((person, index) => {
// 如果人员没有被添加过
if (
!document.getElementById(
`ump-sdk-meeting-layout-content-left-personBox-list-line-${person}`
)
) {
let personCard = $(`
<div class="ump-sdk-meeting-layout-content-left-personBox-list-line gridperson" id="ump-sdk-meeting-layout-content-left-personBox-list-line-${person}">
<div class="ump-sdk-meeting-layout-content-left-personBox-list-line-left">
<i class="ump-sdk-meeting-layout-content-left-personBox-list-line-icon"></i>
<span class="ump-sdk-meeting-layout-content-left-personBox-list-line-isdn" number="${person}">${person}</span>
</div>
<div class="ump-sdk-meeting-layout-content-right-content-cardmini-ESC" id="ump-sdk-meeting-layout-content-right-content-cardmini-ESC-${person}" number="${person}"></div>
</div>
`);
// 将新节点插入到对应位置
let gridIndex = that.metting.setGridPerson.indexOf(person);
if (gridIndex === -1) {
let emptySlotIndex = that.metting.setGridPerson.indexOf(0); // 查找空位
if (emptySlotIndex !== -1) {
// 替换空位为当前人员
that.metting.setGridPerson[emptySlotIndex] = person;
} else {
// 如果没有空位,直接添加
that.metting.setGridPerson.push(person);
}
}
// 根据人员位置插入到对应的布局
$(`.grid${gridIndex}`).append(personCard);
// 设置布局背景图片容器
let gridDom = document.getElementsByClassName(
`grid${gridIndex}`
)[0];
// 设置布局背景图片容器的样式
gridDom.style.backgroundSize = 0;
} else {
that.showMessage("该人员已在布局中", "error");
}
});
}
});
// 关闭设置会场布局弹窗
$(".ump-sdk-meeting-layout-header-ESC").click(() => {
const layoutDom = document.getElementsByClassName(
"ump-sdk-meeting-layout"
)[0];
layoutDom.style.display = "none";
const isPersonDom = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-left-personBox-list"
)[0];
const layoutDomBox = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-right-content-box"
)[0];
isPersonDom.remove();
layoutDomBox.remove();
this.metting.setGridPerson = [];
});
$(".ump-sdk-meeting-layout-footer-cancel").click(() => {
const layoutDom = document.getElementsByClassName(
"ump-sdk-meeting-layout"
)[0];
layoutDom.style.display = "none";
const isPersonDom = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-left-personBox-list"
)[0];
const layoutDomBox = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-right-content-box"
)[0];
isPersonDom.remove();
layoutDomBox.remove();
this.metting.setGridPerson = [];
});
$(document).on(
"dblclick",
".ump-sdk-meeting-layout-content-left-personBox-list-line-isdn",
function (e) {
let dom = $(e.target);
let index = dom.attr("key");
let number = dom.attr("number");
// 布局添加的人员节点
let personCrad =
$(` <div class="ump-sdk-meeting-layout-content-left-personBox-list-line gridperson" id="ump-sdk-meeting-layout-content-left-personBox-list-line-${number}">
<div class="ump-sdk-meeting-layout-content-left-personBox-list-line-left">
<i class="ump-sdk-meeting-layout-content-left-personBox-list-line-icon"></i>
<span class="ump-sdk-meeting-layout-content-left-personBox-list-line-isdn" number="${number}">${number}</span>
</div>
<div class="ump-sdk-meeting-layout-content-right-content-cardmini-ESC" id="ump-sdk-meeting-layout-content-right-content-cardmini-ESC-${Number(
number
)}" number=${number}></div>
</div>`);
if (
that.metting.setGridPerson &&
that.metting.setGridPerson.length > 0
) {
let result = that.metting.setGridPerson.indexOf(Number(number));
if (result === -1) {
// 添加确认是否已存在
let index = that.metting.setGridPerson.indexOf(0); // 确认上次操作是否删除了布局中的人员,删除操作会将原number变更为0
if (index === -1) {
that.metting.setGridPerson.push(Number(number));
} else {
// 未添加时,确认上次操作是否删除了布局中的人员,在空缺的布局中插入新数据
that.metting.setGridPerson.splice(index, 1, Number(number));
}
$(
`.grid${that.metting.setGridPerson.indexOf(Number(number))}`
).append(personCrad);
// 布局背景图片容器
let gridDom = document.getElementsByClassName(
`grid${that.metting.setGridPerson.indexOf(Number(number))}`
)[0];
// 布局删除按钮
gridDom.style.backgroundSize = 0;
} else {
that.showMessage("该人员已在布局中", "error");
}
} else {
that.metting.setGridPerson.push(Number(number));
$(
`.grid${that.metting.setGridPerson.indexOf(Number(number))}`
).append(personCrad);
// 布局背景图片容器
let gridDom = document.getElementsByClassName(
`grid${that.metting.setGridPerson.indexOf(Number(number))}`
)[0];
gridDom.style.backgroundSize = 0;
}
console.log(that.metting.setGridPerson);
}
);
// 删除已布局人员
$(document).on(
"click",
".ump-sdk-meeting-layout-content-right-content-cardmini-ESC",
function (e) {
let dom = $(e.target);
let number = dom.attr("number");
let gridPerson = document.getElementById(
`ump-sdk-meeting-layout-content-left-personBox-list-line-${Number(
number
)}`
);
let gridDom = document.getElementsByClassName(
`grid${that.metting.setGridPerson.indexOf(Number(number))}`
)[0];
gridPerson.remove();
gridDom.style.backgroundSize = "16px";
let index = that.metting.setGridPerson.indexOf(Number(number));
// that.metting.setGridPerson.splice(index, 1, 0);
that.metting.setGridPerson = that.metting.setGridPerson.filter(
(v) => v != number
);
console.log(
that.metting.setGridPerson,
"===========that.metting.setGridPerson============"
);
}
);
// 一键清空
$(`.ump-sdk-meeting-layout-content-right-header-clear`).click(() => {
that.metting.setGridPerson.forEach((item) => {
let gridPerson = document.getElementById(
`ump-sdk-meeting-layout-content-left-personBox-list-line-${Number(
item
)}`
);
let gridDom = document.getElementsByClassName(
`grid${that.metting.setGridPerson.indexOf(Number(item))}`
)[0];
gridDom.style.backgroundSize = "16px";
gridPerson.remove();
});
that.metting.setGridPerson = [];
});
// 启用会场布局
$(document).on(
"click",
".ump-sdk-meeting-layout-footer-sure",
function (e) {
let numberList = [];
that.metting.setGridPerson.forEach((item) => {
numberList.push({ number: String(item) });
});
let param = {
confId: data.value.confId,
mixPictureType: that.metting.choseLayoutType,
memberInfos: numberList,
callback: () => {
// 移除添加的自定义容器
const layoutDom = document.getElementsByClassName(
"ump-sdk-meeting-layout"
)[0];
layoutDom.style.display = "none";
const isPersonDom = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-left-personBox-list"
)[0];
const layoutDomBox = document.getElementsByClassName(
"ump-sdk-meeting-layout-content-right-content-box"
)[0];
isPersonDom.remove();
layoutDomBox.remove();
},
};
console.log(param, "画面布局被调用了");
cloudICP.dispatch.conf.broadcastMixPicture(param);
that.metting.setPageGridPerson = that.metting.setGridPerson;
}
);
}
// gis
initGis() {
// gis订阅
this.gis.subscribeGIS = (isdnList) => {
let uelist = [];
isdnList.forEach((isdn) => {
uelist.push({ isdn: isdn });
});
const params = {
uelist: uelist,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("订阅GIS" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.gis.subscribeGIS(params);
};
// 查询终端历史轨迹
this.gis.queryTrack = (
ueid,
begintime,
endtime,
offset,
limit,
policy,
maxnum
) => {
if (!ueid) {
this.showMessage("请输入终端号码", "warning");
return;
}
let begin, end;
if (begintime) {
begin = this.convertDateToYYYYMMDDHHMMSS(begintime);
} else {
this.showMessage("请输入开始时间", "warning");
return;
}
if (endtime) {
end = this.convertDateToYYYYMMDDHHMMSS(endtime);
} else {
this.showMessage("请输入结束时间", "warning");
return;
}
const days = Math.floor(
(new Date(endtime).getTime() - new Date(begintime).getTime()) /
(1000 * 60 * 60 * 24)
);
if (days > 7) {
this.showMessage("结束时间与开始时间相差不能超过7天", "warning");
return;
}
const params = {
ueid: ueid,
begintime: begin,
endtime: end,
offset: offset,
limit: limit,
policy: policy,
maxnum: maxnum,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询GIS轨迹" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.query.queryGISTrack(params);
};
}
convertDateToYYYYMMDDHHMMSS(dateString) {
const date = new Date(dateString);
const year = date.getFullYear();
const month = ("0" + (date.getMonth() + 1)).slice(-2);
const day = ("0" + date.getDate()).slice(-2);
const hours = ("0" + date.getHours()).slice(-2);
const minutes = ("0" + date.getMinutes()).slice(-2);
const seconds = ("0" + date.getSeconds()).slice(-2);
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 订阅用户
initSubscribeUserStatus() {
this.subscribe.userStatus = (isdnList) => {
let reslist = [];
isdnList.forEach((i) => reslist.push({ isdn: i }));
const params = {
reslist: reslist,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询用户状态" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.voice.subscribeUserStatus(params);
};
}
// 群组
initQueryGroup() {
// 查询群组
this.group.queryList = (offset, limit, category) => {
const params = {
offset: offset,
limit: limit,
category: category,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询群组" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.query.queryTalkingGroupV1(params);
};
// 查询群组成员
this.group.queryMembers = (grpid, offset, limit) => {
const params = {
grpid: grpid,
offset: offset,
limit: limit,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询群组成员" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.query.queryTalkingGroupMembersV1(params);
};
}
// 部门
initDepartment() {
this.department.queryList = (name) => {
const params = {
name: name,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询部门" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.query.queryDepartmentList(params);
};
this.department.queryMembers = (offset, limit, category) => {
const params = {
offset: offset,
limit: limit,
category: category,
callback: (rsp) => {
if (this.logCallback) {
this.logCallback(
UMPSDK.logInfoFormat("查询部门" + JSON.stringify(rsp))
);
}
},
};
cloudICP.dispatch.query.queryUserListV1(params);
};
}
initIcp() {
this.icp.getCloudICP = (parmar) => {
parmar.callback({
cloudICP: cloudICP,
});
};
}
}
UMPSDK.eventList = [];
window.UMPSDK = UMPSDK;
window.ICPUISDK = UMPSDK;
})();