Ver Fonte

reactor:分机管理新增保持和三方通话状态;

zhangchong há 1 ano atrás
pai
commit
fbf7cea9ba

+ 7 - 1
src/layout/navBars/breadcrumb/telControl.vue

@@ -987,7 +987,6 @@ const onMessage = (event: any) => {
 
 		if (data.state == 'busy') {
 			holdStatus(data.private_data); //处理保持
-			sendMsg('busy');
 			if (data.private_data == 'monitoring') {
 				// 三方来电振铃中
 				useTelStatusStore.setPhoneControlState(TelStates.ring);
@@ -999,11 +998,13 @@ const onMessage = (event: any) => {
 				// 设置电话状态 三方通话中
 				useTelStatusStore.setPhoneControlState(TelStates.onConference);
 				console.log('呼叫中心:三方来电通话中');
+				sendMsg('busy');
 			} else if (data.private_data == 'three_way_hangup') {
 				// 三方来电挂断
 				// 设置电话状态 通话中
 				useTelStatusStore.setPhoneControlState(TelStates.onCall);
 				onCallArr.value = [];
+				sendMsg('busy');
 				console.log('呼叫中心:三方来电挂断');
 			} else if (data.private_data == 'three_way_ring') {
 				// 三方通话呼出中
@@ -1014,12 +1015,14 @@ const onMessage = (event: any) => {
 				// 设置电话状态 呼出三方通话中 可以踢人和挂断通话
 				useTelStatusStore.setPhoneControlState(TelStates.onThreeWay);
 				console.log('呼叫中心:三方通话呼出接通,推送一次');
+				sendMsg('treeWay');
 			} else if (data.call_direction == 'outbound') {
 				// 呼出
 				if (data.private_data == 'calling') {
 					// 拨号中
 					// 设置电话状态 振铃中
 					useTelStatusStore.setPhoneControlState(TelStates.ring);
+					sendMsg('busy');
 					console.log('呼叫中心:呼出拨号中');
 				} else if (data.private_data == 'answered') {
 					//振铃中
@@ -1035,6 +1038,7 @@ const onMessage = (event: any) => {
 						useTelStatusStore.setPhoneControlState(TelStates.onCall);
 						console.log('呼叫中心:呼出通话中');
 					}
+					sendMsg('busy');
 				}
 			} else {
 				// 呼入
@@ -1136,6 +1140,7 @@ const holdStatus = (holdStatus: string) => {
 			useTelStatusStore.setHold(true);
 			// 设置电话状态 保持中
 			useTelStatusStore.setPhoneControlState(TelStates.onHold);
+			sendMsg('held');
 			break;
 		case 'unheld':
 			// 设置电话状态 通话中
@@ -1349,6 +1354,7 @@ const onUnHold = () => {
 		.then(() => {
 			state.loading = true;
 			ola.unhold(); //取消保持
+			sendMsg('busy');
 			state.loading = false;
 		})
 		.catch(() => {});

+ 1 - 5
src/layout/navBars/breadcrumb/user.vue

@@ -32,7 +32,7 @@
 					v-model:visible="newsVisible"
 				>
 					<template #reference>
-						<el-badge :value="messageCount" :max="99" :hidden="messageHidden">
+						<el-badge :value="messageCount" :max="99" :hidden="messageCount <= 0">
 							<SvgIcon name="ele-Bell" size="18px" />
 						</el-badge>
 					</template>
@@ -281,10 +281,6 @@ const onLayoutSetTingClick = () => {
 const userVisible = ref<boolean>(false); //是否显示用户信息
 const newsVisible = ref<boolean>(false); //是否显示消息
 const messageCount = ref<number>(0); //消息数量
-const messageHidden = computed(() => {
-	//消息是否隐藏
-	return messageCount.value === 0;
-});
 // 获取数量
 const getNumAndList = async () => {
 	try {

+ 150 - 105
src/views/tels/extension/index.vue

@@ -1,151 +1,196 @@
 <template>
-	<div class="tels-callLog-container layout-pd">
-		<el-card shadow="never">
-			<el-radio-group v-model="telState" class="mb10" @change="queryList">
-				<el-radio label=" "
-					>总数:<el-tag type="">{{ state.tableList.length }}</el-tag></el-radio
-				>
-				<el-radio label=""
-					>注册数:<el-tag type="success">{{ registerCount }}</el-tag></el-radio
-				>
-				<el-radio label="login"
-					>签入数:<el-tag type="danger">{{ loginCount }}</el-tag></el-radio
-				>
-				<el-radio label="ready"
-					>示闲数:<el-tag type="info">{{ readyCount }}</el-tag></el-radio
-				>
-				<el-radio label="unready"
-					>示忙数:<el-tag type="success">{{ unreadyCount }}</el-tag></el-radio
-				>
-				<el-radio label="busy"
-					>通话数:<el-tag type="danger">{{ busyCount }}</el-tag></el-radio
-				>
-				<el-radio label="acw"
-					>整理数:<el-tag type="info">{{ acwCount }}</el-tag></el-radio
-				>
-			</el-radio-group>
-			<!-- 表格 -->
-			<el-table :data="state.showTableList" v-loading="state.loading">
-				<el-table-column prop="telNo" label="分机号" show-overflow-tooltip width="200"></el-table-column>
-				<el-table-column label="是否注册" show-overflow-tooltip width="200">
-					<template #default="{ row }">
-						<el-tag v-if="row.sipState === 'true'" type="success">已注册</el-tag>
-						<el-tag v-else type="danger">未注册</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column prop="device" label="注册信息" show-overflow-tooltip></el-table-column>
-				<el-table-column label="状态" show-overflow-tooltip width="200">
-					<template #default="{ row }">
-						<el-tag v-if="row.state === 'login'" type="success">签入</el-tag>
-						<el-tag v-else-if="row.state === 'ready'" type="info">示闲</el-tag>
-						<el-tag v-else-if="row.state === 'unready'" type="warning">示忙</el-tag>
-						<el-tag v-else-if="row.state === 'busy'">通话</el-tag>
-						<el-tag v-else-if="row.state === 'acw'" type="info">整理</el-tag>
-						<el-tag v-else-if="row.state === 'logout'" type="danger">签出</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column label="操作" width="100" fixed="right" align="center">
-					<template #default="{ row }">
-						<el-button link type="primary" @click="onListen(row)" title="监听分机" v-auth="'tels:extension:listen'" v-if="row.state === 'busy'">
-							监听分机
-						</el-button>
-					</template>
-				</el-table-column>
-				<template #empty>
-					<Empty />
-				</template>
-			</el-table>
-		</el-card>
-	</div>
+  <div class="tels-callLog-container layout-pd">
+    <el-card shadow="never">
+      <el-radio-group v-model="telState" class="mb10" @change="search">
+        <el-radio label=" "
+        >总数:
+          <el-tag type="">{{ state.tableList.length }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="device"
+        >注册数:
+          <el-tag type="success">{{ registerCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="login"
+        >签入数:
+          <el-tag type="danger">{{ loginCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="ready"
+        >示闲数:
+          <el-tag type="info">{{ readyCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="unready"
+        >小休数:
+          <el-tag type="success">{{ unreadyCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="busy"
+        >通话数:
+          <el-tag type="danger">{{ busyCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="acw"
+        >整理数:
+          <el-tag type="info">{{ acwCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="held"
+        >保持数:
+          <el-tag type="success">{{ heldCount }}</el-tag>
+        </el-radio
+        >
+        <el-radio label="threeWay"
+        >三方会议数:
+          <el-tag type="danger">{{ threeWayCount }}</el-tag>
+        </el-radio
+        >
+      </el-radio-group>
+      <!-- 表格 -->
+      <el-table :data="state.showTableList" v-loading="state.loading">
+        <el-table-column prop="telNo" label="分机号" show-overflow-tooltip width="200"></el-table-column>
+        <el-table-column label="是否注册" show-overflow-tooltip width="200">
+          <template #default="{ row }">
+            <el-tag v-if="row.sipState === 'true'" type="success">已注册</el-tag>
+            <el-tag v-else type="danger">未注册</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="device" label="注册信息" show-overflow-tooltip></el-table-column>
+        <el-table-column label="状态" show-overflow-tooltip width="200">
+          <template #default="{ row }">
+            <el-tag v-if="row.state === 'login'" type="success">签入</el-tag>
+            <el-tag v-else-if="row.state === 'ready'" type="info">示闲</el-tag>
+            <el-tag v-else-if="row.state === 'unready'" type="warning">小休</el-tag>
+            <el-tag v-else-if="row.state === 'busy'">通话</el-tag>
+            <el-tag v-else-if="row.state === 'acw'" type="info">整理</el-tag>
+            <el-tag v-else-if="row.state === 'logout'" type="danger">签出</el-tag>
+            <el-tag v-else-if="row.state === 'held'" type="danger">保持</el-tag>
+            <el-tag v-else-if="row.state === 'threeWay'" type="danger">三方会议</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="100" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button link type="primary" @click="onListen(row)" title="监听分机" v-auth="'tels:extension:listen'" v-if="row.state === 'busy'">
+              监听分机
+            </el-button>
+          </template>
+        </el-table-column>
+        <template #empty>
+          <Empty/>
+        </template>
+      </el-table>
+    </el-card>
+  </div>
 </template>
 
 <script lang="ts" setup name="telsExtension">
-import { computed, onMounted, reactive, ref } from 'vue';
-import type { FormInstance } from 'element-plus';
-import { ElButton } from 'element-plus';
+import {computed, onMounted, reactive, ref} from 'vue';
+import type {FormInstance} from 'element-plus';
+import {ElButton} from 'element-plus';
 import signalR from '@/utils/signalR';
-import { ola } from '@/utils/ola_api';
-import { storeToRefs } from 'pinia';
-import { useTelStatus } from '@/stores/telStatus';
-import { extensionPaged } from '@/api/tels/extension';
+import {ola} from '@/utils/ola_api';
+import {storeToRefs} from 'pinia';
+import {useTelStatus} from '@/stores/telStatus';
+import {extensionPaged} from '@/api/tels/extension';
 
 // 定义变量内容
 const state = reactive(<any>{
-	tableList: [], // 列表数据
-	showTableList: [], // 显示的列表数据
-	loading: false, // 加载
-	total: 0, // 总条数
+  tableList: [], // 列表数据
+  showTableList: [], // 显示的列表数据
+  loading: false, // 加载
+  total: 0, // 总条数
 });
 const telState = ref<string>(' ');
 const useTelStatusStore = useTelStatus();
-const { telStatusInfo } = storeToRefs(useTelStatusStore); // 电话状态
+const {telStatusInfo} = storeToRefs(useTelStatusStore); // 电话状态
 const ruleFormRef = ref<FormInstance>(); // 表单ref
 /** 通话记录列表 */
 const queryList = async () => {
-	state.loading = true;
-	try {
-		const response = await extensionPaged();
-		state.tableList = response.result;
-		state.showTableList = state.tableList;
-		if (telState.value !== ' ') {
-			state.showTableList = state.tableList.filter((item: any) => item.state === telState.value);
-		}
-		state.loading = false;
-	} catch (e) {
-		state.loading = false;
-	}
+  state.loading = true;
+  try {
+    const response = await extensionPaged();
+    state.tableList = response.result;
+    state.showTableList = state.tableList;
+    state.loading = false;
+  } catch (e) {
+    state.loading = false;
+  }
 };
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	queryList();
+const search = () => {
+  state.loading = true;
+  if (telState.value !== ' ') {
+    if (telState.value === 'device') {
+      state.showTableList = state.tableList.filter((item: any) => item.sipState === 'true');
+    } else {
+      state.showTableList = state.tableList.filter((item: any) => item.state === telState.value);
+    }
+    setTimeout(() => {
+      state.loading = false;
+    }, 200);
+  } else {
+    state.showTableList = state.tableList;
+    setTimeout(() => {
+      state.loading = false;
+    }, 200);
+  }
 };
 // 注册数
 const registerCount = computed(() => {
-	return state.tableList.filter((item: any) => item.cdpn).length;
+  return state.tableList.filter((item: any) => item.device).length;
 });
 // 签入数
 const loginCount = computed(() => {
-	return state.tableList.filter((item: any) => item.state === 'login').length;
+  return state.tableList.filter((item: any) => item.state === 'login').length;
 });
 // 示闲数
 const readyCount = computed(() => {
-	return state.tableList.filter((item: any) => item.state === 'ready').length;
+  return state.tableList.filter((item: any) => item.state === 'ready').length;
 });
 // 示忙数
 const unreadyCount = computed(() => {
-	return state.tableList.filter((item: any) => item.state === 'unready').length;
+  return state.tableList.filter((item: any) => item.state === 'unready').length;
 });
 // 通话数
 const busyCount = computed(() => {
-	return state.tableList.filter((item: any) => item.state === 'busy').length;
+  return state.tableList.filter((item: any) => item.state === 'busy').length;
 });
 // 整理数
 const acwCount = computed(() => {
-	return state.tableList.filter((item: any) => item.state === 'acw').length;
+  return state.tableList.filter((item: any) => item.state === 'acw').length;
+});
+// 保持数
+const heldCount = computed(() => {
+  return state.tableList.filter((item: any) => item.state === 'held').length;
+});
+// 三方会议数
+const threeWayCount = computed(() => {
+  return state.tableList.filter((item: any) => item.state === 'threeWay').length;
 });
 // 监听分机
 const onListen = (row: any) => {
-	ola.monitor(row.telNo, telStatusInfo.value.telsNo);
+  ola.monitor(row.telNo, telStatusInfo.value.telsNo);
 };
 onMounted(() => {
-	queryList();
-	signalR.joinGroup('BigScreen-SeatState');
-	signalR.SR.on('SeatState', (data: any) => {
-		const item = state.tableList.find((item: any) => item.telNo === data.telNo);
-		if (item) {
-			item.state = data.state;
-		}
-	});
+  queryList();
+  signalR.joinGroup('BigScreen-SeatState');
+  signalR.SR.on('SeatState', (data: any) => {
+    const item = state.tableList.find((item: any) => item.telNo === data.telNo);
+    if (item) {
+      item.state = data.state;
+    }
+    search();
+  });
 });
 </script>
 <style lang="scss" scoped>
 .arrow {
-	transition: transform var(--el-transition-duration);
-	cursor: pointer;
+  transition: transform var(--el-transition-duration);
+  cursor: pointer;
 }
+
 .arrow.is-reverse {
-	transform: rotateZ(-180deg);
+  transform: rotateZ(-180deg);
 }
 </style>