Просмотр исходного кода

reactor:甄别申请查询条件调整;

zhangchong 1 год назад
Родитель
Сommit
679dccab81

BIN
src/assets/images/phoneControls/evaluate_blue.png


BIN
src/assets/images/phoneControls/evaluate_grey.png


BIN
src/assets/images/phoneControls/evaluate_white.png


+ 179 - 112
src/layout/navBars/breadcrumb/telControl.vue

@@ -31,7 +31,6 @@
 					<img :src="getImageUrl('phoneControls/dutyOff_grey.png')" alt="" />
 					<span>签出</span>
 				</div>
-				<!-- 签出不可用 -->
 			</template>
 			<!-- 灰色签入不可用 -->
 			<template v-else>
@@ -47,6 +46,27 @@
 				</div>
 			</template>
 
+<!--			&lt;!&ndash; 外呼模式和取消外呼模式 可用 &ndash;&gt;
+			<template v-if="telStatusInfo.isDutyOn && activeArr.includes('callOut')">
+				<div
+					class="item active"
+					:title="telStatusInfo.isHold ? '取消外呼模式' : '外呼模式'"
+					@click="onControlClick(telStatusInfo.isCallOut ? 'unCallOut' : 'callOut')"
+					@mouseenter="onHover('callOutSrc', 'phoneControls/evaluate_white.png')"
+					@mouseleave="onHover('callOutSrc', 'phoneControls/evaluate_blue.png')"
+				>
+					<img :src="state.callOutSrc" alt="" />
+					<span>{{ telStatusInfo.isCallOut ? '取消外呼模式' : '外呼模式' }}</span>
+				</div>
+			</template>
+			&lt;!&ndash; 灰色外呼不可用 &ndash;&gt;
+			<template v-else>
+				<div class="item disabled" title="外呼模式">
+					<img :src="getImageUrl('phoneControls/evaluate_grey.png')" alt="" />
+					<span>外呼模式</span>
+				</div>
+			</template>-->
+
 			<!-- 可用挂断 -->
 			<template v-if="telStatusInfo.isDutyOn && activeArr.includes('hangup')">
 				<div
@@ -553,10 +573,11 @@ const state = reactive<any>({
 	hangupSrc: getImageUrl('phoneControls/hangup_blue.png'), //挂断图片
 	restSrc: getImageUrl('phoneControls/rest_blue.png'), //小休图片
 	holdSrc: getImageUrl('phoneControls/hold_blue.png'), //保持图片
-	talkingDealSrc: getImageUrl('phoneControls/talkingDeal_blue.png'), //时候处理图片
+	talkingDealSrc: getImageUrl('phoneControls/talkingDeal_blue.png'), //话后整理图片
 	transferSrc: getImageUrl('phoneControls/transfer_blue.png'), //转接图片
 	conferenceSrc: getImageUrl('phoneControls/conference_blue.png'), //三方会议图片
 	outboundSrc: getImageUrl('phoneControls/outbound_blue.png'), //外呼图片
+	callOutSrc: getImageUrl('phoneControls/evaluate_blue.png'), // 外呼模式图片
 	restReasonOptions: [], // 小休原因
 	nextStepOptions: [], // 下一个环节
 	handlerOptions: [], // 处理人
@@ -638,12 +659,13 @@ const signalRStart = async () => {
 const activeArr = computed(() => {
 	const switchCases: any = {
 		dutyOff: ['dutyOn'], // 签出状态
-		dutyOn: ['dutyOff', 'rest', 'outbound', 'callForwarding'], // 已签入无通话状态
-		rest: ['rest', 'callForwarding'], // 小休中状态
+		dutyOn: ['dutyOff', 'callOut', 'rest', 'outbound'], // 已签入无通话状态
+		onCallOut: ['callOut', 'outbound'], // 外呼模式中
+		rest: ['rest'], // 小休中状态
 		ring: ['hangup'], //振铃中
 		onCall: ['hangup', 'hold', 'transfer', 'evaluate', 'conference'], // 单个通话中
 		onHold: ['hangup', 'hold', 'transfer', 'evaluate'], // 保持中
-		onTalkingDeal: ['dutyOff', 'rest', 'callForwarding', 'TalkingDeal'], // 话后整理中
+		onTalkingDeal: ['dutyOff', 'rest', 'TalkingDeal'], // 话后整理中
 		onConference: ['hangup'], // 三方会议中 只能挂断
 		onThreeWay: ['hangup', 'conference'], // 三方会议呼出中 只能挂断和踢人
 	};
@@ -658,6 +680,7 @@ const currentStatusText = computed(() => {
 	const statusMap: any = {
 		dutyOff: '签出',
 		dutyOn: '空闲',
+    onCallOut: '外呼中',
 		rest: '小休中',
 		ring: '振铃中',
 		onHold: '保持中',
@@ -705,6 +728,12 @@ const onControlClick = (val: string) => {
 		case 'dutyOff': //签出
 			offDutyFn();
 			break;
+		case 'unCallOut': //取消外呼模式
+			onUnCallOut();
+			break;
+		case 'callOut': //外呼模式
+			onCallOut();
+			break;
 		case 'hangup': //挂断
 			onHangup();
 			break;
@@ -739,110 +768,6 @@ const onControlClick = (val: string) => {
 			break;
 	}
 };
-
-const dutyFormRef = ref<RefType>();
-const currentTel = ref<any>({}); // 当前分机
-const isRest = ref<boolean>(false); // 是否小休
-//签入
-const onDutyFn = async () => {
-	if (AppConfigInfo.value.isNeedTelNo || AppConfigInfo.value.isTelNeedVerify) {
-		// 需要选择分机号或者输入密码 打开弹窗选择分机号
-		dutyFormRef.value?.resetFields();
-		state.dutyDialogVisible = true;
-	} else {
-		ElMessageBox.confirm(`确定要签入,是否继续?`, '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
-			type: 'warning',
-			draggable: true,
-			cancelButtonClass: 'default-button',
-			autofocus: false,
-		})
-			.then(() => {
-				state.loading = true;
-				dutyOn({ telNo: userInfos.value.defaultTelNo })
-					.then((res: any) => {
-						currentTel.value.password = res.result.telPwd;
-						currentTel.value.telNo = res.result.telNo;
-						currentTel.value.queue = res.result.queueId;
-						// 不需要选择分机号和密码 直接签入 传入默认分机号
-						websocket_connect(); //开启消息监听
-						startDutyTimer(res.result.second); // 开启计时 签入时长
-						isRest.value = res.result.isRest;
-						state.loading = false;
-					})
-					.catch(() => {})
-					.finally(() => {
-						state.loading = false;
-					});
-			})
-			.catch(() => {
-				state.loading = false;
-			});
-	}
-};
-// 确认签入
-const clickOnDuty = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.validate((valid: boolean) => {
-		if (!valid) return;
-		state.loading = true;
-		let request = {};
-		if (AppConfigInfo.value.isNeedTelNo && AppConfigInfo.value.isTelNeedVerify) {
-			// 需要分机和密码
-			request = {
-				telNo: state.dutyForm.telNo,
-				telPwd: state.dutyForm.password,
-			};
-		} else if (AppConfigInfo.value.isNeedTelNo) {
-			//需要分机号
-			request = {
-				telNo: state.dutyForm.telNo,
-			};
-		} else if (AppConfigInfo.value.isTelNeedVerify) {
-			// 需要密码
-			request = {
-				telNo: state.dutyForm.telNo,
-				telPwd: userInfos.value.defaultTelNo,
-			};
-		}
-		dutyOn(request)
-			.then((res: any) => {
-				if (AppConfigInfo.value.isNeedTelNo && AppConfigInfo.value.isTelNeedVerify) {
-					// 需要分机和密码
-					currentTel.value.password = state.dutyForm.password;
-					currentTel.value.telNo = state.dutyForm.telNo;
-					currentTel.value.queue = res.result.queueId;
-				} else if (AppConfigInfo.value.isNeedTelNo) {
-					//需要分机号
-					currentTel.value.password = res.result.telPwd;
-					currentTel.value.telNo = res.result.telNo;
-					currentTel.value.queue = res.result.queueId;
-				} else if (AppConfigInfo.value.isTelNeedVerify) {
-					// 需要密码
-					currentTel.value.password = state.dutyForm.password;
-					currentTel.value.telNo = res.result.telNo;
-					currentTel.value.queue = res.result.queueId;
-				}
-				websocket_connect(); //开启消息监听
-				startDutyTimer(res.result.second); // 开启计时 签入时长
-				isRest.value = res.result.isRest;
-				state.loading = false;
-				state.dutyDialogVisible = false;
-			})
-			.catch(() => {
-				// dutyOff();
-				// 重置所有状态
-				useTelStatusStore.resetState();
-				console.log('呼叫中心:签入错误111');
-			})
-			.finally(() => {
-				state.loading = false;
-				state.dutyDialogVisible = false;
-			});
-	});
-};
-
 // 链接呼叫中心
 const websocket_connect = () => {
 	console.log('链接呼叫中心');
@@ -1020,9 +945,9 @@ const onMessage = async (event: any) => {
 		} else if (data.state == 'busy') {
 			console.log(data.state, '其他状态');
 			/*			// 设置振铃中
-			useTelStatusStore.setPhoneControlState(TelStates.ring);
-			sendMsg('busy');
-			console.log('呼叫中心:转接中....');*/
+      useTelStatusStore.setPhoneControlState(TelStates.ring);
+      sendMsg('busy');
+      console.log('呼叫中心:转接中....');*/
 		} else {
 			console.log(data.state, '其他状态1');
 		}
@@ -1279,6 +1204,108 @@ const holdStatus = (holdStatus: string) => {
 			break;
 	}
 };
+const dutyFormRef = ref<RefType>();
+const currentTel = ref<any>({}); // 当前分机
+const isRest = ref<boolean>(false); // 是否小休
+//签入
+const onDutyFn = async () => {
+	if (AppConfigInfo.value.isNeedTelNo || AppConfigInfo.value.isTelNeedVerify) {
+		// 需要选择分机号或者输入密码 打开弹窗选择分机号
+		dutyFormRef.value?.resetFields();
+		state.dutyDialogVisible = true;
+	} else {
+		ElMessageBox.confirm(`确定要签入,是否继续?`, '提示', {
+			confirmButtonText: '确认',
+			cancelButtonText: '取消',
+			type: 'warning',
+			draggable: true,
+			cancelButtonClass: 'default-button',
+			autofocus: false,
+		})
+			.then(() => {
+				state.loading = true;
+				dutyOn({ telNo: userInfos.value.defaultTelNo })
+					.then((res: any) => {
+						currentTel.value.password = res.result.telPwd;
+						currentTel.value.telNo = res.result.telNo;
+						currentTel.value.queue = res.result.queueId;
+						// 不需要选择分机号和密码 直接签入 传入默认分机号
+						websocket_connect(); //开启消息监听
+						startDutyTimer(res.result.second); // 开启计时 签入时长
+						isRest.value = res.result.isRest;
+						state.loading = false;
+					})
+					.catch(() => {})
+					.finally(() => {
+						state.loading = false;
+					});
+			})
+			.catch(() => {
+				state.loading = false;
+			});
+	}
+};
+// 确认签入
+const clickOnDuty = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		state.loading = true;
+		let request = {};
+		if (AppConfigInfo.value.isNeedTelNo && AppConfigInfo.value.isTelNeedVerify) {
+			// 需要分机和密码
+			request = {
+				telNo: state.dutyForm.telNo,
+				telPwd: state.dutyForm.password,
+			};
+		} else if (AppConfigInfo.value.isNeedTelNo) {
+			//需要分机号
+			request = {
+				telNo: state.dutyForm.telNo,
+			};
+		} else if (AppConfigInfo.value.isTelNeedVerify) {
+			// 需要密码
+			request = {
+				telNo: state.dutyForm.telNo,
+				telPwd: userInfos.value.defaultTelNo,
+			};
+		}
+		dutyOn(request)
+			.then((res: any) => {
+				if (AppConfigInfo.value.isNeedTelNo && AppConfigInfo.value.isTelNeedVerify) {
+					// 需要分机和密码
+					currentTel.value.password = state.dutyForm.password;
+					currentTel.value.telNo = state.dutyForm.telNo;
+					currentTel.value.queue = res.result.queueId;
+				} else if (AppConfigInfo.value.isNeedTelNo) {
+					//需要分机号
+					currentTel.value.password = res.result.telPwd;
+					currentTel.value.telNo = res.result.telNo;
+					currentTel.value.queue = res.result.queueId;
+				} else if (AppConfigInfo.value.isTelNeedVerify) {
+					// 需要密码
+					currentTel.value.password = state.dutyForm.password;
+					currentTel.value.telNo = res.result.telNo;
+					currentTel.value.queue = res.result.queueId;
+				}
+				websocket_connect(); //开启消息监听
+				startDutyTimer(res.result.second); // 开启计时 签入时长
+				isRest.value = res.result.isRest;
+				state.loading = false;
+				state.dutyDialogVisible = false;
+			})
+			.catch(() => {
+				// dutyOff();
+				// 重置所有状态
+				useTelStatusStore.resetState();
+				console.log('呼叫中心:签入错误111');
+			})
+			.finally(() => {
+				state.loading = false;
+				state.dutyDialogVisible = false;
+			});
+	});
+};
 // 签出
 const offDutyFn = () => {
 	ElMessageBox.confirm(`确定要签出,是否继续?`, '提示', {
@@ -1321,6 +1348,45 @@ const offDutyFn = () => {
 			state.loading = false;
 		});
 };
+// 开启外呼模式
+const onCallOut = () => {
+	ElMessageBox.confirm(`确定要开启外呼模式,是否继续?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+		draggable: true,
+		cancelButtonClass: 'default-button',
+		autofocus: false,
+	})
+		.then(() => {
+			// state.loading = true;
+			// 设置电话状态 外呼模式中
+			useTelStatusStore.setCallOut(true);
+			// 设置电话状态 保持中
+			useTelStatusStore.setPhoneControlState(TelStates.onCallOut);
+			sendMsg('held');
+		})
+		.catch(() => {});
+};
+// 关闭外呼模式
+const onUnCallOut = () => {
+	ElMessageBox.confirm(`确定要关闭外呼模式,是否继续?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+		draggable: true,
+		cancelButtonClass: 'default-button',
+		autofocus: false,
+	})
+		.then(() => {
+			// 设置电话状态 取消外呼模式
+			useTelStatusStore.setCallOut(false);
+			// 设置电话状态 保持中
+			useTelStatusStore.setPhoneControlState(TelStates.dutyOn);
+			// state.loading = true;
+		})
+		.catch(() => {});
+};
 // 挂断
 const onHangup = () => {
 	ElMessageBox.confirm(`确定要挂断,是否继续?`, '提示', {
@@ -1740,6 +1806,7 @@ onBeforeUnmount(() => {
 	height: 100%;
 	.duty-on-time {
 		width: 100px;
+		margin-left: 10px;
 		&-label {
 			display: block;
 			margin-top: 13px;

+ 9 - 1
src/stores/telStatus.ts

@@ -2,8 +2,9 @@
  * 
  * @description telStatus 当前用户签入的状态
  * @method  setDutyState 设置签入签出状态
+ * @method  setCallOut 设置外呼模式状态
  * @method  setRest 设置休息状态
- * @method  setTalkingDeal 设置静音状态
+ * @method  setTalkingDeal 设置话后整理状态
  * @method  setHold 设置保持状态
  * @method  setMeeting 设置三方会议状态
  * @method  setPhoneControlState 设置电话控件状态
@@ -14,6 +15,7 @@ import { defineStore } from 'pinia';
 export enum TelStates {
 	dutyOff = 'dutyOff', // 签出
 	dutyOn = 'dutyOn', // 签入
+	onCallOut = 'onCallOut', // 外呼模式中
 	rest = 'rest',  // 小休
 	ring = 'ring', // 来电响铃
 	onHold = 'onHold', // 保持中
@@ -35,6 +37,7 @@ export const useTelStatus = defineStore('telStatus', {
 			isTalkingDeal: false, //是否事后处理
 			isMeeting: false, //是否三方会议中
 			isHold: false, // 是否保持中
+			isCallOut: false, // 是否是外呼模式
 			phoneControlState: TelStates.dutyOff, //当前状态 默认签出
 			telsNo: "", // 分机号
 			groupName: "", // 分机组名称
@@ -63,6 +66,10 @@ export const useTelStatus = defineStore('telStatus', {
 		setHold(data: boolean): void {
 			this.telStatusInfo.isHold = data;
 		},
+		// 设置外呼模式
+		setCallOut(data: boolean): void {
+			this.telStatusInfo.isCallOut = data;
+		},
 		// 设置是否在三方会议中
 		setMetTing(data: boolean): void {
 			this.telStatusInfo.isMeeting = data;
@@ -86,6 +93,7 @@ export const useTelStatus = defineStore('telStatus', {
 				isTalkingDeal: false, //是否事后处理
 				isMeeting: false, //是否三方会议中
 				isHold:false, // 是否保持中
+				isCallOut:false, // 是否是外呼模式
 				phoneControlState: TelStates.dutyOff, //当前状态 默认签出
 				telsNo: "", // 分机号
 				groupName: "", // 分机组名称

+ 2 - 0
src/types/pinia.d.ts

@@ -118,6 +118,7 @@ enum TelStates {
 	dutyOn = 'dutyOn', // 签入
 	rest = 'rest',  // 小休
 	ring = 'ring', // 来电响铃
+	onCallOut = 'onCallOut', // 外呼模式中
 	onHold = 'onHold', // 保持中
 	onTransferSuccess = 'onTransferSuccess', // 转接成功,可以开始三方通话
 	onCall = 'onCall', // 一通电话通话中
@@ -137,6 +138,7 @@ declare interface TelsStateInfos {
 		isTalkingDeal: boolean; // 是否事后处理
 		isMeeting: boolean; // 是否会议中
 		isHold:boolean; // 是否保持中
+		isCallOut: boolean, // 是否是外呼模式
 		phoneControlState: TelStates;  // 电话控件状态
 		groupName: string | number; // 分机组名称
 		telsNo: string | number; // 电话号码

+ 5 - 5
src/views/business/discern/apply.vue

@@ -13,8 +13,8 @@
 			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent label-width="100px">
 				<el-row :gutter="10">
 					<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
-						<el-form-item label="工单标题" prop="Keyword">
-							<el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" />
+						<el-form-item label="工单标题" prop="Title">
+							<el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
@@ -56,8 +56,8 @@
 					</transition>
 					<transition name="el-zoom-in-top" v-show="!searchCol">
 						<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
-							<el-form-item label="接办部门" prop="ActualHandleStepName">
-								<el-input v-model="state.queryParams.ActualHandleStepName" placeholder="接办部门名称" clearable @keyup.enter="handleQuery" />
+							<el-form-item label="接办部门" prop="ActualHandleOrgName">
+								<el-input v-model="state.queryParams.ActualHandleOrgName" placeholder="接办部门名称" clearable @keyup.enter="handleQuery" />
 							</el-form-item>
 						</el-col>
 					</transition>
@@ -311,7 +311,7 @@ const state = reactive<any>({
 		IsHomePage: null,
 		CounterSignType: null, // 会签类型
 		OrgLevelOneName: null, // 一级部门
-		ActualHandleStepName: null, // 接办步骤
+    ActualHandleOrgName: null, // 接办部门名称
 		slTime: [], // 受理时间
 		hfTime: [], // 回访时间
 		VisitOrgName: null, // 回访部门