参会人员:{{ item.chry }}
@@ -67,10 +69,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/consultation/components/content.vue b/src/views/consultation/components/content.vue
new file mode 100644
index 0000000..64463da
--- /dev/null
+++ b/src/views/consultation/components/content.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
![]()
+
+
+
+
+ {{ getName }}
+
+
+
+

+

+
+
+ {{ calling }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/consultation/components/footer.vue b/src/views/consultation/components/footer.vue
new file mode 100644
index 0000000..54294ad
--- /dev/null
+++ b/src/views/consultation/components/footer.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
diff --git a/src/views/consultation/components/js/useConfernceControlEvent.js b/src/views/consultation/components/js/useConfernceControlEvent.js
new file mode 100644
index 0000000..7577123
--- /dev/null
+++ b/src/views/consultation/components/js/useConfernceControlEvent.js
@@ -0,0 +1,460 @@
+import { ref, onUnmounted } from 'vue';
+import { ElNotification } from 'element-plus';
+import emitter from "@/utils/eventBus.js";
+import useConferenceControlModule from '@/views/consultation/sdk/conferenceControl';
+import store from '@/store'
+
+const sdkConfernceControlModule = useConferenceControlModule();
+
+// 通知时长
+const duration = 5 * 1000;
+
+const lockCallbackId = ref('');
+const activeConfigChangeCallbackId = ref('');
+const memberJoinCallbackId = ref('');
+const memberLeftCallbackId = ref('');
+const updateSubjecCallbackId = ref('');
+const updateMemberNickCallbackId = ref('');
+const inviteMemberCallbackId = ref('');
+const memberCameraCallbackId = ref('');
+const memberProhibitionCallbackId = ref('');
+const allMemberProhibitionCallbackId = ref('');
+const memberMuteCallbackId = ref('');
+const memberSpeakCallbackId = ref('');
+const voiceStimulationCallbackId = ref('');
+const memberSpeakingStateCallbackId = ref('');
+const setLayoutTypenCallbackId = ref('');
+const setMemberRoleCallbackId = ref('');
+const cancelMemberSpeakCallbackId = ref('');
+const addMemberCallbackId = ref('');
+const deleteMemberCallbackId = ref('');
+const screenSharingCallbackId = ref('');
+const deviceListChangegCallbackId = ref('');
+
+// 移除事件注册
+const unRegisterConferenceControldata = () => {
+ sdkConfernceControlModule.removeLockListener(lockCallbackId.value);
+ sdkConfernceControlModule.removeActiveConfigChangeListener(
+ activeConfigChangeCallbackId.value
+ );
+ sdkConfernceControlModule.removeMemberJoinListener(
+ memberJoinCallbackId.value
+ );
+ sdkConfernceControlModule.removeMemberLeftListener(
+ memberLeftCallbackId.value
+ );
+ sdkConfernceControlModule.removeUpdateSubjectListener(
+ updateSubjecCallbackId.value
+ );
+ sdkConfernceControlModule.removeModifyMemberNickListener(
+ updateMemberNickCallbackId.value
+ );
+ sdkConfernceControlModule.removeInviteMemberListener(
+ inviteMemberCallbackId.value
+ );
+ sdkConfernceControlModule.removeMemberCameraListener(
+ memberCameraCallbackId.value
+ );
+ sdkConfernceControlModule.removeMemberProhibitionListener(
+ memberProhibitionCallbackId.value
+ );
+ sdkConfernceControlModule.removeAllMemberProhibitionListener(
+ allMemberProhibitionCallbackId.value
+ );
+ sdkConfernceControlModule.removeMemberMuteListener(
+ memberMuteCallbackId.value
+ );
+ sdkConfernceControlModule.removeAssignMemberSpeakListener(
+ memberSpeakCallbackId.value
+ );
+ sdkConfernceControlModule.removeVoiceStimulationListener(
+ voiceStimulationCallbackId.value
+ );
+ sdkConfernceControlModule.removeMemberSpeakingStateListener(
+ memberSpeakingStateCallbackId.value
+ );
+ sdkConfernceControlModule.removeSetLayoutTypeListener(
+ setLayoutTypenCallbackId.value
+ );
+ sdkConfernceControlModule.removeSetMemberRoleListener(
+ setMemberRoleCallbackId.value
+ );
+ sdkConfernceControlModule.removeCancelMemberSpeakListener(
+ cancelMemberSpeakCallbackId.value
+ );
+ sdkConfernceControlModule.removeAddMemberListener(addMemberCallbackId.value);
+ sdkConfernceControlModule.removeDeleteMemberListener(
+ deleteMemberCallbackId.value
+ );
+ sdkConfernceControlModule.removeScreenSharingListener(
+ screenSharingCallbackId.value
+ );
+ sdkConfernceControlModule.removeDeviceListChangeListener(
+ deviceListChangegCallbackId.value
+ );
+};
+
+/* 会控管理相关 */
+export default ({ onDeviceListChange }) => {
+ // 初始化清除回调事件,避免外部重复调用注册方法导致事件重复
+ unRegisterConferenceControldata();
+ const globalStore = store.state.useGlobalStore;
+
+ // 事件注册方便任意位置调用
+ emitter.on('unRegisterConferenceControldata', unRegisterConferenceControldata);
+
+ // 组件卸载时自动移除
+ onUnmounted(() => {
+ unRegisterConferenceControldata();
+ });
+
+ /**
+ * 当前进行中会议配置信息变化通知
+ * */
+ activeConfigChangeCallbackId.value =
+ sdkConfernceControlModule.addActiveConfigChangeListener((config) => {
+ store.dispatch("setActiveConfig",config);
+ });
+
+ /**
+ * 会议室锁定通知
+ * */
+ lockCallbackId.value = sdkConfernceControlModule.addLockListener((data) => {
+ console.log('+++++++++ 会议室锁定通知 ++++++++++', data);
+
+ const descMap = {
+ 0: '解锁',
+ 1: '锁定',
+ };
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议室锁定通知',
+ message: `【${data.operator.alias}】${descMap[data.status]}会议室`,
+ });
+ });
+
+ /**
+ * 增加会议成员通知
+ * */
+ addMemberCallbackId.value = sdkConfernceControlModule.addAddMemberListener(
+ (data) => {
+ console.log('+++++++++ 【会控】增加会议成员通知 ++++++++++', data);
+
+ const name = data.members.map((v) => v.alias || v.number).join('; ');
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '【会控】增加会议成员通知',
+ message: `【${name}】已成为【会议:${data.meeting.number}】的会议成员!`,
+ });
+ }
+ );
+
+ /**
+ * 删除会议成员通知
+ * */
+ deleteMemberCallbackId.value =
+ sdkConfernceControlModule.addDeleteMemberListener((data) => {
+ console.log('+++++++++ 【会控】删除会议成员通知 ++++++++++', data);
+
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '【会控】删除会议成员通知',
+ message: `【${name}】已不属于【会议:${data.meeting.number}】的会议成员!`,
+ });
+ });
+
+ /**
+ * 成员入会通知
+ * */
+ memberJoinCallbackId.value = sdkConfernceControlModule.addMemberJoinListener(
+ (data) => {
+ console.log('+++++++++ 成员入会通知 ++++++++++', data);
+
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '成员入会通知',
+ message: `【${name}】加入了【会议:${data.meeting.number}】!`,
+ });
+
+ // 自己入会,展示会议面板
+ if (
+ data.member.basedata_id === sessionStorage.getItem('user_basedata_id')
+ ) {
+ // 展示会议面板
+ globalStore.setShowConfencePanel(true);
+ }
+ }
+ );
+
+ /**
+ * 成员离会通知
+ * */
+ memberLeftCallbackId.value = sdkConfernceControlModule.addMemberLeftListener(
+ (data) => {
+ console.log('+++++++++ 成员离会通知 ++++++++++', data);
+
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '成员离会通知',
+ message: `【${name}】离开了【会议:${data.meeting.number}】!`,
+ });
+
+ // 不是自己,不需处理
+ if (
+ data.member.basedata_id !== sessionStorage.getItem('user_basedata_id')
+ ) {
+ return;
+ }
+ }
+ );
+
+ /**
+ * 更新会议主题通知
+ * */
+ updateSubjecCallbackId.value =
+ sdkConfernceControlModule.addUpdateSubjectListener((data) => {
+ console.log('+++++++++ 更新会议主题通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '更新会议主题通知',
+ message: `【${data.operator.alias}】修改了会议主题!`,
+ });
+ });
+
+ /**
+ * 设置成员角色通知
+ * */
+ setMemberRoleCallbackId.value =
+ sdkConfernceControlModule.addSetMemberRoleListener((data) => {
+ console.log('+++++++++ 设置成员角色通知 ++++++++++', data);
+
+ const roleDesc = {
+ 0: '成员',
+ 1: '主席',
+ 2: '创建者',
+ };
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '设置成员角色通知',
+ message: `${data.operator.alias} 将 ${data.member.alias} 设置为了【${
+ roleDesc[data.member_role]
+ }】`,
+ });
+ });
+
+ /**
+ * 修改会议成员昵称通知
+ * */
+ updateMemberNickCallbackId.value =
+ sdkConfernceControlModule.addModifyMemberNickListener((data) => {
+ console.log('+++++++++ 修改会议成员昵称通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '修改会议成员昵称通知',
+ message: `【${data.operator.alias}】修改了会议成员昵称为【${data.nickname}】!`,
+ });
+ });
+
+ /**
+ * 呼叫未入会成员通知
+ * */
+ inviteMemberCallbackId.value =
+ sdkConfernceControlModule.addInviteMemberListener((data) => {
+ console.log('+++++++++ 呼叫未入会成员通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '呼叫未入会成员通知',
+ message: `收到会议号【${data.meeting.number}】的入会通知!`,
+ });
+ });
+
+ /**
+ * 摄像头开关通知
+ * */
+ memberCameraCallbackId.value =
+ sdkConfernceControlModule.addMemberCameraListener((data) => {
+ console.log('+++++++++ 摄像头开关通知 ++++++++++', data);
+
+ const cameraDesc = {
+ 0: '已关闭',
+ 1: '已开启',
+ 2: '无',
+ };
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '摄像头开关通知',
+ message: `${data.operator.alias}【${cameraDesc[data.status]}】${
+ data.member.alias
+ } 的摄像头`,
+ });
+ });
+
+ /**
+ * 禁言通知
+ * */
+ memberProhibitionCallbackId.value =
+ sdkConfernceControlModule.addMemberProhibitionListener((data) => {
+ console.log('+++++++++ 禁言通知 ++++++++++', data);
+
+ const prohibitioDesc = {
+ 0: '解除禁言',
+ 1: '禁言',
+ };
+ const name = data.member.alias || data.member.number;
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '禁言通知',
+ message: `${data.operator.alias} 对【${name}】${
+ prohibitioDesc[data.status]
+ }!`,
+ });
+ });
+
+ /**
+ * 全部禁言通知
+ * */
+ allMemberProhibitionCallbackId.value =
+ sdkConfernceControlModule.addAllMemberProhibitionListener((data) => {
+ console.log('+++++++++ 全部禁言通知 ++++++++++', data);
+
+ const prohibitioDesc = {
+ 0: '解除全部禁言',
+ 1: '开启全部禁言',
+ };
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '全部禁言通知',
+ message: `${data.operator.alias} ${prohibitioDesc[data.status]}!`,
+ });
+ });
+
+ /**
+ * 静音通知
+ * */
+ memberMuteCallbackId.value = sdkConfernceControlModule.addMemberMuteListener(
+ (data) => {
+ console.log('+++++++++ 静音通知 ++++++++++', data);
+
+ const muteDesc = {
+ 0: '取消静音',
+ 1: '静音',
+ 2: '无音频',
+ };
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '静音通知',
+ message: `${data.operator.alias} 对【${name}】${
+ muteDesc[data.status]
+ }!`,
+ });
+ }
+ );
+
+ /**
+ * 设备列表变化通知
+ * */
+ deviceListChangegCallbackId.value =
+ sdkConfernceControlModule.addDeviceListChangeListener((data) => {
+ console.log('+++++++++ 设备列表变化通知 ++++++++++', data);
+ if (onDeviceListChange) {
+ onDeviceListChange(data);
+ }
+ });
+
+ /**
+ * 指定成员讲话通知
+ * */
+ memberSpeakCallbackId.value =
+ sdkConfernceControlModule.addAssignMemberSpeakListener((data) => {
+ console.log('+++++++++ 指定成员讲话通知 ++++++++++', data);
+
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '指定成员讲话通知',
+ message: `${data.operator.alias} 指定【${name}】讲话!`,
+ });
+ });
+
+ /**
+ * 取消指定成员讲话通知
+ * */
+ cancelMemberSpeakCallbackId.value =
+ sdkConfernceControlModule.addCancelMemberSpeakListener((data) => {
+ console.log('+++++++++ 取消成员讲话通知 ++++++++++', data);
+
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '取消成员讲话通知',
+ message: `${data.operator.alias} 取消【${name}】讲话!`,
+ });
+ });
+
+ /**
+ * 成员讲话状态通知
+ * */
+ memberSpeakingStateCallbackId.value =
+ sdkConfernceControlModule.addMemberSpeakingStateListener((data) => {
+ console.log('+++++++++ 成员讲话状态通知 ++++++++++', data);
+ });
+
+ /**
+ * 语音激励成员讲话状态通知
+ * */
+ voiceStimulationCallbackId.value =
+ sdkConfernceControlModule.addVoiceStimulationListener((data) => {
+ console.log('+++++++++ 语音激励成员讲话状态通知 ++++++++++', data);
+ });
+
+ /**
+ * 修改布局通知
+ * */
+ setLayoutTypenCallbackId.value =
+ sdkConfernceControlModule.addSetLayoutTypeListener((data) => {
+ console.log('+++++++++ 修改布局通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '修改布局通知',
+ message: `修改布局通知`,
+ });
+ });
+
+ /**
+ * 屏幕共享通知
+ * */
+ screenSharingCallbackId.value =
+ sdkConfernceControlModule.addScreenSharingListener((data) => {
+ console.log('+++++++++ 屏幕共享通知 ++++++++++', data);
+
+ const descMap = {
+ 0: '取消共享', //(未共享)
+ 1: '共享屏幕', //(已共享)
+ };
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '屏幕共享通知',
+ message: `【${data.member.alias}】${descMap[data.sharing_status]}`,
+ });
+ });
+};
diff --git a/src/views/consultation/components/js/useConfernceEvent.js b/src/views/consultation/components/js/useConfernceEvent.js
new file mode 100644
index 0000000..69d1471
--- /dev/null
+++ b/src/views/consultation/components/js/useConfernceEvent.js
@@ -0,0 +1,234 @@
+import { ref, getCurrentInstance, onUnmounted } from 'vue';
+import { ElNotification } from 'element-plus';
+import { ConferenceCallingNotification } from '@/views/consultation/hooks/callingNotification';
+import useConfernceModule from '@/views/consultation/sdk/conference';
+import store from '@/store'
+import emitter from "@/utils/eventBus.js";
+
+const sdkConfernceModule = useConfernceModule();
+
+// 通知时长
+const duration = 10 * 1000;
+
+const createCallbackId = ref('');
+const reminCallbackId = ref('');
+const deleteCallbackId = ref('');
+const updateCallbackId = ref('');
+const addMemberCallbackId = ref('');
+const deleteMemberCallbackId = ref('');
+const mediaStreamCallbackId = ref('');
+const answerAckCallbackId = ref('');
+const hangupCallbackId = ref('');
+const incomingCallbackId = ref('');
+const stateCallbackId = ref('');
+
+// 移除事件注册
+const unRegisterConferenceEvent = () => {
+ sdkConfernceModule.removeCreateListener(createCallbackId.value);
+ sdkConfernceModule.removeRemindListener(reminCallbackId.value);
+ sdkConfernceModule.removeDeleteListener(deleteCallbackId.value);
+ sdkConfernceModule.removeUpdateListener(updateCallbackId.value);
+ sdkConfernceModule.removeAddMemberListener(addMemberCallbackId.value);
+ sdkConfernceModule.removeDeleteMemberListener(deleteMemberCallbackId.value);
+ sdkConfernceModule.removeMediaStream(mediaStreamCallbackId.value);
+ sdkConfernceModule.removeAnswerAckEvt(answerAckCallbackId.value);
+ sdkConfernceModule.removeHangupEvt(hangupCallbackId.value);
+ sdkConfernceModule.removeIncomingEvt(incomingCallbackId.value);
+ sdkConfernceModule.removeStateChangeListener(stateCallbackId.value);
+};
+
+/* 会议管理相关 */
+export default () => {
+ const globalStore = store.state.useGlobalStore;
+
+ // 初始化清除回调事件,避免外部重复调用注册方法导致事件重复
+ unRegisterConferenceEvent();
+
+ // 事件注册方便任意位置调用
+ emitter.on('unRegisterConferenceEvent',unRegisterConferenceEvent)
+
+ // 组件卸载时自动移除
+ onUnmounted(() => {
+ unRegisterConferenceEvent();
+ });
+
+ /**
+ * 添加创建通知,事件分发中心会自动过滤【创建者】
+ * */
+ createCallbackId.value = sdkConfernceModule.addCreateListener((data) => {
+ console.log('+++++++++ 会议创建通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议创建通知',
+ message: `收到来自【${ data.creator.alias }】创建的会议提醒,会议开始时间为【${data.appointment}】,参会者 ${ data.members.length } 人【${data.members.map((v) => v.alias).join('; ')}】`,
+ });
+
+ // 拉取会议列表
+ emitter.emit('fetchConfence');
+ });
+
+ /**
+ * 添加会议提醒通知
+ */
+ reminCallbackId.value = sdkConfernceModule.addRemindListener((data) => {
+ console.log('+++++++++ 会议开始提醒 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议开始提醒',
+ message: `收到来自【${data.creator.alias}】创建的会议提醒,会议主题【${ data.subject }】,会议开始时间为【${data.appointment}】,参会者 ${ data.members.length } 人【${data.members.map((v) => v.alias).join('; ')}】`,
+ });
+ });
+
+ /**
+ * 会议删除通知(注:服务端目前只修改成员会议的状态,不会真正删除,即不会派发 evt 通知)
+ */
+ deleteCallbackId.value = sdkConfernceModule.addDeleteListener((data) => {
+ console.log('+++++++++ 会议删除通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议删除通知',
+ message: `由【${data.creator.alias}】创建的【${data.appointment}】【${data.subject}】的会议已被删除!`,
+ });
+
+ // 拉取会议列表
+ emitter.emit('fetchConfence');
+ });
+
+ /**
+ * 会议修改通知
+ * */
+ updateCallbackId.value = sdkConfernceModule.addUpdateListener((data) => {
+ console.log('+++++++++ 会议修改通知 ++++++++++', data);
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议修改通知',
+ message: `由【${data.creator.alias}】创建的【${data.appointment}】【${data.subject}】的会议发生调整!`,
+ });
+ });
+
+ /**
+ * 增加会议成员通知
+ * */
+ addMemberCallbackId.value = sdkConfernceModule.addAddMemberListener(
+ (data) => {
+ console.log('+++++++++ 增加会议成员通知 ++++++++++', data);
+
+ const name = data.members.map((v) => v.alias || v.number).join('; ');
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '增加会议成员通知',
+ message: `【${name}】已成为【会议:${data.meeting.number}】的会议成员!`,
+ });
+ }
+ );
+
+ /**
+ * 删除会议成员通知
+ * */
+ deleteMemberCallbackId.value = sdkConfernceModule.addDeleteMemberListener(
+ (data) => {
+ console.log('+++++++++ 删除会议成员通知 ++++++++++', data);
+ const name = data.member.alias || data.member.number;
+
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '删除会议成员通知',
+ message: `【${name}】已不属于【会议:${data.meeting.number}】的会议成员!`,
+ });
+ }
+ );
+
+ /**
+ * 来电通知
+ * */
+ incomingCallbackId.value = sdkConfernceModule.addIncomingEvt((data) => {
+ console.log('+++++++++ 来电通知 ++++++++++', data);
+
+ // 显示来电弹窗
+ ConferenceCallingNotification({
+ conference: data.conference,
+ call_id: data.call_id,
+ text: {
+ calling: '来电',
+ title:'会议已经开始',
+ answer: '立即进入',
+ hangUp: '暂不进入',
+ },
+ });
+ });
+
+ /**
+ * 来电接听通知
+ * */
+ answerAckCallbackId.value = sdkConfernceModule.addAnswerAckEvt((data) => {
+ console.log('+++++++++ 来电接听通知 ++++++++++', data);
+ });
+
+ /**
+ * 挂断通知:来电挂断 或 离开会议
+ * */
+ hangupCallbackId.value = sdkConfernceModule.addHangupEvt((data) => {
+ console.log('+++++++++ 挂断通知 ++++++++++', data);
+
+ emitter.emit('onHangup', data);
+ });
+
+ /**
+ * 媒体流通知
+ * */
+ mediaStreamCallbackId.value = sdkConfernceModule.addMediaStream(
+ (call_id, stream, type) => {
+ console.log('+++++++++ 媒体流通知 ++++++++++');
+ emitter.emit('onMediaStream', { call_id, stream, type });
+ }
+ );
+
+ /**
+ * 会议状态变更通知
+ */
+ stateCallbackId.value = sdkConfernceModule.addStateChangeListener((data) => {
+ console.log('+++++++++ 会议状态变更通知 ++++++++++', data);
+
+ // state 0=未开始,1=进行中,2=已取消,3=已结束,三方网关 上报会议开始 为 1,上报会议结束 为 3
+ switch (data.state) {
+ case 0: // 未开始
+ break;
+
+ case 1: // 进行中
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议开始通知',
+ message: `会议号为【${data.meeting.number}】的会议正在进行中!`,
+ });
+ break;
+
+ case 2: // 已取消
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议取消通知',
+ message: `会议号为【${data.meeting.number}】的会议已被取消!`,
+ });
+ break;
+
+ case 3: // 已结束
+ ElNotification.info({
+ id: `${Date.now()}`,
+ title: '会议结束通知',
+ message: `会议号为【${data.meeting.number}】的会议已结束!`,
+ });
+
+ // window.video.src = undefined;
+ // window.showVideo.value = false;
+ // window.videoViewRoot.style.display = 'none';
+ break;
+ }
+
+ // 拉取会议列表
+ emitter.emit('fetchConfence');
+ });
+};
diff --git a/src/views/consultation/components/meetingView.vue b/src/views/consultation/components/meetingView.vue
new file mode 100644
index 0000000..bdc0204
--- /dev/null
+++ b/src/views/consultation/components/meetingView.vue
@@ -0,0 +1,842 @@
+
+
+
+
+
+
+ {{ displaySubject }} ({{ activeMeetingConfig?.meeting.number }})
+
+
+
+
+
+
+
+ {{ name }}
+
+
+
+
+ {{ activeMeetingConfig?.sharingMember?.alias}}正在共享屏幕
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 结束共享
+
+
+
+
+
+ 结束会议
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/consultation/components/micPop.vue b/src/views/consultation/components/micPop.vue
new file mode 100644
index 0000000..b3507a4
--- /dev/null
+++ b/src/views/consultation/components/micPop.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
diff --git a/src/views/consultation/components/zh_CN.json b/src/views/consultation/components/zh_CN.json
new file mode 100644
index 0000000..11a25f2
--- /dev/null
+++ b/src/views/consultation/components/zh_CN.json
@@ -0,0 +1,3203 @@
+{
+ "code": 20000,
+ "data": {
+ "advancedConference.content.subject": "会议主题",
+ "advancedConference.content.remark": "备注",
+ "advancedConference.content.duration": "会议时长",
+ "advancedConference.content.alarm": "提醒时间",
+ "advancedConference.content.appointment": "开始时间",
+ "conference.member.present": "会议中",
+ "conference.member.absent": "未入会",
+ "conference.role.creator": "创建者",
+ "conference.role.common": "成员",
+ "conference.role.host": "主席",
+ "conference.halfDuplex_call": "半双工呼叫",
+ "conference.fullDuplex_call": "全双工呼叫",
+ "conference.control.allCall": "呼叫全部未入会",
+ "conference.control.disableMic": "禁言成员",
+ "conference.control.releaseMic": "解除禁言",
+ "conference.control.muteMember": "静音成员",
+ "conference.control.openCamera": "打开摄像头",
+ "conference.control.closeCamera": "关闭摄像头",
+ "conference.control.setAsMember": "设置为成员",
+ "conference.control.setAsHost": "设置为主席",
+ "conference.control.designatedSpeech": "指定发言",
+ "conference.control.reName": "修改昵称",
+ "conference.control.removeMeeting": "移出会议",
+ "conference.components.attendee.restrictOption.label3": "踢出会议",
+ "conference.cancel_speak": "取消发言",
+ "conference.all_cancel_ban": "全部取消禁言",
+ "conference.control.unmute": "解除静音",
+ "conference.control.cancel.image": "取消指定",
+ "conference.control.appoint.image": "指定画面",
+ "conference.components.media.footer.defaultBtns.invitingAttendees": "邀请参会",
+ "conference.join": "进入会议",
+ "conference.start": "开始会议",
+ "conference.status.init": "待开始",
+ "conference.status.progress": "进行中",
+ "conference.status.end": "已结束",
+ "conference.status.canceled": "已取消",
+ "conference.cmmon.quit.btn": "退出会议",
+ "conference.control.allBan": "全部禁言",
+ "conference.control.openAllBan": "解除全部禁言",
+ "conference.member.count": "成员数量",
+ "conference.notification.action.join": "立即进入",
+ "conference.notification.action.later": "暂不进入",
+ "conference.notification.canceled": "会议已经取消",
+ "conference.notification.started": "会议已经开始会议已经开始",
+ "conference.control.calling": "呼叫中...",
+ "conference.components.media.audioPop.selectSpeaker": "选择扬声器",
+ "conference.components.media.audioPop.volumeSetting": "音量设置",
+ "conference.components.media.cameraPop.switchCamera": "选择摄像头",
+ "conference.components.media.cameraPop.selectMicrophone": "选择麦克风",
+ "conference.update.result.ok": "修改成功",
+ "common.number.invalid": "无效号码",
+ "conference.join.setting.nick": "您的昵称",
+ "conference.join.setting.label": "会议设置",
+ "conference.join.setting.audio": "自动连接音频",
+ "conference.join.setting.camera": "入会开启摄像头",
+ "conference.join.setting.mic": "入会开启麦克风",
+ "conference.property.number": "会议号码",
+ "conference.components.media.header.speaking": "正在讲话",
+ "conference.banned": "您已被禁言",
+ "conference.components.media.header.stateText.shareScreen": "正在共享屏幕",
+ "conference.share.stop": "结束共享",
+ "conference.share.stoped.msg": "屏幕共享已经结束",
+ "conference.components.media.footer.voiceStimulation.on": "语音激励已开启",
+ "conference.components.media.footer.voiceStimulation.off": "语音激励已关闭",
+ "conference.shortcut": "快速会议",
+ "conference.book.result.ok": "预定会议成功",
+ "conference.conflict.msg": "你当前正在参加会议",
+
+ "login.error.tips":"是否跳转到到对接平台,检查一下网络情况",
+ "call.floor":"话权",
+ "accountsList.columns.alias": "别名",
+ "accountsList.columns.confirmPassword": "确认密码",
+ "accountsList.columns.number": "号码",
+ "accountsList.columns.userName": "用户名",
+ "accountsList.columns.validate.content": "内容不能为空",
+ "addOnDuty.result.error": "值守异常",
+ "addOnDuty.result.fail": "值守失败",
+ "addOnDuty.result.success": "值守成功",
+ "alarmNote.buttom.deal": "处理",
+ "alarmNote.buttom.gis": "查看定位",
+ "alarmNote.buttom.ignore": "忽略",
+ "alarmNote.buttom.ignoreObject": "忽略该对象",
+ "alarmNote.buttom.ignoreOne": "忽略本条",
+ "alarmNote.crossZoneType.0": "离开【",
+ "alarmNote.crossZoneType.1": "进入【",
+ "alarmNote.overspeedType.0": "超速告警",
+ "alarmNote.overspeedType.1": "低速告警",
+ "alarmNote.symbol.barckets": "】",
+ "alarmNote.type.0": "无类型",
+ "alarmNote.type.1": "普通告警",
+ "alarmNote.type.2": "告警带呼叫",
+ "alarmNote.type.3": "gps告警",
+ "alarmNote.type.4": "告警带gps和呼叫",
+ "alarmNote.type.5": "紧急呼叫",
+ "alarmNote.type.6": "显式告警",
+ "alarmNote.type.7": "隐式告警",
+ "basicData.mailList.equipment.alias": "别名",
+ "basicData.mailList.equipment.device_alias.reg": "名称中不允许有 $1 特殊字符",
+ "basicData.mailList.equipment.latitude": "纬度",
+ "basicData.mailList.equipment.longitude": "经度",
+ "basicData.mailList.equipment.number": "号码",
+ "basicData.mailList.equipment.onlynumber": "只可输入数字",
+ "basicData.mailList.equipment.operation": "操作",
+ "basicData.mailList.equipment.org": "所属组织",
+ "basicData.mailList.equipment.save": "保存",
+ "basicData.mailList.equipment.validLatitudeMsg": "纬度整数部分为0-85,小数部分为0到6位",
+ "basicData.mailList.equipment.validLongitudeMsg": "经度整数部分为0-180,小数部分为0到6位!",
+ "basicData.mailList.equipment.validate.content": "内容不能为空!",
+ "basicData.mailList.group.broadcast": "广播",
+ "basicData.mailList.group.encryption": "加密",
+ "basicData.mailList.group.member": "组成员(号码)",
+ "basicData.mailList.staff.delOrgError.1": "还有子组织",
+ "basicData.mailList.staff.delOrgError.2": "还有设备信息",
+ "basicData.mailList.staff.delOrgError.3": "还有人员信息",
+ "basicData.mailList.staff.delOrgError.4": "还有组信息",
+ "basicData.mailList.staff.delOrgError.5": "删除组织架构错误",
+ "basicData.mailList.staff.delOrgError.9": "删除组织架构错误",
+ "basicData.role.3rdConfrance": "第三方会议",
+ "basicData.role.Interrupt": "强插",
+ "calling.notification.answer": "接听",
+ "calling.notification.hangUp": "挂断",
+ "channel.search": "基站名称",
+ "channel.subscribeAll": "全部订阅",
+ "channel.unsubscribeAll": "取消全部订阅",
+ "channelMonitor.callMode.crossStation": "跨站",
+ "channelMonitor.callMode.singleStation": "单站",
+ "channelMonitor.channelState.busy": "忙碌",
+ "channelMonitor.channelState.dormancy": "休眠",
+ "channelMonitor.channelState.free": "空闲",
+ "channelMonitor.channelState.invalid": "无效",
+ "channelMonitor.channelState.isolation": "隔离",
+ "channelMonitor.channelState.preemption": "抢占",
+ "channelMonitor.chnType.GPSGroupVoice": "GPS组呼语音信道",
+ "channelMonitor.chnType.GPSPullUpService": "GPS组呼数据信道",
+ "channelMonitor.chnType.auxiliaryControl": "辅控制信道(GPS辅控信道)",
+ "channelMonitor.chnType.dataService": "数据业务信道",
+ "channelMonitor.chnType.dataTransmissionSharing": "数传共享信道",
+ "channelMonitor.chnType.dualSlotDataTransmission": "双时隙数传专用信道",
+ "channelMonitor.chnType.dualSlotExclusiveData": "双时隙独占型数据信道",
+ "channelMonitor.chnType.dualSlotSharedData": "双时隙共享型数据信道",
+ "channelMonitor.chnType.groupCallBroadcast": "组呼广播信道",
+ "channelMonitor.chnType.masterControl": "主控制信道",
+ "channelMonitor.chnType.mediumRotaryTable": "中转台",
+ "channelMonitor.chnType.priorityDataTransmission": "优先级数传专用信道",
+ "channelMonitor.chnType.satelliteSpecificData": "卫星专用数据信道",
+ "channelMonitor.chnType.singleTimeSlotDataTransmission": "单时隙数传专用信道",
+ "channelMonitor.chnType.supplementaryRegistrationService": "辅助登记业务信道",
+ "channelMonitor.chnType.unused": "未使用信道",
+ "channelMonitor.chnType.voiceService": "语音业务信道",
+ "channelMonitor.icon.hide": "隐藏",
+ "channelMonitor.icon.show": "显示",
+ "channelMonitor.icon.subscribe": "订阅",
+ "channelMonitor.icon.unsubscribe": "取消订阅",
+ "channelMonitor.tableBody.empty": "暂无内容,请选择订阅的基站",
+ "channelMonitor.tableHeader.channelStatus": "信道状态",
+ "channelMonitor.tableHeader.channelType": "信道类型",
+ "channelMonitor.tableHeader.crossStationMode": "跨站模式",
+ "channelMonitor.tableHeader.no": "编号",
+ "channelMonitor.tableHeader.speaker": "讲话人",
+ "channelMonitor.tableHeader.timeOfChange": "变化时间",
+ "channelMonitor.tableHeader.tsc": "基站",
+ "channelMonitor.tips.Listening": "正在监听",
+ "channelMonitor.tips.getTscListError": "获取基站列表失败",
+ "channelMonitor.tips.subscriptionFailed": "基站信道信息订阅失败",
+ "channelMonitor.tips.successfullySubscribing": "基站信道信息订阅成功",
+ "channelMonitor.tips.successfullyUnsubscribing": "基站信道信息取消订阅成功",
+ "channelMonitor.tips.unsubscribingFailed": "基站信道信息取消订阅失败",
+ "common.button.cancel": "取消",
+ "common.button.confirm": "确认",
+ "common.button.selectALl": "全选",
+ "common.delete.tip": "是否确认删除?",
+ "common.handle.error": "处理异常",
+ "common.me.label": "我",
+ "common.model.tip": "提示",
+ "conference.message.beHangUp": "会议被挂断",
+ "demo.documentation": "文档说明",
+ "deviceCtrl.button.highSpeed": "高速",
+ "deviceCtrl.button.imageMagnification": "图像放大",
+ "deviceCtrl.button.imageReduction": "图像缩小",
+ "deviceCtrl.button.lowSpeed": "低速",
+ "deviceCtrl.button.mediumSpeed": "中速",
+ "deviceCtrl.button.moveDown": "下移",
+ "deviceCtrl.button.moveLeft": "左移",
+ "deviceCtrl.button.moveRight": "右移",
+ "deviceCtrl.button.moveUp": "上移",
+ "deviceCtrl.title.deviceControl": "云台控制",
+ "deviceTable.device.lockStatus1": "未被锁定",
+ "deviceTable.device.lockStatus2": "遥晕",
+ "deviceTable.device.lockStatus3": "遥醒",
+ "deviceTable.device.lockStatus4": "遥毙",
+ "deviceTable.deviceKill.result": "遥毙执行结果",
+ "deviceTable.deviceRevive.result": "遥醒执行结果",
+ "deviceTable.deviceStun.result": "遥晕执行结果",
+ "deviceTable.window.groupListWindow.fail": "获取用户归属组失败!",
+ "deviceTable.window.groupListWindow.group_name": "组名称",
+ "deviceTable.window.groupListWindow.number": "成员号码",
+ "deviceTable.window.groupListWindow.number_type": "号码类型",
+ "deviceTable.window.groupListWindow.title": "用户归属组",
+ "deviceTable.window.groupMember.fail": "查询成员失败!",
+ "deviceTable.window.groupMember.number": "成员号码",
+ "deviceTable.window.groupMember.title": "组内成员",
+ "deviceTable.window.nameWindow.fail": "功能别名发送失败!",
+ "deviceTable.window.nameWindow.name": "功能名称",
+ "deviceTable.window.nameWindow.success": "查询成功",
+ "deviceTable.window.nameWindow.title": "功能别名",
+ "deviceTable.window.onlineWindow.name": "终端",
+ "deviceTable.window.onlineWindow.status": "状态",
+ "deviceTable.window.onlineWindow.status1": "离线",
+ "deviceTable.window.onlineWindow.status2": "在线",
+ "deviceTable.window.onlineWindow.status3": "检测失败",
+ "deviceTable.window.onlineWindow.title": "在线检测",
+ "deviceTable.window.primary": "确定",
+ "deviceTable.window.statusWindow.fail": "查询锁定状态发送失败!",
+ "deviceTable.window.statusWindow.name": "终端",
+ "deviceTable.window.statusWindow.status": "锁定状态",
+ "deviceTable.window.statusWindow.success": "查询锁定状态发送成功!",
+ "deviceTable.window.statusWindow.title": "锁定状态",
+ "dial.panel.tips.PSTNNumber": "PSTN系统下的号码",
+ "dial.panel.tips.PSTNSystemNotFound": "未找到PSTN系统",
+ "download.finish": "下载完成",
+ "dynamic.columns.alias": "别名",
+ "error.code.detail": "详情",
+ "fax.down.tip": "下载地址不存在",
+ "fax.fileStatus.noRead": "未读",
+ "fax.fileStatus.read": "已读",
+ "fax.hint,newFax": "新传真",
+ "fax.list.contact_fax": "传真号",
+ "fax.list.contact_name": "姓名",
+ "fax.search.fax_rec_phone": "接收者号码",
+ "fax.search.fax_send_phone": "发送者号码",
+ "fax.sendFax.file": "文件",
+ "fax.sendFax.noCan": "不支持该格式",
+ "fax.sendFax.person": "收件人",
+ "fax.sendFax.regFile": "文件不能为空",
+ "fax.sendFax.regTel": "传真号格式错误",
+ "fax.sendFax.sending": "发送中",
+ "fax.sendFax.submitSuccess": "传真提交成功,发送状态发送列表查看",
+ "fax.sendFax.success": "上传成功",
+ "fax.sendFax.tip": "请选择或输入传真号",
+ "fax.sendFax.tipUpload": "请上传jpg,png,pdf格式",
+ "fax.tab.text1": "收件箱",
+ "fax.tab.text2": "未读传真",
+ "fax.tab.text3": "发件箱",
+ "fax.tab.text4": "写传真",
+ "fax.tabel.download": "下载",
+ "fax.userModal.choose": "选择联系人",
+ "fax.userModal.chooseNum": "已选:xx名用户",
+ "gateway.options.Heartbeat.0": "不发送",
+ "gateway.options.Heartbeat.1": "发送",
+ "gateway.tip.MCSSSIError1": "仅允许整数",
+ "gis.btnGroup.title.circleChecked": "圈选",
+ "gis.btnGroup.title.circleChecked.normal": "常规圈选",
+ "gis.btnGroup.title.circleChecked.polygon": "多边形圈选",
+ "gis.btnGroup.title.clearScreen": "清屏",
+ "gis.btnGroup.title.crossAlarm": "越区告警",
+ "gis.btnGroup.title.interestPoint": "兴趣点",
+ "gis.btnGroup.title.measureSurface": "测面",
+ "gis.btnGroup.title.replayTrack": "轨迹回放",
+ "gis.btnGroup.title.stadiometry": "测距",
+ "gis.btnGroup.title.subManagement": "订阅管理",
+ "gis.cicle.createGroupFailed": "圈选呼叫建立组失败",
+ "gis.cicle.noGroupMember": "没有组成员",
+ "gis.cross.add": "新增",
+ "gis.cross.addMember": "添加成员",
+ "gis.cross.addRegion": "添加区域",
+ "gis.cross.collapse.coll": "收起",
+ "gis.cross.color.error": "颜色错误,请重新选择",
+ "gis.cross.del.enble.warnMsg": "规则已启用不允许删除",
+ "gis.cross.del.region.warnMsg": "确定要删除选中的区域吗?",
+ "gis.cross.del.rule.warnMsg": "确定要删除选中的规则吗?",
+ "gis.cross.delResult0": "删除成功",
+ "gis.cross.delResult1": "操作失败",
+ "gis.cross.delResult2": "未启动越区告警功能",
+ "gis.cross.delResult9": "该区域已绑定规则,不可删除",
+ "gis.cross.editRegion": "编辑区域",
+ "gis.cross.empty": "暂无内容,请新建",
+ "gis.cross.new.addMember.typeError": "只支持添加终端",
+ "gis.cross.new.color": "颜色",
+ "gis.cross.new.desc": "描述",
+ "gis.cross.new.desp.placehodler": "描述信息",
+ "gis.cross.new.fail": "新增失败",
+ "gis.cross.new.name": "名称",
+ "gis.cross.new.period": "启用时段",
+ "gis.cross.new.receiver": "告警成员",
+ "gis.cross.new.region": "区域",
+ "gis.cross.new.region.have": "已有区域",
+ "gis.cross.new.region.title": "新增区域",
+ "gis.cross.new.result0": "保存成功",
+ "gis.cross.new.result1": "保存失败",
+ "gis.cross.new.result2": "未启动越区告警功能",
+ "gis.cross.new.succ": "新增成功",
+ "gis.cross.new.title": "新增规则",
+ "gis.cross.new.type": "规则类型",
+ "gis.cross.region.cood.error": "绘制图形并非区域面,请重新绘制",
+ "gis.cross.region.new.name.placehodler": "区域名称",
+ "gis.cross.region.new.tip": "请在地图上绘制区域",
+ "gis.cross.regionManager": "区域管理",
+ "gis.cross.rule": "规则",
+ "gis.cross.rule.name.exist": "名称已存在,请重新命名",
+ "gis.cross.rule.new.name.placehodler": "规则名称",
+ "gis.cross.rule.off": "规则已关闭",
+ "gis.cross.rule.on": "规则已启用",
+ "gis.cross.transfered": "已选对象",
+ "gis.detail.electricity": "电量",
+ "gis.interestPoint.InterestInfo.add": "新增兴趣点",
+ "gis.interestPoint.InterestInfo.choosen": "必选项",
+ "gis.interestPoint.InterestInfo.lonlat": "经纬度",
+ "gis.interestPoint.InterestInfo.placehodler": "兴趣点名称",
+ "gis.interestPoint.InterestInfo.search": "搜索兴趣点名称",
+ "gis.interestPoint.InterestInfo.type": "请选择类型",
+ "gis.interestPoint.InterestInfo.type200": "摄像头",
+ "gis.interestPoint.InterestInfo.type201": "实时流",
+ "gis.interestPoint.InterestInfo.type211": "医务室",
+ "gis.interestPoint.InterestInfo.type212": "消防站",
+ "gis.interestPoint.InterestInfo.type213": "兴趣点",
+ "gis.interestPoint.InterestInfo.type214": "警察站",
+ "gis.interestPoint.InterestInfo.type215": "学校",
+ "gis.interestPoint.InterestInfo.type216": "警告",
+ "gis.interestPoint.InterestInfo.type217": "无人机",
+ "gis.interestPoint.InterestInfo.update": "编辑兴趣点",
+ "gis.interestPoint.index.del": "确定删除该兴趣点吗?",
+ "gis.interestPoint.index.hideAll": "全部关闭",
+ "gis.interestPoint.index.showAll": "全部显示",
+ "gis.interestPoint.latitude.required": "纬度不能为空",
+ "gis.interestPoint.longitude.required": "经度不能为空",
+ "gis.measure.esc.delete": "按Esc键或Delete键可取消创建!",
+ "gis.measure.finish.esc.delete": "双击结束测量,按Esc键或Delete键可取消创建!",
+ "gis.measure.processing": "业务执行中,禁止打开地图工具栏!",
+ "gis.speed.del.delRule": "删除规则",
+ "gis.speed.del.enable.warnMsg": "当前规则正在使用,删除后将终止任务",
+ "gis.speed.del.warnMsg": "确定删除该规则吗?",
+ "gis.speed.form,speedJudgeTimes": "判断次数",
+ "gis.speed.form.limitSpeed": "限值(km/h)",
+ "gis.speed.form.ruleAddError": "新增规则失败",
+ "gis.speed.form.ruleAddSuccess": "新增规则成功",
+ "gis.speed.form.ruleNameInput": "请输入规则名称",
+ "gis.speed.form.ruleUpdateError": "更新规则失败",
+ "gis.speed.form.ruleUpdateSuccess": "更新规则成功",
+ "gis.speed.form.speedJudgeTimesInput": "请输入判断次数",
+ "gis.speed.form.speedLimitInput": "请输入速度",
+ "gis.speed.new.title": "新增超速告警",
+ "gis.subManagement.content.cancel.error": "取消失败",
+ "gis.subManagement.content.cancel.success": "取消成功",
+ "gis.subManagement.content.cancelMinSubPeriod": "取消最小订阅周期",
+ "gis.subManagement.content.currentPullPeriod": "当前上拉周期(s)",
+ "gis.subManagement.content.edit.error": "修改失败",
+ "gis.subManagement.content.edit.success": "修改成功",
+ "gis.subManagement.content.isCancelMinSubPeriod": "确定取消所选对象的最小订阅周期吗?",
+ "gis.subManagement.content.isUnsubscribe": "确定取消所选对象的订阅操作吗?",
+ "conference.content.isCancel": "确定取消当前会议吗?",
+ "conference.history": "历史会议",
+ "gis.subManagement.content.messagecheck": "请选择至少一条数据",
+ "gis.subManagement.content.minSubPeriod": "最小订阅周期(s)",
+ "gis.subManagement.content.number": "号码",
+ "gis.subManagement.content.object": "对象",
+ "gis.subManagement.content.pullPeriod": "上拉周期(s)",
+ "gis.subManagement.content.recoveryTime": "恢复时间(s)",
+ "gis.subManagement.content.setWholeNet.messageInfo1": "设置全网订阅参数成功",
+ "gis.subManagement.content.setWholeNet.messageInfo2": "设置全网允许最小订阅周期成功",
+ "gis.subManagement.content.setting": "设置",
+ "gis.subManagement.content.subPeriods": "订阅周期(s)",
+ "gis.subManagement.content.subRelationship": "订阅关系",
+ "gis.subManagement.content.subRelationship.message": "详情",
+ "gis.subManagement.content.subStatus": "订阅状态",
+ "gis.subManagement.content.subStatus.0": "禁止",
+ "gis.subManagement.content.subStatus.1": "全网上拉",
+ "gis.subManagement.content.subStatus.2": "部分上拉",
+ "gis.subManagement.content.subTime": "订阅时间",
+ "gis.subManagement.content.unsubscribe.messageError": "取消订阅失败",
+ "gis.subManagement.content.unsubscribe.messageInfo": "取消订阅成功",
+ "gis.subManagement.header.add": "添加",
+ "gis.subManagement.header.addObject": "选择订阅对象",
+ "gis.subManagement.header.modifyMinSubPeriod": "修改最小订阅周期",
+ "gis.subManagement.header.unsubscribe": "取消位置订阅",
+ "gis.subManagement.panel.device": "终端",
+ "gis.subManagement.panel.dispatcher": "调度员",
+ "gis.subManagement.panel.wholeNet": "全网",
+ "gis.subManagement.validate.limitNumber": "应不低于全网最小值$1s",
+ "gis.title.circleCall": "圈选呼叫",
+ "gis.track.dataProssing": "数据处理中...",
+ "gis.track.dateNotNull": "日期不能为空!",
+ "gis.track.east": "正东",
+ "gis.track.export.direction": "方向",
+ "gis.track.export.filename": "轨迹数据",
+ "gis.track.export.latitude": "纬度",
+ "gis.track.export.longitude": "经度",
+ "gis.track.export.number": "序号",
+ "gis.track.export.receiveTime": "接收时间",
+ "gis.track.export.reportTime": "上报时间",
+ "gis.track.export.speed": "速度",
+ "gis.track.kiloPerHour": "千米/小时",
+ "gis.track.northeast": "东北",
+ "gis.track.northwest": "西北",
+ "gis.track.nroth": "正北",
+ "gis.track.overNumber": "终端位置信息上报数量过大,取最新的10000个坐标点显示",
+ "gis.track.overSeven": "搜索间隔周期不能大于七天!",
+ "gis.track.pleaseInput": "请输入终端号码或者名称进行查询",
+ "gis.track.searchLoading": "轨迹数据查询中...",
+ "gis.track.selectNull": "查询终端信息为空或查询结果不存在!",
+ "gis.track.south": "正南",
+ "gis.track.southeast": "东南",
+ "gis.track.southwest": "西南",
+ "gis.track.trackData": "轨迹回放数据",
+ "gis.track.trackLoading": "轨迹数据加载中...",
+ "gis.track.trackPainting": "轨迹绘制中...",
+ "gis.track.west": "正西",
+ "gis.trackPlayback.node": "节点",
+ "gis.trackPlayback.timeQuantum": "时间段",
+ "grafstatus.notice.content": "当前集群是备机,是否切换到主机",
+ "grafstatus.notice.directtips": "当前集群是备机,切换到主机",
+ "groupList.columns.member": "成员",
+ "groupList.numberType.11": "会议",
+ "gw_config.tipTitle": "提示",
+ "header.date.day.0": "星期天",
+ "header.date.day.1": "星期一",
+ "header.date.day.2": "星期二",
+ "header.date.day.3": "星期三",
+ "header.date.day.4": "星期四",
+ "header.date.day.5": "星期五",
+ "header.date.day.6": "星期六",
+ "header.date.day.format": "{0}日",
+ "header.date.month.0": "1月",
+ "header.date.month.1": "2月",
+ "header.date.month.10": "11月",
+ "header.date.month.11": "12月",
+ "header.date.month.12": "12月",
+ "header.date.month.2": "3月",
+ "header.date.month.3": "4月",
+ "header.date.month.4": "5月",
+ "header.date.month.5": "6月",
+ "header.date.month.6": "7月",
+ "header.date.month.7": "8月",
+ "header.date.month.8": "9月",
+ "header.date.month.9": "10月",
+ "localResource.advance.search.tip": "筛选",
+ "localResource.device.numberType0": "个呼",
+ "localResource.device.numberType2": "电呼",
+ "localResource.device.numberType22": "双模",
+ "localResource.group.numberType0": "组呼",
+ "localResource.group.numberType3": "全呼",
+ "localResource.search.domain.tip": "切域",
+ "login.form.domain.errMsg": "域名不能为空",
+ "login.form.domain.placeholder": "域名",
+ "login.form.login": "登录",
+ "login.form.login.errMsg": "登录出错,请刷新重试",
+ "login.form.login.success": "欢迎使用",
+ "login.form.logout.error": "登出失败",
+ "login.form.logout.success": "登出成功",
+ "login.form.logout.timeout": "登出超时",
+ "login.form.password.errMsg": "密码不能为空",
+ "login.form.password.placeholder": "密码",
+ "login.form.protocol": "服务协议",
+ "login.form.readAndAgree": "阅读并同意",
+ "login.form.userName.errMsg": "用户名不能为空",
+ "login.form.userName.placeholder": "账号",
+ "login.logout.tip": "确定退出登录?",
+ "login.ptt.download": "PTT插件",
+ "login.tips.needAgreeProtocol": "需要阅读并同意服务协议",
+ "meeting.add.errTip": "只支持终端、调度台、第三方会议!",
+ "meeting.add.number": "会议成员",
+ "meeting.btn.endMeeting": "结束会议",
+ "meeting.btn.startMeeting": "开始会议",
+ "meeting.btn.videoMeeting": "音视频会议进行中",
+ "meeting.call.add_conference_video_call": "添加音视频会议",
+ "meeting.call.conference_video_call": "音视频会议",
+ "meeting.delete.fail": "会议删除失败!",
+ "meeting.delete.success": "会议删除成功!",
+ "meeting.cancel.success": "会议取消成功!",
+ "meeting.deleteUser.fail": "移除会议失败",
+ "meeting.deleteUser.success": "移除会议成功",
+ "meeting.list.addMeeting_fail": "会议新增失败",
+ "meeting.list.addMeeting_success": "会议新增成功",
+ "meeting.list.editMeeting_fail": "会议修改失败",
+ "meeting.list.editMeeting_success": "会议修改成功",
+ "meeting.maxLength": "会议成员不超过128",
+ "meeting.modal.confirmContent": "确定开始会议?",
+ "meeting.modal.control_move_text": "移除会议",
+ "meeting.modal.control_text": "管控",
+ "meeting.modal.control_voice_text": "禁言成员",
+ "meeting.modal.delText": "确定删除吗?",
+ "meeting.modal.noCanAdd": "不可以添加",
+ "meeting.modal.no_online": "当前不在线",
+ "meeting.modal.personType": "创建者",
+ "meeting.modal.release_text": "解除",
+ "meeting.modal.release_voice_text": "解除禁言",
+ "meeting.modal.user.placeholder": "号码",
+ "meeting.modal.user.title": "管理成员",
+ "meeting.modal.userExit": "成员已存在",
+ "meeting.modal.userManger": "成员管理",
+ "meeting.modal.voice.mutedFail": "禁言失败",
+ "meeting.modal.voice.mutedSuccess": "禁言成功",
+ "meeting.modal.voice.no_mutedFail": "解除禁言失敗",
+ "meeting.modal.voice.no_mutedSuccess": "解除禁言成功",
+ "meeting.opration.ban": "不允许操作",
+ "meeting.opration.look": "查看",
+ "meeting.opration.missBan": "会议未接不允许操作",
+ "meeting.setting.soundCenter": "立体声",
+ "meeting.setting.soundLeft": "左声道",
+ "meeting.setting.soundRight": "右声道",
+ "meeting.setting.voiceSet": "音量设置",
+ "meeting.tip.no_can_del": "会议创建者不允许删除",
+ "meetingGroup.list.dispatcher_account": "调度员",
+ "meetingGroup.list.system_id": "所属系统",
+ "meeting_btn_no_sendMessage": "音频会议不支持发送消息",
+ "menu.basicData": "基础数据",
+ "menu.basicData.system": "系统",
+ "menu.tree.org": "组织架构",
+ "message.audio.min.size": "文件过小,请点击下载查看",
+ "message.download.picture.name": "下载图片.jpg",
+ "message.historical.reports": "历史短信报表",
+ "message.prompt.image.download": "收到新文件,点击下载",
+ "message.prompt.prompt": "提示",
+ "message.prompt.size.exceed": "上传文件大小不能超过20MB!",
+ "message.prompt.warning": "是否关闭弹窗,离开后,消息将被清空",
+ "message.send.enter": "发送 (Enter)",
+ "message.sending.area": "消息发送区域",
+ "message.status.messages": "状态短信",
+ "message.status.sent": "已发送状态短消息:",
+ "message.template": "快捷短语",
+ "message.template.conlength": "不允许超过100个字符",
+ "messageBox.logout": "登出登录",
+ "messageBox.tab.title.clean": "是否清空未读消息?",
+ "messageBox.tab.title.content": "清空消息后将不再显示消息内容",
+ "messageBox.tab.title.message": "消息",
+ "messageBox.tab.title.notice": "通知",
+ "messageBox.tab.title.unviewed": "未读的消息",
+ "messageBox.userCenter": "用户中心",
+ "monitor.call.connecting": "上拉连接中...",
+ "monitor.call.disconnect": "视频上拉未建立",
+ "monitor.call.preReconnect": "准备重连...",
+ "monitor.call.reconnecting": "上拉重连中...",
+ "monitor.more": "更多",
+ "monitor.video.endMonitor": "结束监控",
+ "monitor.video.polling": "轮询",
+ "monitor.video.surveillance": "视频侦视",
+ "monitor.voice.surveillance": "语音侦视",
+ "multistageScheduling.form.failedToLoadData": "加载数据失败",
+ "multistageScheduling.gateForm.server": "服务器",
+ "navbar.action.locale": "中文",
+ "navbar.settings.changePassword": "修改密码",
+ "navbar.settings.confirmPasswordTip": "与新密码不一致!",
+ "navbar.settings.newPassword": "新密码",
+ "navbar.settings.oldPassword": "原始密码",
+ "navbar.settings.saveSuccess": "保存成功,请重新登录",
+ "navbar.settings.userNameTip": "与当前账号不一致!",
+ "onDuty.search": "别名/号码",
+ "onDuty.speak.0": "正在讲话...",
+ "onDuty.speak.1": "话权空闲...",
+ "onDuty.status.0": "离线",
+ "onDuty.status.1": "空闲",
+ "onDuty.status.2": "正在语音...",
+ "onDuty.status.3": "正在视频...",
+ "onDuty.status.4": "正在音视频...",
+ "onDuty.status.5": "正在消息...",
+ "onDuty.status.6": "通话中...",
+ "onDuty.unattended": "取消值守",
+ "onDuty.overrideCall": "强拆",
+ "onDuty.interruptCall": "强插",
+ "onQueue.status.-1": "未接",
+ "onQueue.status.-2": "回呼",
+ "onQueue.status.0": "来电",
+ "onQueue.status.1": "未接",
+ "onQueue.status.2": "接听中",
+ "onQueue.status.callback_handler": "处理人:",
+ "org.tree.add": "新增",
+ "org.tree.del": "删除",
+ "org.tree.del.confirm": "确定删除所选组织架构?",
+ "org.tree.edit": "编辑",
+ "org.tree.org.select": "选择",
+ "org.tree.org_alias": "别名",
+ "org.tree.org_alias.maxlength": "别名最大长度30",
+ "org.tree.org_alias.required": "别名不能为空!",
+ "org.tree.refresh": "刷新",
+ "org.tree.select.node.please": "请选择节点",
+ "org.tree.tips": "提示",
+ "public.columns.placeholder.input": "请输入...",
+ "public.modal.delText": "确定删除吗?",
+ "public.use.cancel": "取消",
+ "public.use.edit": "编辑",
+ "public.use.export": "导出",
+ "public.use.fail": "失败",
+ "public.use.noSend": "已提交待发送",
+ "public.use.operations": "操作",
+ "public.use.requestFail": "请求失败",
+ "public.use.search": "搜索",
+ "public.use.submit": "提交",
+ "public.use.success": "成功",
+ "public.use.upload": "上传",
+ "pullVideo.GB.choosePoc": "只支持poc终端",
+ "queue.callBack.title": "回呼请求",
+ "queue.missCall.title": "未接来电",
+ "queue.search": "号码",
+ "removeOnDuty.result.error": "取消值守异常",
+ "removeOnDuty.result.fail": "取消值守失败",
+ "removeOnDuty.result.limit": "不允许取消信道监控值守对象",
+ "removeOnDuty.result.success": "取消值守成功",
+ "report.ROIPterminalRRS.option1": "窄带上线",
+ "report.ROIPterminalRRS.option2": "宽带上线",
+ "report.ROIPterminalRRS.option3": "宽窄带同时上线",
+ "report.alarm.note": "告警通知",
+ "report.callBackRequest.callBackCode": "回呼状态码",
+ "report.callBackRequest.callBackHandler": "回呼处理人",
+ "report.callBackRequest.callBackHandlerTime": "回呼处理时间",
+ "report.callBackRequest.callBackTime": "回呼时间",
+ "report.callee.AdminSetting_BroadCastNumber_PDT1": "基站全呼",
+ "report.callee.AdminSetting_BroadCastNumber_PDT2": "本地全呼",
+ "report.callee.AdminSetting_BroadCastNumber_PDT3": "地域全呼",
+ "report.callee.AdminSetting_BroadCastNumber_PDT4": "全网全呼",
+ "report.callee.AdminSetting_BroadCastNumber_DMR3": "全网呼叫",
+ "report.callee.AdminSetting_BroadCastNumber_HF": "HF全呼",
+ "report.callee.AdminSetting_BroadCastNumber_CORMDFSI": "Tetra全呼",
+ "AdminSetting_BroadCastNumber_AllCall": "全网全呼",
+ "AdminSetting_BroadCastNumber_DMR3": "全网全呼",
+ "report.callee.downloaddata": "用户下载数据",
+ "report.callee.uploaddata": "用户上传数据",
+ "report.calltype.option.CTCFREE": "空闲",
+ "report.calltype.option.CTCUNKNOWN": "未知",
+ "report.calltype.option.CTEnvListen": "环境侦听",
+ "report.calltype.option.CTEnvWatch": "环境侦视",
+ "report.calltype.option.CTGroupSds": "分组短信",
+ "report.calltype.option.CTRouteCall": "路由呼叫",
+ "report.calltype.option.CTVideoPlayback": "三方视频平台回放",
+ "report.calltype.option.CTVideoPullForward": "视频上拉并转发",
+ "report.calltype.option.analog": "模拟呼叫",
+ "report.calltype.option.broadcastCall": "广播呼叫",
+ "report.calltype.option.callbackRequest": "回呼请求",
+ "report.calltype.option.conference": "调度台接收视频会议呼叫",
+ "report.calltype.option.crosspatch": "跨系统派接",
+ "report.calltype.option.crosspatchcall": "群组",
+ "report.calltype.option.diffVideoGroupCall": "不同源可视组呼",
+ "report.calltype.option.emergencyvideoSendBack": "紧急视频回传",
+ "report.calltype.option.groupVoice": "语音组呼",
+ "report.calltype.option.homologyVideoGroupCall": "同源视频组呼",
+ "report.calltype.option.homologyVideoGroupCallWithoutVoice": "同源视频组呼(无语音)",
+ "report.calltype.option.interDispatcher": "调度员互通",
+ "report.calltype.option.interDispatcherWithVideo": "调度员互通(有视频)",
+ "report.calltype.option.interDispatcherWithVideoWithoutVoice": "调度员互通(有视频无语音)",
+ "report.calltype.option.joinConference": "调度台呼叫入会",
+ "report.calltype.option.multipartycall": "包容呼叫",
+ "report.calltype.option.onlyVideoMulticast": "仅视频组播",
+ "report.calltype.option.privateVideoWithVoice": "可视单呼(有语音)",
+ "report.calltype.option.privateVideoWithoutVoice": "可视单呼(无语音)",
+ "report.calltype.option.privateVoice": "语音单呼",
+ "report.calltype.option.pstn": "外线",
+ "report.calltype.option.pullDownVideo": "视频下拉",
+ "report.calltype.option.pullVideo": "视频上拉",
+ "report.calltype.option.pullVideoWithVoice": "视频上拉(有语音)",
+ "report.calltype.option.pullVideoWithoutVoice": "视频上拉(无语音)",
+ "report.calltype.option.pushVideo": "视频推送",
+ "report.calltype.option.recordpay": "录音回放",
+ "report.calltype.option.remoteMonitor": "远程监听呼叫",
+ "report.calltype.option.routeCall": "路由呼叫",
+ "report.calltype.option.systemCall": "系统全呼",
+ "report.calltype.option.videoConference": "语音视频会议",
+ "report.calltype.option.videoMulticast": "视频组播",
+ "report.calltype.option.videoPlayBack": "三方视频平台回放",
+ "report.calltype.option.videoPullForward": "视频上拉并转发",
+ "report.calltype.option.videoSendBack": "视频回传",
+ "report.calltype.option.voiceConference": "语音会议",
+ "report.calltype.option.voiceMulticast": "语音组播",
+ "report.crossAlarm.alarmStatus.title": "告警状态",
+ "report.crossAlarm.alarmTime.title": "告警时间",
+ "report.crossAlarm.alarmType.title": "告警类型",
+ "report.crossAlarm.cancel.title": "取消告警时间",
+ "report.crossAlarm.regionName.title": "区域名称",
+ "report.crossAlarm.ruleName.title": "规则名称",
+ "report.crossAlarmState.option.cancel": "取消告警",
+ "report.crossAlarmState.option.make": "产生告警",
+ "report.crossAlarmType.option.in": "进入告警",
+ "report.crossAlarmType.option.out": "离开告警",
+ "report.dispatcher.title": "监听者",
+ "report.emergencyAlarm.header.alarmDeviceNum": "终端号码/别名",
+ "report.emergencyAlarm.header.alarmStatus": "告警状态",
+ "report.emergencyAlarm.header.alarmStatus.0": "取消告警",
+ "report.emergencyAlarm.header.alarmStatus.1": "标识告警",
+ "report.emergencyAlarm.header.alarmType": "告警类型",
+ "report.emergencyAlarm.tableList.alarmTime": "告警时间",
+ "report.emergencyAlarm.tableList.cancleAlarmTime": "取消告警时间",
+ "report.emergencyAlarm.tableList.device": "终端",
+ "report.emergencyAlarm.tableList.num": "序号",
+ "report.encryption.option.n": "非加密",
+ "report.encryption.option.y": "加密",
+ "report.encryption.title": "加密类型",
+ "report.export.occupied": "有其它报表正在导出,请稍后再试",
+ "report.file.audioError1": "请求终止了",
+ "report.file.audioError2": "网络异常",
+ "report.file.audioError3": "文件解码异常",
+ "report.file.audioError4": "文件不支持",
+ "report.file.downFail": "查找文件失败",
+ "report.file.downloadFail": "下载失败",
+ "report.file.export.messageInfo.beginExport": "开始导出数据",
+ "report.file.export.messageInfo.daysLimit": "导出不能超过7天时间",
+ "report.file.export.messageInfo.limit": "导出数据不能超过10000条记录",
+ "report.file.export.messageInfo.noData": "没有要导出的数据",
+ "report.file.export.noData": "数据为空",
+ "report.file.urlEmpty": "未找到文件",
+ "report.file.urlError": "获取文件失败",
+ "report.input.numAndAlias": "号码/别名",
+ "report.msgSendType.option.group": "组发",
+ "report.msgSendType.option.placeholder": "发送类别",
+ "report.msgSendType.option.private": "个发",
+ "report.msgType.option.binary": "二进制短信",
+ "report.msgType.option.location": "位置短信",
+ "report.msgType.option.mutilMedia": "多媒体消息",
+ "report.msgType.option.nomaltext": "普通短信",
+ "report.msgType.option.placeholder": "消息类型",
+ "report.msgType.option.status": "状态消息",
+ "report.operation.check": "查看",
+ "report.operation.export": "导出",
+ "report.operation.search": "搜索",
+ "report.option.all": "全部",
+ "report.option.callMode": "双工模式",
+ "report.option.callPriority": "呼叫级别",
+ "report.option.callTime": "通话时长",
+ "report.option.called": "被叫",
+ "report.option.calling": "主叫",
+ "report.option.emergencyCall": "紧急呼叫",
+ "report.option.norrmalCall": "普通呼叫",
+ "report.option.setupTime": "发起时间",
+ "report.option.startTime": "起始时间",
+ "report.receiver.title": "接收者",
+ "report.receiver.title.placehodler": "接收者号码/别名",
+ "report.result.empty": "查询结果为空",
+ "report.sdsContent.title": "消息内容",
+ "report.sdsType.location": "位置短信",
+ "report.sdsType.media": "多媒体短信",
+ "report.sdsType.normal": "普通短信",
+ "report.sdsType.state": "状态短信",
+ "report.select.option.default": "请选择",
+ "report.sendTime.title": "发送时间",
+ "report.sendType.title": "发送类型",
+ "report.sender.title": "发送者",
+ "report.sender.title.placehodler": "发送者号码/别名",
+ "report.serial.title": "序号",
+ "report.speedWarning.alarmType": "告警状态",
+ "report.speedWarning.alarmType.1": "取消告警",
+ "report.speedWarning.alarmType.2": "产生告警",
+ "report.speedWarning.overspeed": "超速时速度",
+ "report.speedWarning.ruleName": "规则名称",
+ "report.status.option.fail": "发送失败",
+ "report.status.option.placeholder": "发送状态",
+ "report.status.option.success": "发送成功",
+ "report.tab.EmergencyAlarm": "紧急告警",
+ "report.tab.call": "呼叫",
+ "report.tab.callbackrequest": "回呼请求",
+ "report.tab.crossAreaAlert": "越区告警",
+ "report.tab.msg": "消息",
+ "report.tab.speedingAlert": "超速告警",
+ "report.tab.terminalOnOffLineRecord": "上下线记录",
+ "report.terminal.title": "终端",
+ "report.terminalRRS.option.offline": "下线",
+ "report.terminalRRS.option.online": "上线",
+ "report.terminalRRS.status.placeholder": "状态",
+ "report.terminalRRS.terminalType.default": "终端",
+ "report.terminalRRS.terminalType.dispatcher": "调度台",
+ "report.time.title": "时间",
+ "report.timeDiff.range": "查询间隔时间不能大于30天",
+ "report.type.title": "类型",
+ "report.unknown": "未知",
+ "request.error.rqsErr": "请求错误",
+ "routingManagement.columns.call": "呼叫",
+ "routingManagement.columns.callType": "呼叫类型",
+ "routingManagement.columns.environmentListen": "环境侦听",
+ "routingManagement.columns.environmentalRegards": "环境侦视",
+ "routingManagement.columns.fullDuplex": "全双工",
+ "routingManagement.columns.halfDuplex": "半双工",
+ "sapType.option.1": "PDT DFSI",
+ "sapType.option.5": "PDT",
+ "setting.basicSetting.uploadLogo.size.hint": "文件大小不能超过2M",
+ "setting.basicSetting.uploadLogo.type.hint": "只能上传.png或.svg类型文件",
+ "settings.alertContent": "配置之后仅是临时生效,要想真正作用于项目,点击下方的复制配置按钮,将配置替换到 settings.json 中即可。",
+ "settings.close": "关闭",
+ "settings.colorWeak": "色弱模式",
+ "settings.content": "内容区域",
+ "settings.copySettings": "复制配置",
+ "settings.copySettings.message": "复制成功,请粘贴到 src/settings.json 文件中",
+ "settings.footer": "底部",
+ "settings.language": "语言",
+ "settings.menu": "菜单栏",
+ "settings.menuFromServer": "菜单来源于后台",
+ "settings.menuWidth": "菜单宽度 (px)",
+ "settings.navbar": "导航栏",
+ "settings.navbar.screen.toExit": "点击退出全屏模式",
+ "settings.navbar.screen.toFull": "点击切换全屏模式",
+ "settings.navbar.theme": "主题",
+ "settings.navbar.theme.dark": "暗色",
+ "settings.navbar.theme.light": "亮色",
+ "settings.otherSettings": "其他设置",
+ "settings.password.validate.len": "4-18个字符",
+ "settings.search": "搜索",
+ "settings.tabBar": "多页签",
+ "settings.title": "页面配置",
+ "shunt.bus_type.option.1": "分流",
+ "shunt.bus_type.option.2": "转发",
+ "shunt.call_status.option.0": "半双工",
+ "shunt.call_status.option.1": "全双工",
+ "shunt.columns.callType": "呼叫类型",
+ "state.loading": "加载中...",
+ "systemList.columns.validate.content": "内容不能为空",
+ "systemList.columns.validate.placeholder1": "ID",
+ "systemList.columns.validate.placeholder2": "系统别名",
+ "systemList.modal.checkwarn": "请检查表单输入项",
+ "systemType.option.3": "PDT",
+ "temporary.crosspatch.active.flag.disable": "禁用",
+ "temporary.crosspatch.active.flag.enable": "启用",
+ "temporary.crosspatch.columns.delay": "发送延迟",
+ "temporary.crosspatch.columns.grantmode": "话权模式",
+ "temporary.crosspatch.columns.grantmode.dtmf": "DTMF",
+ "temporary.crosspatch.columns.grantmode.mute": "静音检测",
+ "temporary.crosspatch.columns.grantmode.mute.or.dtmf": "DTMF或静音检测",
+ "temporary.crosspatch.columns.grantmode.ppt": "PTT模式",
+ "temporary.crosspatch.columns.priority": "优先级",
+ "temporary.crosspatch.columns.property.settings": "属性设置",
+ "temporary.crosspatch.window.message.exists.failed.added": "已存在,新增失败",
+ "temporary.crosspatch.window.message.successfully.added": "添加成功",
+ "temporary.crosspatch.window.title.add.part": "新增",
+ "temporary.crosspatch.window.title.edit.part": "编辑",
+ "temporary.dispatch.sys.group.empty.validate.members": "派接组创建时至少有一个组成员",
+ "temporary.dispatchsys.olny.group.supported": "派接组只支持静态组",
+ "temporary.dynamic.delete.auto.delete": "自动删除",
+ "temporary.dynamic.delete.confirm.window": "确认要删除?",
+ "temporary.dynamic.empty.validate.members": "动态重组创建时至少有一个组成员",
+ "temporary.dynamic.olny.terminals.supported": "动态组只支持终端",
+ "temporary.dynamic.own.level.supported": "只支持本级终端",
+ "temporary.dynamic.system.tyeps.mustbe.consistent": "添加的设备系统类型必须一致",
+ "temporary.group.add.fail": "添加组失败",
+ "temporary.group.add.group.placeholder.alias": "请输入别名",
+ "temporary.group.add.group.placeholder.delete.fail": "删除组失败",
+ "temporary.group.add.group.placeholder.delete.success": "删除组成功",
+ "temporary.group.add.group.placeholder.dispatcher_account": "请选择调度员",
+ "temporary.group.add.group.placeholder.number": "请输入号码",
+ "temporary.group.add.group.placeholder.option.detail": "操作详情",
+ "temporary.group.add.group.placeholder.select.object": "已选对象",
+ "temporary.group.add.group.placeholder.title.new": "新增群组",
+ "temporary.group.add.success": "添加组成功",
+ "temporary.group.edit.alias": "别名",
+ "temporary.group.edit.alias.validate.maxLength": "最大长度64个字符",
+ "temporary.group.edit.idle.timeout": "空闲超时(秒)",
+ "temporary.group.edit.number": "号码",
+ "temporary.group.edit.number.validate.maxLength": "最大长度20个数字",
+ "temporary.group.edit.priority": "优先级",
+ "temporary.group.edit.ptt.timeout": "话权占有超时(秒)",
+ "temporary.group.multi.talker.not.supported": "多话权组不允许加入到群组",
+ "temporary.group.null.member": "请先添加组成员",
+ "temporary.group.type.not.supported": "不支持添加此类型的设备",
+ "terminal.name": "终端名称",
+ "toolbox.list.allTool": "全部工具",
+ "toolbox.list.fax": "传真",
+ "userCenter.setting.PTT.answer": "自动接听语音通话",
+ "userCenter.setting.PTT.com": "COM口",
+ "userCenter.setting.PTT.placeholder1": "请输入...",
+ "userCenter.setting.PTT.placeholder2": "请选择...",
+ "userCenter.setting.PTT.time": "ptt短按有效时间",
+ "userCenter.setting.alarm.echoDelay": "启用回呼铃声延迟",
+ "userCenter.setting.alarm.echoTone": "启用回呼音",
+ "userCenter.setting.alarm.interval": "回呼延迟响铃时间间隔",
+ "userCenter.setting.alarm.placeholder": "请输入...",
+ "userCenter.setting.alarm.showCallBackHandlerTime": "显示回呼处理人时长",
+ "userCenter.setting.alarm.startAlarm": "启动告警音",
+ "userCenter.setting.basic.LOGO": "LOGO",
+ "userCenter.setting.basic.cart.sort": "呼叫卡片排序",
+ "userCenter.setting.basic.cart.sort.value1": "正序",
+ "userCenter.setting.basic.cart.sort.value2": "倒序",
+ "userCenter.setting.basic.log.apiState": "日志接口信息上报状态",
+ "userCenter.setting.basic.log.level": "日志级别",
+ "userCenter.setting.basic.log.level.value0": "不打印日志",
+ "userCenter.setting.basic.log.level.value1": "Error",
+ "userCenter.setting.basic.log.level.value2": "Warn",
+ "userCenter.setting.basic.log.level.value3": "Information",
+ "userCenter.setting.basic.log.level.value4": "Debug",
+ "userCenter.setting.basic.log.state": "日志开启状态",
+ "userCenter.setting.basic.pattern": "个性化设置模式切换",
+ "userCenter.setting.basic.pattern.value1": "暗",
+ "userCenter.setting.basic.pattern.value2": "亮",
+ "userCenter.setting.basic.placeholder": "请选择文件...",
+ "userCenter.setting.basic.terminalDisplay": "终端显示形式",
+ "userCenter.setting.basic.terminalDisplay.value1": "别名",
+ "userCenter.setting.basic.terminalDisplay.value2": "号码",
+ "userCenter.setting.basic.terminalDisplay.value3": "别名+号码",
+ "userCenter.setting.label": "设置",
+ "userCenter.setting.loginTime": "登陆时间",
+ "userCenter.setting.logout": "退出登录",
+ "userCenter.setting.map.call": "在地图上显示呼叫状态",
+ "userCenter.setting.map.defaultLevel": "默认地图层级",
+ "userCenter.setting.map.defaultLonLat": "默认中心点经纬度",
+ "userCenter.setting.map.details": "鼠标悬停与定位终端显示其详情",
+ "userCenter.setting.map.dstGpsSystem": "目的坐标系统",
+ "userCenter.setting.map.mapType": "地图类型选择",
+ "userCenter.setting.map.online": "在地图上显示离线设备",
+ "userCenter.setting.map.option1": "谷歌在线地图",
+ "userCenter.setting.map.option2": "谷歌离线地图",
+ "userCenter.setting.map.option3": "高德在线地图",
+ "userCenter.setting.map.placeholder": "请选择...",
+ "userCenter.setting.map.srcGpsSystem": "源坐标系统",
+ "userCenter.setting.version": "版本",
+ "userCenter.setting.video.camera": "摄像头",
+ "userCenter.setting.video.pixel": "视频像素",
+ "userCenter.setting.video.placeholder": "请选择...",
+ "userCenter.setting.voice.Microphone": "麦克风",
+ "userCenter.setting.voice.horn": "喇叭",
+ "userCenter.setting.voice.placeholder1": "请选择...",
+ "userCenter.setting.voice.placeholder2": "请选择...",
+ "userCenter.setting.voice.title1": "喇叭设置",
+ "userCenter.setting.voice.title2": "麦克风设置",
+ "userCenter.setting.window.cancel": "取消",
+ "userCenter.setting.window.save": "保存",
+ "userCenter.setting.window.success": "保存成功",
+ "userCenter.setting.window.tab1": "基础设置",
+ "userCenter.setting.window.tab2": "语音设置",
+ "userCenter.setting.window.tab3": "PTT设置",
+ "userCenter.setting.window.tab4": "告警设置",
+ "userCenter.setting.window.tab5": "地图设置",
+ "userCenter.setting.window.tab6": "视频设置",
+ "userCenter.setting.window.title": "设置",
+ "userInfo.nodata": "暂无数据",
+ "userSetting.SecuritySettings.button.settings": "设置",
+ "userSetting.cancel": "取消",
+ "userSetting.certification.button.check": "查看",
+ "userSetting.comfirm": "确定",
+ "userSetting.reset": "重置",
+ "userSetting.save": "保存",
+ "userSetting.tab.basicInformation": "基础信息",
+ "webLogSetting.l1": "服务器日志保存时间(日)",
+ "webLogSetting.l2": "服务器日志文件容量(MB)",
+ "webLogSetting.l3": "服务器日志保存文件数量",
+ "webLogSetting.p1": "7日到30日",
+ "webLogSetting.p2": "最小10MB,最大30M",
+ "webLogSetting.p3": "最少500,最多3000",
+ "webPuc.call.HangUpVideo": "挂断视频",
+ "webPuc.call.HorV": "横竖屏设置",
+ "webPuc.call.Horizontal": "横屏",
+ "webPuc.call.add.Inclusive.group": "添加包容组",
+ "webPuc.call.add.callObject": "添加呼叫对象",
+ "webPuc.call.add.transfer.obj": "添加转移对象",
+ "webPuc.call.answer": "{role}来电",
+ "webPuc.call.applying": "话权申请中...",
+ "webPuc.call.autoAnswer": "自动接听",
+ "webPuc.call.camera": "视频",
+ "webPuc.call.cameraType": "摄像头方向",
+ "webPuc.call.click_PPT_talk": "按下PPT讲话",
+ "webPuc.call.click_answer": "点击接听",
+ "webPuc.call.click_connect": "点击建立呼叫",
+ "webPuc.call.click_connect_monitor": "点击建立视频上拉",
+ "webPuc.call.click_release": "单击释放话权",
+ "webPuc.call.click_talk": "单击说话",
+ "webPuc.call.createVideoCall": "添加视频面板",
+ "webPuc.call.createVoiceCall": "添加语音面板",
+ "webPuc.call.disconnect": "呼叫未建立",
+ "webPuc.call.fail": "网络状态不佳, 话权建立失败",
+ "webPuc.call.flipCamera": "翻转摄像头",
+ "webPuc.call.fourSquares": "四宫格",
+ "webPuc.call.fullDuplex_connected": "通话中…",
+ "webPuc.call.fullDuplex_connecting": "正在呼叫中...",
+ "webPuc.call.fullDuplex_talking": "通话中...",
+ "webPuc.call.group.include.failure": "包容失败!",
+ "webPuc.call.group.include.success": "包容成功!",
+ "webPuc.call.halfDuplex_connecting": "呼叫建立中...",
+ "webPuc.call.halfDuplex_idle": "话权空闲",
+ "webPuc.call.halfDuplex_others_talking": "{role}正在讲话...",
+ "webPuc.call.halfDuplex_talking": "我正在讲话...",
+ "webPuc.call.hang_up": "挂断通话",
+ "webPuc.call.horizontalScreen": "翻转",
+ "webPuc.call.internation_and_forward": "国标上拉并转发",
+ "webPuc.call.isHangUp": "确定要挂断与{role}的通话吗?",
+ "webPuc.call.isHangUpVideo": "确定关闭当前视频面板吗?",
+ "webPuc.call.me": "我",
+ "webPuc.call.meetMemberFail": "获取成员失败",
+ "webPuc.call.microphone": "麦克",
+ "webPuc.call.nineSquares": "九宫格",
+ "webPuc.call.noSpeakRight": "暂无话权",
+ "webPuc.call.not.hangUp.other.dispatcher": "禁止挂断其他调度员呼叫!",
+ "webPuc.call.not.insert.other.dispatcher": "禁止插入其他调度员呼叫!",
+ "webPuc.call.oneSquare": "一宫格",
+ "webPuc.call.priority": "优先",
+ "webPuc.call.pushVideo": "推送",
+ "webPuc.call.screenRecord": "录屏",
+ "webPuc.call.screenshot": "截图",
+ "webPuc.call.shareVideo": "转发",
+ "webPuc.call.stopScreenRecord": "结束录屏",
+ "webPuc.call.support.deviceOrDispatcher": "只支持设备、调度台账户!",
+ "webPuc.call.support.deviceOrGroupOrDispatcher": "只支持设备、组、调度台账户!",
+ "webPuc.call.support.group": "只支持组!",
+ "webPuc.call.surVideoType": "视频类型",
+ "webPuc.call.surVideoType.notWithVolume": "纯视频",
+ "webPuc.call.surVideoType.withVolume": "音视频",
+ "webPuc.call.trumpet": "喇叭",
+ "webPuc.call.uploadFile": "选择上传文件,MP4格式!",
+ "webPuc.call.uploadFile.limit": "上传文件超过限制大小!",
+ "webPuc.call.urgent": "紧急",
+ "webPuc.call.vertical": "竖屏",
+ "webPuc.call.videoPixel": "视频像素",
+ "webPuc.call.videoType": "具体上拉摄像头",
+ "webPuc.call.videoUpperLimit": "已达视频数量上限!",
+ "webPuc.call.video_call": "视频呼叫",
+ "webPuc.call.voice_call": "语音呼叫",
+ "webPuc.call.volumeSetting": "音量设置",
+ "webPuc.dispatch.car.channel": "信道",
+ "webPuc.header.PTT.noBinding": "无",
+ "webPuc.header.call.answer": "来电接听",
+ "webPuc.header.call.environmentListen": "侦听中...",
+ "webPuc.header.call.environmentalRegards": "侦视中...",
+ "webPuc.header.call.halfDuplex_talking": "我...",
+ "webPuc.header.call.onDuty": "值守中...",
+ "webPuc.localResource.device": "设备",
+ "webPuc.localResource.device.countUnit": "条",
+ "webPuc.localResource.device.total": "共",
+ "webPuc.localResource.dispatchCar.channel.type": "信道类型",
+ "webPuc.localResource.dispatchCar.channel.type.0": "模拟",
+ "webPuc.localResource.dispatchCar.channel.type.1": "数字",
+ "webPuc.localResource.dispatchCar.dataError1": "数据未成功加载,请稍后重试",
+ "webPuc.localResource.dispatchCar.defaultGroup": "默认组",
+ "webPuc.localResource.dispatchCar.mode": "模式",
+ "webPuc.localResource.dispatcher": "调度台",
+ "webPuc.localResource.dispatcher.changeEventConfirm": "当前登录账号信息已变更,是否刷新组织架构信息?",
+ "webPuc.localResource.function.GPSsubscription.direction": "方向",
+ "webPuc.localResource.function.GPSsubscription.distance": "距离(m)",
+ "webPuc.localResource.function.GPSsubscription.distanceinput": "请输入订阅距离",
+ "webPuc.localResource.function.GPSsubscription.latitude": "纬度",
+ "webPuc.localResource.function.GPSsubscription.longitude": "经度",
+ "webPuc.localResource.function.GPSsubscription.no_unit_time": "时间",
+ "webPuc.localResource.function.GPSsubscription.speed": "速度(km/h)",
+ "webPuc.localResource.function.GPSsubscription.speedinput": "请输入订阅速度",
+ "webPuc.localResource.function.GPSsubscription.time": "时间(s)",
+ "webPuc.localResource.function.attribute": "属性",
+ "webPuc.localResource.function.back": "后置",
+ "webPuc.localResource.function.del": "删除",
+ "webPuc.localResource.function.edit": "编辑",
+ "webPuc.localResource.function.encryption": "加密",
+ "webPuc.localResource.function.environmentAudioVisual": "环境视听",
+ "webPuc.localResource.function.environmentListen": "环境侦听",
+ "webPuc.localResource.function.environmentalRegards": "环境侦视",
+ "webPuc.localResource.function.fastGpsEnd": "快速GPS停止",
+ "webPuc.localResource.function.fastGpsStart": "快速GPS启动",
+ "webPuc.localResource.function.front": "前置",
+ "webPuc.localResource.function.functionName": "功能名称",
+ "webPuc.localResource.function.launchTrajectoryTracking": "启轨迹跟踪",
+ "webPuc.localResource.function.memberGroupInfo": "查询组内成员",
+ "webPuc.localResource.function.onDuty": "值守",
+ "webPuc.localResource.function.onlineTesting": "在线检测",
+ "webPuc.localResource.function.pullOnVideo": "视频上拉",
+ "webPuc.localResource.function.queryingLockStatus": "查询锁定状态",
+ "webPuc.localResource.function.shakeOff": "遥晕",
+ "webPuc.localResource.function.shakeShoot": "遥毙",
+ "webPuc.localResource.function.shakeUp": "遥醒",
+ "webPuc.localResource.function.singlePullUp": "单次上拉",
+ "webPuc.localResource.function.sms": "短消息",
+ "webPuc.localResource.function.subscriptionGps": "位置订阅",
+ "webPuc.localResource.function.thePositionIsCentered": "位置居中显示",
+ "webPuc.localResource.function.turnOffTrackTracking": "关闭轨迹跟踪",
+ "webPuc.localResource.function.turnOffTrajectoryTracking": "关闭轨迹跟踪",
+ "webPuc.localResource.function.turnOnTrackTracking": "开启轨迹跟踪",
+ "webPuc.localResource.function.unencrypted": "非加密",
+ "webPuc.localResource.function.userOwningGroup": "用户归属组",
+ "webPuc.localResource.function.viewTheCallStatusDiagram": "查看呼叫状态上图",
+ "webPuc.localResource.group": "组",
+ "webPuc.localResource.modal.result.consequence": "操作结果",
+ "webPuc.localResource.modal.result.equipment": "设备",
+ "webPuc.localResource.modal.result.errorLabel": "操作失败数量:",
+ "webPuc.localResource.modal.result.successLabel": "操作成功数量:",
+ "webPuc.localResource.org.advancedSearch": "高级搜索",
+ "webPuc.localResource.org.changeEventConfirm": "组织架构已变更,是否刷新?",
+ "webPuc.localResource.org.domain": "域",
+ "webPuc.localResource.org.noneData": "所选项数据已不存在,请重新选择",
+ "webPuc.localResource.tempGroup": "临时组",
+ "webPuc.localResource.tempGroup.carGroup": "调度车台",
+ "webPuc.localResource.tempGroup.conference": "会议",
+ "webPuc.localResource.tempGroup.dynamicGroup": "动态重组",
+ "webPuc.localResource.tempGroup.group": "群组",
+ "webPuc.localResource.tempGroup.sysSendGroup": "系统派接",
+ "webPuc.menu.call": "呼叫",
+ "webPuc.menu.channelMonitor": "信道监控",
+ "webPuc.menu.gis": "GIS",
+ "webPuc.menu.monitor": "监控",
+ "webPuc.menu.reportForm": "报表",
+ "webPuc.menu.tool_box": "工具箱",
+ "webPuc.menu.toolbox": "工具箱",
+ "webPuc.monitor.maxPanelLen": "最多支持9路视频!",
+ "webPuc.monitor.pushVideo.tip": "{name}上拉面板已存在",
+ "webPuc.monitor.reconnect": "异常挂断重拉次数",
+ "webPuc.monitor.reconnectTip": "仅摄像头设备支持",
+ "webPuc.onDuty": "值守",
+ "webPuc.org.components.GPSsubscription.startGpsSubscription": "订阅成功!",
+ "webPuc.org.components.deviceTable.cancelDefaultSubscription": "取消订阅成功!",
+ "webPuc.org.components.deviceTable.defaultSubscription": "默认订阅成功!",
+ "webPuc.org.components.deviceTable.fastGpsEnd": "快速GPS停止成功!",
+ "webPuc.org.components.deviceTable.fastGpsStart": "快速GPS启动成功!",
+ "webPuc.org.components.deviceTable.invalidGpsData": "无效GPS数据",
+ "webPuc.org.components.deviceTable.pullUpFailed": "上拉失败",
+ "webPuc.org.components.deviceTable.pullUpSuccessfully": "上拉成功",
+ "webPuc.queue.call": "呼叫队列",
+ "webPuc.queue.callRecord": "呼叫记录",
+ "webPuc.recorder.end": "结束录制",
+ "webPuc.recorder.mediaError": "录屏失败,未获取到媒体流",
+ "webPuc.recorder.start": "开始录制",
+ "webPuc.resource.local": "本地资源",
+ "webPuc.video.pull.onSamePerson": "不允许转发给本人",
+ "webPuc.video.pull.onlyDevice": "只支持终端!",
+ "webPuc.video.pull.onlyDeviceGroupDisPatch": "只支持终端、组、调度台!",
+ "webPuc.video.pull.polling": "视频轮询",
+ "webPuc.video.pull.pushNoCanPushVideo": "轮询时,不可以转发",
+ "webPuc.video.pull.recall": "连接中断,是否重新拉起?",
+ "webPuc.video.pull.selectData": "请选择数据!",
+ "webPuc.video.pull.selectDataChange": "请新增或删除数据!",
+ "webPuc.video.pull.share": "视频转发",
+ "webPuc.video.pull.timeInterval": "时间间隔(秒)",
+ "webPuc.video.pull.timeInterval.max": "最大时间间隔为3000秒",
+ "webPuc.video.pull.timeInterval.min": "最小时间间隔为10秒",
+ "webPuc.video.pull.timeInterval.placeholder": "请输入轮询时间间隔",
+ "webPuc.video.pull.unknowError": "未知错误!",
+ "webpuc.fax.list.fax_file_name": "文件名",
+ "webpuc.fax.list.fax_id": "传真id",
+ "webpuc.fax.list.fax_rec_time": "接收时间",
+ "webpuc.fax.list.fax_receiver": "接收人",
+ "webpuc.fax.list.fax_send_phone": "发送者",
+ "webpuc.fax.list.fax_send_time": "发送时间",
+ "webpuc.fax.list.fax_status": "已读状态",
+ "webpuc.fax.list.send_status": "发送状态",
+ "webpuc.ui.version": "版本号",
+ "wwebPuc.call.videoType.shoulder": "肩眯",
+ "AdminSetting_BroadCastNumber_PDT1": "基站全呼",
+ "AdminSetting_BroadCastNumber_PDT2": "本地全呼",
+ "AdminSetting_BroadCastNumber_PDT3": "地域全呼",
+ "AdminSetting_BroadCastNumber_PDT4": "全网全呼",
+ "webPuc.localResource.function.current.group":"当前组",
+ "webPuc.localResource.tempGroup.onlyOne.window": "同时只能打开一个弹出窗口",
+ "webPuc.localResource.function.current.group.notfound":"未附着组",
+ "report.sdsType.reply":"回执短信",
+ "report.sdsType.police":"警情短信",
+ "report.sdsType.recorder":"执法记录仪配置与查询",
+ "report.sdsType.transparent":"透传短信",
+ "report.sdsType.crowd":"重点人群上报",
+ "reportForm.hyistory.video": "历史视频",
+ "reportForm.form.export": "表单导出",
+ "reportForm.call.startTime": "通话开始时间",
+ "reportForm.play": "播放"
+ },
+ "errorCode": {
+ "0": "成功",
+ "1": "参数不合法",
+ "3": "网络错误或者数字证书未导入",
+ "4": "未登录",
+ "10": "请求超时",
+ "50": "WebSocket通道关闭",
+ "51": "WebSocket通道异常",
+ "52": "WebSocket通道超时",
+ "101": "puc_id不匹配问题",
+ "102": "系统不匹配",
+ "103": "对应的系统未找到",
+ "104": "成员类型错误",
+ "151": "视频呼叫传入的分辨率与硬件支持的分辨率不匹配",
+ "152": "号码类型不匹配",
+ "153": "获取媒体流失败",
+ "154": "该呼叫不存在",
+ "161": "值守操作失败",
+ "162": "值守号码被删除",
+ "171": "当前是全双工,不需要申请话权",
+ "172": "不允许申请话权",
+ "173": "当前是全双工,不能释放话权",
+ "174": "不允许释放话权",
+ "175": "不允许强插话权",
+ "220": "呼叫记录文件地址为空",
+ "221": "多媒体文件不存在",
+ "240": "告警已经处理过",
+ "350": "单次上拉失败",
+ "351": "无效GPS数据",
+
+ "0x90000000": "hbp配置错误",
+ "0x90000001": "json解析错误",
+ "0x90000002": "缓存集群解析错误",
+ "0x90000003": "消息队列集群解析错误",
+ "0x90000004": "注册中心集群解析错误",
+ "0x90000005": "缓存集群运行错误",
+ "0x90000006": "消息队列集群运行错误",
+ "0x90000007": "注册中心集群运行错误",
+ "0x90000011": "找不到公共配置回调",
+ "0x90000012": "找不到增量配置回调",
+ "0x900C0000": "从请求json中获取MO ID错误",
+ "0x900C0001": "从请求json中获取MO操作类型错误",
+ "0x900C0002": "在响应json中添加MO ID错误",
+ "0x900C0003": "在响应中添加MO操作类型错误",
+ "0x900C0004": "在响应中添加参数错误",
+ "0x900C0005": "MO操作类型与请求头中的接口类型不兼容",
+ "0x900C0006": "从静态MO数据表中获取MO元数据错误,不存在!",
+ "0x900C0007": "请求json中包含空参数",
+ "0x900C0008": "不为空的数据为空",
+ "0x900C0009": "添加mo到本地配置错误",
+ "0x900C0010": "在响应json中添加键值对错误",
+ "0x900C0011": "合并响应数据错误",
+ "0x900C0012": "将查询结果添加到Parameter错误",
+ "0x900C0013": "获取数组类型MO主键错误",
+ "0x90320000": "企业用户实践失败",
+ "0x90320001": "企业用户添加失败",
+ "0x90320002": "企业用户修改失败",
+ "0x90320003": "IP修改失败",
+ "0x90320004": "延时修改失败",
+ "0x90970000": "Sipgw配置错误",
+ "0x90970001": "超时配置解析错误",
+ "0x90970002": "配置参数解析错误",
+ "100002": "低电量",
+ "100003": "终端本机ID错误",
+ "100004": "终端背景组ID错误",
+ "100005": "服务忙",
+ "100007": "服务拒绝",
+ "100008": "呼叫连接失败",
+ "100009": "被叫忙",
+ "100010": "被叫拒绝",
+ "100012": "服务错误",
+ "100013": "服务超时",
+ "100014": "服务失败",
+ "100015": "PTT禁用",
+ "100016": "秘钥更新中",
+ "100017": "PLL解锁",
+ "100018": "DSP错误",
+ "100019": "呼叫取消",
+ "100020": "正常取消",
+ "100021": "中止退出",
+ "100022": "异常退出(被告优先级业务中断)",
+ "100023": "被叫未接收到ACK",
+ "100028": "服务不支持",
+ "100029": "服务未授权",
+ "100030": "被叫未授权",
+ "100031": "无被叫方",
+ "100032": "被叫未注册",
+ "100033": "设备已遥晕",
+ "100034": "无人值守组",
+ "100035": "仅接收",
+ "100036": "无设备",
+ "100037": "信道繁忙",
+ "100038": "ID已禁用",
+ "1001": "rpc tlv消息解析/反序列化失败",
+ "100101": "短信发送失败",
+ "1002": "rpc tlv消息编码/序列化失败",
+ "101001": "rpc反序列化失败",
+ "101002": "rpc序列化失败",
+ "101003": "json反序列化失败",
+ "101004": "json序列化失败",
+ "101005": "cmd_name错误",
+ "101006": "sap不存在",
+ "101007": "sap未注册",
+ "101008": "sap不存在call模块",
+ "101009": "请求缺少必要字段",
+ "1600001": "中转台请求命令错误",
+ "1600002": "中转台解析信令出错",
+ "1600003": "中转台Sap状态错误",
+ "1600004": "中转台没有找到对应的Sap",
+ "1600005": "中转台用户验证错误",
+ "1600006": "中转台没有找到设备或设备没在线",
+ "1600007": "中转台操作缓存错误",
+ "1600101": "中转台监听错误",
+ "1600202": "中转台呼叫繁忙",
+ "1600203": "中转台呼叫类型错误",
+ "1600204": "中转台呼叫超时",
+ "1600205": "中转台呼叫状态错误",
+ "1600206": "中转台呼叫结束",
+ "1600207": "中转台呼叫监听失败",
+ "1600208": "中转台呼叫话权申请错误",
+ "1600209": "中转台呼叫请求错误",
+ "1600210": "中转台信道类型错误",
+ "1600211": "中转台没有找到另一个时隙",
+ "1600212": "中转台创建媒体失败",
+ "1600301": "中转台短信错误",
+ "1600302": "中转台短信参数错误",
+ "1600303": "中转台短信信道繁忙",
+ "1600304": "中转台短信只读错误",
+ "1600305": "中转台短信低电量",
+ "1600306": "中转台短信解锁错误",
+ "1600307": "中转台短信没有回执",
+ "1600308": "中转台短信唤醒错误",
+ "1600309": "中转台短信内容错误",
+ "1600310": "中转台短信写拒绝错误",
+ "1600311": "中转台短信中断",
+ "1600401": "中转台GPS错误",
+ "1600501": "中转台RRS错误",
+ "1600601": "中转台紧急告警错误",
+ "1600701": "中转台信道错误",
+ "1600702": "中转台摇晕失败",
+ "1600703": "中转台摇醒失败",
+ "200000": "未知错误",
+ "200001": "用户请求挂断",
+ "200002": "呼叫超时",
+ "200004": "呼叫建立失败",
+ "200101": "短信发送失败",
+ "2003": "服务器内部错误",
+ "201001": "rpc反序列化失败",
+ "201002": "rpc序列化失败",
+ "201003": "json反序列化失败",
+ "201004": "json序列化失败",
+ "201005": "cmd_name错误",
+ "201006": "sap不存在",
+ "201007": "sap未注册",
+ "201008": "sap不存在call模块",
+ "201009": "请求缺少必要字段",
+ "2100000": "未知错误",
+ "2100001": "调度台请求挂断",
+ "2100002": "网关未开启呼叫控制服务",
+ "2100003": "终端不在线",
+ "2100004": "呼叫建立失败",
+ "2100005": "调度台号码无权限",
+ "2100006": "被叫号码不存在",
+ "2100007": "被叫忙",
+ "2100008": "被叫拒绝",
+ "2100009": "被叫不支持加密",
+ "2100010": "系统呼叫模块忙",
+ "2100011": "调度台呼叫超时",
+ "2101001": "rpc反序列化失败",
+ "2101002": "rpc序列化失败",
+ "2101003": "json反序列化失败",
+ "2101004": "json序列化失败",
+ "2101005": "cmd_name错误",
+ "2101006": "sap不存在",
+ "2101007": "sap未注册",
+ "2101008": "sap不存在call模块",
+ "2101009": "请求缺少必要字段",
+ "2148604672": "MO约束未知错误",
+ "2148604673": "MO约束参数错误",
+ "2148604674": "保存MO记录失败",
+ "2148604675": "插入MO记录失败",
+ "2148604676": "删除MO记录失败",
+ "2148604677": "更新MO记录失败",
+ "2148604678": "查询MO记录失败",
+ "2148604679": "MO记录已存在",
+ "2148604680": "MO记录不存在",
+ "2148604681": "数据库表不存在",
+ "2148604682": "数据库文件不存在",
+ "2148604683": "不支持的数据库操作",
+ "2148604684": "MO信息的枚举值不在JSON对应范围内",
+ "2148604685": "解析OAM码流错误",
+ "2148604686": "导入约束模块失败",
+ "2148604687": "约束类初始化失败",
+ "2148604688": "前置校验失败",
+ "2148604689": "连带操作失败",
+ "2148604690": "后置检查失败",
+ "2148604691": "MO约束框架初始化失败",
+ "2148604692": "没有找到MO JSON文件",
+ "2148604693": "动态分支参数约束错误",
+ "2148604694": "MOD操作必须包含非主键参数",
+ "2416377902": "激活IOS证书失败",
+ "2416377904": "解析IOS证书解析失败",
+ "2416377905": "证书信息入库失败",
+ "2416377906": "不存在下载好的证书",
+ "2416377907": "此状态下不支持手动开关",
+ "2416377908": "手动开关失败",
+ "2416377909": "没有下载好的媒体提示音",
+ "2416381952": "返回网管,错误未知",
+ "2416381953": "无查询的MID或者结果消息",
+ "2416381954": "用户输入的MO不存在",
+ "2416381955": "收到NMS的不完整消息",
+ "2416381956": "mmL语句为空",
+ "2416381957": "词法检查NumberFormatException",
+ "2416381958": "Token管理错误",
+ "2416381959": "解析异常",
+ "2416381960": "查询MO的定义配置信息为NUll",
+ "2416381961": "MO操作op不存在",
+ "2416381978": "输入的MO存在重复字段",
+ "2416381979": "输入的MO缺少必须的输入参数",
+ "2416381980": "配置不存在该mo的属性描述",
+ "2416381981": "输入的为非U32数字",
+ "2416381982": "U32不合法,超出定义范围",
+ "2416381984": "Text不合法,长度超出限制",
+ "2416381985": "IPv4字段输入格式错误",
+ "2416381986": "IPv4不合法",
+ "2416381987": "IPv6字段输入格式错误",
+ "2416381988": "IPv6不合法",
+ "2416381989": "MO下不包含任何字段定义,不容许用户输入操作",
+ "2416381990": "当前实例已经存在上载配置任务,不可以重复执行",
+ "2416381991": "downCFG当前实例已经存在下载配置任务,不可以重复执行",
+ "2416381992": "从ftp服务器下载配置文件到设备失败",
+ "2416381993": "下载的配置文件中包含的mml存在语法错误",
+ "2416381994": "上传配置文件到ftp服务器失败",
+ "2416381995": "Text不合法,不包含完整的双引号",
+ "2416381996": "LIC查询许可信息失败,无信息",
+ "2416381997": "导入的LIC文件不在有效期,无法激活",
+ "2416381998": "导入的LIC文件,内存查询Lic信息失败",
+ "2416382000": "导入的LIC文件,变更内存状态信息失败",
+ "2416382001": "导入的LIC文件,获取ftp信息失败",
+ "2416382002": "激活LIC文件,当前待激活文件不存在",
+ "2416382003": "激活LIC文件失败",
+ "2416382004": "Http请求超时",
+ "2416382005": "加载lic信息,缺少激活的lic文件",
+ "2416382006": "加载lic信息,缺少默认的lic文件",
+ "2416382007": "加载lic信息,激活目录存在多个lic文件",
+ "2416382008": "加载lic信息,激活目录不存lic文件",
+ "2416382009": "lic信息记录刷新内存失败",
+ "2416382010": "LIC默认目录存在多个lic文件",
+ "2416382011": "LIC默认目录不存在lic文件",
+ "2416382012": "LIC默认lic文件解析失败",
+ "2416382013": "加载lic信息,下载目录存在多个lic文件",
+ "2416382014": "加载lic信息,下载目录不存lic文件",
+ "2416382016": "查询实例信息不存在",
+ "2416382017": "枚举类型的值配置文件中描述错误,正确的需要是int类型",
+ "2416382018": "输入的枚举类型的值不在定义中",
+ "2416382019": "BOOLEAN类型的值配置文件中描述错误,正确的需要是int类型",
+ "2416382020": "输入的BOOLEAN类型的值不在定义中",
+ "2416382021": "导入的配置文件中描述的业务服务版本不匹配",
+ "2416382022": "cp模块处理网管请求出错",
+ "2416382023": "LICENSE激活检查备用设备码不一致",
+ "2416382024": "LICENSE激活检查主用设备码不一致",
+ "2416382025": "公共配置消息发送成功的服务有: {0},发送失败的服务有: {1},发送超时的服务有: {2}. 提示:该消息包含的数据已经执行入库存储,异常的服务在恢复正常后可主动向配置中心获取。",
+ "2416382032": "单机模式下不支持手动主备倒换",
+ "2416382033": "导入的配置文件中不包含配置数据。",
+ "2416382034": "配置导入未成功",
+ "2416382035": "多个配置导入未完全成功,其中成功有: {0},失败有: {1}.",
+ "2416382036": "配置导入时截取的instanceID不合法",
+ "2416382037": "批量导入配置时,解压文件失败导致异常",
+ "2416382038": "LIC下载文件失败,获取ftp信息失败",
+ "2416386048": "未知错误",
+ "2416386049": "文件不存在",
+ "2416386050": "文件解压错误",
+ "2416386051": "文件格式错误",
+ "2416386052": "命令查询结果返回空",
+ "2416386053": "数据库中已存在记录",
+ "2416386054": "数据库未查询到对应数据",
+ "2416386055": "数据类型转换错误",
+ "2416386056": "异常信息,错误码不确定",
+ "2416386057": "平台请求处理错误",
+ "2416386058": "请求错误",
+ "2416386059": "服务响应超时.提示:消息包含的数据已执行入库存储,服务重启后可主动向配置中心获取。",
+ "2416386060": "FTP下载错误",
+ "2416386061": "解析mometa失败",
+ "2416386062": "执行shell脚本错误",
+ "2416386063": "数据备份脚本执行失败",
+ "2416386064": "从dp同步数据失败",
+ "2416386065": "发送公共服务命令的实例ID对应为空,只执行了入库,没有发送业务警告",
+ "2416386066": "备份数据库不存在",
+ "2416386067": "执行OS的脚本错误",
+ "2416386068": "执行OS操作未知错误",
+ "2416386069": "执行配置的Host IP为空",
+ "2416386070": "未加载到 python 约束框架,请检查资源文件是否正确加载",
+ "2416386071": "Python 约束框架调用异常",
+ "2425356288": "公共配置错误",
+ "2425356289": "域名配置解析错误",
+ "2425356290": "本端服务配置解析错误",
+ "2425356291": "远端服务配置解析错误",
+ "2425356292": "IP配置解析错误",
+ "2425356293": "信令接口配置解析错误",
+ "2425356294": "状态机定时器配置解析错误",
+ "2425356295": "业务开关配置解析错误",
+ "2425356296": "数据库配置解析错误",
+ "2425356297": "业务定时器配置解析错误",
+ "2425356298": "产品配置解析错误",
+ "2425356299": "公共业务标识配置解析错误",
+ "2425356300": "地址权重配置解析错误",
+ "2425356301": "服务配置解析错误",
+ "2425356302": "话统开关配置解析错误",
+ "2425356303": "平台公共配置解析错误",
+ "2425356305": "域名配置运行错误",
+ "2425356306": "本端服务配置运行错误",
+ "2425356307": "远端服务配置运行错误",
+ "2425356308": "IP配置运行错误",
+ "2425356309": "信令接口配置运行错误",
+ "2425356310": "状态机定时器配置运行错误",
+ "2425356311": "业务开关配置运行错误",
+ "2425356312": "数据库配置运行错误",
+ "2425356313": "业务定时器配置运行错误",
+ "2425356314": "产品配置运行错误",
+ "2425356315": "公共业务标识配置运行错误",
+ "2425356316": "地址权重配置运行错误",
+ "2425356317": "服务配置运行错误",
+ "2425356318": "话统开关配置运行错误",
+ "2425356319": "平台公共配置运行错误",
+ "2425356321": "ID字段不能为0",
+ "2425356322": "主键(域名ID)不能重复配置",
+ "2425356323": "该条记录域名ID字段已被(本端服务配置)引用",
+ "2425356324": "域名配置为空,不能添加本端服务配置",
+ "2425356325": "域名逻辑ID不在域名配置表配置范围",
+ "2425356326": "该条记录服务逻辑ID字段已被(信号接口配置)引用",
+ "2425356327": "主键(服务逻辑ID)不能重复配置",
+ "2425356328": "服务逻辑ID配置错误,不能添加信号接口配置",
+ "2425356329": "主键(IP逻辑ID)不能重复配置",
+ "2425356330": "该条记录IP逻辑ID字段已被(信号接口配置)引用",
+ "2425356331": "主键(记录索引)不能重复配置",
+ "2425356332": "该字段为最小配置范围,不允许删除",
+ "2425356333": "该字段有效配置范围为30到300",
+ "300000": "原因未定义或未知",
+ "300001": "抢先使用资源",
+ "300002": "用户释放",
+ "300003": "被叫提供不可接受服务",
+ "300004": "被叫不可达",
+ "300005": "被叫被拒绝",
+ "300006": "网关延时抢占",
+ "300007": "与DM-REP或DM-GATE的链接未建立或失败",
+ "300008": "无效请求",
+ "300009": "DM-GATE拒绝",
+ "300010": "SwMI拒绝",
+ "300011": "TMO模式呼叫建立失败",
+ "300012": "TMO资源丢失或定时器到期",
+ "300013": "发射能力授权失效",
+ "300014": "被叫方与主叫方DM-GATE相同",
+ "300015": "保留",
+ "300016": "静态秘钥失败",
+ "300017": "被叫方不支持端到端加密",
+ "300018": "信道定时器失效",
+ "300019": "信道忙",
+ "300020": "信道被占用",
+ "300021": "呼叫已丢失",
+ "300022": "切换或抢占失败",
+ "300023": "切换或抢占被拒绝",
+ "300024": "被叫方不支持请求的服务",
+ "300025": "无法识别TETRA ID",
+ "300026": "未知的外部订户标识",
+ "300027": "被叫忙",
+ "300028": "被叫方不支持加密",
+ "300029": "被叫方需要加密",
+ "300030": "被叫方需要端到端加密",
+ "300031": "被叫方拒绝呼叫",
+ "300032": "安全参数不匹配",
+ "300033": "保留",
+ "300034": "保留",
+ "300035": "请求被DM-GATE拒绝",
+ "300036": "保留",
+ "300064": "消息不允许/不支持",
+ "300065": "响应消息超时",
+ "300066": "错误的目标设备地址",
+ "300067": "设备数据未知",
+ "300068": "最小发送功率高于允许值",
+ "300069": "无法发送",
+ "300070": "格式不正确的请求",
+ "300071": "通道状态已更改",
+ "300101": "用户拒绝",
+ "300102": "被叫忙",
+ "300103": "被叫被拒绝",
+ "300104": "被叫不支持加密",
+ "300105": "网络正忙",
+ "300106": "通讯不允许",
+ "300107": "通讯不相容",
+ "300108": "服务不可用",
+ "300109": "双方被抢占",
+ "300110": "无效的呼叫id",
+ "300111": "被叫方拒绝呼叫",
+ "300112": "无CC实体",
+ "300113": "定时器到期",
+ "300114": "SwMI断开",
+ "300115": "无确认",
+ "300500": "短信发送失败",
+ "301001": "rpc反序列化失败",
+ "301002": "rpc序列化失败",
+ "301003": "json反序列化失败",
+ "301004": "json序列化失败",
+ "301005": "cmd_name错误",
+ "301006": "sap不存在",
+ "301007": "sap未注册",
+ "301008": "sap不存在call模块",
+ "301009": "请求缺少必要字段",
+ "301010": "当前服务接入点不支持该功能",
+ "400": "消息类型错误或者消息体长度错误",
+ "401": "授权错误",
+ "403": "资源不可用",
+ "404": "找不到资源",
+ "406": "不接受",
+ "408": "请求超时",
+ "4200001": "未知错误",
+ "4200002": "未知用户",
+ "4200003": "未知组号",
+ "4200004": "用户不在线",
+ "4200005": "用户无权限",
+ "4200006": "用户不可用",
+ "4200007": "用户无响应",
+ "4200008": "被叫忙",
+ "4200009": "被叫不可达",
+ "4200010": "被叫不支持加密",
+ "4200011": "被叫拒绝呼叫",
+ "4200012": "呼叫失败",
+ "4200013": "请求的业务不支持",
+ "4200014": "组附属被拒绝",
+ "4200015": "遥晕遥毙失败",
+ "4200016": "动态重组失败",
+ "429": "频次限制",
+ "500": "服务器错误",
+ "500001": "网关启动错误",
+ "500002": "公共错误",
+ "500003": "发送rpc失败",
+ "500004": "没有发现句柄",
+ "500005": "没有发现会话",
+ "500006": "呼叫控制服务未开启",
+ "500007": "调度号码未登录",
+ "500008": "呼叫失败",
+ "500009": "该号码不存在",
+ "500010": "对方拒绝",
+ "500011": "对方不支持",
+ "500012": "呼叫超时",
+ "500013": "强拆无权限",
+ "500014": "申请媒体资源失败",
+ "500015": "更新媒体资源失败",
+ "500016": "呼叫冲突",
+ "500017": "号码不可用",
+ "500018": "操作超时",
+ "500019": "终端原因导致失败",
+ "500020": "手台被遥晕",
+ "500021": "手台被遥毙",
+ "500022": "组已存在",
+ "500023": "手台号码错误",
+ "500024": "被叫无权限",
+ "500025": "主叫不存在",
+ "500026": "主叫无上拉权限",
+ "500027": "被叫不存在",
+ "500028": "挂断成功",
+ "500029": "用户请求挂断",
+ "500030": "呼叫控制服务未开启",
+ "500031": "未登录",
+ "500032": "呼叫失败",
+ "500033": "无权限",
+ "500034": "该号码不存在",
+ "500035": "对方忙",
+ "500036": "对方拒绝",
+ "500037": "对方不支持",
+ "500038": "系统呼叫模块忙",
+ "500039": "呼叫超时",
+ "500040": "无效会话id",
+ "500041": "全部失败",
+ "500042": "部分失败",
+ "500043": "未登录",
+ "500044": "无权限",
+ "500045": "该号码不存在",
+ "500046": "对方忙",
+ "500047": "动态重组操作超时",
+ "500048": "终端原因导致失败",
+ "500049": "系统无可用动态组地址",
+ "500050": "DGNA组成员不能为调度台",
+ "500051": "超过最大组成员数",
+ "500052": "动态组号不存在",
+ "500053": "手台被遥晕",
+ "500054": "手台被遥毙",
+ "500055": "组已存在",
+ "500056": "手台号码错误",
+ "500057": "组号码错误",
+ "500058": "组号码不在本系统资源内",
+ "500059": "系统模式不匹配",
+ "500060": "其他失败原因码",
+ "500061": "GPS未知错误",
+ "500062": "GPS被叫无权限",
+ "500063": "GPS主叫不存在",
+ "500064": "GPS主叫无上拉权限",
+ "500065": "GPS被叫不存在",
+ "500066": "GPS被叫手台激活失败",
+ "500067": "GPS周期订阅未知错误",
+ "500068": "GPS周期订阅被叫无权限",
+ "500069": "GPS周期订阅主叫不存在",
+ "500070": "GPS周期订阅主叫无上拉权限",
+ "500071": "GPS周期订阅被叫不存在",
+ "500072": "GPS周期订阅被叫手台激活失败",
+ "500073": "GPS周期订阅数达到最大值",
+ "500074": "GPS周期订阅服务临时不支持",
+ "500075": "停止GPS订阅未知错误",
+ "500076": "停止GPS订阅被叫手台去激活失败",
+ "500077": "停止GPS订阅重复请求,系统正在处理中",
+ "500078": "GPS周期订阅数据上拉状态未知错误",
+ "500079": "GPS周期订阅数据上拉状态用户无数据",
+ "500080": "GPS周期订阅数据上拉状态系统不支持",
+ "500081": "GPS周期订阅数据上拉状态服务未授权",
+ "500082": "GPS周期订阅数据上拉状态服务临时不支持",
+ "500083": "GPS周期订阅数据上拉状态系统过载",
+ "500084": "GPS周期订阅数据上拉状态系统辅控关闭",
+ "500085": "GPS周期订阅数据上拉状态辅控信道异常",
+ "500086": "GPS周期订阅数据上拉状态基站断开",
+ "500087": "GPS周期订阅数据上拉状态手台去登记",
+ "500088": "GPS周期订阅数据上拉状态GPS订阅达到最大数",
+ "500089": "GPS周期订阅数据上拉状态服务临时不支持",
+ "500090": "GPS周期订阅数据上拉状态手台被销户",
+ "500091": "GPS周期订阅数据上拉状态手台被遥毙",
+ "500092": "GPS周期上报事件结果用户无数据",
+ "500093": "GPS周期上报事件结果信道机辅控信道异常断开",
+ "500094": "GPS周期上报事件结果系统超时",
+ "500095": "GPS周期上报事件结果手台超时",
+ "500096": "发送文本短信结果未知错误",
+ "500097": "发送文本短信结果号码错误",
+ "500098": "发送文本短信结果号码不在线",
+ "500099": "发送文本短信结果号码不可用",
+ "500100": "发送文本短信结果没有权限",
+ "500101": "未知错误",
+ "500102": "没有遥晕license权限",
+ "500103": "已在包容呼叫中",
+ "500104": "接入点不存在",
+ "501": "不具备完成请求的功能",
+ "506": "没有正确配置",
+ "507": "网络信号不稳定",
+ "51300001": "tlv消息解析/反序列化失败",
+ "51300002": "用户不在线",
+ "51300003": "处理业务RPC失败",
+ "51300004": "发送WebSocket消息失败",
+ "51500001": "消息解析失败",
+ "51500002": "未知错误",
+ "51500003": "权限不足",
+ "51500004": "未找到父级",
+ "51500005": "发送RPC到MSDL失败",
+ "51500006": "未找到用户信息",
+ "51700002": "越区告警结构体错误",
+ "51700003": "越区告警查询数据繁忙",
+ "51700004": "越区告警删除区域失败,因为绑定了规则",
+ "51700005": "越区告警功能开关未打开",
+ "51800001": "密码无效",
+ "51800002": "账号无效",
+ "51800003": "域名不存在",
+ "51800004": "db为空",
+ "51800005": "执行SQL失败",
+ "51800006": "账号不存在",
+ "51800007": "原始密码错误",
+ "51800008": "管理员账禁止删除",
+ "51800009": "未识别的命令字",
+ "51800010": "json反序列化失败",
+ "51800011": "conf调用失败",
+ "51800012": "common域无此类型数据",
+ "51800013": "数据同步超时",
+ "51800014": "数据同步失败",
+ "5200001": "反序列化失败",
+ "5200002": "序列化失败",
+ "5200003": "参数错误",
+ "5200004": "不支持的命令字",
+ "5200005": "接入点不存在",
+ "5200006": "接入点离线",
+ "5200007": "接入点不存在呼叫模块",
+ "5200008": "接入点不存在控制模块",
+ "5200009": "接入点初始化失败",
+ "5200010": "已配置网闸但未向sipgw注册",
+ "5200011": "构造sip消息失败",
+ "5200012": "解析sdp失败",
+ "5200013": "sdp缺少视频参数",
+ "5200014": "sip缺少sdp",
+ "5200015": "会话状态错误",
+ "5200016": "不存在会话",
+ "5200017": "发送sip到后置失败",
+ "5200018": "发送rpc到后置失败",
+ "5200019": "发送sip到前置失败",
+ "5200020": "发送rpc到前置失败",
+ "5200021": "发送rpc到gual失败",
+ "5200022": "发送sip到系统失败",
+ "5200023": "错误的sip消息",
+ "5200024": "不支持的sip方法",
+ "5200025": "强制类型转换失败",
+ "5200026": "被叫不存在",
+ "5200027": "获取被叫媒体uri失败",
+ "5200028": "申请媒体失败",
+ "5200029": "更新媒体失败",
+ "5200030": "前置网关返回错误",
+ "5200031": "系统主动挂断",
+ "5200032": "系统返回错误",
+ "5200033": "设备不存在",
+ "5200034": "RPC返回错误",
+ "5200035": "同步失败",
+ "5200036": "未定义错误",
+ "52200002": "超速告警结构体错误",
+ "52200003": "超速告警查询数据繁忙",
+ "52300002": "报表查询超出范围",
+ "52300003": "报表查询呼叫记录数量失败",
+ "52300004": "报表查询呼叫记录失败",
+ "52300005": "报表查询短信记录数量失败",
+ "52300006": "报表查询短信记录失败",
+ "52300007": "报表查询紧急告警记录数量失败",
+ "52300008": "报表查询紧急告警分页记录失败",
+ "52300009": "报表查询紧急告警状态记录失败",
+ "52300010": "报表查询越区告警数量失败",
+ "52300011": "报表查询越区告警分页记录失败",
+ "52300012": "报表查询越区告警未处理记录失败",
+ "52300013": "报表查询超速告警数量失败",
+ "52300014": "报表查询超速告警分页记录失败",
+ "52300015": "报表查询超速告警未处理记录失败",
+ "52300016": "报表查询上下线记录数量失败",
+ "52300017": "报表查询上下线记录失败",
+ "52300018": "报表查询回呼请求记录数量失败",
+ "52300019": "报表查询回呼请求记录失败",
+ "52300023": "不支持组织和号码组合查询",
+ "52400001": "tlv反序列化失败",
+ "52400002": "tlv序列化失败",
+ "52400003": "json反序列化失败",
+ "52400004": "json序列化失败",
+ "52400005": "Base64解码失败",
+ "52400006": "AuthorizeBasic格式错误",
+ "52400007": "从Redis获取DB连接失败",
+ "52400008": "从Redis获取RRS服务失败",
+ "52400009": "从Redis获取用户密码失败",
+ "52400010": "将令牌插入Redis失败",
+ "52400011": "从Redis选择令牌失败",
+ "52400012": "Redis获取在线用户信息失败",
+ "52400013": "从Redis删除在线用户失败",
+ "52400014": "从Redis删除令牌失败",
+ "52400015": "UserId格式错误",
+ "52400016": "从Redis在线用户集删除失败",
+ "52400017": "踢出调度用户失败",
+ "52400018": "断开调度Websocket连接失败",
+ "52400019": "向Mq广播用户状态失败",
+ "52400020": "从Redis获取Realm在线用户失败",
+ "52400021": "按Mq将用户状态推送到同域的其他用户失败",
+ "52400022": "设置Redis基础数据用户状态字段失败",
+ "52400023": "设置Redis基本数据用户OS字段失败",
+ "52400024": "设置Redis基本数据用户media_ip字段失败",
+ "52400025": "连接DB失败",
+ "52400026": "将数据插入注册失败",
+ "52400027": "从Redis获取基本数据用户信息失败",
+ "52400028": "将在线用户插入Redis失败",
+ "52400029": "将用户插入Redis在线用户集失败",
+ "52400030": "更新Redis中的Token状态失败",
+ "52400031": "添加在线域名失败",
+ "52400032": "从Redis获取在线域名失败",
+ "52400033": "取解除锁定类型块失败",
+ "52400034": "获取本地Ip地址失败",
+ "52400035": "将用户插入到redis中相应SSI的set中",
+ "52400036": "将用户从redis中相应SSI的set中删除",
+ "52400037": "从SSI集获取用户失败",
+ "52400038": "从Redis获取用户密码失败",
+ "52400039": "更新用户SSI字段失败",
+ "52400040": "用户登录到Mcs失败",
+ "52400041": "从Mcs注销用户失败",
+ "52400042": "在Redis中设置令牌过期时间失败",
+ "52400043": "在Redis中持久化令牌失败",
+ "52400045": "从Redis获取联机客户端计数失败",
+ "52400046": "设置Redis中的联机客户端计数失败",
+ "52400047": "登陆限流",
+ "52400048": "用户已过期",
+ "52400049": "用户名或密码错误",
+ "52400050": "基础数据未启动完成",
+ "52400051": "上下线服务未启动完成",
+ "52400052": "Reg服务不是主服务(异地容灾降备)",
+ "52400053": "token错误",
+ "52400054": "重复登陆",
+ "52400056": "账号正在操作中",
+ "52400057": "坐席登录系统失败",
+ "52400058": "登录客户端类型错误",
+ "52400059": "登出时检测到未登录",
+ "52400060": "心跳超时",
+ "52400061": "重复登录踢出",
+ "52400062": "sap异常退出登出",
+ "52400063": "异地容灾降备",
+ "52400064": "调度账号被删除",
+ "52400065": "用户类型为坐席修改加密类型",
+ "52600002": "通用透传服务结构体错误",
+ "52700001": "tlv消息解析/反序列化失败",
+ "52700002": "cmd_name填写错误",
+ "52700003": "未知错误",
+ "52700004": "告警类型错误",
+ "52700005": "回呼请求类型错误",
+ "52700006": "告警信息不存在",
+ "52700007": "接警状态错误",
+ "52700008": "处警状态错误",
+ "52900001": "tlv消息解析/反序列化失败",
+ "52900002": "路由类型错误",
+ "52900003": "PUCID为空",
+ "52900004": "系统ID为空",
+ "52900005": "域名为空",
+ "52900006": "主叫号码为空",
+ "53100001": "无效的CMD",
+ "53100002": "保存redis失败",
+ "53100003": "保存数据库失败",
+ "53100004": "访问redis数据失败",
+ "53100005": "访问数据失败",
+ "53300001": "消息解析失败",
+ "53300002": "生成业务ID失败",
+ "53300003": "保存呼叫业务失败",
+ "53300004": "获取呼叫业务失败",
+ "53300005": "呼叫通道已关闭",
+ "53300006": "呼叫消息投递失败",
+ "53300007": "呼叫信令不支持",
+ "53300008": "呼叫业务ID为空",
+ "53300009": "呼叫限流过载失败",
+ "53300555": "呼叫正常挂断",
+ "53300666": "呼叫转移成功挂断转移人",
+ "53300701": "创建媒体资源失败",
+ "53300702": "呼叫冲突",
+ "53300703": "更新媒体资源失败",
+ "53300706": "呼叫并入失败",
+ "53300707": "话权空闲超时挂断",
+ "53300709": "主叫挂断",
+ "53300710": "被叫挂断",
+ "53300718": "媒体无流挂断",
+ "53300721": "录音回放结束挂断",
+ "53300731": "获取会议成员失败挂断",
+ "53300733": "会议删除挂断",
+ "53300734": "会议成员删除挂断",
+ "53300801": "创建调度腿失败挂断",
+ "53300806": "调度不在线挂断",
+ "53300823": "取消监听挂断",
+ "53300827": "调度登出挂断",
+ "53300828": "群组成员呼叫结束挂断",
+ "53300834": "获取群组成员失败挂断",
+ "53300841": "群组成员为空挂断",
+ "53300843": "群组创建者不在线挂断",
+ "53300849": "群组成员删除挂断",
+ "53300855": "强拆挂断",
+ "53300856": "强插新建呼叫挂断",
+ "53300857": "创建源呼叫腿失败挂断",
+ "53300858": "非系统监听不支持强拆",
+ "53300859": "群组删除挂断",
+ "53300860": "呼叫过载挂断",
+ "53300861": "呼叫同振挂断其他",
+ "53300862": "视频被转发人挂断",
+ "53300863": "呼叫最大时长超时挂断",
+ "53300864": "获取监听关系失败挂断",
+ "53400002": "ACS无法找到网关",
+ "53400003": "ACS客户端登出挂断呼叫",
+ "53400004": "ACS派接被删除而挂断呼叫",
+ "53600001": "消息解析失败",
+ "53700001": "tlv消息解析/反序列化失败",
+ "53700002": "tlv消息编码/序列化失败",
+ "53700003": "通用错误",
+ "53700004": "非法的微服务",
+ "53700005": "CallSetup请求缺少必要字段",
+ "53700006": "SDS短信请求缺少必要字段",
+ "53700007": "调用RPC失败",
+ "53700008": "呼叫建立冲突",
+ "53700009": "组呼主动并入失败",
+ "53700010": "添加新协程到map失败",
+ "53700011": "呼叫不存在",
+ "53700012": "协程通道关闭",
+ "53700013": "发送数据到协程通道失败",
+ "53700014": "呼叫状态机null状态超时",
+ "53700015": "呼叫状态机process状态超时",
+ "53700016": "呼叫状态机connect状态超时",
+ "53700017": "呼叫状态机active状态超时",
+ "53700018": "呼叫状态机release状态超时",
+ "53800000": "话权错误码开始",
+ "53800001": "创建并增加话权通道集合错误",
+ "538000010": "只允许接收",
+ "538000011": "无可用资源",
+ "538000012": "队列满",
+ "538000013": "优先级不足",
+ "538000014": "其他原因话权拒绝",
+ "538000015": "话权正在变化不接受话权操作",
+ "538000016": "外系统拒绝话权",
+ "538000017": "外系统不接受主叫调度之外的坐席话权",
+ "53800002": "定位查询话权通道集合错误",
+ "53800003": "话权将消息发送到通道错误",
+ "53800004": "话权通道关闭错误",
+ "53800005": "话权重启清除数据错误",
+ "53800006": "其他客户端有话权",
+ "53800007": "内部错误",
+ "53800008": "当前会话只有一个参与方",
+ "53800009": "重试定时器不存在",
+ "53800010": "只允许接收",
+ "53800011": "无可用资源",
+ "53800012": "队列满",
+ "53800013": "优先级不足",
+ "53800014": "其他原因话权拒绝",
+ "53800015": "话权正在变化不接受话权操作",
+ "53800016": "外系统拒绝话权",
+ "53800017": "外系统只接受主叫调度话权操作",
+ "53900001": "未知错误",
+ "53900002": "tlv反序列化失败",
+ "53900003": "tlv序列化失败",
+ "53900004": "当前puc非主服务",
+ "53900005": "未启用多级调度",
+ "53900006": "多级调度rpc错误",
+ "53900007": "rpc错误",
+ "53900008": "未知命令字",
+ "53900009": "鉴权失败",
+ "53900010": "会话未鉴权",
+ "53900011": "会话不存在",
+ "53900012": "pucid为空",
+ "53900013": "本地pucid",
+ "53900014": "呼叫会话已存在",
+ "53900015": "呼叫会话不存在",
+ "53900016": "sip未知错误",
+ "53900017": "接收多媒体文件失败",
+ "54001000": "错误码开始标识",
+ "54001001": "基础数据重复",
+ "54001002": "数据不存在",
+ "54001003": "修改调度员密码时,原密码错误",
+ "54001004": "超过lic限制错误",
+ "54001005": "没有操作权限错误",
+ "54001006": "网关返回失败",
+ "54001007": "SAP与system类型不匹配",
+ "54001008": "基础数据同步中",
+ "54001009": "基础数据不存在",
+ "54002000": "数据库操作失败",
+ "54002001": "redis操作失败",
+ "54002002": "json序列化失败",
+ "54002003": "json反序列化失败",
+ "54002004": "lics错误",
+ "54002005": "数据重复(数据已存在)",
+ "54002006": "数据不存在",
+ "54002007": "信令中携带的租户信息不存在",
+ "54002008": "修改密码时,原密码错误",
+ "54002009": "cmd_name未找到",
+ "54002010": "没有操作数据权限错误",
+ "54002011": "sap类型和系统类型不匹配",
+ "54002012": "要删除的系统存在基础数据,不允许被删除",
+ "54002013": "网关返回失败",
+ "54002014": "预定义组已用完",
+ "54002015": "该系统无需使用预定义组",
+ "54002016": "数据类型不存在",
+ "54002017": "调度台无权限",
+ "54002018": "检验四线携带的内容不合规",
+ "54002019": "检验下级域携带的内容不合规",
+ "54002020": "四线携带组数量不对",
+ "54002021": "四线携带组类型不对",
+ "54002022": "下级域的区号重复",
+ "54002023": "短信模板的个数超过最大限度",
+ "54002024": "调度台创建的群组存在",
+ "54002025": "调度台创建的会议存在",
+ "54002026": "调度台创建的动态组存在",
+ "54002027": "调度台创建的多选呼叫存在",
+ "54002028": "调度台创建的派接组存在",
+ "54003000": "命令字错误",
+ "54003001": "json解析错误",
+ "54003002": "没有生效或者执行",
+ "54003003": "查询结果为空",
+ "54003004": "查询结果返回值错误",
+ "54003005": "增加简短的组织错误",
+ "54003006": "更新简短的组织错误",
+ "54003007": "删除组织错误",
+ "54003008": "redis查询错误",
+ "54003009": "不符合要求",
+ "54003010": "输入的参数错误",
+ "54003011": "pucid的输入错误",
+ "54090001": "请求解析失败",
+ "54090002": "当前没有导入导出任务",
+ "54090003": "当前已存在导入或者导出任务",
+ "54090004": "未找到该任务",
+ "54090005": "导入文件为空",
+ "54090006": "上传frs失败",
+ "54090007": "获取token失败",
+ "54090011": "基本配置导出失败",
+ "54090012": "组织信息导出失败",
+ "54090013": "系统信息导出失败",
+ "54090014": "接入点配置导出失败",
+ "54090015": "调度员信息导出失败",
+ "54090021": "导入文件base64解码失败",
+ "54090022": "导入文件base64解码后长度为0",
+ "54090023": "导入文件json解码失败",
+ "54090024": "基本配置导入失败",
+ "54090025": "组织信息导入失败",
+ "54090026": "系统信息导入失败",
+ "54090027": "接入点配置导入失败",
+ "54090028": "调度员信息导入失败",
+ "54090030": "导入基础数据请求反序列化失败",
+ "54090031": "导入基础数据的任务已经存在",
+ "54090032": "导入基础数据为文件内容为空",
+ "54090033": "导入基础数据解码失败",
+ "54090034": "导入基础数据解码后内容为空",
+ "54090035": "导入基础数据文件内容反序列化失败",
+ "54090036": "导入基础数据任务不存在",
+ "54090037": "导入基础数据上传导入结果文件失败",
+ "54090038": "导入基础数据获取token失败",
+ "54090039": "导入基础数据没找到匹配任务",
+ "54100001": "",
+ "54100002": "rpc tlv消息解析/反序列化失败",
+ "54100003": "rpc tlv消息编码/序列化失败",
+ "54100004": "寻找服务注册到gual的路由失败",
+ "54100005": "寻找网关注册到gual的路由失败",
+ "54100006": "没有找到可用的网关服务",
+ "54100007": "向网关发送数据失败",
+ "54100008": "Marshal 数据为空",
+ "54100009": "Rpc发送给服务器失败",
+ "54100010": "保存路由信息失败",
+ "54100011": "获取路由信息失败",
+ "54100012": "拆分呼叫失败",
+ "54100013": "sap 不在线",
+ "54100014": "融合系统组配置错误,在多个宽窄融合系统注册",
+ "54100015": "强插呼叫建立失败,发送话权拒绝",
+ "54200001": "解析失败",
+ "54200002": "redis操作错误",
+ "54200003": "LBSIP地址错误",
+ "54200004": "LBS端口错误",
+ "54200005": "实体ID错误",
+ "54200006": "网关号码为空",
+ "54200007": "网关名称为空",
+ "54200008": "网关函数名为空",
+ "54200009": "系统ID为空",
+ "54200010": "系统ID未找到对应的mo配置",
+ "54200011": "上下线值错误",
+ "54200012": "SipHandle为空",
+ "54200013": "远端的SIPIP错误",
+ "54200014": "远端的SIP端口为0",
+ "54200015": "未找到sip平台的LBS信息",
+ "54200016": "pucID为空",
+ "54200017": "获取redis的SessionID信息错误",
+ "54200018": "未知错误",
+ "54200019": "缺少必要字段",
+ "54200020": "SipLbs心跳函数名为空",
+ "54200021": "SipLbs绑定端口错误",
+ "54200022": "SipLbs资源不足",
+ "54200023": "SipLbs配置ID不存在",
+ "54200024": "SipLbs配置ID为空",
+ "54200025": "协议类型填写错误",
+ "5600101": "用户未授权、或授权失败",
+ "5600107": "用户无权限",
+ "5600109": "用户无权限",
+ "5600113": "组号码不存在",
+ "5600114": "组数据查询失败",
+ "5600115": "群组不可用",
+ "5600116": "主叫不属于这个组",
+ "5600120": "主叫未附着到群组",
+ "5600124": "超过最大并发单呼数量",
+ "5600125": "无自动单呼权限",
+ "5600126": "无手动单呼权限",
+ "5600129": "用户去附着",
+ "5600130": "用户注销",
+ "5600131": "申请TMF媒体资源失败",
+ "5600132": "更新TMF媒体资源失败",
+ "5600133": "最大呼叫建立时长定时器超时",
+ "5600134": "静音检测超时",
+ "5600136": "被叫被抢占",
+ "5600139": "检查校验XML完整性保护失败",
+ "5600154": "校验用户环境监听、监视权限失败",
+ "5600160": "PSTN呼叫被拒绝",
+ "5600198": "被叫未附着到群组",
+ "5600200": "用户没有数据传输权限",
+ "5600202": "呼叫建立超时",
+ "5600203": "呼叫连接超时",
+ "5600204": "呼叫激活超时",
+ "5600208": "呼叫类型格式错误",
+ "5600213": "限制呼入",
+ "5600225": "签约数据查询失败",
+ "5600403": "无权限",
+ "5600404": "找不到用户",
+ "5600408": "请求超时",
+ "5600480": "临时不可用",
+ "5600481": "会话不存在",
+ "5600486": "用户忙",
+ "5600488": "此处不接受",
+ "5600500": "服务器内部错误",
+ "5600502": "网关不可用",
+ "5600503": "服务不可用",
+ "5600504": "服务响应超时",
+ "5600603": "被叫拒接",
+ "5600610": "用户数据不可用",
+ "5600611": "被叫不存在",
+ "5600612": "被叫不在线",
+ "5600613": "服务端内部RPC调用失败",
+ "5600623": "请求缺少必要字段",
+ "5600634": "业务并发受限",
+ "5600640": "license限制",
+ "5600642": "签约数据不可用",
+ "5600644": "呼叫不存在",
+ "5600652": "无加密呼叫权限",
+ "5601035": "业务限流",
+ "5601065": "没有遥晕遥毙权限",
+ "5601067": "遥晕遥毙失败",
+ "5602006": "查询订阅关系失败",
+ "5603013": "用户被遥晕遥毙",
+ "5603014": "错误的调度台监听设置请求",
+ "5603015": "无效消息",
+ "5603018": "发送消息失败",
+ "5603038": "用户无权限",
+ "5603040": "无紧急单呼权限",
+ "5603041": "无取消紧急单呼权限",
+ "5603043": "呼叫模式错误",
+ "5603045": "呼叫被拒绝",
+ "5603053": "无单呼权限",
+ "5603054": "无视频回传权限",
+ "5603055": "用户在黑名单中",
+ "5603067": "主叫发起的呼叫释放",
+ "5603068": "核心网强制呼叫释放",
+ "5603069": "超时释放",
+ "5603070": "被叫发起的呼叫释放",
+ "5603071": "呼叫转移导致的释放",
+ "5603075": "无呼叫转接权限",
+ "5603160": "群组权限关闭禁止呼叫",
+ "5603506": "组内没有被叫",
+ "5603507": "无法建立组呼",
+ "5603508": "系统内部处理失败",
+ "5603509": "呼叫冲突",
+ "5603510": "主叫没有附着",
+ "5603511": "组的媒体格式协商失败",
+ "5603512": "组内所有被叫没有附着",
+ "5603514": "释放老的呼叫分支失败",
+ "5605014": "会话心跳超时释放呼叫",
+ "5605020": "所有被叫处理失败",
+ "5611001": "rpc反序列化失败",
+ "5611002": "rpc序列化失败",
+ "5611003": "json反序列化失败",
+ "5611004": "json序列化失败",
+ "5611005": "数据库操作失败",
+ "5611007": "信令中携带的租户信息不存在",
+ "5611008": "信令中携带的用户信息不存在",
+ "5611009": "cmd_name错误",
+ "5611010": "sap不存在",
+ "5611011": "sap未注册",
+ "5611012": "sap不存在call模块",
+ "5611014": "未知错误",
+ "5612001": "请求缺少必要字段",
+ "5612002": "多话权组不支持群组呼叫",
+ "5613001": "动态组创建失败",
+ "5613002": "动态组删除失败",
+ "5613003": "动态组更新失败",
+ "5613004": "动态组添加成员失败",
+ "5613005": "动态组删除成员失败",
+ "5613101": "系统派接组创建失败",
+ "5613102": "系统派接组删除失败",
+ "5613103": "系统派接组更新失败",
+ "5613104": "系统派接组添加成员失败",
+ "5613105": "系统派接组删除成员失败",
+ "5613201": "语音业务监听失败",
+ "5613202": "视频业务监听失败",
+ "5613203": "数据业务监听失败",
+ "5613301": "遥晕失败",
+ "5613302": "复活失败",
+ "5613303": "遥毙失败",
+ "5614001": "不可抢占话权",
+ "5614002": "系统内部话权错误",
+ "5614003": "只有一个参与方",
+ "5614004": "话权被回收后未到申请时间",
+ "5614005": "只能接收媒体",
+ "5614006": "无可用资源",
+ "5614007": "话权队列满",
+ "5614255": "其他原因",
+ "5615001": "坐席发起组呼未找到组秘钥",
+ "5615002": "坐席发起加密组呼组秘钥过期",
+ "5615003": "坐席发起加密单呼生成秘钥失败",
+ "5690065": "通用释放呼叫",
+ "5690066": "主叫释放呼叫",
+ "5690067": "核心网强制释放呼叫",
+ "5690068": "超时释放",
+ "5690069": "被叫释放呼叫",
+ "5690070": "呼叫转移导致释放",
+ "5690071": "呼叫升级导致释放",
+ "5690100": "系统组呼服务崩溃或者重启释放呼叫",
+ "5690129": "用户去附着",
+ "5690130": "用户注销",
+ "5690131": "调度台强拆",
+ "5690132": "紧急呼叫打断",
+ "5690133": "用户被遥晕或遥毙",
+ "5690134": "静音检测超时",
+ "5690135": "主叫被抢占",
+ "5690136": "被叫被抢占",
+ "5690486": "用户忙",
+ "5690491": "呼叫被高优先级打断",
+ "5690500": "系统内部原因释放呼叫",
+ "5690504": "呼叫超时",
+ "5693067": "主叫发起的呼叫释放",
+ "5693068": "核心网强制呼叫释放",
+ "5693069": "超时释放",
+ "5693070": "被叫发起的呼叫释放",
+ "5693071": "呼叫转移导致的释放",
+ "5694021": "系统强制释放呼叫",
+ "57100001": "反序列化Json Tlv数据失败",
+ "57100002": "序列化为Json Tlv数据失败",
+ "57100003": "获取API失败",
+ "57100004": "sip未注册",
+ "57100005": "处理GUAL信令失败",
+ "57100006": "sap不在线/未登录",
+ "57100007": "不支持的信令",
+ "57100008": "CallManager为空",
+ "57100009": "二进制数据转sip格式失败",
+ "57100010": "接收sip更新信息失败",
+ "57200001": "反序列化Json Tlv数据失败",
+ "57200002": "序列化为Json Tlv数据失败",
+ "57200003": "获取API失败",
+ "57200004": "sip未注册",
+ "57200005": "处理GUAL信令失败",
+ "57200006": "sap不在线/未登录",
+ "57200007": "不支持的信令",
+ "57200008": "CallManager为空",
+ "57200009": "rtsp server未初始化",
+ "57200010": "二进制数据转sip格式失败",
+ "57200011": "接收sip更新信息失败",
+ "58900001": "找不到websocket链路",
+ "58900002": "反序列化失败",
+ "58900003": "序列化失败",
+ "58900004": "Rpc消息体超过限制",
+ "58900005": "向优先级队列添加消息失败",
+ "58900006": "IceGw断链",
+ "60000001": "创建AudioOfferSDP失败",
+ "60000002": "创建VideoOfferSDP失败",
+ "60000003": "未登录",
+ "600001": "消息解析失败",
+ "600002": "消息编码失败",
+ "600003": "sap不存在",
+ "600004": "内部错误",
+ "600005": "发送rpc失败",
+ "600006": "调度号码未登录",
+ "600007": "未知原因",
+ "600008": "未知用户",
+ "600009": "未知组号",
+ "600010": "用户不在线",
+ "600011": "用户无权限",
+ "600012": "用户不可用",
+ "600013": "用户无响应",
+ "600014": "被叫忙",
+ "600015": "被叫不可达",
+ "600016": "被叫不支持加密",
+ "600017": "被叫拒绝呼叫",
+ "600018": "呼叫冲突",
+ "600019": "呼叫失败",
+ "600020": "请求的业务不支持",
+ "600021": "组附属被拒绝",
+ "600022": "遥晕遥毙失败",
+ "600023": "动态重组失败",
+ "600024": "短消息传输失败",
+ "600025": "消息超出最大数量限制",
+ "600026": "消息已经在处理中",
+ "600027": "监听失败",
+ "600028": "请求消息错误",
+ "600029": "无效范围",
+ "600030": "资源限制",
+ "600031": "无效handle",
+ "600032": "超时",
+ "600033": "Dmx挂断呼叫",
+ "600034": "sap未登录",
+ "6011001": "rpc反序列化失败",
+ "6011010": "sap不存在",
+ "6011011": "sap未注册",
+ "6011014": "未知错误",
+ "6200001": "反序列化失败",
+ "6200002": "序列化失败",
+ "6200003": "参数错误",
+ "6200004": "不支持的命令字",
+ "6200005": "接入点不存在",
+ "6200006": "接入点离线",
+ "6200007": "接入点不存在呼叫模块",
+ "6200008": "接入点不存在控制模块",
+ "6200009": "接入点初始化失败",
+ "6200010": "已配置网闸但未向sipgw注册",
+ "6200011": "构造sip消息失败",
+ "6200012": "解析sdp失败",
+ "6200013": "sdp缺少视频参数",
+ "6200014": "sip缺少sdp",
+ "6200015": "会话状态错误",
+ "6200016": "不存在会话",
+ "6200017": "发送sip到后置失败",
+ "6200018": "发送rpc到后置失败",
+ "6200019": "发送sip到前置失败",
+ "6200020": "发送rpc到前置失败",
+ "6200021": "发送rpc到gual失败",
+ "6200022": "发送sip到系统失败",
+ "6200023": "错误的sip消息",
+ "6200024": "不支持的sip方法",
+ "6200025": "强制类型转换失败",
+ "6200026": "被叫不存在",
+ "6200027": "获取被叫媒体uri失败",
+ "6200028": "申请媒体失败",
+ "6200029": "更新媒体失败",
+ "6200030": "前置网关返回错误",
+ "6200031": "系统主动挂断",
+ "6200032": "系统返回错误",
+ "6200033": "设备不存在",
+ "6200034": "RPC返回错误",
+ "6200035": "未定义错误",
+ "6900001": "消息解析失败",
+ "6900002": "消息编码失败",
+ "6900003": "sap不存在",
+ "6900004": "内部错误",
+ "6900005": "发送rpc失败",
+ "6900006": "调度号码未登录",
+ "6900007": "呼叫冲突",
+ "6900008": "发送tdp消息失败",
+ "6901000": "未知错误",
+ "6901001": "用户请求挂断呼叫",
+ "6901002": "被叫忙",
+ "6901003": "被叫不可达",
+ "6901004": "被叫不支持加密",
+ "6901005": "拥堵中",
+ "6901006": "通道不允许",
+ "6901007": "通道不兼容",
+ "6901008": "请求服务不可用",
+ "6901009": "预占优先导致呼叫挂断",
+ "6901010": "无效呼叫标识",
+ "6901011": "被叫拒绝呼叫",
+ "6901012": "没有空闲的CC实体",
+ "6901013": "呼叫超时",
+ "6901014": "SwMI请求挂断呼叫",
+ "6901015": "呼叫未确认",
+ "6901016": "未知的tetra标识",
+ "6901017": "SS断开呼叫",
+ "6901018": "未知外部用户标识",
+ "6901019": "其他用户的呼叫恢复失败",
+ "6901020": "被叫需要加密",
+ "6901021": "当前呼叫建立不被支持",
+ "6901022": "被叫方与主叫方在同一DM-GATE下",
+ "6901023": "非呼叫所有者请求断开连接",
+ "6901032": "重复请求",
+ "6901033": "呼叫超时",
+ "6901034": "SBS错误",
+ "6901035": "呼叫处理中",
+ "6901036": "呼叫排队超时",
+ "6901037": "呼叫排队超时",
+ "6901038": "呼叫排队超时",
+ "6901039": "呼叫排队超时",
+ "6901040": "无效的被叫SSI",
+ "6901041": "呼叫类型不支持",
+ "6901042": "无效的主叫SSI",
+ "6901043": "呼叫类型不支持",
+ "6901044": "优先级导致呼叫挂断",
+ "6901045": "组呼叫不属于被叫群组",
+ "6901046": "转移不支持",
+ "6901047": "呼叫无法恢复",
+ "6901048": "呼叫挂断",
+ "6901049": "呼叫挂断",
+ "6901050": "呼叫未被应答",
+ "6901051": "被叫不在VPN范围内",
+ "6901052": "服务暂时不可用",
+ "6901054": "空组",
+ "6901055": "SBS链路丢失",
+ "6901056": "被叫未注册",
+ "6901057": "被叫不可达",
+ "6901058": "MS漫游出覆盖范围导致呼叫恢复失败",
+ "6901059": "没有资源导致呼叫恢复失败",
+ "6901115": "呼叫未按照预期建立",
+ "6901116": "呼叫断开未被响应",
+ "6902004": "短消息转发到外部网络",
+ "6902005": "短信息已转发并被阻止",
+ "6902006": "短消息已被接收",
+ "6902032": "拥塞导致短消息已被存储",
+ "6902033": "短消息已被存储",
+ "6902034": "目的不可达且短消息已被存储",
+ "6902054": "空组",
+ "6902064": "网络过载",
+ "6902065": "BS上的服务永久不可用",
+ "6902066": "BS上的服务暂时不可用",
+ "6902067": "SDS未授权",
+ "6902068": "SDS未授权",
+ "6902069": "未知目的网关或服务中心地址",
+ "6902070": "未知地址",
+ "6902071": "组地址错误",
+ "6902072": "消息超时未被接收",
+ "6902073": "消息超时未被确认",
+ "6902074": "传输错误",
+ "6902075": "目标未注册",
+ "6902076": "目标队列已满",
+ "6902077": "消息太长",
+ "6902080": "协议不支持",
+ "6902081": "消息编码方式不支持",
+ "6902083": "目标不接受SDS消息",
+ "6902084": "消息太长",
+ "6902086": "目标地址被禁止",
+ "6902087": "无法路由到外部网络",
+ "6902088": "未知外部用户号码",
+ "6902090": "目标不可达",
+ "6902093": "消息被丢弃",
+ "6902099": "No pending messages",
+ "6902128": "格式错误",
+ "6902129": "一般错误",
+ "6902130": "无效的被叫SSI",
+ "6902259": "用户数据长度错误",
+ "6903000": "请求失败",
+ "6903003": "用户未授权",
+ "6903004": "无效的组标识",
+ "6903005": "不支持的组类型",
+ "6903006": "组数量超出限制",
+ "6903007": "信息不足",
+ "6904000": "请求失败",
+ "6904003": "用户未授权",
+ "6904004": "无效的组标识",
+ "6904007": "信息不足",
+ "6905000": "请求失败",
+ "6905003": "用户未授权",
+ "6905004": "无效的组标识",
+ "6905015": "不允许删除静态组",
+ "6905016": "请求失败",
+ "6905017": "组不为空",
+ "6906000": "请求失败",
+ "6906002": "ISSI不可达",
+ "6906003": "用户未授权",
+ "6906004": "用户标识无效",
+ "6906005": "请求类型不支持",
+ "6906006": "没有成员",
+ "6906007": "服务暂时不可用",
+ "7003": "Sap不在线",
+ "7200603": "拒绝",
+ "7500404": "sap不在线",
+ "7500603": "拒绝",
+ "7700001": "获取传真访问令牌失败",
+ "7700002": "验证传真账号失败",
+ "7700003": "传真账号不存在或者账号密码错误",
+ "7700004": "访问令牌无效",
+ "7700005": "没有管理员权限",
+ "7700006": "添加传真账号失败",
+ "7700007": "更新传真账号失败",
+ "7700008": "删除传真账号失败",
+ "7700009": "获取传真账号失败",
+ "7700010": "添加传真联系人失败",
+ "7700011": "更新传真联系人失败",
+ "7700012": "删除传真联系人失败",
+ "7700013": "获取传真联系人列表失败",
+ "7700014": "获取传真发送列表失败",
+ "7700015": "获取收件列表失败",
+ "7700016": "设置传真已读失败",
+ "7700017": "发送传真失败",
+ "7700018": "没有传真发送权限",
+ "7700019": "传真不存在",
+ "7700020": "操作不允许",
+ "7700021": "发送超时",
+ "7700022": "不能重复添加",
+ "8200001": "消息解析失败",
+ "8200002": "消息编码失败",
+ "8200003": "sap不存在",
+ "8200004": "sap离线",
+ "8200005": "内部错误",
+ "8200006": "不支持的命令",
+ "8200007": "发送rpc失败",
+ "8200008": "调度号码未登录",
+ "8200009": "呼叫冲突",
+ "8200010": "发送tdp消息失败",
+ "8200011": "未知错误",
+ "8200012": "用户请求挂断呼叫",
+ "8200013": "被叫忙",
+ "8200014": "被叫不可达",
+ "8200015": "被叫不支持加密",
+ "8200016": "拥堵中",
+ "8200017": "通道不允许",
+ "8200018": "通道不兼容",
+ "8200019": "请求服务不可用",
+ "8200020": "预占优先导致呼叫挂断",
+ "8200021": "无效呼叫标识",
+ "8200022": "被叫拒绝呼叫",
+ "8200023": "没有空闲的CC实体",
+ "8200024": "呼叫超时",
+ "8200025": "SwMI请求挂断呼叫",
+ "8200026": "呼叫未确认",
+ "8200027": "未知的tetra标识",
+ "8200028": "SS断开呼叫",
+ "8200029": "未知外部用户标识",
+ "8200030": "其他用户的呼叫恢复失败",
+ "8200031": "被叫需要加密",
+ "8200032": "当前呼叫建立不被支持",
+ "8200033": "被叫方与主叫方在同一DM-GATE下",
+ "8200034": "非呼叫所有者请求断开连接",
+ "8200035": "重复请求",
+ "8200036": "呼叫超时",
+ "8200037": "SBS错误",
+ "8200038": "呼叫处理中",
+ "8200039": "呼叫排队超时",
+ "8200040": "呼叫排队超时",
+ "8200041": "呼叫排队超时",
+ "8200042": "呼叫排队超时",
+ "8200043": "无效的被叫SSI",
+ "8200044": "呼叫类型不支持",
+ "8200045": "无效的主叫SSI",
+ "8200046": "呼叫类型不支持",
+ "8200047": "优先级导致呼叫挂断",
+ "8200048": "组呼叫不属于被叫群组",
+ "8200049": "转移不支持",
+ "8200050": "呼叫无法恢复",
+ "8200051": "呼叫挂断",
+ "8200052": "呼叫挂断",
+ "8200053": "呼叫未被应答",
+ "8200054": "被叫不在VPN范围内",
+ "8200055": "服务暂时不可用",
+ "8200056": "空组",
+ "8200057": "SBS链路丢失",
+ "8200058": "被叫未注册",
+ "8200059": "被叫不可达",
+ "8200060": "MS漫游出覆盖范围导致呼叫恢复失败",
+ "8200061": "没有资源导致呼叫恢复失败",
+ "8200062": "呼叫未按照预期建立",
+ "8200063": "呼叫断开未被响应",
+ "8200064": "短消息转发到外部网络",
+ "8200065": "短信息已转发并被阻止",
+ "8200066": "短消息已被接收",
+ "8200067": "拥塞导致短消息已被存储",
+ "8200068": "短消息已被存储",
+ "8200069": "目的不可达且短消息已被存储",
+ "8200070": "空组",
+ "8200071": "网络过载",
+ "8200072": "BS上的服务永久不可用",
+ "8200073": "BS上的服务暂时不可用",
+ "8200074": "SDS未授权",
+ "8200075": "SDS未授权",
+ "8200076": "未知目的网关或服务中心地址",
+ "8200077": "未知地址",
+ "8200078": "组地址错误",
+ "8200079": "消息超时未被接收",
+ "8200080": "消息超时未被确认",
+ "8200081": "传输错误",
+ "8200082": "目标未注册",
+ "8200083": "目标队列已满",
+ "8200084": "消息太长",
+ "8200085": "协议不支持",
+ "8200086": "消息编码方式不支持",
+ "8200087": "目标不接受SDS消息",
+ "8200088": "消息太长",
+ "8200089": "目标地址被禁止",
+ "8200090": "无法路由到外部网络",
+ "8200091": "未知外部用户号码",
+ "8200092": "目标不可达",
+ "8200093": "消息被丢弃",
+ "8200094": "No pending messages",
+ "8200095": "格式错误",
+ "8200096": "一般错误",
+ "8200097": "无效的被叫SSI",
+ "8200098": "用户数据长度错误",
+ "8200099": "请求失败",
+ "8200100": "用户未授权",
+ "8200101": "无效的组标识",
+ "8200102": "不支持的组类型",
+ "8200103": "组数量超出限制",
+ "8200104": "信息不足",
+ "8200105": "请求失败",
+ "8200106": "用户未授权",
+ "8200107": "无效的组标识",
+ "8200108": "信息不足",
+ "8200109": "请求失败",
+ "8200110": "用户未授权",
+ "8200111": "无效的组标识",
+ "8200112": "不允许删除静态组",
+ "8200113": "请求失败",
+ "8200114": "组不为空",
+ "8200115": "请求失败",
+ "8200116": "ISSI不可达",
+ "8200117": "用户未授权",
+ "8200118": "用户标识无效",
+ "8200119": "请求类型不支持",
+ "8200120": "没有成员",
+ "8200121": "服务暂时不可用",
+ "8400000": "接受",
+ "8400001": "部分接受",
+ "8400002": "通用拒绝",
+ "8400003": "被叫拒绝",
+ "8400004": "集群核心网拒绝",
+ "8400005": "集群核心网发起的注销",
+ "8400064": "保留",
+ "8400065": "通用呼叫释放",
+ "8400066": "主叫发起的呼叫释放",
+ "8400067": "集群核心网强制呼叫释放",
+ "8400068": "超时释放",
+ "8400069": "被叫发起的呼叫释放",
+ "8400070": "调度台发起的取消视频推送",
+ "8400071": "集群核心网发起的取消视频推送",
+ "84000752": "未授权系统,无法分配服务接入点",
+ "84000753": "有授权系统,找不到在线服务接入点",
+ "84000754": "调度员授权的服务接入点不在线",
+ "84001000": "rpc tlv消息解析/反序列化失败",
+ "84001001": "rpc tlv消息编码/序列化失败",
+ "84001002": "json反序列化失败",
+ "84001003": "json序列化失败",
+ "84001004": "数据库操作失败",
+ "84001005": "redis操作失败",
+ "84001006": "信令中携带的租户信息不存在",
+ "84001007": "信令中携带的用户信息不存在",
+ "84001008": "cmd_name填写错误",
+ "84001009": "sap不存在",
+ "84001010": "sap未注册",
+ "84001011": "此sap不存在call 模块",
+ "84001012": "pucid错误",
+ "84001013": "未知错误",
+ "8400128": "被叫不支持加密呼叫",
+ "8400129": "通用话权释放",
+ "8400130": "讲话者发起的话权释放",
+ "8400131": "集群核心网强制话权释放",
+ "8400132": "超时发起的话权释放",
+ "8400192": "动态重组不可达",
+ "8400256": "秘钥版本未启用",
+ "8400257": "无对应的秘钥版本",
+ "8400752": "未授权系统,无法分配服务接入点",
+ "8400753": "有授权系统,找不到在线服务接入点",
+ "8400754": "调度员授权的服务接入点不在线",
+ "8400756": "调度员授权的服务接入点不在线",
+ "8401000": "rpc tlv消息解析/反序列化失败",
+ "8401001": "rpc tlv消息编码/序列化失败",
+ "8401002": "json反序列化失败",
+ "8401003": "json序列化失败",
+ "8401004": "数据库操作失败",
+ "8401005": "redis操作失败",
+ "8401006": "信令中携带的租户信息不存在",
+ "8401007": "信令中携带的用户信息不存在",
+ "8401008": "cmd_name填写错误",
+ "8401009": "sap不存在",
+ "8401010": "sap未注册",
+ "8401011": "此sap不存在call 模块",
+ "8401012": "pucid错误",
+ "8401013": "未知错误",
+ "8410000": "挂断",
+ "84100403": "POC服务器拒绝执行",
+ "84100404": "被叫不在线",
+ "84100481": "业务不存在",
+ "84100486": "呼叫遇忙",
+ "84100487": "呼叫请求终止",
+ "84100488": "特定资源不能接受",
+ "84100500": "POC服务器内部错误",
+ "84100603": "被叫拒绝",
+ "8410403": "POC服务器拒绝执行",
+ "8410404": "被叫不在线",
+ "8410408": "请求超时",
+ "8410480": "该终端不在线",
+ "8410481": "业务不存在",
+ "8410486": "呼叫遇忙",
+ "8410487": "呼叫请求终止",
+ "8410488": "特定资源不能接受",
+ "8410500": "POC服务器内部错误",
+ "8410603": "被叫拒绝",
+ "8410701": "硬加密不允许视频呼叫",
+ "8410702": "POC不允许视频加密呼叫",
+ "84200500": "添加动态组失败,请确认poc有可用的动态组",
+ "8420500": "添加动态组失败,请确认poc有可用的动态组",
+ "8500001": "tlv消息解析/反序列化失败",
+ "8500002": "tlv消息编码/序列化失败",
+ "8500003": "找不到呼叫会话信息",
+ "8500004": "未找到Sap",
+ "8500005": "未注册sipgw",
+ "8500006": "协议名不匹配",
+ "8500007": "未知错误",
+ "8500008": "摄像头未在sap上注册",
+ "8500009": "调度无系统权限",
+ "8600001": "未知错误",
+ "8600002": "未知用户",
+ "8600003": "未知组号",
+ "8600004": "用户不在线",
+ "8600005": "用户无权限",
+ "8600006": "用户不可用",
+ "8600007": "用户无响应",
+ "8600008": "被叫忙",
+ "8600009": "被叫不可达",
+ "8600010": "被叫不支持加密",
+ "8600011": "被叫拒绝呼叫",
+ "8600012": "呼叫失败",
+ "8600013": "请求的业务不支持",
+ "8600014": "组附属被拒绝",
+ "8600015": "遥晕遥毙失败",
+ "8600016": "动态重组失败",
+ "8800001": "未知错误",
+ "8800002": "未知用户",
+ "8800003": "未知组号",
+ "8800004": "用户不在线",
+ "8800005": "用户无权限",
+ "8800006": "用户不可用",
+ "8800007": "用户无响应",
+ "8800008": "被叫忙",
+ "8800009": "被叫不可达",
+ "8800010": "被叫不支持加密",
+ "8800011": "被叫拒绝呼叫",
+ "8800012": "呼叫失败",
+ "8800013": "请求的业务不支持",
+ "8800014": "组附属被拒绝",
+ "8800015": "遥晕遥毙失败",
+ "8800016": "动态重组失败",
+ "9000000": "接受",
+ "9000001": "部分接受",
+ "9000002": "通用拒绝",
+ "9000003": "被叫拒绝",
+ "9000004": "集群核心网拒绝",
+ "9000005": "集群核心网发起的注销",
+ "900001": "未分配(未分配)编号",
+ "900002": "没有到指定公交网络的路线",
+ "900003": "没有到达目的地的路线",
+ "900004": "发送特殊信息音",
+ "900005": "拨错的中继线前缀",
+ "900006": "不可接受的信道",
+ "9000064": "保留",
+ "9000065": "通用呼叫释放",
+ "9000066": "主叫发起的呼叫释放",
+ "9000067": "集群核心网强制呼叫释放",
+ "9000068": "超时释放",
+ "9000069": "被叫发起的呼叫释放",
+ "900007": "呼叫被授予并在既定渠道中传递",
+ "9000070": "调度台发起的取消视频推送",
+ "9000071": "集群核心网发起的取消视频推送",
+ "900008": "优先权",
+ "900009": "优先权-保留用于再利用的电路",
+ "9000128": "被叫不支持加密呼叫",
+ "9000129": "通用话权释放",
+ "9000130": "讲话者发起的话权释放",
+ "9000131": "集群核心网强制话权释放",
+ "9000132": "超时发起的话权释放",
+ "900016": "正常呼叫清除",
+ "900017": "用户正忙",
+ "900018": "没有用户响应",
+ "900019": "用户无应答(用户提醒)",
+ "9000192": "动态重组不可达",
+ "900020": "订阅者缺席",
+ "900021": "呼叫被拒绝",
+ "900022": "编号已更改",
+ "900023": "重定向到新目标",
+ "900025": "Exchange路由错误",
+ "9000256": "秘钥版本未启用",
+ "9000257": "无对应的秘钥版本",
+ "900026": "非选定用户清除",
+ "900027": "目的地故障",
+ "900028": "数字格式无效(地址不完整)",
+ "900029": "设施被拒绝",
+ "900030": "对状态查询的响应",
+ "900031": "正常,未指定",
+ "900034": "无电路/通道可用",
+ "900038": "网络脱离转发器",
+ "900039": "永久框架模式连接停止运行",
+ "900040": "永久框架模式连接运行",
+ "900041": "暂时性故障",
+ "900042": "交换设备拥塞",
+ "900043": "已丢弃访问信息",
+ "900044": "请求的电路/信道不可用",
+ "900046": "优先级呼叫被阻止",
+ "900047": "资源不可用,未指定",
+ "900049": "服务质量不可用",
+ "900050": "未预订所请求的设施",
+ "900053": "CUG内禁止传出呼叫",
+ "900055": "CUG内禁止来电",
+ "900057": "承载能力未认可",
+ "900058": "承载能力目前不可用",
+ "900062": "指定的传出访问信息和子脚本类不一致",
+ "900063": "服务或选项不可用,未指定",
+ "900065": "承载能力未实现",
+ "900066": "通道类型未实现",
+ "900069": "请求的设施未实施",
+ "900070": "只有受限的数字信息承载能力可用",
+ "9000752": "未授权系统,无法分配服务接入点",
+ "9000753": "有授权系统,找不到在线服务接入点",
+ "9000754": "调度员授权的服务接入点不在线",
+ "900079": "服务或选项未实现,未指定",
+ "900081": "调用引用值无效",
+ "900082": "已识别的频道不存在",
+ "900083": "挂起的呼叫存在,但此呼叫标识不存在",
+ "900084": "正在使用呼叫标识",
+ "900085": "没有暂停呼叫",
+ "900086": "具有所请求身份的呼叫已被清除",
+ "900087": "用户不是CUG成员",
+ "900088": "目标不兼容",
+ "900090": "不存在CUG",
+ "900091": "运输网络选择无效",
+ "900095": "无效消息,未指定",
+ "900096": "缺少强制性信息元素",
+ "900097": "消息类型不存在",
+ "900098": "错误的消息",
+ "900099": "参数不存在或未实现",
+ "900100": "内容无效",
+ "9001000": "rpc tlv消息解析/反序列化失败",
+ "9001001": "rpc tlv消息编码/序列化失败",
+ "9001002": "json反序列化失败",
+ "9001003": "json序列化失败",
+ "9001004": "数据库操作失败",
+ "9001005": "redis操作失败",
+ "9001006": "信令中携带的租户信息不存在",
+ "9001007": "信令中携带的用户信息不存在",
+ "9001008": "cmd_name填写错误",
+ "9001009": "sap不存在",
+ "900101": "消息与呼叫状态不兼容",
+ "9001010": "sap未注册",
+ "9001011": "此sap不存在call 模块",
+ "9001012": "pucid错误",
+ "9001013": "未知错误",
+ "900102": "定时器超时的恢复",
+ "900103": "参数不存在或未实现",
+ "900111": "协议错误",
+ "900127": "互通,未指定",
+ "900487": "发起人取消",
+ "900500": "崩溃",
+ "900501": "系统停机",
+ "900502": "非法响应",
+ "900503": "管理员请求",
+ "900600": "盲传输",
+ "900601": "有人陪伴的转移",
+ "900602": "分配超时",
+ "900603": "callee已经被联系上,但是不能或不想加入call",
+ "900604": "媒体超时",
+ "900605": "不被接受",
+ "9010000": "挂断",
+ "9010403": "POC服务器拒绝执行",
+ "9010404": "被叫不在线",
+ "9010480": "该终端不在线",
+ "9010481": "业务不存在",
+ "9010486": "呼叫遇忙",
+ "9010487": "呼叫请求终止",
+ "9010488": "特定资源不能接受",
+ "9010500": "POC服务器内部错误",
+ "9010603": "被叫拒绝",
+ "9010701": "硬加密不允许视频呼叫",
+ "9020500": "添加动态组失败,请确认poc有可用的动态组",
+ "200102": "遥晕失败",
+ "200103": "遥醒失败",
+ "52400066": "虚拟账号,不允许登录",
+ "52400067": "踢出虚拟账号",
+ "7500700": "信道繁忙",
+ "08410000+702": "POC不允许视频加密呼叫",
+ "8410462": "POC服务器拒绝执行",
+ "53800018": "话权空闲定时器超时释放",
+ "53800019": "最大呼叫时长定时器超时释放呼叫",
+ "53800020": "话权服务异常重启,释放呼叫",
+ "52400044": "从Redis获取License信息失败",
+ "52400055": "超过可登录的授权数",
+ "52400068": "登录客户端登陆类型错误",
+ "52400069": "License无效",
+ "7500701": "呼叫被打断",
+ "2200001": "XPT请求命令错误",
+ "2200002": "XPT解析信令出错",
+ "2200003": "XPT Sap状态错误",
+ "2200004": "XPT没有找到对应的Sap",
+ "2200005": "XPT用户验证错误",
+ "2200006": "XPT没有找到设备或设备没在线",
+ "2200007": "XPT操作缓存错误",
+ "2200101": "XPT监听错误",
+ "2200202": "XPT呼叫繁忙",
+ "2200203": "XPT呼叫类型错误",
+ "2200204": "XPT呼叫超时",
+ "2200205": "XPT呼叫状态错误",
+ "2200206": "XPT呼叫结束",
+ "2200207": "XPT呼叫监听失败",
+ "2200208": "XPT呼叫话权申请错误",
+ "2200209": "XPT呼叫请求错误",
+ "2200210": "XPT信道类型错误",
+ "2200211": "XPT没有找到另一个时隙",
+ "2200212": "XPT创建媒体失败",
+ "2200301": "XPT短信错误",
+ "2200302": "XPT短信参数错误",
+ "2200303": "XPT短信信道繁忙",
+ "2200304": "XPT短信只读错误",
+ "2200305": "XPT短信低电量",
+ "2200306": "XPT短信解锁错误",
+ "2200307": "XPT短信没有回执",
+ "2200308": "XPT短信唤醒错误",
+ "2200309": "XPT短信内容错误",
+ "2200310": "XPT短信写拒绝错误",
+ "2200311": "XPT短信中断",
+ "2200401": "XPT GPS错误",
+ "2200501": "XPT RRS错误",
+ "2200601": "XPT紧急告警错误",
+ "2200701": "XPT信道错误",
+ "2200702": "XPT摇晕失败",
+ "2200703": "XPT摇醒失败",
+ "2200801": "XPT系统异常",
+ "2200802": "信道繁忙",
+ "2200803": "被叫繁忙",
+ "2200804": "相同呼叫,禁止下发",
+ "2200805": "组呼列表非法 ",
+ "2200806": "目标ID非法",
+ "2200807": "禁止发射",
+ "2200808": "数据中转台禁止下发",
+ "2200809": "寻呼无应答",
+ "2200810": "网络异常",
+ "2200811": "握手碰撞",
+ "54002031": "缺少必要字段",
+ "54002032": "模板不合规输入数据错误",
+ "52700011": "告警已取消或者已处理,请忽略",
+ "7500702": "系统不支持强拆",
+ "8420501": "非文本短信不支持加密",
+ "5600406": "被叫不支持该业务",
+ "52400070": "该用户被禁用",
+ "54100018": "网关重启挂断呼叫",
+ "52400071": "系统异常踢出调度",
+ "53300867": "媒体RPC调用失败",
+ "53300868": "媒体TCP调用失败",
+ "53300869": "媒体心跳RPC失败挂断",
+ "53300870": "媒体流控操作失败",
+ "53300871": "其他单独上拉清理挂断",
+ "53300865": "媒体webrtc建链失败挂断",
+ "53300866": "媒体IPC解析失败挂断",
+ "52400072": "非本级坐席不能登陆",
+ "53100006": "JSON消息解析失败",
+ "53100007": "消息发送失败",
+ "53100008": "GIS上拉失败",
+ "8420400": "发送多媒体短信失败",
+ "201010": "终端不在线",
+ "53500101": "获取会议信息失败",
+ "53500102": "获取会议成员失败",
+ "53500103": "创建源呼叫腿失败",
+ "53500104": "结束会议挂断呼叫",
+ "53500105": "三方挂断呼叫",
+ "53500106": "删除会议成员挂断",
+ "53500107": "未到会议时间",
+ "53500108": "删除会议挂断",
+ "53500109": "无主席挂断呼叫",
+ "53500110": "并入会议失败挂断",
+ "53500111": "成员无流超时挂断",
+ "53500112": "成员添加失败挂断",
+ "53500113": "非成员会议锁定禁止入会",
+ "53500114": "调度员离线挂断",
+ "53500115": "会控创建媒体失败",
+ "53500116": "会控更新媒体失败",
+ "53500117": "会控媒体RPC调用失败",
+ "53500118": "成员并入冲突挂断",
+ "53500119": "拨号入会添加成员失败",
+ "53500201": "设置麦克风状态失败",
+ "53500202": "设置摄像头状态失败",
+ "53500203": "普通成员无法禁言操作",
+ "53500204": "半双工讲话中无法解禁言其他人",
+ "53500205": "设置禁言操作失败",
+ "53500206": "普通成员无法全部禁言操作",
+ "53500207": "设置全部禁言操作失败",
+ "53500208": "普通成员无法静音操作",
+ "53500209": "设置静音操作失败",
+ "53500210": "普通成员无法指定成员发言",
+ "53500211": "半双工讲话中无法指定其他人发言",
+ "53500212": "指定成员发言失败",
+ "53500213": "普通成员无法取消成员发言",
+ "53500214": "取消成员发言失败",
+ "53500215": "普通成员无法设置布局",
+ "53500216": "设置当前布局失败",
+ "53500217": "普通成员无法设置当前页",
+ "53500218": "设置当前页失败",
+ "53500219": "普通成员无法拖动布局",
+ "53500220": "设置布局拖动失败",
+ "53500221": "普通成员无法设置轮询",
+ "53500222": "设置布局轮询失败",
+ "53500223": "其他人屏幕共享中",
+ "53500224": "屏幕共享操作失败",
+ "53500225": "普通成员无法结束会议",
+ "53500226": "重复结束会议",
+ "53500227": "取消非指定发言成员无效",
+ "53500228": "指定成员媒体流失败",
+ "53500229": "普通成员无法指定媒体流",
+ "53500230": "三方会控不支持指定媒体流",
+ "53500301": "rpc头反序列化失败",
+ "53500302": "rpc头序列化失败",
+ "53500303": "rpc序列化失败",
+ "53500304": "发消息给GUAL失败",
+ "53500305": "发消息给DUAL失败",
+ "53500306": "发消息给SDS失败",
+ "53500307": "操作会议表失败",
+ "53500308": "操作会议成员表失败",
+ "53500309": "操作会议redis失败",
+ "53500310": "操作会议成员redis失败",
+ "53500311": "锁操作失败",
+ "53500312": "未找到会议",
+ "53500313": "未找到会议成员",
+ "53500314": "会议进行中",
+ "53500315": "会议已取消",
+ "53500316": "会议已结束",
+ "53500317": "即时会议不能修改",
+ "53500318": "不是创建者,不能修改会议",
+ "53500319": "不是创建者,不能取消会议",
+ "53500320": "获取调度账号失败",
+ "53500321": "会议成员为空",
+ "53500322": "会议号码为空",
+ "53500323": "未找到操作者",
+ "53500324": "会议未开始",
+ "53500325": "会议已锁定",
+ "53500326": "普通成员不能设置",
+ "53500327": "cmd_name错误",
+ "53500328": "三方会议已创建,不能修改",
+ "53500329": "不能修改创建者角色",
+ "53500330": "未找到会议布局",
+ "53500331": "设置会议布局失败",
+ "53500332": "会议主题不能为空",
+ "53500333": "创建者不能被删除",
+ "53500334": "添加三方成员失败",
+ "53500335": "普通成员不能删除成员",
+ "53500336": "三方会议未到会议提醒时间不能入会",
+ "53500337": "会议状态不是进行中,不能允许成员举手",
+ "53500338": "成员未举手,不能允许和拒绝操作",
+ "53500339": "有成员正在讲话,请稍后再试",
+ "53500340": "成员超出最大个数",
+ "53500341": "三方会控未就绪,请稍后再试",
+ "52300020": "文件不存在",
+ "52400073": "账号被锁定",
+ "8422112": "被叫无权限",
+ "8411035": "被叫无响应",
+ "8420403": "被叫拒绝",
+ "8411098": "poc系统无流挂断",
+ "8415037": "主控系统拒绝",
+ "8411128": "被叫不支持加密",
+ "8800017": "不支持的操作",
+ "6300010": "不支持该功能",
+ "6000001": "发送给前置失败",
+ "6000002": "发送给GUAL失败",
+ "6000003": "构造sip消息失败",
+ "6000005": "参数错误",
+ "6000006": "呼叫会话已存在",
+ "6000007": "呼叫会话不存在",
+ "6000008": "呼叫会话状态错误",
+ "6000009": "不支持的命令字",
+ "6011000": "rpc序列化失败",
+ "6011002": "未知参数",
+ "6011012": "网关类型错误",
+ "6011013": "数据同步错误",
+ "6011015": "会控http请求错误 ",
+ "6011016": "puc会议不存在",
+ "6011017": "puc设备不存在",
+ "6011018": "puc会议已存在",
+ "6011019": "会议不存在",
+ "6011020": "网关db错误",
+ "6011021": "设备不存在",
+ "6011022": "会议用户id无效",
+ "6011023": "亿联组织不存在",
+ "6011024": "亿联终端号已存在",
+ "6011025": "被邀请第三方成员不在线",
+ "6011026": "被邀请第三方成员拒接",
+ "6011027": "被邀请第三方成员未知错误",
+ "8410258": "企业没开启加密配置",
+ "101010": "话权拒绝",
+ "101011": "DMR3DFSI不支持该功能",
+ "2101010": "EM4不支持该功能",
+ "9300009": "因设备下线而挂断",
+ "9300008": "实时预览失败",
+ "9300007": "无摄像头或不支持的视频编码",
+ "9300006": "设备未登录",
+ "9300005": "找不到API接口",
+ "202011": "当前服务接入点不支持该功能",
+ "8410704": "不支持上拉过程中对讲",
+ "8410703": "上拉对讲业务不存在",
+ "8420502": "创建动态组失败,POC动态组名称长度超过32个字节",
+ "600035": "不支持组成员查询",
+ "6000004": "解析sip sdp失败",
+ "6011028": "被叫号码不是IP",
+ "6000100": "未知错误",
+ "6000101": "无效消息",
+ "6000102": "网络错误",
+ "6000103": "无路由",
+ "6000104": "不存在此用户",
+ "6000105": "带宽不足",
+ "6000106": "被叫用户不存在",
+ "6000107": "主叫用户不存在",
+ "6000108": "网守无可用资源",
+ "6000109": "网守不可达",
+ "6000110": "无权限,资源不可用",
+ "6000111": "缺失通用媒体能力",
+ "6000112": "重定向远端",
+ "6000113": "本端重定向",
+ "6000114": "远端释放",
+ "6000115": "本端释放",
+ "6000116": "被叫端忙",
+ "6000117": "本端忙",
+ "6000118": "本端无资源",
+ "6000119": "远端未回应",
+ "6000120": "本端未回应",
+ "6000121": "远端拒绝",
+ "6000122": "本端拒绝",
+ "6000123": "远端拥塞",
+ "6000124": "本端拥塞",
+ "6000125": "未配置的远端地址",
+ "6000126": "被叫不可达",
+ "6000127": "远端处理超时",
+ "6000128": "无效的呼叫ID",
+ "6000129": "无效的远端标识",
+ "6000130": "远端不支持的协议版本",
+ "6000131": "号码格式错误",
+ "6000132": "号码缺失",
+ "6000133": "未被授权的呼叫",
+ "6000134": "用户名或密码错误",
+ "6000135": "请求了远端不支持的能力",
+ "6000136": "远端已过载",
+ "6000137": "非标准原因值",
+ "6000138": "协议组件内部错误",
+ "5200400": "设备通信异常或忙线,请稍后重试",
+ "9500003": "需要按指定的顺序进行修改",
+ "9500005": "连接数据库失败",
+ "9500006": "数据库执行失败",
+ "9500007": "任务已经发布所以不能删除",
+ "9500008": "没找到",
+ "9500009": "插入数据库失败",
+ "9500010": "从数据库中删除失败",
+ "9500011": "任务状态不能回滚",
+ "9500012": "编辑数据失败",
+ "9500013": "转换JSON失败",
+ "8800018": "请求被PDT终止",
+ "8411112": "被叫不支持",
+ "53400010": "自定义单次任务执行时间已过,无法创建",
+ "53700020": "呼叫callid重复",
+ "53400012": "将点名任务保存到数据库失败",
+ "53400013": "从数据库中删除点名任务失败",
+ "53400014": "从数据库中更新点名任务失败",
+ "53400015": "从数据库查询点名任务失败",
+ "53400016": "无法将指定的成员保存到数据库",
+ "53400017": "将点名成员更新到数据库失败",
+ "53400018": "从数据库中删除点名成员失败",
+ "53400019": "从数据库查询点名任务成员失败",
+ "53400020": "将点名记录保存到数据库失败",
+ "53400021": "将点名记录更新到数据库失败",
+ "53400022": "从数据库查询点名记录失败",
+ "53400023": "将成员记录保存到数据库失败",
+ "53400024": "将成员记录更新到数据库失败",
+ "53400025": "从数据库查询成员记录失败",
+ "53400026": "统计DB成员失败记录",
+ "53400027": "将所有成员的状态重置为数据库失败",
+ "53400028": "将成员序列号修改为DB失败",
+ "52400101": "登录令牌无效",
+ "52400102": "访问认证中心超时",
+ "52400103": "无关联调度账号",
+ "901010": "sap不存在",
+ "601005": "无线电基础设施过载",
+ "601006": "Tetra拒绝呼叫(6)不允许的业务关系",
+ "601007": "Tetra拒绝呼叫(7)不兼容的业务关系",
+ "601008": "Tetra拒绝呼叫(8)请求的服务不可用",
+ "601009": "Tetra拒绝呼叫(9)抢先资源请求",
+ "601010": "Tetra拒绝呼叫(10)无效CallID",
+ "601012": "Tetra拒绝呼叫(12)没有呼叫资源",
+ "601015": "Tetra拒绝呼叫(15)确认的服务未完成",
+ "601016": "Tetra拒绝呼叫(16)请求的来源有故障",
+ "601017": "Tetra拒绝呼叫(17)请求的资源未知",
+ "601018": "Tetra拒绝呼叫(18)请求的资源处于非活动状态",
+ "601019": "Tetra拒绝呼叫(19)请求的资源正在用于另一个呼叫",
+ "601020": "Tetra拒绝呼叫(20)连接因小区重选而断开",
+ "601021": "Tetra拒绝呼叫(21)连接因为重复建立呼叫而断开",
+ "601023": "Tetra拒绝呼叫(23)未知的Tetra ID",
+ "601024": "Tetra拒绝呼叫(24)补充服务断开连接",
+ "601025": "Tetra拒绝呼叫(25)为外部用户指定的编号未知",
+ "601026": "Tetra拒绝呼叫(26)其他用户恢复呼叫未成功",
+ "601027": "Tetra拒绝呼叫(27)不正确的通信类型",
+ "601029": "Tetra拒绝呼叫(29)未知的虚拟目的地",
+ "601032": "Tetra拒绝呼叫(32)未知的呼叫ID",
+ "601043": "Tetra拒绝呼叫(43)A-CAPI服务器内部原因挂断",
+ "601045": "Tetra拒绝呼叫(45)不支持RTP载荷类型",
+ "601046": "Tetra拒绝呼叫(46)不支持该音频资源类型",
+ "301011": "当前服务接入点不支持全呼",
+ "52700013": "短信回执列表为空",
+ "52700014": "创建聊天组时成员不能为空",
+ "52700015": "聊天组成员为空",
+ "52700016": "二人聊天组不能添加成员",
+ "52700017": "操作聊天组表失败",
+ "52700018": "操作聊天组成员表失败",
+ "52700019": "操作聊天组redis失败",
+ "52700020": "操作聊天组成员redis失败",
+ "52700021": "操作锁失败",
+ "52700022": "未找到聊天组",
+ "52700023": "未找到聊天成员",
+ "52700024": "未找到聊天组创建者",
+ "52700025": "未找到操作者",
+ "52700026": "聊天组已解散",
+ "52700027": "聊天组成员已退出",
+ "52700028": "未找到要删除的成员",
+ "52700029": "添加聊天组成员不能为空",
+ "52700030": "操作者没有权限",
+ "52700031": "聊天组已删除",
+ "52700032": "二人聊天组不能解散",
+ "52700033": "操作聊天组消息失败",
+ "52700034": "分页失败",
+ "53300874": "添加被视频上拉成员失败",
+ "53300875": "添加被视频上拉成员已存在",
+ "53100016": "设置设备最小订阅周期不应小于全网最小订阅周期",
+ "52400076": "没有权限登录该平台",
+ "9700012": "请求被终止"
+ },
+ "info": {
+ "item_name": "融合通信平台示例与对接帮助",
+ "title": "WEBPUC"
+ }
+}
\ No newline at end of file
diff --git a/src/views/consultation/demo.vue b/src/views/consultation/demo.vue
new file mode 100644
index 0000000..aaf8759
--- /dev/null
+++ b/src/views/consultation/demo.vue
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+
+ 新增
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/consultation/draggerAble.vue b/src/views/consultation/draggerAble.vue
new file mode 100644
index 0000000..507ccb4
--- /dev/null
+++ b/src/views/consultation/draggerAble.vue
@@ -0,0 +1,351 @@
+
+
+
+ 无人机视频
+ 音频
+
+
+
+
+ {{ item.alias || item.number }}
+
+
+
+
+
+
+
+ 话权
+ 挂断
+
+
+
+
+
+
+
+
diff --git a/src/views/consultation/hooks/axios.ts b/src/views/consultation/hooks/axios.ts
new file mode 100644
index 0000000..6b3741e
--- /dev/null
+++ b/src/views/consultation/hooks/axios.ts
@@ -0,0 +1,46 @@
+import axios from 'axios';
+import { Message } from '@arco-design/web-vue';
+import { showErrorMsgDesc } from '@/hooks/error';
+
+const $axios = axios.create();
+
+$axios.defaults.timeout = 50000;
+let options = {};
+$axios.interceptors.request.use(
+ (config) => {
+ options = config;
+ // const { headers } = config;
+
+ return config;
+ },
+ (error) => {
+ console.info('request error', error);
+ return Promise.reject(error);
+ }
+);
+$axios.interceptors.response.use(
+ (response) => {
+ const { result, desc, msg } = response.data;
+ // @ts-ignore
+ const { isCatch } = options;
+ if (isCatch) return response.data;
+ if (result && result !== 0) {
+ showErrorMsgDesc(result, desc || msg);
+ return {};
+ }
+ return response.data;
+ },
+ (error) => {
+ // eslint-disable-next-line consistent-return
+ return new Promise((resolve, reject) => {
+ // @ts-ignore
+ const { isCatch } = options;
+ console.info('response error', JSON.stringify(error), isCatch);
+ if (isCatch) return reject(error);
+ Message.error(error.message);
+ resolve('');
+ });
+ }
+);
+
+export default $axios;
diff --git a/src/views/consultation/hooks/callingNotification.js b/src/views/consultation/hooks/callingNotification.js
new file mode 100644
index 0000000..8cde535
--- /dev/null
+++ b/src/views/consultation/hooks/callingNotification.js
@@ -0,0 +1,27 @@
+import { h } from 'vue';
+import { ElNotification} from "element-plus";
+import { IconClose } from "element-plus"
+import Content from '@/views/consultation/components/content.vue';
+import Footer from '@/views/consultation/components/footer.vue';
+import { formatShowNameFin } from '@/views/consultation/utils/format-show-name';
+
+export default function handleCallingNotification(propsObj) {
+ const { callInfo, text } = propsObj;
+ const { calling, answer = 'answer', hangUp = 'hang up' } = text;
+ ElNotification.info({
+ id: callInfo.call_id,
+ position: 'bottom-left',
+ closable: true,
+ closeIconElement: () => {
+ return h(IconClose);
+ },
+ title: () =>h(Content, {
+ callInfo,
+ calling,
+ getName: formatShowNameFin( callInfo.caller_alias, callInfo.caller_number),
+ }),
+ message: () =>h(Footer, { callInfo, answer, hangUp }),
+ duration: 0,
+ style: { width: '260px' },
+ });
+}
diff --git a/src/views/consultation/hooks/error.ts b/src/views/consultation/hooks/error.ts
new file mode 100644
index 0000000..4d84858
--- /dev/null
+++ b/src/views/consultation/hooks/error.ts
@@ -0,0 +1,57 @@
+import { h } from 'vue';
+import { Notification } from '@arco-design/web-vue';
+import { Random } from 'mockjs';
+import { $i18n } from '@/locale';
+
+/*
+ * 使用示例:
+ * import { showErrorMsgDesc } from '@/hooks/error';
+ * showErrorMsgDesc('2101006', 'HBP service run error', '出错了');
+ * showErrorMsgDesc('2101006', 'HBP service run error');
+ * showErrorMsgDesc('2101006');
+ * showErrorMsgDesc('77778888');
+ * */
+
+export const showErrorMsgDesc = (code = '', desc = '', msg = '') => {
+ const id = `note_msg_${Random.guid()}`;
+ const existI18nMsg = $i18n.global.t(`errorCode.${code}`);
+ Notification.error({
+ id,
+ class: 'notification-center-message',
+ closable: true,
+ duration: 15000,
+ showIcon: true,
+ style: {
+ 'width': '500px',
+ 'padding': '10px 20px',
+ 'align-items': 'center',
+ },
+ title: () => {
+ const titTxt = msg || existI18nMsg;
+ return h('span', [
+ h('span', titTxt),
+ h(
+ 'a',
+ {
+ style: {
+ 'margin-left': '16px',
+ 'font-size': '14px',
+ 'color': '#f53f3f',
+ },
+ onClick: () => {
+ Notification.error({
+ id,
+ title: titTxt,
+ content: desc,
+ });
+ },
+ },
+ desc ? $i18n.global.t('error.code.detail') : ''
+ ),
+ ]);
+ },
+ content: () => h('div'),
+ });
+};
+
+export default null;
diff --git a/src/views/consultation/hooks/loading.ts b/src/views/consultation/hooks/loading.ts
new file mode 100644
index 0000000..a6f2768
--- /dev/null
+++ b/src/views/consultation/hooks/loading.ts
@@ -0,0 +1,16 @@
+import { ref } from 'vue';
+
+export default function useLoading(initValue = false) {
+ const loading = ref(initValue);
+ const setLoading = (value: boolean) => {
+ loading.value = value;
+ };
+ const toggle = () => {
+ loading.value = !loading.value;
+ };
+ return {
+ loading,
+ setLoading,
+ toggle,
+ };
+}
diff --git a/src/views/consultation/hooks/locale.ts b/src/views/consultation/hooks/locale.ts
new file mode 100644
index 0000000..d1d5650
--- /dev/null
+++ b/src/views/consultation/hooks/locale.ts
@@ -0,0 +1,21 @@
+import { computed } from 'vue';
+import { $i18n, loadLocaleMessages, setI18nLanguage } from '@/locale';
+import { Message } from '@arco-design/web-vue';
+
+export default function useLocale() {
+ const currentLocale = computed(() => {
+ return $i18n.global.locale;
+ });
+ const changeLocale = (value: string) => {
+ localStorage.setItem('arco-locale-webPuc', value);
+ loadLocaleMessages($i18n, value).then(() => {
+ setI18nLanguage($i18n, value);
+
+ Message.success($i18n.global.t('navbar.action.locale'));
+ });
+ };
+ return {
+ currentLocale,
+ changeLocale,
+ };
+}
diff --git a/src/views/consultation/hooks/recorder.js b/src/views/consultation/hooks/recorder.js
new file mode 100644
index 0000000..397060f
--- /dev/null
+++ b/src/views/consultation/hooks/recorder.js
@@ -0,0 +1,138 @@
+import { ref } from 'vue';
+import { ElMessage } from "element-plus";
+import dayjs from 'dayjs';
+
+export default function useRecorder() {
+ const data = ref([]);
+ const recording = ref(false)
+ const paused = ref(false);
+ let mediaRecorder;
+ const localMicAudioStream = ref(null);
+ const audioStream = ref(null);
+
+ // 下载视频
+ const download = () => {
+ const blob = new Blob(data.value, { type: 'video/webm' });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ const name = dayjs().format('YYYYMMDDHHmmss');
+ a.href = url;
+ a.download = `video${name}.webm`;
+ a.click();
+ window.URL.revokeObjectURL(url);
+ data.value = [];
+ };
+ const muteRecorderAudio = (type, isMute) => {
+ let stream = null;
+ if (type === 'mic') {
+ stream = localMicAudioStream.value;
+ }
+ if (type === 'audio') {
+ stream = audioStream.value;
+ }
+ if (stream) {
+ stream.getAudioTracks().forEach((track) => {
+ track.enabled = !isMute;
+ });
+ }
+ };
+
+ // 初始化:创建mediaRecorder对象,获取音视频流,处理混流,定义mediaRecorder相关事件操作
+ const init = async (video, audio) => {
+ let mediaStream = await video.captureStream();
+ if (audio) {
+ const [videoCaptureStream, audioCaptureStream, localMicStream] =
+ await Promise.all([
+ video.captureStream(),
+ audio.captureStream(),
+ navigator.mediaDevices.getUserMedia({ audio: true }),
+ ]);
+ localMicAudioStream.value = localMicStream;
+ audioStream.value = audioCaptureStream;
+ const videoTrack = videoCaptureStream.getVideoTracks()[0];
+ /* 音频输入输出混流 */
+ const audioContext = new AudioContext();
+ if (localMicStream.getAudioTracks().length && audioCaptureStream.getAudioTracks().length) {
+ const localMicStreamNode = audioContext.createMediaStreamSource(localMicStream);
+ const audioCaptureStreamNode = audioContext.createMediaStreamSource(audioCaptureStream);
+ const mixedAudio = audioContext.createMediaStreamDestination();
+ localMicStreamNode.connect(mixedAudio);
+ audioCaptureStreamNode.connect(mixedAudio);
+ const mixedAudioTrack = mixedAudio.stream.getTracks()[0];
+ mediaStream = new MediaStream([mixedAudioTrack, videoTrack]);
+ }
+ }
+ mediaRecorder = await new MediaRecorder(mediaStream, {
+ mimeType: 'video/webm;codecs=vp8',
+ });
+
+ mediaRecorder.ondataavailable = (e) => {
+ if (e?.data?.size > 0) {
+ data.value.push(e.data);
+ }
+ };
+ mediaRecorder.onstart = () => {
+ startTime = Date.now();
+ recording.value = true;
+ paused.value = false;
+ ElMessage.success('开始录制');
+ };
+ mediaRecorder.onstop = () => {
+ endTime = Date.now();
+ recording.value = false;
+ paused.value = true;
+ ElMessage.success('结束录制');
+ download();
+ };
+ };
+
+ // 异常处理
+ const validateMedia = (cbName, cb) => {
+ if (mediaRecorder && mediaRecorder[cbName]) {
+ cb();
+ } else {
+ ElMessage.warning('录屏失败,未获取到媒体流');
+ }
+ };
+ // 开始录制
+ const start = () => {
+ mediaRecorder.start(100);
+ };
+ // 暂停
+ const pause = () => {
+ paused.value = true;
+ mediaRecorder.pause();
+ };
+
+ // 继续
+ const resume = () => {
+ paused.value = false;
+ mediaRecorder.resume();
+ };
+
+ // 结束录制
+ const stop = () => {
+ mediaRecorder.stop();
+ };
+
+ // 录制控制
+ const handleRecordVideo = async () => {
+ if (!recording.value) {
+ validateMedia('start', start);
+ } else {
+ validateMedia('stop', stop);
+ }
+ };
+ return {
+ init,
+ start,
+ pause,
+ resume,
+ stop,
+ download,
+ handleRecordVideo,
+ recording,
+ paused,
+ muteRecorderAudio,
+ };
+}
diff --git a/src/views/consultation/hooks/static.ts b/src/views/consultation/hooks/static.ts
new file mode 100644
index 0000000..1aec31d
--- /dev/null
+++ b/src/views/consultation/hooks/static.ts
@@ -0,0 +1,149 @@
+/* eslint-disable no-bitwise */
+
+import { DEVICE_STATE, DEVICE_TYPE } from '@/utils/contants';
+
+/* 获取执法记录仪数据 如果以后基础数据变多,可以考虑用pinia在页面加载是进行初始化控制 */
+const rvmTypes = [];
+
+export default function useStaticData() {
+ /**
+ * 获取设备状态值方法(第三版本)以v2逻辑为主,整合v1业务逻辑
+ * @param deviceInfo
+ * @returns
+ */
+ const getDeviceStatusNumberV3 = (deviceInfo): number => {
+ const {
+ status,
+ conference_guid,
+ number,
+ device_type,
+ basedata_id,
+ latitude,
+ longitude,
+ terminal_model,
+ } = deviceInfo;
+
+ let deviceState = 0;
+ // console.debug('getDeviceStatusNumberV3--->', deviceInfo);
+ const number_type = window.lemon.basedata.getNumberType(basedata_id);
+ /* 会议类型 */
+ if (conference_guid) return DEVICE_STATE.DEVICE_STATE_TYPE_CONFERENCE;
+ /* PSTN电话 */
+ if (number_type === DEVICE_STATE.DEVICE_STATE_TYPE_EXTERNAL)
+ return DEVICE_STATE.DEVICE_STATE_TYPE_EXTERNAL;
+
+ /* 设备类型 */
+ if (
+ number_type === window.lemon.NUMBER_TYPE.INDIVIDUAL ||
+ number_type === window.lemon.NUMBER_TYPE.ROIP_INDIVIDUAL
+ ) {
+ // 判断是否是执法记录仪
+ const isRvm = rvmTypes.includes(terminal_model);
+ // 判断是否是摄像头
+ const isCamera = device_type === DEVICE_TYPE.DEVICE_TYPE_CAMERA;
+ // 设备号码类型
+ // 执法记录仪
+ if (isRvm) {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_TYPE_RVM;
+ }
+ // 摄像头
+ else if (isCamera) {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_TYPE_CAMERA;
+ } else {
+ deviceState |= number_type;
+ }
+
+ // 设备号码状态(是否遥晕遥毙..)
+ switch (status?.lock_state) {
+ case 0: // 遥醒
+ deviceState |= DEVICE_STATE.DEVICE_STATE_LOCK_REVICE;
+ break;
+ case 1: // 遥晕
+ deviceState |= DEVICE_STATE.DEVICE_STATE_LOCK_STUN;
+ break;
+ case 3: // 遥毙
+ deviceState |= DEVICE_STATE.DEVICE_STATE_LOCK_KILL;
+ break;
+ default:
+ break;
+ }
+ /* 在线状态 */
+ // 摄像头设备
+ if (isCamera) {
+ if (status?.online === 1) {
+ // 根据经纬度数据确认是否上报GPS数据
+ deviceState |=
+ latitude !== 0 || longitude !== 0
+ ? DEVICE_STATE.DEVICE_STATE_GPS_REPORT_Y
+ : DEVICE_STATE.DEVICE_STATE_GPS_REPORT_N;
+ // 上线状态
+ deviceState |= DEVICE_STATE.DEVICE_STATE_ONLINE_ALL;
+ } else {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_ONLINE_NULL;
+ }
+ }
+ // 多模设备
+ else if (
+ number_type === DEVICE_STATE.DEVICE_STATE_TYPE_ROIP_GROUP ||
+ number_type === DEVICE_STATE.DEVICE_STATE_TYPE_ROIP_INDIVIDUAL
+ ) {
+ // 窄带在线
+ if (status.narrowband === window.lemon.ONLINE_STATE.ON) {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_ONLINE_NARROW;
+ }
+ // 宽带在线
+ if (status.broadband === window.lemon.ONLINE_STATE.ON) {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_ONLINE_BROAD;
+ }
+ }
+ // 单模设备 || 执法记录仪
+ else if (
+ number_type === DEVICE_STATE.DEVICE_STATE_TYPE_INDIVIDUAL ||
+ number_type === DEVICE_STATE.DEVICE_STATE_TYPE_GROUP ||
+ isRvm
+ ) {
+ // 单模只要有一个模式在线就可以认为是在线了
+ if (
+ status?.narrowband === window.lemon.ONLINE_STATE.ON ||
+ status?.broadband === window.lemon.ONLINE_STATE.ON
+ ) {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_ONLINE_ALL;
+ }
+ }
+
+ // 订阅
+ if (deviceInfo.is_subscribe === 1) {
+ deviceState |= DEVICE_STATE.DEVICE_STATE_SUBSCRIBE_Y;
+ }
+
+ // console.debug(
+ // 'getDeviceStatusNumberV3--->',
+ // number,
+ // deviceState.toString(2)
+ // );
+ return deviceState;
+ }
+
+ /* 组类型 */
+ if (
+ number_type === window.lemon.NUMBER_TYPE.GROUP ||
+ number_type === window.lemon.NUMBER_TYPE.ROIP_GROUP
+ ) {
+ // roip组在线图标
+ if (number_type === 23) {
+ return DEVICE_STATE.DEVICE_STATE_TYPE_ROIP_GROUP;
+ }
+ // 全呼组类型图标
+ if (number_type === 3) {
+ return DEVICE_STATE.DEVICE_STATE_TYPE_ALL_CALL;
+ }
+ // 其他组类型暂时返回默认组图标
+ return DEVICE_STATE.DEVICE_STATE_TYPE_GROUP;
+ }
+ return deviceState;
+ };
+
+ return {
+ getDeviceStatusNumberV3,
+ };
+}
diff --git a/src/views/consultation/memberMangerModal/components/SearchList.vue b/src/views/consultation/memberMangerModal/components/SearchList.vue
new file mode 100644
index 0000000..ca52852
--- /dev/null
+++ b/src/views/consultation/memberMangerModal/components/SearchList.vue
@@ -0,0 +1,5 @@
+
+ list
+
+
+
diff --git a/src/views/consultation/memberMangerModal/components/UserItem.vue b/src/views/consultation/memberMangerModal/components/UserItem.vue
new file mode 100644
index 0000000..1a8de1f
--- /dev/null
+++ b/src/views/consultation/memberMangerModal/components/UserItem.vue
@@ -0,0 +1,390 @@
+
+div(
+ :class="{user_item: true, user_item_active, [`user_item_${props.index}`]: true}"
+ @mouseenter="mouseEnterItem(props.index)"
+ @mouseleave="mouseLeaveItem"
+ )
+
+ .user_item_info
+ tableColAvatar(:style='{width: "36px", height: "36px"}' :name="''" :record="props.userInfo")
+ div.user_item_info_name
+ .name {{ getName(props.userInfo) }}
+ .type(v-if="getUserType") {{ getUserType }}
+
+ div(
+ v-if="props.meetingType === 'noMeet' && userInfo.member_state === CONFERENCE_MEMBER_STATE_CALLING"
+ style="color: rgba(12, 162, 255, 1);"
+ ) {{ $t('conference.control.calling') }}
+
+ div
+ .user_item_opration(v-if="props.meetingType === 'meeting'")
+ div.user_mask()
+ div.icon_box
+ WebPucSvgIcon(
+ v-show="userInfo.microphone_status !== MICROPHONE_STATUS_NO"
+ :name="isMicEnable ? 'microphone' : 'microphone_mute'")
+ WebPucSvgIcon(
+ v-show="userInfo.camera_status !== CAMERA_STATUS_NO"
+ :name="userInfo.camera_status === CAMERA_STATUS_OPEN ? 'camera' : 'camera_mute'")
+
+ a-dropdown(
+ v-if="globalStore.IS_CURRENT_MEETING_OWNER"
+ @select="(val) => reliveSelect(val)"
+ :popup-max-height="false"
+ v-model:popup-visible="reliveVisible"
+ position='br'
+ trigger="hover"
+ )
+ a-button {{ $t('meeting.modal.release_text') }}
+ icon-down
+ template(#content)
+ a-doption(
+ v-for="item in getReliveList"
+ :value="item.value"
+ :key="item.value") {{ item.label }}
+
+ a-dropdown(
+ @select="(val) => controlSelect(val)"
+ :popup-max-height="false"
+ v-model:popup-visible="controlVisible"
+ trigger="hover"
+ position='br')
+ a-button {{ $t('meeting.modal.control_text') }}
+ icon-down
+ template(#content)
+ a-doption(
+ v-for="item in getControlList"
+ :value="item.value"
+ :disabled="item.disabled"
+ :key="item.value") {{ item.label }}
+
+ .user_item_opration(v-if="props.meetingType === 'noMeet'")
+ div.user_mask()
+ a-dropdown(
+ @select="(val) => controlSelect(val)"
+ :popup-max-height="false"
+ v-model:popup-visible="reliveVisible"
+ position='br'
+ trigger="hover"
+ )
+ a-button {{ $t('report.tab.call') }}
+ icon-down
+ template(#content)
+ a-doption(
+ v-for="item in getNoMeetOperate"
+ :value="item.value"
+ :key="item.value") {{ item.label }}
+
+
+
+
+
diff --git a/src/views/consultation/memberMangerModal/index.vue b/src/views/consultation/memberMangerModal/index.vue
new file mode 100644
index 0000000..72ab089
--- /dev/null
+++ b/src/views/consultation/memberMangerModal/index.vue
@@ -0,0 +1,834 @@
+
+a-modal(
+ v-model:visible="visible"
+ title-align="start"
+ class="userMangeModal"
+ width="648px"
+ :title="`${$t('meeting.modal.user.title')} (${userList.length})`"
+ popup-container=".arco-layout-content"
+ :mask="false"
+ unmount-on-close
+ draggable
+ @close="closeFn"
+ @open="fetchMemberList")
+ a-space(direction="vertical" fill)
+ a-space(direction="vertical" fill)
+ a-button(@click="invitVisible = true") {{ $t('conference.components.media.footer.defaultBtns.invitingAttendees') }}
+
+ a-tabs(
+ default-active-key="1"
+ class="userMange_tab"
+ v-model:active-key="tabVal")
+
+ a-tab-pane(key="1" :title="`${$t('conference.member.present')} (${meetingMembers.length})`")
+ .user_list
+ user-item(
+ v-for="(item, index) in meetingMembers"
+ :key="`present_${item.basedata_id}`"
+ :userInfo="item"
+ :index="index"
+ :currentIndex="currentIndex"
+ :isShowType="true"
+ meetingType="meeting"
+ @reliveSelect="(params) => meetingControlSelect(params, 0)"
+ @controlSelect="(params) => meetingControlSelect(params, 1)"
+ @changeCurrentIndex="changeCurrentIndex")
+ div.footer_btn
+ a-button.btn(@click="() => setAllMemberProhibition(MICROPHONE_STATUS_OPEN)") {{ $t('conference.control.allBan') }}
+ a-button.btn(@click="() => setAllMemberProhibition(MICROPHONE_STATUS_CLOSE)") {{ $t('conference.control.openAllBan') }}
+
+ a-tab-pane(key="2" :title="`${$t('conference.member.absent')} (${notMeetingMembers.length})`")
+ .user_list
+ user-item(
+ v-for="(item, index) in notMeetingMembers"
+ :key="`absent_${item.basedata_id}`"
+ :userInfo="item"
+ :index="index"
+ :currentIndex="currentIndex"
+ :isShowType="true"
+ meetingType="noMeet"
+ @reliveSelect="(params) => noMeetControlSelect(params, 0)"
+ @controlSelect="(params) => noMeetControlSelect(params, 1)"
+ @changeCurrentIndex="changeCurrentIndex")
+ .user_footer
+
+
+a-modal(
+ v-model:visible="invitVisible"
+ title-align="start"
+ width="648px"
+ :title="`${$t('conference.components.media.footer.defaultBtns.invitingAttendees')} (${tableData.length})`"
+ :mask="false"
+ popup-container=".arco-layout-content"
+ unmount-on-close
+ @close="onInvitModalClose"
+ @ok="addMember")
+ a-space(fill style="margin-bottom: 10px")
+ a-input-search(v-model="memberNumber")
+ a-button(
+ shape="circle"
+ @click="addMemberByNumber")
+ template(#icon)
+ icon-plus
+
+ a-table(
+ v-model:selectedKeys="selectedKeys"
+ row-key="rowKey"
+ :data="tableData"
+ :columns="rightColumns"
+ :pagination="false"
+ :scroll="{ y: '100%' }"
+ @dragover="(e) => e.preventDefault()"
+ @drop="handleDrop")
+ template(#name="{ record }") {{ record.alias || record.number }}
+ template(#optional="{ record }")
+ icon-close(class="iconClose"
+ @click="() => deleteSelection(record)")
+
+a-modal(
+ v-model:visible="reNnameVisible"
+ title-align="start"
+ width="648px"
+ :title="`${$t('conference.control.reName')}`"
+ :mask="true"
+ popup-container=".arco-layout-content"
+ unmount-on-close
+ @ok="modifyMemberNickname")
+
+
+
+
+
+
+
+
diff --git a/src/views/consultation/sdk/baseData.js b/src/views/consultation/sdk/baseData.js
new file mode 100644
index 0000000..51ad4a5
--- /dev/null
+++ b/src/views/consultation/sdk/baseData.js
@@ -0,0 +1,562 @@
+
+export default function useBaseDataModule() {
+ /**
+ *
+ * @param param
+ * @returns
+ */
+ const getSystemOrg = (param) => {
+ return window.lemon.basedata.fetchSystemOrg(param);
+ };
+ /**
+ * request devices in special organization
+ * @param param
+ * @returns
+ */
+ const getDeviceList = (param)=> {
+ return window.lemon.basedata.fetchDeviceList(param);
+ };
+ /**
+ * request common groups in special organization,if key_word is not undefind,search common groups with key_word
+ * @param param
+ * @returns
+ */
+ const getGroupList = (param)=> {
+ return window.lemon.basedata.fetchGroupList(param);
+ };
+ /**
+ * get all members in static group
+ */
+ const getGroupMembers = (group_basedata_id) => {
+ return window.lemon.basedata.fetchGroupMember({
+ basedata_id: group_basedata_id,
+ });
+ };
+ /**
+ * request all dispatchers
+ * @param filterSelf if exclude self,default true
+ * @returns
+ */
+ const getDispatcherList = (filterSelf)=> {
+ return window.lemon.basedata.fetchDispatcherList(filterSelf);
+ };
+
+ /**
+ * request all cross patch group from server
+ * @returns
+ */
+ const getCrosspatchList = ()=> {
+ return window.lemon.basedata.fetchCrosspatch();
+ };
+ /**
+ * create crosspatch,member could froms different system
+ * @param number new crosspatch's number
+ * @param alias new crosspatch's alias
+ * @param member_list new crosspatch's mmebers
+ * @returns
+ */
+ const createCrosspatch = (
+ number,
+ alias,
+ member_list
+ ) => {
+ return window.lemon.basedata.createCrosspatch({
+ number,
+ alias,
+ member_list,
+ });
+ };
+
+ /**
+ *
+ * @param record crosspatch's info
+ * @returns
+ */
+ const updateCrosspatch = (record) => {
+ return window.lemon.basedata.updateCrosspatch(record);
+ };
+ /**
+ *
+ * @param guid
+ * @param enable 1 enbale,0 disenable
+ */
+ const setCrosspatchEnabled = (guid, enable) => {
+ return window.lemon.basedata.updateCrosspatchActiveStatus({
+ guid,
+ active: enable ? 1 : 0,
+ });
+ };
+ /**
+ *
+ * @param guid crosspatch's guid
+ * @returns
+ */
+ const deleteCrosspatch = (guid) => {
+ return window.lemon.basedata.deleteCrosspatch({ guid });
+ };
+ /**
+ *
+ * @returns
+ */
+ const getDynamicGroupList = ()=> {
+ return window.lemon.basedata.fetchDynamicGroupList();
+ };
+ /**
+ *
+ * @param param
+ * @returns
+ */
+ const createDynamicGroup = (param)=> {
+ return window.lemon.basedata.createDynamicGroup({
+ alias: param.alias,
+ member_list: param.members,
+ encryption: 1,
+ });
+ };
+ /**
+ *
+ * @param record
+ * @returns
+ */
+ const getDynamicGroupMember = (record) => {
+ // return window.lemon.basedata.fetchDynamicGroupMember(record);
+ return window.lemon.basedata.fetchDynamicGroupMember({
+ guid: record.guid,
+ number: record.number,
+ basedata_id: record.basedata_id,
+ alias: record.alias,
+ });
+ };
+ /**
+ *
+ * @param basedata_id
+ * @returns
+ */
+ const isConference = (basedata_id) => {
+ return window.lemon.basedata.getNumberType(basedata_id);
+ };
+ /**
+ * remove conference'memnber
+ * @param conference_guid
+ * @param member_guid
+ * @returns
+ */
+ const removeConferenceMember = (
+ conference_guid,
+ member_guid
+ ) => {
+ return window.lemon.basedata.removeConferenceMember({
+ conference_guid,
+ member_guid,
+ });
+ };
+ /**
+ *
+ * @param param
+ * @returns
+ */
+ const updateDynamicGroup = (param) => {
+ return window.lemon.basedata.updateDynamicGroup(param);
+ };
+ /**
+ * @param data
+ * @param data.guid gorup's guid
+ * @param data.basedata_id gorup's basedata_id
+ * @returns
+ */
+ const deleteDynamicGroup = (data) => {
+ return window.lemon.basedata.deleteDynamicGroup({
+ guid: data.guid,
+ basedata_id: data.basedata_id,
+ });
+ };
+ /**
+ * add member to dynamic group
+ * @param group_guid
+ * @param mmeber_guid
+ * @param member_basedata_id
+ * @param member_number
+ * @returns
+ */
+ const addDynamicGroupMember = (
+ group_guid,
+ mmeber_guid,
+ member_basedata_id,
+ member_number
+ ) => {
+ return window.lemon.basedata.addDynamicGroupMember({
+ dgna_guid: group_guid,
+ target_guid: mmeber_guid,
+ target_basedata_id: member_basedata_id,
+ target_number: member_number,
+ });
+ };
+ /**
+ * remove dynamic group's member
+ * @param group_guid
+ * @param mmeber_guid guid of member in group,not guid of member object
+ * @param member_basedata_id
+ * @returns
+ */
+ const removeDynamicGroupMember = (
+ group_guid,
+ mmeber_guid,
+ member_basedata_id
+ ) => {
+ return window.lemon.basedata.removeDynamicGroupMember({
+ guid: group_guid,
+ member_guid: mmeber_guid,
+ basedata_id: member_basedata_id,
+ });
+ };
+ /**
+ * create a conference
+ * @param number conference'number
+ * @param alias conference'alias
+ * @param member_list conference'members
+ */
+ const createConference = (
+ number,
+ alias,
+ member_list
+ ) => {
+ return window.lemon.basedata.createConference({
+ number,
+ alias,
+ member_list,
+ });
+ };
+ /**
+ * update conference info,
+ * @param record conference object
+ * @returns
+ */
+ const updateConference = (record) => {
+ return window.lemon.basedata.updateConference(record);
+ };
+
+ /**
+ * get all member of conference
+ * @param guid
+ * @returns
+ */
+ const getConferenceMember = (guid) => {
+ return window.lemon.basedata.fetchConferenceMember({ guid });
+ };
+
+ /**
+ * get all ThirdConference
+ * @returns
+ */
+ const getThirdConference = () => {
+ return window.lemon.basedata.fetchThirdConference();
+ };
+ /**
+ *
+ * @param number new number
+ * @param alias
+ * @param system_id
+ */
+ const createThirdConference = (
+ number,
+ alias,
+ system_id
+ ) => {
+ return window.lemon.basedata.createThirdConference({
+ number,
+ alias,
+ system_id,
+ });
+ };
+ /**
+ *
+ * @param record ThirdConference object
+ * @returns
+ */
+ const updateThirdConference = (record) => {
+ return window.lemon.basedata.updateThirdConference(record);
+ };
+
+ /**
+ * delete Third Conference
+ * 删除第三方会议
+ * @param guid
+ * @param basedata_id
+ * @param number
+ * @returns
+ */
+ const deleteThirdConference = (
+ guid,
+ basedata_id,
+ number
+ ) => {
+ return window.lemon.basedata.deleteThirdConference({
+ guid,
+ basedata_id,
+ number,
+ });
+ };
+
+ /**
+ * get systemPatch List
+ * 获取系统派接列表
+ * @returns
+ */
+ const getSystemPatchList = () => {
+ return window.lemon.basedata.fetchSystemPatchList();
+ };
+ /**
+ * get systemPatch List
+ * 获取系统派接列表
+ * @returns
+ */
+ const getSystemPatchMember = (record) => {
+ return window.lemon.basedata.fetchSystemPatchMember({
+ syspatch_guid: record.guid,
+ number: record.number,
+ basedata_id: record.basedata_id,
+ alias: record.alias,
+ });
+ };
+
+ /**
+ * create system patch
+ * 创建派接组
+ * @param param
+ * @returns
+ */
+ const createSystemPatch = (param)=> {
+ return window.lemon.basedata.createSystemPatch({
+ alias: param.alias,
+ member_list: param.members,
+ encryption: 1,
+ });
+ };
+
+ /**
+ * 删除派接组
+ * delete SystemPatch
+ * @param guid
+ * @param basedata_id
+ * @param number
+ * @returns
+ */
+ const deleteSystemPatch = (guid, basedata_id) => {
+ return window.lemon.basedata.deleteSystemPatch({
+ syspatch_guid: guid,
+ basedata_id,
+ });
+ };
+
+ /**
+ *
+ * @param param
+ * @returns
+ */
+ const updateSystemPatch = (param) => {
+ return window.lemon.basedata.updateSystemPatch({
+ syspatch_guid: param.guid,
+ number: param.number,
+ basedata_id: param.basedata_id,
+ alias: param.alias,
+ encryption: param.encryption,
+ });
+ };
+
+ /**
+ * add member to system patch
+ * 系统派接组添加成员
+ * @param group_guid
+ * @param mmeber_guid
+ * @param member_basedata_id
+ * @param member_number
+ * @returns
+ */
+ const addSystemPatchMember = (
+ group_guid,
+ mmeber_guid,
+ member_basedata_id,
+ member_number
+ ) => {
+ return window.lemon.basedata.addSystemPatchMember({
+ syspatch_guid: group_guid,
+ target_guid: mmeber_guid,
+ target_basedata_id: member_basedata_id,
+ target_number: member_number,
+ });
+ };
+ /**
+ * remove system patch member
+ * 系统派接组移除成员
+ * @param group_guid
+ * @param mmeber_guid guid of member in group,not guid of member object
+ * @param member_basedata_id
+ * @returns
+ */
+ const removeSystemPatchMember = (
+ group_guid,
+ mmeber_guid,
+ member_basedata_id
+ ) => {
+ return window.lemon.basedata.removeSystemPatchMember({
+ syspatch_guid: group_guid,
+ member_guid: mmeber_guid,
+ basedata_id: member_basedata_id,
+ });
+ };
+
+ // 模糊查询
+ const fuzzyQuery = (param = { key_word }) => {
+ return window.lemon.basedata.fuzzyQuery(param);
+ };
+
+ const getOnlineInfo = (org_id) => {
+ return window.lemon.basedata.queryDeviceOnlineInfo(org_id);
+ };
+
+ const addCrosspatchChangeListener = (updateCallBackFn) => {
+ return window.lemon.basedata.addCrosspatchChangeListener(updateCallBackFn);
+ };
+
+ const removeCrosspatchChangeListener = (callbackUpdateCrosspatchGuid) => {
+ return window.lemon.basedata.removeCrosspatchChangeListener(
+ callbackUpdateCrosspatchGuid
+ );
+ };
+
+ const addCrosspatchMemberChangeListener = (onMemberChange) => {
+ return window.lemon.basedata.addCrosspatchMemberChangeListener(
+ onMemberChange
+ );
+ };
+
+ const removeCrosspatchMemberChangeListener = (membercbid) => {
+ return window.lemon.basedata.removeCrosspatchMemberChangeListener(
+ membercbid
+ );
+ };
+
+ const addThirdConferenceChangeListener = (onThirdConferenceChange) => {
+ return window.lemon.basedata.addThirdConferenceChangeListener(
+ onThirdConferenceChange
+ );
+ };
+
+ const removeThirdConferenceChangeListener = (callbackUpdate3rdConfGuid) => {
+ return window.lemon.basedata.removeThirdConferenceChangeListener(
+ callbackUpdate3rdConfGuid
+ );
+ };
+ const addSystemPatchChangeListener = (onSystemPatchChange) => {
+ return window.lemon.basedata.addSystemPatchChangeListener(
+ onSystemPatchChange
+ );
+ };
+
+ const removeSystemPatchChangeListener = (callbackSystemPatchGuid) => {
+ return window.lemon.basedata.removeThirdConferenceChangeListener(
+ callbackSystemPatchGuid
+ );
+ };
+
+ // 遥晕
+ const deviceStun = (record) => {
+ return window.lemon.basedata.deviceStun({
+ basedata_id: record.basedata_id,
+ device_guid: record.guid,
+ });
+ };
+ // 遥醒
+ const deviceRevive = (record) => {
+ return window.lemon.basedata.deviceRevive({
+ basedata_id: record.basedata_id,
+ device_guid: record.guid,
+ });
+ };
+ // 遥毙
+ const deviceKill = (record) => {
+ return window.lemon.basedata.deviceKill({
+ basedata_id: record.basedata_id,
+ device_guid: record.guid,
+ });
+ };
+
+ // PTZ camera
+ // 云台控制
+ const deviceCtl = (record) => {
+ // start left move
+ window.lemon.basedata.deviceCtl({
+ basedata_id: record.basedata_id,
+ operate_type: 1,
+ operate_action: 1,
+ });
+
+ // stop left move
+ setTimeout(() => {
+ window.lemon.basedata.deviceCtl({
+ basedata_id: record.basedata_id,
+ operate_type: 2,
+ operate_action: 1,
+ });
+ }, 2000);
+ };
+
+ const getPucList = () => {
+ return window.lemon.basedata.fetchPucList();
+ };
+ const setBasedataPucId = (basedataPucId) => {
+ return window.lemon.basedata.setBasedataPucId({ puc_id: basedataPucId });
+ };
+
+ return {
+ getSystemOrg,
+ getDeviceList,
+ getGroupList,
+ getGroupMembers,
+ getDispatcherList,
+ getCrosspatchList,
+ fuzzyQuery,
+ getDynamicGroupList,
+ getDynamicGroupMember,
+ createDynamicGroup,
+ updateDynamicGroup,
+ deleteDynamicGroup,
+ isConference,
+ removeConferenceMember,
+ addDynamicGroupMember,
+ removeDynamicGroupMember,
+ createCrosspatch,
+ updateCrosspatch,
+ setCrosspatchEnabled,
+ deleteCrosspatch,
+ createConference,
+ updateConference,
+ getConferenceMember,
+ getThirdConference,
+ createThirdConference,
+ updateThirdConference,
+ deleteThirdConference,
+ getOnlineInfo,
+ addCrosspatchChangeListener,
+ addCrosspatchMemberChangeListener,
+ removeCrosspatchChangeListener,
+ removeCrosspatchMemberChangeListener,
+ addThirdConferenceChangeListener,
+ removeThirdConferenceChangeListener,
+ getSystemPatchList,
+ getSystemPatchMember,
+ deleteSystemPatch,
+ updateSystemPatch,
+ createSystemPatch,
+ addSystemPatchMember,
+ removeSystemPatchMember,
+ addSystemPatchChangeListener,
+ removeSystemPatchChangeListener,
+ deviceStun,
+ deviceRevive,
+ deviceKill,
+ getPucList,
+ setBasedataPucId,
+ deviceCtl,
+ };
+}
diff --git a/src/views/consultation/sdk/call.js b/src/views/consultation/sdk/call.js
new file mode 100644
index 0000000..021857f
--- /dev/null
+++ b/src/views/consultation/sdk/call.js
@@ -0,0 +1,558 @@
+
+import { ElMessage } from "element-plus";
+import mitt from 'mitt';
+import handleCallingNotification from '../hooks/callingNotification';
+
+let call_id;
+let hangup_event_cb_id;
+let force_hangup_event_cb_id;
+let answer_ack_cb_id;
+let incoming_cb_id;
+let floor_grant_cb_id;
+
+// Whether it is a pushVideoFile call
+// 是否为视频推送的呼叫
+let pushing_video = false;
+// monitor call list
+// 值守呼叫列表
+const monitor_call_list = [];
+
+const emitter = mitt();
+
+export default function useCallModule() {
+ // we allow only one call exist in demo.but actually,sdk supports more
+
+ /**
+ * make private vioce call,return nothing,receive result in callback
+ * This interface has been expanded to support makeGroupVoiceCall、makeDispatcherVoiceCall、makeConferenceVoiceCall、makeCrosspatchVoiceCall
+ * 这个接口已扩展,除了支持语音单呼外,还支持语音组呼、语音呼叫调度员、语音会议、群组呼叫。
+ * @param record who you wanna call
+ * @returns
+ */
+ const makeVoiceCall = (record ) => {
+ if (call_id) return;
+
+ window.lemon.call.makeVoiceCall({ basedata_id: record.basedata_id, hook_flag: 0 })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+ /**
+ * make private video call,call with vioce and video,return nothing,receive result in callback
+ * This interface has been expanded to support makeGroupVideoCall、makeDispatcherVideoCall、makeConferenceVideoCall
+ * 这个接口已扩展,除了支持视频单呼外,还支持视频组呼、视频呼叫调度员、视频会议
+ * @param record who you wanna call
+ * @returns
+ */
+ const makeVideoCall = (record) => {
+ if (call_id) return;
+ window.lemon.call.makeVideoCall({ basedata_id: record.basedata_id, video_frame_size: 3 })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+ const makeGroupVideoCall = (record) => {
+ if (call_id) return;
+ window.lemon.call.makeGroupVideoCall({ basedata_id: record.basedata_id, video_frame_size: 3 })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+ const makeGroupVoiceCall = (record) => {
+ if (call_id) return;
+ window.lemon.call.makeGroupVoiceCall({
+ basedata_id: record.basedata_id,
+ })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+
+ const makeCrosspatchVoiceCall = (record) => {
+ window.lemon.call.makeCrosspatchVoiceCall({ basedata_id: record.basedata_id })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+
+ /**
+ * 视频上拉
+ * make pure video call,only video, no voice
+ * @param record who you wanna call
+ * @returns
+ */
+ const pureVideoCall = (record) => {
+ if (call_id) return;
+ window.lemon.call.pullVideo({ basedata_id: record.basedata_id, hook_flag: 0 })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+ /**
+ * 环境监听
+ * @param record
+ */
+ const voiceDetect = (record) => {
+ window.lemon.call
+ .makeCall({
+ callee_guid: record.basedata_id,
+ attribute: {
+ call_type: 0,
+ call_mode: 0,
+ duplex_flag: 0,
+ ambience_flag: 1,
+ },
+ })
+ ?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+
+ /**
+ * 环境监视
+ * @param record
+ */
+ const videoDetect = (record) => {
+ window.lemon.call.makeCall({
+ callee_guid: record.basedata_id,
+ attribute: { call_type: 11, call_mode: 2, duplex_flag: 0, ambience_flag: 1 },
+ })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+ /**
+ * 音频会议
+ * @param record
+ */
+ const makeConferenceVoiceCall = (record) => {
+ window.lemon.call.makeConferenceVoiceCall({ basedata_id: record.basedata_id })?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+ /**
+ * 音视频会议
+ * @param record
+ */
+ const makeConferenceVideoCall = (record) => {
+ window.lemon.callmakeConferenceVideoCall({basedata_id: record.basedata_id})?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+
+ // 广播呼叫
+ // Broadcast Call
+ const makeBroadcastCall = (record) => {
+ window.lemon.call.makeCall({ callee_guid: record.basedata_id,attribute: { call_type: 3,call_mode: 0,},})?.then((resp) => {
+ call_id = resp.call_id;
+ });
+ };
+
+ /**
+ * hangup call
+ */
+ const hangup = (id) => {
+ console.log(id,'=====挂断');
+ window.lemon.call.hangupCall({ call_id: id || call_id })?.then(() => {
+ console.log('00000000000=====挂断');
+ call_id = undefined;
+ window.calling_conference = undefined;
+ })
+ .catch((err) => {
+ console.error('hangup call error,', err);
+ });
+};
+
+ /**
+ * 接听呼叫
+ * answer call
+ */
+ const answerCall = () => {
+ // Notification.remove(call_id);
+ window.lemon.call.answerCall({ call_id })?.then(() => {
+ // Notification.remove(call_id);
+ }).catch((err) => {
+ console.error('answer call error,', err);
+ });
+ };
+
+ // 禁麦
+ // mute the microphone
+ const setMuteMic = (mute) => {
+ return window.lemon.call.muteMic({
+ call_id,
+ is_mute: mute,
+ });
+ };
+
+ // 禁摄像头
+ // disable the camera
+ const setMuteCamera = (mute) => {
+ return window.lemon.call.muteCamera({
+ call_id,
+ is_mute: mute,
+ });
+ };
+ // 静音
+ // mute call
+ const setMuteCall = (mute) => {
+ return window.lemon.call.muteCall({
+ call_id,
+ is_mute: mute,
+ });
+ };
+
+ const removeMonitorCall = (callId) => {
+ const index = monitor_call_list.findIndex(
+ (item) => item.call_id === callId
+ );
+ if (index >= 0) {
+ monitor_call_list.splice(index, 1);
+ emitter.emit('monitorUpdate');
+ }
+ };
+
+ const getMonitorCallList = () => {
+ return monitor_call_list;
+ };
+
+ // 添加 挂断 回调
+ // After hanging up the call, you can receive a notification and process the style of the current page based on the notification
+ const registerhangupEvent = () => {
+ if (hangup_event_cb_id !== undefined) {
+ return;
+ }
+
+ hangup_event_cb_id = window.lemon.call.addHangupEvt((data) => {
+ if (data.call_id === call_id) {
+ // Notification.remove(call_id);
+ call_id = undefined;
+ window.calling_conference = undefined;
+ }
+
+ // pushVideoFile uninit
+ // 如果是视频推送的,挂断是反初始化一些东西。
+ if (pushing_video) {
+ window.video.src = undefined;
+ window.showVideo.value = false;
+ pushing_video = false;
+ window.videoViewRoot.style.display = 'none';
+ }
+ removeMonitorCall(data.call_id);
+ });
+ };
+
+ // 添加强拆事件
+ const registerForceHangupEvent = () => {
+ if (force_hangup_event_cb_id !== undefined) {
+ return;
+ }
+ force_hangup_event_cb_id = window.lemon.call.addForceHangupEvt((data) => {
+ // 目前强拆成功,都是走挂断通知事件。 当失败了,才走强拆事件通知。
+ if (data.result === 0) {
+ if (data.call_id === call_id) {
+ // Notification.remove(call_id);
+ call_id = undefined;
+ window.calling_conference = undefined;
+ }
+ removeMonitorCall(data.call_id);
+ } else {
+ // 强拆失败 fail
+ ElMessage.error(`errorCode.${data.result}`);
+ }
+ });
+ };
+
+ // 添加接听回调通知 代表呼叫建立
+ // receive the answer acknowledgement asynchronously after the call is established
+ const registerCallEstablishEvent = () => {
+ if (answer_ack_cb_id !== undefined) {
+ return;
+ }
+ answer_ack_cb_id = window.lemon.call.addAnswerAckEvt((data) => {
+ call_id = data.call_id;
+ // 接通后,视频推送的文件开始播放
+ if (pushing_video) {
+ window.videoViewRoot.style.display = 'unset';
+ window.showVideo.value = true;
+ window.video.play();
+ }
+ });
+ };
+
+ // 注册来电通知回调
+ // add the incoming call callback
+ const registerReceiveCallEvent = () => {
+ if (incoming_cb_id !== undefined) {
+ return;
+ }
+ incoming_cb_id = window.lemon.call.addIncomingEvt((session) => {
+ console.log('receive call------>', session);
+ call_id = session.call_id;
+ const callingReq = {
+ callInfo: session,
+ equipment: undefined,
+ text: {
+ calling: '来电',
+ answer: '接听',
+ hangUp: '挂断',
+ },
+ };
+ console.log('receive this------>', useCallModule());
+ if (session.listen_flag) {
+ // monitor call,auto answer call
+ // 值守的来电呼叫,自动接听
+ window.lemon.call.answerCall({ call_id: session.call_id });
+ monitor_call_list.push(session);
+
+ emitter.emit('monitorUpdate');
+ } else {
+ // normal call
+ // 正常来电,弹框询问接听
+ handleCallingNotification(callingReq);
+ }
+ });
+ };
+
+ // 申请话权
+ // apply floor
+ const applyFloor = ()=> {
+ console.info('try applyFloor,call_id=', call_id);
+ if (!call_id) {
+ console.warn('no call exits');
+ return undefined;
+ }
+ return window.lemon.floor
+ .applySpeak({ call_id })
+ ?.then((resp) => {
+ if (resp.result === 0) {
+ console.log('applyFloor request sucess');
+ } else {
+ ElMessage.error(`errorCode.${resp.result}`);
+ }
+ })
+ .catch((err) => {
+ console.error('applyFloor error,', err);
+ });
+ };
+
+ // 释放话权
+ // release floor
+ const releaseFloor = () => {
+ console.info('try releaseFloor,call_id=', call_id);
+ return window.lemon.floor
+ .releaseSpeak({ call_id })
+ ?.then((resp) => {
+ if (resp.result === 0) {
+ console.log('releaseSpeak request sucess');
+ } else {
+ ElMessage.error(`errorCode.${resp.result}`);
+ }
+ })
+ .catch((err) => {
+ console.error('releaseSpeak error,', err);
+ });
+ };
+
+ // add floor event
+ // 添加话权通知事件
+ const registerFloorGrantEvent = () => {
+ if (floor_grant_cb_id !== undefined) {
+ return;
+ }
+ floor_grant_cb_id = window.lemon.floor.addGrantEvt((grantInfo) => {
+ console.log('registerFloorGrantEvent', grantInfo);
+ if (grantInfo.result !== 0) {
+ ElMessage.error(`errorCode.${grantInfo.result}`);
+ }
+ });
+ };
+
+ // 强拆
+ // override the call
+ const forceHangupCall = (callId) => {
+ return window.lemon.call
+ .forceHangupCall({ call_id: callId || call_id })
+ ?.then((resp) => {
+ if (resp.result === 0) {
+ console.log('forceHangupCall request sucess');
+ } else {
+ ElMessage.error(`errorCode.${resp.result}`);
+ }
+ call_id = undefined;
+ window.calling_conference = undefined;
+ // console.log('2222233registerCallEstablishEven');
+ })
+ .catch((err) => {
+ console.error('forceHangupCall error,', err);
+ });
+ };
+ // 强插
+ // interrupt the call during monitoring
+ const forceApplySpeak = (callId) => {
+ return window.lemon.floor
+ .forceApplySpeak({ call_id: callId || call_id })
+ ?.then((resp) => {
+ if (resp.result === 0) {
+ console.log('forceApplySpeak request sucess');
+ call_id = callId;
+ } else {
+ ElMessage.error(`errorCode.${resp.result}`);
+ }
+ })
+ .catch((err) => {
+ console.error('forceApplySpeak error,', err);
+ });
+ };
+
+ /**
+ * 会议成员禁言
+ * mute or unmute a conference member
+ * @param param
+ * @param param.conference_basedata_id
+ */
+ const muteMemberInConference = ( conference_basedata_id, member_basedata_id, mute) => {
+ return window.lemon.call.conferenceMemberSpeakSet({
+ conference_call_id: call_id,
+ conference_basedata_id,
+ member_setting: {
+ member_basedata_id,
+ forbid: mute ? 1 : 0,
+ },
+ });
+ };
+
+ /**
+ * 视频推送
+ * select a local video file and play then push the stream to remote
+ * @param record
+ * @param file
+ * @returns
+ */
+ const pushVideoFile = (record, url) => {
+ if (call_id) return;
+ if (window.video) {
+ const canPlayListener = () => {
+ window.video.removeEventListener('canplay', canPlayListener);
+ // capture stream
+ const stream = (window.video)?.captureStream();
+ console.info('pushVideoFile,inited stream=', stream);
+ // register hook listner ,play the video when remote hooked
+ registerCallEstablishEvent();
+ // init the call
+ window.lemon.call
+ .pushVideoFile({
+ basedata_id: record?.basedata_id,
+ stream,
+ })
+ ?.then((resp) => {
+ pushing_video = true;
+ call_id = resp.call_id;
+ });
+ };
+
+ const endListener = () => {
+ console.info('pushVideoFile,video play end');
+ window.video.removeEventListener('ended', endListener);
+ hangup();
+ };
+ window.video.removeEventListener('ended', endListener);
+ console.info('pushVideoFile,add canplay Event Listener', canPlayListener);
+ window.video.addEventListener('canplay', canPlayListener);
+ console.info('pushVideoFile,add ended Event Listener', endListener);
+ window.video.addEventListener('ended', endListener);
+ window.video.autoplay = false;
+ window.video.src = url;
+ }
+ };
+
+ /**
+ * 视频转发
+ * share a exist call to another device
+ * @param record
+ * @param stop
+ * @returns
+ */
+ const forwardVideoCall = (record, stop) => {
+ console.info('try forwardVideoCall,call_id=', call_id);
+ if (!call_id) {
+ console.warn('no call exits,can not forward');
+ ElMessage.warning('no call exits');
+ return undefined;
+ }
+ return window.lemon.call
+ .forwardVideoCall({
+ basedata_id: record?.basedata_id,
+ call_id,
+ action: stop ? 1 : 0,
+ })
+ ?.then((resp) => {
+ if (resp.result === 0) {
+ console.log('forwardVideoCall request sucess');
+ } else {
+ ElMessage.error((`errorCode.${resp.result}`));
+ }
+ })
+ .catch((err) => {
+ console.error('forwardVideoCall error,', err);
+ });
+ };
+
+ const getEmitter = () => {
+ return emitter;
+ };
+
+ // call sdk unInit
+ const unInit = () => {
+ call_id = undefined;
+
+ if (hangup_event_cb_id) {
+ window.lemon.call.removeHangupEvt(hangup_event_cb_id);
+ hangup_event_cb_id = undefined;
+ }
+ if (force_hangup_event_cb_id) {
+ window.lemon.call.removeForceHangupEvt(force_hangup_event_cb_id);
+ force_hangup_event_cb_id = undefined;
+ }
+ if (answer_ack_cb_id) {
+ window.lemon.call.removeAnswerAckEvt(answer_ack_cb_id);
+ answer_ack_cb_id = undefined;
+ }
+ if (incoming_cb_id) {
+ window.lemon.call.removeIncomingEvt(incoming_cb_id);
+ incoming_cb_id = undefined;
+ }
+ if (floor_grant_cb_id) {
+ window.lemon.floor.removeGrantEvt(floor_grant_cb_id);
+ floor_grant_cb_id = undefined;
+ }
+ monitor_call_list.length = 0;
+ };
+
+ return {
+ makeVoiceCall,
+ makeVideoCall,
+ pureVideoCall,
+ registerhangupEvent,
+ registerReceiveCallEvent,
+ answerCall,
+ makeGroupVoiceCall,
+ makeGroupVideoCall,
+ makeBroadcastCall,
+ hangup,
+ voiceDetect,
+ videoDetect,
+ applyFloor,
+ releaseFloor,
+ setMuteCamera,
+ setMuteMic,
+ setMuteCall,
+ muteMemberInConference,
+ makeConferenceVoiceCall,
+ makeConferenceVideoCall,
+ makeCrosspatchVoiceCall,
+ registerCallEstablishEvent,
+ pushVideoFile,
+ forwardVideoCall,
+ forceHangupCall,
+ getMonitorCallList,
+ getEmitter,
+ forceApplySpeak,
+ registerFloorGrantEvent,
+ registerForceHangupEvent,
+ unInit,
+ };
+}
diff --git a/src/views/consultation/sdk/conference.js b/src/views/consultation/sdk/conference.js
new file mode 100644
index 0000000..5c6173f
--- /dev/null
+++ b/src/views/consultation/sdk/conference.js
@@ -0,0 +1,302 @@
+
+
+export default function useConfernceModule() {
+ /**
+ * 创建会议
+ */
+ const createConference = (data) => {
+ return window.lemon.conference.createConference(data);
+ };
+
+ /**
+ * 根据会议号获取会议信息
+ */
+ const getConferenceInfo = (data) => {
+ return window.lemon.conference.getConferenceInfo(data);
+ };
+
+ /**
+ * 更新会议
+ */
+ const updateConference = (data) => {
+ return window.lemon.conference.updateConference(data);
+ }
+
+ /**
+ * 更新会议备注
+ */
+ const updateConferenceRemark = (data) => {
+ return window.lemon.conference.updateConferenceRemark(data);
+ }
+
+ /**
+ * 删除会议
+ */
+ const deleteConference = (callback) => {
+ return window.lemon.conference.deleteConference(callback)
+ }
+
+ /**
+ * 取消会议
+ */
+ const cancelConference = (callback) => {
+ return window.lemon.conference.cancelConference(callback)
+ }
+
+ /**
+ * 添加创建会议通知回调
+ */
+ const addCreateListener = (callback) => {
+ return window.lemon.conference.addCreateListener(callback)
+ }
+
+ /**
+ * 删除创建会议通知回调
+ */
+ const removeCreateListener = (callback_id) => {
+ return window.lemon.conference.removeCreateListener(callback_id)
+ }
+
+ /**
+ * 添加会议开始前提醒回调
+ */
+ const addRemindListener = (callback) => {
+ return window.lemon.conference.addRemindListener(callback)
+ }
+
+ /**
+ * 删除会议开始前提醒回调
+ */
+ const removeRemindListener = (callback_id) => {
+ return window.lemon.conference.removeRemindListener(callback_id)
+ }
+
+ /**
+ * 添加删除会议通知回调
+ */
+ const addDeleteListener = (callback) => {
+ return window.lemon.conference.addDeleteListener(callback)
+ }
+
+ /**
+ * 移除删除会议通知回调
+ */
+ const removeDeleteListener = (callback_id) => {
+ return window.lemon.conference.removeDeleteListener(callback_id)
+ }
+
+ /**
+ * 获取会议列表
+ */
+ const fetchConferences = (data) => {
+ return window.lemon.conference.fetchConferences(data);
+ }
+
+ /**
+ * 添加会议成员
+ */
+ const addConferenceMember = (data) => {
+ return window.lemon.conference.addConferenceMember(data);
+ }
+
+ /**
+ * 删除会议成员
+ */
+ const deleteConferenceMember = (data) => {
+ return window.lemon.conference.deleteConferenceMember(data);
+ }
+
+ /**
+ * 获取会议成员列表
+ */
+ const fetchConferenceMembers = (data) => {
+ return window.lemon.conference.fetchConferenceMembers(data);
+ }
+
+ /**
+ * 添加新增会议成员回调
+ */
+ const addAddMemberListener = (callback) => {
+ return window.lemon.conference.addAddMemberListener(callback);
+ }
+
+ /**
+ * 移除新增会议成员回调
+ */
+ const removeAddMemberListener = (callback) => {
+ return window.lemon.conference.removeAddMemberListener(callback);
+ }
+
+ /**
+ * 移除删除会议成员回调
+ */
+ const addDeleteMemberListener = (callback) => {
+ return window.lemon.conference.addDeleteMemberListener(callback);
+ }
+
+ /**
+ * 移除删除会议成员回调
+ */
+ const removeDeleteMemberListener = (callback) => {
+ return window.lemon.conference.removeDeleteMemberListener(callback);
+ }
+
+ /**
+ * 添加修改会议回调
+ */
+ const addUpdateListener = (callback) => {
+ return window.lemon.conference.addUpdateListener(callback);
+ }
+
+ /**
+ * 移除修改会议回调
+ */
+ const removeUpdateListener = (callback_id) => {
+ return window.lemon.conference.removeUpdateListener(callback_id)
+ }
+
+ /**
+ * 添加媒体流获取回调
+ */
+ const addMediaStream = (callback) => {
+ return window.lemon.conference.addMediaStream(callback);
+ }
+
+ /**
+ * 移除媒体流获取回调
+ */
+ const removeMediaStream = (callback_id) => {
+ return window.lemon.conference.removeMediaStream(callback_id)
+ }
+
+ /**
+ * 添加接听回调
+ */
+ const addAnswerAckEvt = (callback) => {
+ return window.lemon.conference.addAnswerAckEvt(callback);
+ }
+
+ /**
+ * 移除接听回调
+ */
+ const removeAnswerAckEvt = (callback_id) => {
+ return window.lemon.conference.removeAnswerAckEvt(callback_id)
+ }
+
+ /**
+ * 添加挂断回调
+ */
+ const addHangupEvt = (callback) => {
+ return window.lemon.conference.addHangupEvt(callback);
+ }
+
+ /**
+ * 移除挂断回调
+ */
+ const removeHangupEvt = (callback_id) => {
+ return window.lemon.conference.removeHangupEvt(callback_id)
+ }
+
+ /**
+ * 添加来电回调
+ */
+ const addIncomingEvt = (callback) => {
+ return window.lemon.conference.addIncomingEvt(callback);
+ }
+
+ /**
+ * 移除来电回调
+ */
+ const removeIncomingEvt = (callback_id) => {
+ return window.lemon.conference.removeIncomingEvt(callback_id)
+ }
+
+ /**
+ * 拨号进入会议
+ */
+ const enterConferenceByNumber = (data) => {
+ return window.lemon.conference.enterConferenceByNumber(data);
+ }
+
+ /**
+ * 主动开始会议
+ */
+ const enterConference = (data) => {
+ return window.lemon.conference.enterConference(data);
+ }
+
+ /**
+ * 结束会议
+ */
+ const endConference = (data) => {
+ return window.lemon.conference.endConference(data);
+ }
+
+ /**
+ * 接到呼叫,进入会议
+ */
+ const answerCall = (data) => {
+ return window.lemon.conference.answerCall(data);
+ }
+
+ /**
+ * 离开会议
+ */
+ const hangupCall = (data) => {
+ return window.lemon.conference.hangupCall(data);
+ }
+
+ /**
+ * 添加会议状态变更回调
+ */
+ const addStateChangeListener = (callback) => {
+ return window.lemon.conference.addStateChangeListener(callback);
+ }
+
+ /**
+ * 移除会议状态变更
+ */
+ const removeStateChangeListener = (callback_id) => {
+ return window.lemon.conference.removeStateChangeListener(callback_id);
+ }
+
+ return {
+ createConference,
+ removeCreateListener,
+ addRemindListener,
+ removeRemindListener,
+ deleteConference,
+ addCreateListener,
+ addDeleteListener,
+ removeDeleteListener,
+ fetchConferences,
+ fetchConferenceMembers,
+ cancelConference,
+ updateConference,
+ addUpdateListener,
+ removeUpdateListener,
+ addConferenceMember,
+ addAddMemberListener,
+ removeAddMemberListener,
+ addDeleteMemberListener,
+ removeDeleteMemberListener,
+ deleteConferenceMember,
+ getConferenceInfo,
+ updateConferenceRemark,
+ addMediaStream,
+ removeMediaStream,
+ addAnswerAckEvt,
+ removeAnswerAckEvt,
+ addHangupEvt,
+ removeHangupEvt,
+ addIncomingEvt,
+ removeIncomingEvt,
+ enterConferenceByNumber,
+ enterConference,
+ endConference,
+ hangupCall,
+ answerCall,
+ addStateChangeListener,
+ removeStateChangeListener,
+ };
+}
diff --git a/src/views/consultation/sdk/conferenceControl.js b/src/views/consultation/sdk/conferenceControl.js
new file mode 100644
index 0000000..1648a5c
--- /dev/null
+++ b/src/views/consultation/sdk/conferenceControl.js
@@ -0,0 +1,690 @@
+// 会议状态-未开始
+export const CONFERENCE_STATUS_DEFAULT = 0;
+// 会议状态-进行中
+export const CONFERENCE_STATUS_PROGRESS = 1;
+// 会议状态-已结束
+export const CONFERENCE_STATUS_ENDED = 3;
+// 会议状态-已取消
+export const CONFERENCE_STATUS_CANCELED = 2;
+
+// 成员是否参加过会议-否(在历史记录中有效)
+export const CONFERENCE_MEMBER_ABSENT = 0;
+// 成员是否参加过会议-是(在历史记录中有效)
+export const CONFERENCE_MEMBER_PRESENT = 1;
+
+// 成员在会议中的状态-未入会
+export const CONFERENCE_MEMBER_STATE_OUT = 0;
+// 成员在会议中的状态-已入会
+export const CONFERENCE_MEMBER_STATE_IN = 1;
+// 成员在会议中的状态-呼叫中
+export const CONFERENCE_MEMBER_STATE_CALLING = 2;
+
+// 成员角色-普通成员
+export const CONFERENCE_ROLE_NORMAL = 0;
+// 成员角色-主持人
+export const CONFERENCE_ROLE_HOST = 1;
+// 成员角色-创建者
+export const CONFERENCE_ROLE_CREATOR = 2;
+
+// 会议类型-预约会议
+export const CONFERENCE_TYPE_BOOK = 1;
+// 会议类型-即时会议
+export const CONFERENCE_TYPE_SHORTCUT = 0;
+
+// 会议主题最大长度
+export const CONFERENCE_SUBJECT_MAX_LENGTH = 64;
+
+// 麦克风关闭
+export const MICROPHONE_STATUS_CLOSE = 0;
+// 麦克风打开
+export const MICROPHONE_STATUS_OPEN = 1;
+// 没有麦克风
+export const MICROPHONE_STATUS_NO = 2;
+
+// 摄像头关闭
+export const CAMERA_STATUS_CLOSE = 0;
+// 摄像头打开
+export const CAMERA_STATUS_OPEN = 1;
+// 没有摄像头
+export const CAMERA_STATUS_NO = 2;
+
+// 未禁言
+export const PROHIBITION_STATUS_N = 0;
+// 禁言
+export const PROHIBITION_STATUS_Y = 1;
+
+// 未静音
+export const MUTE_STATUS_N = 0;
+// 静音
+export const MUTE_STATUS_Y = 1;
+
+// 没有讲话
+export const SPEAKING_STATUS_N = 0;
+// 正在讲话
+export const SPEAKING_STATUS_Y = 1;
+
+// 半双工模式
+export const HALFDUPLEX_CALL = 0;
+// 全双工
+export const FULLDUPLEX_CALL = 1;
+
+// 未举手
+export const RAISE_HAND_N = 0;
+// 未举手
+export const RAISE_HAND_Y = 1;
+
+// 举手同意发言
+export const RAISE_HAND_ALLOW = 2;
+// 举手同意拒绝
+export const RAISE_HAND_DENY = 3;
+// 举手同意忽略
+export const RAISE_HAND_IGNORE = 4;
+
+export default function useConfernceModule() {
+ /**
+ * 是否锁定会议
+ */
+ const lockConference = (data) => {
+ return window.lemon.conferenceControl.lockConference(data);
+ };
+
+ /**
+ * 更新会议主题
+ */
+ const updateConferenceSubject = (data) => {
+ return window.lemon.conferenceControl.updateConferenceSubject(data);
+ };
+
+ /**
+ * 设置成员角色
+ */
+ const setMemberRole = (data) => {
+ return window.lemon.conferenceControl.setMemberRole(data);
+ };
+
+ /**
+ * 添加设置成员角色回调
+ */
+ const addSetMemberRoleListener = (callback) => {
+ return window.lemon.conferenceControl.addSetMemberRoleListener(callback);
+ };
+
+ /**
+ * 移除设置成员角色回调
+ */
+ const removeSetMemberRoleListener = (callback) => {
+ return window.lemon.conferenceControl.removeSetMemberRoleListener(callback);
+ };
+
+ /**
+ * 添加成员入会回调
+ */
+ const addMemberJoinListener = (callback) => {
+ return window.lemon.conferenceControl.addMemberJoinListener(callback);
+ };
+
+ /**
+ * 移除成员入会回调
+ */
+ const removeMemberJoinListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeMemberJoinListener(callback_id);
+ };
+
+ /**
+ * 添加成员离会回调
+ */
+ const addMemberLeftListener = (callback) => {
+ return window.lemon.conferenceControl.addMemberLeftListener(callback);
+ };
+
+ /**
+ * 移除成员离会回调
+ */
+ const removeMemberLeftListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeMemberLeftListener(callback_id);
+ };
+
+ /**
+ * 添加修改会议主题回调
+ */
+ const addUpdateSubjectListener = (callback) => {
+ return window.lemon.conferenceControl.addUpdateSubjectListener(callback);
+ };
+
+ /**
+ * 移除修改会议主题回调
+ */
+ const removeUpdateSubjectListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeUpdateSubjectListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 修改会议成员昵称
+ */
+ const modifyMemberNickname = (data) => {
+ return window.lemon.conferenceControl.modifyMemberNickname(data);
+ };
+
+ /**
+ * 添加修改会议成员昵称回调
+ */
+ const addModifyMemberNickListener = (callback) => {
+ return window.lemon.conferenceControl.addModifyMemberNickListener(callback);
+ };
+
+ /**
+ * 移除修改会议成员昵称回调
+ */
+ const removeModifyMemberNickListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeModifyMemberNickListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 呼叫全部未入会成员
+ */
+ const inviteMember = (data) => {
+ return window.lemon.conferenceControl.inviteMember(data);
+ };
+
+ /**
+ * 呼叫全部未入会成员
+ */
+ const inviteAllMember = (data) => {
+ return window.lemon.conferenceControl.inviteAllMember(data);
+ };
+
+ /**
+ * 添加呼叫未入会成员回调
+ */
+ const addInviteMemberListener = (callback) => {
+ return window.lemon.conferenceControl.addInviteMemberListener(callback);
+ };
+
+ /**
+ * 移除呼叫未入会成员回调
+ */
+ const removeInviteMemberListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeInviteMemberListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 踢出会议中成员
+ */
+ const kickoutMember = (data) => {
+ return window.lemon.conferenceControl.kickoutMember(data);
+ };
+
+ /**
+ * 设置麦克风设备
+ */
+ const changeAudioInputDevice = (data) => {
+ return window.lemon.conferenceControl.changeAudioInputDevice(data);
+ };
+
+ /**
+ * 设置麦克风设备
+ */
+ const changeVideoInputDevice = (data) => {
+ return window.lemon.conferenceControl.changeVideoInputDevice(data);
+ };
+
+ /**
+ * 摄像头开关
+ */
+ const setMemberCamera = (data) => {
+ return window.lemon.conferenceControl.setMemberCamera(data);
+ };
+
+ /**
+ * 添加摄像头开关回调
+ */
+ const addMemberCameraListener = (callback) => {
+ return window.lemon.conferenceControl.addMemberCameraListener(callback);
+ };
+
+ /**
+ * 移除摄像头开关回调
+ */
+ const removeMemberCameraListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeMemberCameraListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 静音成员
+ */
+ const setMemberMute = (data) => {
+ return window.lemon.conferenceControl.setMemberMute(data);
+ };
+
+ /**
+ * 禁言成员
+ */
+ const setMemberProhibition = (data) => {
+ return window.lemon.conferenceControl.setMemberProhibition(data);
+ };
+
+ /**
+ * 禁言全部成员
+ */
+ const setAllMemberProhibition = (data) => {
+ return window.lemon.conferenceControl.setAllMemberProhibition(data);
+ };
+
+ /**
+ * 添加禁言回调
+ */
+ const addMemberProhibitionListener = (callback) => {
+ return window.lemon.conferenceControl.addMemberProhibitionListener(
+ callback
+ );
+ };
+
+ /**
+ * 移除禁言回调
+ */
+ const removeMemberProhibitionListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeMemberProhibitionListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 添加全部禁言回调
+ */
+ const addAllMemberProhibitionListener = (callback) => {
+ return window.lemon.conferenceControl.addAllMemberProhibitionListener(
+ callback
+ );
+ };
+
+ /**
+ * 移除全部禁言回调
+ */
+ const removeAllMemberProhibitionListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeAllMemberProhibitionListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 添加静音回调
+ */
+ const addMemberMuteListener = (callback) => {
+ return window.lemon.conferenceControl.addMemberMuteListener(callback);
+ };
+
+ /**
+ * 移除静音回调
+ */
+ const removeMemberMuteListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeMemberMuteListener(callback_id);
+ };
+
+ /**
+ * 指定成员讲话
+ */
+ const assignMemberSpeaker = (data) => {
+ return window.lemon.conferenceControl.assignMemberSpeaker(data);
+ };
+
+ /**
+ * 添加指定成员讲话回调
+ */
+ const addAssignMemberSpeakListener = (callback) => {
+ return window.lemon.conferenceControl.addAssignMemberSpeakListener(
+ callback
+ );
+ };
+
+ /**
+ * 移除指定成员讲话回调
+ */
+ const removeAssignMemberSpeakListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeAssignMemberSpeakListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 取消指定成员讲话
+ */
+ const cancelMemberSpeak = (data) => {
+ return window.lemon.conferenceControl.cancelMemberSpeak(data);
+ };
+
+ /**
+ * 添加取消成员讲话回调
+ */
+ const addCancelMemberSpeakListener = (callback) => {
+ return window.lemon.conferenceControl.addCancelMemberSpeakListener(
+ callback
+ );
+ };
+
+ /**
+ * 移除取消成员讲话回调
+ */
+ const removeCancelMemberSpeakListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeCancelMemberSpeakListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 添加成员讲话状态回调
+ */
+ const addMemberSpeakingStateListener = (callback) => {
+ return window.lemon.conferenceControl.addMemberSpeakingStateListener(
+ callback
+ );
+ };
+
+ /**
+ * 移除成员讲话状态回调
+ */
+ const removeMemberSpeakingStateListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeMemberSpeakingStateListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 添加语音激励回调
+ */
+ const addVoiceStimulationListener = (callback) => {
+ return window.lemon.conferenceControl.addVoiceStimulationListener(callback);
+ };
+
+ /**
+ * 移除语音激励回调
+ */
+ const removeVoiceStimulationListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeVoiceStimulationListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 指定显示某路流
+ */
+ const specifyMemberMediaStream = (data) => {
+ return window.lemon.conferenceControl.specifyMemberMediaStream(data);
+ };
+
+ /**
+ * 指定显示多路流
+ */
+ const specifyMembersMediaStream = (data) => {
+ return window.lemon.conferenceControl.specifyMembersMediaStream(data);
+ };
+
+ /**
+ * 获取布局类型
+ */
+ const getLayoutType = (data) => {
+ return window.lemon.conferenceControl.getLayoutType(data);
+ };
+
+ /**
+ * 获取布局信息
+ */
+ const getLayoutInfo = () => {
+ return window.lemon.conferenceControl.getLayoutInfo();
+ };
+
+ /**
+ * 切换布局信息
+ */
+ const setLayoutType = (data) => {
+ return window.lemon.conferenceControl.setLayoutType(data);
+ };
+
+ /**
+ * 添加修改布局回调
+ */
+ const addSetLayoutTypeListener = (callback) => {
+ return window.lemon.conferenceControl.addSetLayoutTypeListener(callback);
+ };
+
+ /**
+ * 移除修改布局回调
+ */
+ const removeSetLayoutTypeListener = (callback_id) => {
+ return window.lemon.conferenceControl.removeSetLayoutTypeListener(
+ callback_id
+ );
+ };
+
+ /**
+ * 添加新增会议成员回调
+ */
+ const addAddMemberListener = (callback) => {
+ return window.lemon.conferenceControl.addAddMemberListener(callback);
+ };
+
+ /**
+ * 移除新增会议成员回调
+ */
+ const removeAddMemberListener = (callback) => {
+ return window.lemon.conferenceControl.removeAddMemberListener(callback);
+ };
+
+ /**
+ * 移除删除会议成员回调
+ */
+ const addDeleteMemberListener = (callback) => {
+ return window.lemon.conferenceControl.addDeleteMemberListener(callback);
+ };
+
+ /**
+ * 移除删除会议成员回调
+ */
+ const removeDeleteMemberListener = (callback) => {
+ return window.lemon.conferenceControl.removeDeleteMemberListener(callback);
+ };
+
+ /**
+ * 获取本地设备列表
+ */
+ const getLocalDeviceList = () => {
+ return window.lemon.conferenceControl.getLocalDeviceList();
+ };
+
+ /**
+ * 移除设备列表变化回调
+ */
+ const addDeviceListChangeListener = (callback) => {
+ return window.lemon.conferenceControl.addDeviceListChangeListener(callback);
+ };
+
+ /**
+ * 移除设备列表变化回调
+ */
+ const removeDeviceListChangeListener = (callback) => {
+ return window.lemon.conferenceControl.removeDeviceListChangeListener(
+ callback
+ );
+ };
+
+ /**
+ * 屏幕共享
+ */
+ const setShareScreenStatus = (data) => {
+ return window.lemon.conferenceControl.setShareScreenStatus(data);
+ };
+
+ /**
+ * 移除屏幕共享回调
+ */
+ const addScreenSharingListener = (callback) => {
+ return window.lemon.conferenceControl.addScreenSharingListener(callback);
+ };
+
+ /**
+ * 移除屏幕共享回调
+ */
+ const removeScreenSharingListener = (callback) => {
+ return window.lemon.conferenceControl.removeScreenSharingListener(callback);
+ };
+
+ /**
+ * 截屏操作
+ */
+ const startScreenshot = (data) => {
+ return window.lemon.conferenceControl.startScreenshot(data);
+ };
+
+ /**
+ * 创建录屏媒体对象
+ */
+ const createMediaRecorder = (data) => {
+ return window.lemon.conferenceControl.createMediaRecorder(data);
+ };
+
+ /**
+ * 开始视频广播
+ */
+ const broadcastVideo = (data) => {
+ return window.lemon.conferenceControl.broadcastVideo(data);
+ };
+
+ /**
+ * 停止视频广播
+ */
+ const stopBroadcast = () => {
+ return window.lemon.conferenceControl.stopBroadcast();
+ };
+
+ /**
+ * 设置语音激励开关
+ */
+ const setVoiceStimulation = (data) => {
+ return window.lemon.conferenceControl.setVoiceStimulation(data);
+ };
+
+ /**
+ * 扬声器流开关
+ */
+ const setMuteCall = (data) => {
+ return window.lemon.conferenceControl.setMuteCall(data);
+ };
+
+ /**
+ * 切换扬声器设备
+ */
+ const changeAudioOutputDevice = (data) => {
+ return window.lemon.conferenceControl.changeAudioOutputDevice(data);
+ };
+
+ /**
+ * 添加当前进行中会议数据变更回调
+ */
+ const addActiveConfigChangeListener = (callback) => {
+ return window.lemon.conferenceControl.addActiveConfigChangeListener(
+ callback
+ );
+ };
+
+ /**
+ * 移除当前进行中会议数据变更回调
+ */
+ const removeActiveConfigChangeListener = (data) => {
+ return window.lemon.conferenceControl.removeActiveConfigChangeListener(data);
+ };
+
+ /**
+ * 添加会议室锁定回调
+ */
+ const addLockListener = (callback) => {
+ return window.lemon.conferenceControl.addLockListener(callback);
+ };
+
+ /**
+ * 移除会议室锁定回调
+ */
+ const removeLockListener = (data) => {
+ return window.lemon.conferenceControl.removeLockListener(data);
+ };
+
+ return {
+ lockConference,
+ addLockListener,
+ removeLockListener,
+ removeMemberJoinListener,
+ addMemberJoinListener,
+ removeMemberLeftListener,
+ addMemberLeftListener,
+ updateConferenceSubject,
+ addUpdateSubjectListener,
+ removeUpdateSubjectListener,
+ addModifyMemberNickListener,
+ removeModifyMemberNickListener,
+ addInviteMemberListener,
+ removeInviteMemberListener,
+ inviteMember,
+ inviteAllMember,
+ kickoutMember,
+ setMemberCamera,
+ addMemberCameraListener,
+ removeMemberCameraListener,
+ addMemberProhibitionListener,
+ removeMemberProhibitionListener,
+ addAllMemberProhibitionListener,
+ removeAllMemberProhibitionListener,
+ setMemberMute,
+ setMemberProhibition,
+ setAllMemberProhibition,
+ addMemberMuteListener,
+ removeMemberMuteListener,
+ assignMemberSpeaker,
+ cancelMemberSpeak,
+ addAssignMemberSpeakListener,
+ removeAssignMemberSpeakListener,
+ addMemberSpeakingStateListener,
+ removeMemberSpeakingStateListener,
+ addVoiceStimulationListener,
+ removeVoiceStimulationListener,
+ specifyMemberMediaStream,
+ specifyMembersMediaStream,
+ getLayoutType,
+ getLayoutInfo,
+ setLayoutType,
+ addSetLayoutTypeListener,
+ removeSetLayoutTypeListener,
+ modifyMemberNickname,
+ setMemberRole,
+ addSetMemberRoleListener,
+ removeSetMemberRoleListener,
+ changeAudioInputDevice,
+ changeVideoInputDevice,
+ addCancelMemberSpeakListener,
+ removeCancelMemberSpeakListener,
+ addAddMemberListener,
+ removeAddMemberListener,
+ addDeleteMemberListener,
+ getLocalDeviceList,
+ removeDeleteMemberListener,
+ addDeviceListChangeListener,
+ removeDeviceListChangeListener,
+ setShareScreenStatus,
+ addScreenSharingListener,
+ removeScreenSharingListener,
+ startScreenshot,
+ createMediaRecorder,
+ stopBroadcast,
+ broadcastVideo,
+ setVoiceStimulation,
+ removeActiveConfigChangeListener,
+ addActiveConfigChangeListener,
+ setMuteCall,
+ changeAudioOutputDevice,
+ };
+}
diff --git a/src/views/consultation/sdk/gis.ts b/src/views/consultation/sdk/gis.ts
new file mode 100644
index 0000000..00d84dd
--- /dev/null
+++ b/src/views/consultation/sdk/gis.ts
@@ -0,0 +1,390 @@
+/**
+ * 通用返回对象
+ * @typedef {object} RetReslut
+ * @property {number} result 响应码,0成功,其他失败
+ */
+
+/**
+ * GPS上报数据
+ * @typedef {object} GpsData
+ * @property {string} basedata_id 能根据这个信息定位到设备、组、群组等identifier
+ * @property {string} long_we 经度标识 取值:E:东经 W:西经
+ * @property {number} longitude 经度
+ * @property {string} lat_ns 纬度标识 取值:S:南纬 N:北纬
+ * @property {number} latitude 纬度
+ * @property {number} speed 速度 单位是海里/小时
+ * @property {number} direction 方向(360度)
+ * @property {string} receive_time 接收时间(UTC 时间)
+ * @property {string} electricity 电量等级
+ * @property {number} current_interval_time 当前的上拉周期(秒)
+ * @property {string} device_alias 上报设备名称
+ * @property {string} device_staff_name 上报设备实名制名称 (PDT 系统才有)
+ * @property {string} device_number 上报设备号码
+ */
+
+/**
+ * GPS上报对象
+ * @typedef {object} GpsReportInfo
+ * @property {string} user_id 用户账号
+ * @property {Array.
} gps_list 上报GPS数据列表
+ */
+
+/**
+ * 单次上拉的 GPS信息对象
+ * @typedef {object} GpsInfo
+ * @property {number} result 响应码,0成功,其他失败
+ * @property {string} user_id 用户账号
+ * @property {GpsData} gps_data GPS数据
+ */
+
+/**
+ * 订阅参数对象
+ * @typedef {object} Subscriber
+ * @property {string} basedata_id 基础数据对象id,必填项
+ * @property {number} interval_time 订阅间隔时间(s),必填项
+ * @property {number} distance 订阅距离,选填项 default 0
+ * @property {number} speed 订阅速度,选填项 default 0
+ * @property {number} sub_type 订阅类型,选填。 1:标识只启用按距离上传 2: 标识只启用按时间上传 3:标识启用按时间与距离上传 4: 标识启用按时间或距离上传
+ */
+
+/**
+ * 取消订阅参数对象
+ * @typedef {object} UnSubscriber
+ * @property {string} basedata_id 基础数据对象id
+ */
+
+/**
+ * 历史轨迹查询参数对象
+ * @typedef {object} RecordGpsParams
+ * @property {string} basedata_id 基础数据对象id,必填项
+ * @property {string} start_time 查询开始时间 必填项 ,时间格式参考示例,UTC时间 "2021-05-13T09:45:41Z"
+ * @property {string} end_time 查询结束时间 必填项 ,时间格式 如 "2021-05-13T09:45:41Z"
+ * @property {number} max_number 返回最多的轨迹点数,选填项 不能超过 10000. 取值范围 1000-10000。如果不填就默认10000个点。
+ */
+
+/**
+ * 轨迹点信息 对象
+ * @typedef {object} GpsRecord
+ * @property {string} long_we 经度标识 取值:E:东经 W:西经
+ * @property {number} longitude 经度
+ * @property {string} lat_ns 纬度标识 取值:S:南纬 N:北纬
+ * @property {number} latitude 纬度
+ * @property {number} speed 速度 单位是海里/小时
+ * @property {number} direction 方向
+ * @property {string} gps_datetime : GPS时间(UTC 时间)
+ * @property {string} receive_time 接收时间(UTC 时间)
+ */
+
+/**
+ * 历史轨迹查询结果 对象
+ * @typedef {object} GpsRecordResult
+ * @property {number} result 响应码,0成功 其他是失败
+ * @property {boolean} exceeded_the_maximum 是否超出最大值的轨迹点数,超出最大值,只返回最大值的点数。
+ * @property {Array.} gps_record_list 轨迹点列表
+ */
+
+/**
+ * 分页获取订阅列表数据参数结构
+ * @typedef {object} SubDeviecesParams
+ * @property {number} page_index 当前页码 必填项
+ * @property {number} page_size 单页容量 必填项
+ * @property {string} filter_key 通过这个关键字去匹配设备号码 非必填项
+ */
+
+/**
+ * 分页获取订阅列表返回 对象
+ * @typedef {object} SubDeviecesResult
+ * @property {number} result 响应码,0成功 其他是失败
+ * @property {number} total_number 总的订阅数据
+ * @property {Array.} sub_device_list 订阅设备列表
+ */
+
+/**
+ * 订阅设备信息
+ * @typedef {object} SubDevieceInfo
+ * @property {String} basedata_id 基础数据对象id,必填项
+ * @property {string} alias 被订阅设备名称
+ * @property {string} number 被订阅设备号码
+ * @property {string} staff_name 被订阅设备实名制名称 (PDT 系统才有)
+ * @property {number} actual_report_cycle 实际上报周期,当前上拉周期
+ * @property {number} min_cycle 允许最小订阅周期
+ */
+
+/**
+ * 获取订阅设备的订阅关系参数
+ * @typedef {object} SubDeviceRelationParams
+ * @property {string} basedata_id 基础数据对象id
+ */
+
+/**
+ * 获取订阅设备的订阅关系 返回结果
+ * @typedef {object} SubDeviceRelationResult
+ * @property {number} result 响应码,0成功 其他是失败
+ * @property {string} basedata_id 基础数据对象id
+ * @property {Array.} subscriber_list 订阅关系列表
+ */
+
+/**
+ * 订阅关系对象
+ * @typedef {object} SubscriberRelation
+ * @property {string} dispatcher_id 调度台id
+ * @property {number} interval_time 订阅周期
+ */
+
+/**
+ * 取消调度员订阅参数对象
+ * @typedef {object} UnSubDispatcher
+ * @property {string} basedata_id 基础数据对象id
+ */
+
+/**
+ * 调度员取消订阅通知信息
+ * @typedef {object} DispatcherCancelSubNofify
+ * @property {string} user_id 用户账号,被取消订阅的用户账号,一般是当前账号,因为只能收到自己被取消订阅的通知
+ * @property {string} realm 用户账号登录域名
+ * @property {string} handle_dispatcher 取消订阅操作的调度员
+ * @property {string} handle_time 取消订阅操作的时间
+ */
+
+/**
+ * 设备被取消订阅通知信息
+ * @typedef {object} DeviceCancelSubInfo
+ * @property {string} number 设备号码
+ * @property {string} basedata_id 设备的basedata id
+ * @property {string} handle_dispatcher 取消订阅操作的调度员
+ * @property {string} handle_time 取消订阅操作的时间
+ */
+/**
+ * 设备被取消订阅通知信息
+ * @typedef {object} DeviceCancelSubNofify
+ * @property {string} user_id 用户账号,被取消订阅的用户账号,一般是当前账号,因为只能收到自己被取消订阅的通知
+ * @property {string} realm 用户账号登录域名
+ * @property {Array.} cancel_sub_list 设备取消订阅列表
+ */
+
+/**
+ * 全网订阅参数
+ * @typedef {object} WholeNetSubParams
+ * @property {number} sub_pull_mode 订阅拉取模式 0:禁止;1:全网上拉2:部分上拉
+ * @property {number} whole_net_sub_cycle 订阅拉取周期
+ * @property {number} recovery_time 恢复时间
+ * @property {number} min_sub_cycle 全网允许最小订阅周期
+ */
+/**
+ * 全网订阅参数结果
+ * @typedef {object} WholeNetSubParamsResult
+ * @property {number} result 响应码,0成功 其他是失败
+ * @property {string} min_sub_cycle_setter 全网允许最小订阅周期设置者
+ * @property {WholeNetSubParams} whole_net_sub_params 全网订阅参数
+ */
+
+/**
+ * 取消调度员订阅参数对象
+ * @typedef {object} Device
+ * @property {string} basedata_id 基础数据对象id
+ */
+
+/**
+ * 设置设备最小订阅周期 请求参数
+ * @typedef {object} DeviceMinSubCycleParams
+ * @property {number} min_sub_cycle 终端允许最小订阅周期,该值必须必须大于或等于全网最小订阅周期
+ * @property {Array.} device_list 终端的basedata id 列表
+ */
+export default function useGisModule() {
+ /**
+ * 发起GPS订阅(支持批量)
+ * @param {object} subscriberListParam 订阅列表
+ * @param {Array. {
+ return window.lemon.gis.startSubscribeGps(subscriberListParam);
+ };
+
+ /**
+ * 取消对该设备(调用者的)订阅 (支持批量),但是不影响其他人的订阅关系
+ * @param {Array.} unSubscribeListParam
+ * @param {Array.} unSubscribeListParam.cancel_subscribe_list
+ * @returns
+ */
+ const stopSubscribeGps = (unSubscribeListParam) => {
+ return window.lemon.gis.stopSubscribeGps(unSubscribeListParam);
+ };
+
+ /**
+ * 取消该设备的全部订阅,连同其他的人对该设备的订阅也将取消去掉 (支持批量)
+ * @param {object} unSubscribeListParam
+ * @param {Array.} unSubscribeListParam.cancel_subscribe_list
+ * @returns
+ */
+ const cancelDeviceAllGpsSub = (unSubscribeListParam) => {
+ return window.lemon.gis.cancelDeviceAllGpsSub(unSubscribeListParam);
+ };
+
+ /**
+ * 单次获取位置信息
+ * @param {object} gpsInfoParam 基础数据对象id,必填项
+ * @param {string} gpsInfoParam.basedata_id 基础数据对象id,必填项
+ * @param {boolean} gpsInfoParam.is_encryption 是否加密, 选填。 默认加密
+ * @returns {Promise.}
+ */
+ const getGpsInfo = (gpsInfoParam) => {
+ return window.lemon.gis.getGpsInfo(gpsInfoParam);
+ };
+
+ /**
+ * 添加GPS 上报回调
+ * @param {GpsCallback} callback 回调函数
+ * @returns {string} callbackId {@link removeGPSReportListener } 需要根据这个id找到对应的回调函数
+ */
+ const addGPSReportListener = (callback) => {
+ return window.lemon.gis.addGPSReportListener(callback);
+ };
+
+ /**
+ * 根据callbackId删除之前注册的回调
+ *
+ * @param {string} callbackId
+ */
+ const removeGPSReportListener = (callbackId) => {
+ return window.lemon.gis.removeGPSReportListener(callbackId);
+ };
+
+ /**
+ * 获取已订阅列表
+ * @param {SubDeviecesParams} subDeviecesParams 订阅列表参数对象
+ * @returns {Promise.}
+ */
+ const fetchSubDeviceList = (subDeviecesParams) => {
+ return window.lemon.gis.fetchSubDeviceList(subDeviecesParams);
+ };
+
+ /**
+ * 获取订阅设备的订阅关系
+ * @param {SubDeviceRelationParams} subDeviceRelationParams 订阅列表参数对象
+ * @returns {Promise.}
+ */
+ const fetchSubDeviceRelation = (subDeviceRelationParams) => {
+ return window.lemon.gis.fetchSubDeviceRelation(subDeviceRelationParams);
+ };
+
+ /**
+ * 获取全网订阅参数
+ * @returns {Promise.}
+ */
+ const getWholeNetSubParams = () => {
+ return window.lemon.gis.getWholeNetSubParams();
+ };
+ /**
+ * 设置全网订阅参数
+ * @param {WholeNetSubParams} wholeNetSubParams
+ * @returns {Promise.}
+ */
+ const setWholeNetSubParams = (wholeNetSubParams) => {
+ return window.lemon.gis.setWholeNetSubParams(wholeNetSubParams);
+ };
+
+ /**
+ * 同步订阅功能
+ * @returns {Promise.}
+ */
+ const syncSubscribeList = () => {
+ return window.lemon.gis.syncSubscribeList();
+ };
+
+ /**
+ * 设置终端最小订阅周期
+ * @param {DeviceMinSubCycleParams} deviceMinSubCycleParams
+ * @returns {Promise.}
+ */
+ const setDeviceMinSubCycle = (deviceMinSubCycleParams) => {
+ return window.lemon.gis.setDeviceMinSubCycle(deviceMinSubCycleParams);
+ };
+
+ /**
+ * 取消终端允许最小订阅周期
+ * @param {object} cancelDeviceParam
+ * @param {Array.} cancelDeviceParam.cancel_device_list
+ * @returns {Promise.}
+ */
+ const cancelDeviceMinSubCycle = (cancelDeviceParam) => {
+ return window.lemon.gis.cancelDeviceMinSubCycle(cancelDeviceParam);
+ };
+
+ /**
+ * 取消调度员的全部订阅操作
+ * @param {object>} dispatcherListParam
+ * @param {Array.} dispatcherListParam.cancel_subscribe_list
+ * @returns
+ */
+ const cancelDispatcherAllGpsSub = (dispatcherListParam) => {
+ return window.lemon.gis.cancelDispatcherAllGpsSub(dispatcherListParam);
+ };
+
+ /**
+ * 添加 调度台取消订阅通知回调
+ * @param {DeviceCallback} callback 回调函数
+ * @returns {string} callbackId {@link removeGPSReportListener } 需要根据这个id找到对应的回调函数
+ */
+ const addCXLDispatcherSubListener = (callback) => {
+ return window.lemon.gis.addCXLDispatcherSubListener(callback);
+ };
+
+ /**
+ * 根据callbackId删除之前注册的回调
+ *
+ * @param {string} callbackId
+ */
+ const removeCXLDispatcherSubListener = (callbackId) => {
+ return window.lemon.gis.removeCXLDispatcherSubListener(callbackId);
+ };
+
+ /**
+ * 添加 设备取消订阅通知回调
+ * @param {DeviceCallback} callback 回调函数
+ * @returns {string} callbackId {@link removeCXLDeviceSubListener } 需要根据这个id找到对应的回调函数
+ */
+ const addCXLDeviceSubListener = (callback) => {
+ return window.lemon.gis.addCXLDeviceSubListener(callback);
+ };
+
+ /**
+ * 根据callbackId删除之前注册的回调
+ *
+ * @param {string} callbackId
+ */
+ const removeCXLDeviceSubListener = (callbackId) => {
+ return window.lemon.gis.removeCXLDispatcherSubListener(callbackId);
+ };
+
+ /**
+ * 查询历史轨迹
+ * @param {RecordGpsParams} recordGpsParams 历史轨迹查询参数对象
+ * @returns {Promise.}
+ */
+ const queryRecordGPS = (recordGpsParams) => {
+ return window.lemon.gis.queryRecordGPS(recordGpsParams);
+ };
+
+ return {
+ startSubscribeGps,
+ stopSubscribeGps,
+ cancelDeviceAllGpsSub,
+ getGpsInfo,
+ addGPSReportListener,
+ removeGPSReportListener,
+ fetchSubDeviceList,
+ fetchSubDeviceRelation,
+ getWholeNetSubParams,
+ setWholeNetSubParams,
+ syncSubscribeList,
+ setDeviceMinSubCycle,
+ cancelDeviceMinSubCycle,
+ addCXLDispatcherSubListener,
+ removeCXLDispatcherSubListener,
+ addCXLDeviceSubListener,
+ removeCXLDeviceSubListener,
+ cancelDispatcherAllGpsSub,
+ queryRecordGPS,
+ };
+}
diff --git a/src/views/consultation/sdk/log.ts b/src/views/consultation/sdk/log.ts
new file mode 100644
index 0000000..97c1620
--- /dev/null
+++ b/src/views/consultation/sdk/log.ts
@@ -0,0 +1,23 @@
+export default function useLogModule() {
+ /**
+ * set log level
+ * 0 : no log
+ * 1 : error
+ * 2 : warn
+ * 3 : info
+ * 4 : debug
+ * @param {日志级别 int} level
+ */
+ const setLevel = (level) => {
+ window.lemon.log.setLevel(level);
+ };
+
+ const getLevel = () => {
+ return window.lemon.log.getLevel();
+ };
+
+ return {
+ setLevel,
+ getLevel,
+ };
+}
diff --git a/src/views/consultation/sdk/login.ts b/src/views/consultation/sdk/login.ts
new file mode 100644
index 0000000..e4f14cb
--- /dev/null
+++ b/src/views/consultation/sdk/login.ts
@@ -0,0 +1,73 @@
+export interface UserInfo {
+ username: string;
+ password: string;
+ realm: string;
+ webpucUrl: string;
+}
+
+export default function useLoginModule() {
+ /**
+ * login
+ * @returns
+ */
+ const login = (userInfo: UserInfo) => {
+ return window.lemon.login.login(userInfo);
+ };
+
+ /**
+ * logout
+ * @returns
+ */
+ const logout = () => {
+ return window.lemon.login.logout();
+ };
+
+ /**
+ * get login account infomation
+ * @returns
+ */
+ const getLoginAccountInfo = () => {
+ return window.lemon.login.getLoginAccountInfo();
+ };
+
+ /**
+ * Connect Websocket
+ * @returns
+ */
+ const reConnectWebsocket = (reConnectInfo) => {
+ return window.lemon.login.reConnectWebsocket(reConnectInfo);
+ };
+
+ /**
+ * get the account login status
+ * @returns ture is login in, false is not logged in
+ */
+ const isLogin = () => {
+ return window.lemon.login.isLogin();
+ };
+
+ /**
+ * add login status change listener
+ * @returns callbackid
+ */
+ const addLoginStatusChangeListener = (onLoginStatusChange) => {
+ return window.lemon.login.addLoginStatusChangeListener(onLoginStatusChange);
+ };
+
+ /**
+ * remove login status change listener
+ */
+ const removeLoginStatusChangeListener = (loginStatusGuid: string) => {
+ window.lemon.login.removeLoginStatusChangeListener(loginStatusGuid);
+ };
+
+ return {
+ login,
+ logout,
+ reConnectWebsocket,
+ getLoginAccountInfo,
+ isLogin,
+ addLoginStatusChangeListener,
+ removeLoginStatusChangeListener,
+ };
+}
diff --git a/src/views/consultation/sdk/message.ts b/src/views/consultation/sdk/message.ts
new file mode 100644
index 0000000..4a5ec2d
--- /dev/null
+++ b/src/views/consultation/sdk/message.ts
@@ -0,0 +1,86 @@
+export interface FormatedMsg {
+ sender: {
+ number: string;
+ alias: string;
+ basedata_id: string;
+ };
+ recipient: {
+ number: string;
+ alias: string;
+ basedata_id: string;
+ };
+
+ file_parm: string;
+ sds_type: string;
+ sds_content: string;
+ time_stamp: string;
+ times: number;
+ sds_text: string;
+}
+
+export default function useMessageModule() {
+ /**
+ * download message File
+ * @returns
+ */
+ const downloadFile = (downloadParams: { url: string }) => {
+ return window.lemon.message.downloadFile(downloadParams);
+ };
+ const dateTimeFormat = () => {
+ const date = new Date();
+
+ const hour = String(date.getHours()).padStart(2, '0');
+ const minute = String(date.getMinutes()).padStart(2, '0');
+ const second = String(date.getSeconds()).padStart(2, '0');
+ return `${[hour, minute, second].join(':')}`;
+ };
+ const formatMessage = (message: any): FormatedMsg => {
+ const resInfo: FormatedMsg = {
+ sender: {
+ number: message.caller.number,
+ alias: message.caller.number_alias,
+ basedata_id: message.caller.basedata_id,
+ },
+ recipient: {
+ number: message.callee.number,
+ alias: message.callee.number_alias,
+ basedata_id: message.callee.basedata_id,
+ },
+ file_parm: message.file_parm,
+ sds_type: message.sds_type,
+ sds_content: message.sds_content,
+ time_stamp: dateTimeFormat(),
+ times: new Date().getTime(),
+ sds_text: message.sds_text,
+ };
+ return resInfo;
+ };
+ /**
+ * send text message
+ * @param basedata_id target send to
+ * @param content message content
+ * @returns
+ */
+ const sendTxtMessage = (basedata_id: string, content: string) => {
+ return window.lemon.message.sendMessageText({
+ basedata_id,
+ message_content: content,
+ });
+ };
+
+ const addCallback = (callback: (data) => void) => {
+ return window.lemon.message.addMessageReportListener(callback);
+ };
+
+ const removeCallback = (id: string) => {
+ return window.lemon.message.removeMessageReportListener(id);
+ };
+
+ return {
+ downloadFile,
+ formatMessage,
+ sendTxtMessage,
+ addCallback,
+ removeCallback,
+ };
+}
diff --git a/src/views/consultation/sdk/monitor.ts b/src/views/consultation/sdk/monitor.ts
new file mode 100644
index 0000000..0d66dca
--- /dev/null
+++ b/src/views/consultation/sdk/monitor.ts
@@ -0,0 +1,76 @@
+// cache all monitor data
+const monitorData = new Map();
+
+let callback_id;
+
+export default function useMonitorModule() {
+ /**
+ * recover history monitor relationship,callback will receive results
+ * @returns
+ */
+ const recoverHistory = () => {
+ return window.lemon.monitor.initQueue();
+ };
+
+ /**
+ * cancel or monitor a object,like deivce、gorup or something else
+ * @param basedata_id
+ * @param alias
+ * @returns
+ */
+ const monitor = (basedata_id: string, alias: string) => {
+ const has = monitorData.has(basedata_id);
+ console.log('try monitor->', has);
+ return window.lemon.monitor.change({
+ basedata_id,
+ name: alias,
+ monitor_type: has ? 0 : 1,
+ });
+ };
+
+ const removeCallback = (id?: string) => {
+ let inner;
+ if (!id) {
+ id = callback_id;
+ inner = true;
+ }
+ window.lemon.monitor.removeChangeListener(id);
+ if (inner) {
+ callback_id = undefined;
+ }
+ };
+
+ const addCallback = (callback: (data) => void) => {
+ return window.lemon.monitor.addChangeListener(callback);
+ };
+
+ const registerResultCallback = () => {
+ console.log('try register monitor ');
+ if (callback_id) {
+ console.log('there is already a callback,remove first');
+ removeCallback();
+ }
+ callback_id = addCallback((data) => {
+ if (data.result !== 0) {
+ return;
+ }
+ // if not in list
+ if (data.monitor_type === 0) {
+ const deleteFlag = monitorData.delete(data.basedata_id);
+
+ console.log('deleteFlag', deleteFlag);
+ }
+ if (data.monitor_type === 1) {
+ monitorData.set(data.basedata_id, data);
+ }
+ });
+ };
+
+ return {
+ recoverHistory,
+ monitor,
+ registerResultCallback,
+ addCallback,
+ removeCallback,
+ };
+}
diff --git a/src/views/consultation/sdk/reportForm.ts b/src/views/consultation/sdk/reportForm.ts
new file mode 100644
index 0000000..d2a5ac5
--- /dev/null
+++ b/src/views/consultation/sdk/reportForm.ts
@@ -0,0 +1,80 @@
+export default function useReportFormModule() {
+ /**
+ * query Call Record
+ * @returns
+ */
+ const queryCallRecord = (callRecordParams) => {
+ return window.lemon.reportForm.queryCallRecord(callRecordParams);
+ };
+
+ /**
+ * fetch Call Recording File Url
+ * @returns
+ */
+ const fetchCallRecordingFileUrl = (param: { sound_file: string }) => {
+ return window.lemon.reportForm.fetchCallRecordingFileUrl(param);
+ };
+
+ /**
+ * query message Record
+ * @returns
+ */
+ const queryMsgRecord = (msgRecordParams) => {
+ return window.lemon.reportForm.queryMsgRecord(msgRecordParams);
+ };
+
+ /**
+ * query rrs Record
+ * @returns
+ */
+ const queryRrsRecord = (rrsRecordParams) => {
+ return window.lemon.reportForm.queryRrsRecord(rrsRecordParams);
+ };
+
+ /**
+ * query emg alarm Record
+ * @returns
+ */
+ const queryEmgAlarmRecord = (emgAlarmRecordParams) => {
+ return window.lemon.reportForm.queryEmgAlarmRecord(emgAlarmRecordParams);
+ };
+
+ /**
+ * query Geofencing alarm Record
+ * @returns
+ */
+ const queryGeofencingAlarmRecord = (geofencingAlarmRecordParams) => {
+ return window.lemon.reportForm.queryGeofencingAlarmRecord(
+ geofencingAlarmRecordParams
+ );
+ };
+
+ /**
+ * query speed alarm Record
+ * @returns
+ */
+ const querySpeedAlarmRecord = (speedAlarmRecordParams) => {
+ return window.lemon.reportForm.querySpeedAlarmRecord(
+ speedAlarmRecordParams
+ );
+ };
+
+ /**
+ * query CallBack Record
+ * @returns
+ */
+ const queryCallBackRecord = (callBackRecordParams) => {
+ return window.lemon.reportForm.queryCallBackRecord(callBackRecordParams);
+ };
+
+ return {
+ queryCallRecord,
+ fetchCallRecordingFileUrl,
+ queryMsgRecord,
+ queryRrsRecord,
+ queryEmgAlarmRecord,
+ queryGeofencingAlarmRecord,
+ querySpeedAlarmRecord,
+ queryCallBackRecord,
+ };
+}
diff --git a/src/views/consultation/utils/format-show-name.js b/src/views/consultation/utils/format-show-name.js
new file mode 100644
index 0000000..c3fd0b4
--- /dev/null
+++ b/src/views/consultation/utils/format-show-name.js
@@ -0,0 +1,14 @@
+/**
+ * 按个性化设置格式化显示的名称,当3K时去掉前5位的直客ID
+ * @param name 别名(为空时返回号码)
+ * @param number 用户号码
+ * @returns 格式化后用户看到的名称
+ */
+export function formatShowNameFin(name, number) {
+ if (name) {
+ return `${name}(${number})`;
+ }
+ return number;
+}
+
+export default null;