Эх сурвалжийг харах

reactor:签入时间调整;

zhangchong 1 жил өмнө
parent
commit
f39b701d50

+ 1 - 1
src/components/OrderDetail/index.vue

@@ -436,7 +436,7 @@
 					@click="onCancelDelay"
 					:loading="state.loading"
 					v-auth="'business:order:cancelDelay'"
-					v-if="!state.ruleForm?.isCanDelay"
+					v-if="state.ruleForm?.isCanCancelDelay"
 					>取消延期</el-button
 				>
 				<!-- 办理中和会签中并且应该自己办理并且没有在延期中 -->

+ 1 - 1
src/layout/footer/footer.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="layout-footer pd15">
+  <div class="layout-footer">
     <div class="layout-footer-warp">
       <el-link href="#" target="_blank" type="info"> 成都丰窝科技有限公司 </el-link>
     </div>

+ 1 - 1
src/layout/footer/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<div class="layout-footer pb15">
+	<div class="layout-footer">
 		<div class="layout-footer-warp">
 			<el-link href="https://beian.miit.gov.cn/" target="_blank" type="info"> 蜀ICP备19035032号-36</el-link>
 		</div>

+ 62 - 23
src/layout/navBars/breadcrumb/telControl.vue

@@ -479,7 +479,7 @@
 </template>
 
 <script setup lang="ts" name="telControl">
-import { reactive, ref, computed, defineAsyncComponent, onMounted, onUnmounted, onBeforeUnmount } from 'vue';
+import { reactive, ref, computed, defineAsyncComponent, onMounted, onUnmounted, onBeforeUnmount, unref } from 'vue';
 import { ElMessageBox, ElNotification, ElMessage, FormInstance } from 'element-plus';
 import { storeToRefs } from 'pinia';
 import { useTelStatus, TelStates, RestStates } from '@/stores/telStatus';
@@ -606,14 +606,11 @@ const removeTimer = () => {
 // 开始签入时长
 const onDutyTime = ref<any>(0); // 签入时长
 const onDutyTimer = ref<any>(null); // 签入时长定时器
-const startDutyTimer = (startTime?: any) => {
-	if (startTime) {
+const startDutyTimer = (second: any) => {
+	if (second) {
 		// 从后台获取签入时长
-		// 使用当前时间减去后台返回的签入时间
-		if (!startTime) startTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss');
-		startTime = dayjs(new Date()).diff(dayjs(startTime), 'second');
-		if (startTime < 0) startTime = 0; // 防止后台返回的签入时间大于当前时间
-		onDutyTime.value = startTime;
+		if (second < 0) second = 0; // 防止后台返回的签入时间大于当前时间
+		onDutyTime.value = second;
 		onDutyTimer.value = setInterval(() => {
 			onDutyTime.value++;
 		}, 1000);
@@ -745,6 +742,7 @@ const onControlClick = (val: string) => {
 
 const dutyFormRef = ref<RefType>();
 const currentTel = ref<any>({}); // 当前分机
+const isRest = ref<boolean>(false); // 是否小休
 //签入
 const onDutyFn = async () => {
 	if (AppConfigInfo.value.isNeedTelNo || AppConfigInfo.value.isTelNeedVerify) {
@@ -769,7 +767,8 @@ const onDutyFn = async () => {
 						currentTel.value.queue = res.result.queueId;
 						// 不需要选择分机号和密码 直接签入 传入默认分机号
 						websocket_connect(); //开启消息监听
-						startDutyTimer(res.result.startTime); // 开启计时 签入时长
+						startDutyTimer(res.result.second); // 开启计时 签入时长
+						isRest.value = res.result.isRest;
 						state.loading = false;
 					})
 					.catch(() => {})
@@ -826,7 +825,8 @@ const clickOnDuty = (formEl: FormInstance | undefined) => {
 					currentTel.value.queue = res.result.queueId;
 				}
 				websocket_connect(); //开启消息监听
-				startDutyTimer(res.result.startTime); // 开启计时 签入时长
+				startDutyTimer(res.result.second); // 开启计时 签入时长
+				isRest.value = res.result.isRest;
 				state.loading = false;
 				state.dutyDialogVisible = false;
 			})
@@ -900,12 +900,19 @@ const onMessage = async (event: any) => {
 			useTelStatusStore.setCallInfo({ telsNo: currentTel.value.telNo });
 			state.loading = true;
 			setTimeout(() => {
-				// 设置示闲状态
-				ola.go_ready();
-				console.log('呼叫中心:调用示闲');
+				console.log('isRest', `当前分机是否正在休息${isRest.value}`);
+				if (isRest.value) {
+					// 如果是小休状态
+					ola.go_break(''); //设置忙碌
+				} else {
+					// 设置示闲状态
+					ola.go_ready();
+					console.log('呼叫中心:调用示闲');
+				}
 			}, 1000);
 			console.log('呼叫中心:已签入');
 			ElMessage.success('签入成功');
+
 			sendMsg('login');
 		} else if (data.state == 'logout') {
 			// 签出
@@ -1140,19 +1147,24 @@ const onMessage = async (event: any) => {
 const isReconnect = ref(true); // 呼叫中心是否需要重连
 const onClose = () => {
 	console.log('呼叫中心断开链接', isReconnect.value ? '需要重连' : '不需要重连');
-	// 重置所有状态
-	useTelStatusStore.resetState();
 	removeTimerOnDuty(); // 移除签入时长定时器
 	removeTimer(); // 移除通话计时器
 	clearTimeout(talkDealTimer.value); // 清除话后整理定时器
 	clearInterval(pingTimer.value); // 清除心跳定时器
-	if (isReconnect.value) reConnect(); // 重新链接呼叫中心
+	clearInterval(onDutyTimer.value); // 清除签入时长定时器
+	clearInterval(talkTimer.value); // 清除通话时长定时器
+	if (isReconnect.value) {
+		reConnect(); // 重新链接呼叫中心
+		Local.set('currentTelNo', currentTel.value.telNo);
+	}
+	// 重置所有状态
+	useTelStatusStore.resetState();
 };
 // 重新链接呼叫中心
 let reconnectAttempts = 0; // 重连次数
 let maxReconnectAttempts = 10; // 最大重连次数
-let reconnectInterval = 5; // 重连间隔
-const reConnect = () => {
+let reconnectInterval = 2; // 重连间隔
+const reConnect = async () => {
 	ElNotification({
 		title: '重连提示',
 		message: `检测到与呼叫中心链接断开,${reconnectInterval}秒后将重新链接`,
@@ -1197,16 +1209,20 @@ const break_reason = (reason: string) => {
 			restReason.value = '休息中';
 			break;
 	}
-	if (telStatusInfo.value.isRest !== 'resting') {
+	if (telStatusInfo.value.isRest !== 'resting' && !isRest.value) {
 		// 如果不在在小休中
 		const restReasons = state.restReasonOptions.find((item: any) => item.dicDataValue === reason);
 		busyOn({ reason: restReasons?.dicDataName ?? '' }) // 开始小休 设置示忙 业务系统统计需要
 			.then(() => {
 				console.log('业务系统调用示忙成功');
+				state.loading = false;
 			})
 			.catch((err) => {
 				console.log('业务系统调用示忙失败', err);
+				state.loading = false;
 			});
+	} else {
+		state.loading = false;
 	}
 };
 // 保持状态处理
@@ -1579,14 +1595,36 @@ const wsReceive = (message: any) => {
 };
 // 刷新页面呼叫中心链接
 const callCenterConnect = async () => {
-	if (telStatusInfo.value.telsNo) {
+	const currentTelNo = Local.get('currentTelNo');
+	console.log(telStatusInfo.value.telsNo, currentTelNo, isReconnect.value, '刷新页面呼叫中心链接');
+	if (currentTelNo && isReconnect.value) {
+		// 重新链接
+		try {
+			const { result } = await dutyOn({ telNo: currentTelNo });
+			currentTel.value.password = result.telPwd;
+			currentTel.value.telNo = result.telNo;
+			currentTel.value.queue = result.queueId;
+			Local.remove('currentTelNo');
+			startDutyTimer(result.second); // 开启计时 签入时长
+			isRest.value = result.isRest;
+			state.loading = false;
+		} catch (e) {
+			console.log(e);
+			// await dutyOff();
+			// 重置所有状态
+			useTelStatusStore.resetState();
+			state.loading = false;
+		}
+	} else if (telStatusInfo.value.telsNo) {
+		// 刷新页面
 		try {
 			const { result } = await dutyOn({ telNo: telStatusInfo.value.telsNo });
 			currentTel.value.password = result.telPwd;
 			currentTel.value.telNo = result.telNo;
 			currentTel.value.queue = result.queueId;
 			websocket_connect(); //开启消息监听
-			startDutyTimer(result.startTime); // 开启计时 签入时长
+			startDutyTimer(result.second); // 开启计时 签入时长
+			isRest.value = result.isRest;
 			state.loading = false;
 		} catch (e) {
 			console.log(e);
@@ -1598,7 +1636,6 @@ const callCenterConnect = async () => {
 	} else {
 		// 重置所有状态
 		useTelStatusStore.resetState();
-		// 移除
 	}
 };
 // 获取小休原因
@@ -1627,6 +1664,8 @@ onMounted(async () => {
 	removeTimer(); // 移除通话计时器
 	clearTimeout(talkDealTimer.value); // 清除话后整理定时器
 	clearInterval(pingTimer.value); // 清除心跳定时器
+	clearInterval(onDutyTimer.value); // 清除签入时长定时器
+	clearInterval(talkTimer.value); // 清除通话时长定时器
 	await getTelsLists(); // 查询所有分机
 	await callCenterConnect(); // 呼叫中心链接
 	// 加入分组
@@ -1634,7 +1673,7 @@ onMounted(async () => {
 });
 onBeforeUnmount(() => {
 	mittBus.off('RestApplyPass');
-	ola.close();
+	if (ola.ws) ola.close();
 });
 </script>
 

+ 5 - 2
src/views/todo/seats/accept/Knowledge.vue

@@ -60,7 +60,7 @@
 </template>
 <script setup lang="ts" name="orderAcceptKnowledge">
 // 定义变量内容
-import { onMounted, reactive, defineAsyncComponent } from 'vue';
+import { onMounted, reactive, defineAsyncComponent, ref } from 'vue';
 import { useRoute, useRouter } from 'vue-router';
 import { formatDate } from '@/utils/formatTime';
 import { knowledgeRetrieval } from '@/api/knowledge/retrieval';
@@ -99,7 +99,7 @@ const state = reactive<any>({
 const knowledgeRetrievalPaged = async () => {
 	try {
 		state.loading = true;
-		const res: any = await knowledgeRetrieval(state.queryParams);
+		const res: any = await knowledgeRetrieval({ ...state.queryParams, HotspotName: state.queryParams.Attribution ? '' : HotspotName.value });
 		state.knowledgeList = res.result?.items ?? [];
 		state.knowledgeTotal = res.result?.total ?? 0;
 		state.loading = false;
@@ -113,6 +113,7 @@ const querySearchAsync = (queryString: string | null, cb: (arg: any) => void) =>
 		knowledgeRetrieval({
 			...state.queryParams,
 			Keyword: queryString,
+			HotspotName: state.queryParams.Attribution ? '' : HotspotName.value,
 		})
 			.then((res: any) => {
 				state.loading = false;
@@ -144,9 +145,11 @@ const onPreview = (row: any) => {
 	});
 };
 // 提供外部查询
+const HotspotName = ref('');
 const querySearch = async (name: string) => {
 	try {
 		// state.queryParams.Keyword = name;
+		HotspotName.value = name;
 		state.loading = true;
 		const request = {
 			...state.queryParams,