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

reactor:352 来电号码后增加“外呼”按钮;357 示忙改为小休;349 新增【话务日期统计(简单)】

zhangchong 6 сар өмнө
parent
commit
78a0bb9290

+ 2 - 2
.env.development

@@ -3,9 +3,9 @@ VITE_MODE_NAME=development
 # 防止部署多套系统到同一域名不同目录时,变量共用的问题 设置不同的前缀
 VITE_STORAGE_NAME=dev
 # 业务系统基础请求地址
-VITE_API_URL=http://110.188.24.28:50100
+VITE_API_URL=http://110.188.24.28:50300
 # 业务系统socket请求地址
-VITE_API_SOCKET_URL=http://110.188.24.28:50100/hubs/hotline
+VITE_API_SOCKET_URL=http://110.188.24.28:50300/hubs/hotline
 # 业务系统文件上传上传请求地址
 VITE_API_UPLOAD_URL=http://open.fs.12345lm.cn
 # 数据共享平台请求地址

+ 48 - 0
src/api/statistics/call.ts

@@ -247,4 +247,52 @@ export const callAction = (params: object) => {
 		method: 'get',
 		params,
 	});
+}
+/**
+ * @description 话务日期统计简单
+ * @param {object} params
+ */
+export const callDateSimple = (params: object) => {
+	return request({
+		url: `/api/v1/BiCall/query_calls_statistics`,
+		method: 'get',
+		params,
+	});
+}
+/**
+ * @description 话务日期统计简单导出
+ * @param {object} data
+ */
+export const callDateSimpleExport = (data: object) => {
+	return request({
+		url: `/api/v1/BiCall/query_calls_statistics_export`,
+		method: 'post',
+		data,
+		responseType: 'blob',
+	}, {
+		reduce_data_format: false
+	}
+	)
+}
+/**
+ * @description 话务日期统计简单详情
+ * @param {object} params
+ */
+export const callDateSimpleDetail = (params: object) => {
+	return request({
+		url: `/api/v1/BiCall/query_calls_statistics_detail`,
+		method: 'get',
+		params,
+	});
+}
+/**
+ * @description 话务日期统计简单详情基础信息
+ * @param {object} params
+ */
+export const callDateSimpleDetailBase = (params?: object) => {
+	return request({
+		url: `/api/v1/BiCall/query_calls_statistics_detail/base-data`,
+		method: 'get',
+		params,
+	});
 }

+ 10 - 0
src/components/OrderDetail/index.vue

@@ -45,6 +45,16 @@
 										v-if="state.ruleForm?.recordingAbsolutePath"
 										>录音文件</el-button
 									>
+									<el-button
+										plain
+										title="外呼"
+										size="small"
+										type="primary"
+										class="ml8"
+										@click="callPhone(state.ruleForm.fromPhone)"
+										v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)"
+										>外呼</el-button
+									>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">

+ 23 - 23
src/layout/navBars/breadcrumb/zgTel.vue

@@ -31,7 +31,7 @@
 						<el-text tag="b">{{ formatDuration(idleTime) }}</el-text>
 					</div>
 					<div class="flex-center-between mt10" v-if="busyTime && ['201'].includes(m_strTelState)">
-						<span class="ml10">示忙时长</span>
+						<span class="ml10">小休时长</span>
 						<el-text tag="b">{{ formatDuration(busyTime) }}</el-text>
 					</div>
 				</template>
@@ -83,14 +83,14 @@
 
 			<!-- 小休和结束休息 可用 -->
 			<template v-if="m_bLogin && activeArr.includes('rest')">
-				<div class="item active" :title="m_bTelBusy ? '示闲' : '示忙'" @click="onEvent(m_bTelBusy ? 'idle' : 'busy')">
+				<div class="item active" :title="m_bTelBusy ? '示闲' : '小休'" @click="onEvent(m_bTelBusy ? 'idle' : 'busy')">
 					<SvgIcon name="iconfont icon-rest" class="icon mr3" size="16px" />
-					{{ m_bTelBusy ? '示闲' : '示忙' }}
+					{{ m_bTelBusy ? '示闲' : '小休' }}
 				</div>
 			</template>
 			<!-- 灰色小休不可用 -->
 			<template v-else>
-				<div class="item disabled" title="示忙"><SvgIcon name="iconfont icon-rest" class="icon mr3" size="18px" />示忙</div>
+				<div class="item disabled" title="小休"><SvgIcon name="iconfont icon-rest" class="icon mr3" size="18px" />小休</div>
 			</template>
 
 			<!-- 保持和取消保持 可用 -->
@@ -327,7 +327,7 @@ const activeArr = computed(() => {
 		'0': ['dutyOn'], // 签出状态
 		'100': [], // 登录成功
 		'200': ['dutyOff', 'rest', 'outbound'], // 空闲
-		'201': ['rest'], // 示忙
+		'201': ['rest'], // 小休
 		'300': ['hangup'], // 呼入振铃
 		'301': ['hangup', 'hold', 'consult', 'transferMz', 'evaluate'], // 呼入通话
 		'302': ['hangup'], // 呼出振铃
@@ -350,7 +350,7 @@ const currentStatusText = computed(() => {
 		'0': '签出',
 		'100': '登录成功',
 		'200': '空闲',
-		'201': '示忙',
+		'201': '小休',
 		'300': '呼入振铃',
 		'301': '呼入通话',
 		'302': '呼出振铃',
@@ -411,7 +411,7 @@ const m_strLevel = ref('1'); // 优先级别
 const m_strGroup = ref('1'); // 分组ID
 const m_strCompanyId = ref(''); // 企业编码
 const m_bLogin = ref(false); // 登录状态
-const m_bTelBusy = ref(false); // 是否示忙
+const m_bTelBusy = ref(false); // 是否小休
 const m_strIsMonitor = ref('0'); // 是否监控分机 1-是监控分机
 const callId = ref(''); // 通话ID
 const m_IsCallOut = ref(false); // 是否呼出
@@ -437,7 +437,7 @@ const onEvent = (event: string) => {
 		case 'signOut': // 签出
 			onSignOut();
 			break;
-		case 'busy': // 示忙
+		case 'busy': // 小休
 			onBusy();
 			break;
 		case 'idle': // 示闲
@@ -537,12 +537,12 @@ const evtSeatState = (data: any) => {
 			stopConferenceTime(); // 三方会议时长结束
 			m_IsTalkingDeal.value = false;
 			break;
-		// 示忙
+		// 小休
 		case '1':
 			m_strTelState.value = '201';
 			m_bTelBusy.value = true;
 			e_TopStateChange(m_strTelState.value);
-			startBusyTime(); // 示忙计时器开始
+			startBusyTime(); // 小休计时器开始
 			stopIdleTime(); // 停止空闲时长
 			break;
 		case '2':
@@ -614,7 +614,7 @@ const GetTelState = (strState: any) => {
 		case '0':
 			strResult = '200';
 			break;
-		// 示忙
+		// 小休
 		case '1':
 			strResult = '201';
 			break;
@@ -749,7 +749,7 @@ const idleTimer = useIntervalFn(
 // 空闲时长开始
 const startIdleTime = () => {
 	idleTimer.resume();
-	stopBusyTime(); // 结束示忙时长
+	stopBusyTime(); // 结束小休时长
 	stopArrangeTime(); // 结束整理时长
 };
 //  空闲时长计时结束
@@ -892,7 +892,7 @@ const e_TelMsgReceive = (ws: any, restMsg: any) => {
 				case 'ResAgentIdle':
 					retIdle(data);
 					break;
-				// 示忙
+				// 小休
 				case 'ResAgentBusy':
 					retBusy(data);
 					break;
@@ -1055,7 +1055,7 @@ const retSignOut = () => {
 
 	m_bLogin.value = false;
 	globalState.callCenterIsSignIn = false; // 签出状态
-	stopBusyTime(); // 停止示忙计时器
+	stopBusyTime(); // 停止小休计时器
 	stopIdleTime(); // 停止空闲计时器
 	stopTalkTimer(); // 停止通话计时器
 	stopArrangeTime(); // 停止整理时长
@@ -1068,11 +1068,11 @@ const retSignOut = () => {
 	console.log(`${getNowDateTime()} 呼叫中心签出回调`);
 };
 /*
- * 示忙
+ * 小休
  * ReqAgentBusy - 方法名
  * Extension:分机号
  */
-// 示忙时长
+// 小休时长
 const busyTime = ref(0);
 const busyTimer = useIntervalFn(
 	() => {
@@ -1081,17 +1081,17 @@ const busyTimer = useIntervalFn(
 	1000,
 	{ immediate: false }
 );
-// 示忙时长开始
+// 小休时长开始
 const startBusyTime = () => {
 	busyTimer.resume();
 };
-//  示忙时长计时结束
+//  小休时长计时结束
 const stopBusyTime = () => {
 	busyTime.value = 0;
 	busyTimer.pause();
 };
 const onBusy = () => {
-	ElMessageBox.confirm(`确定要示忙,是否继续?`, '提示', {
+	ElMessageBox.confirm(`确定要小休,是否继续?`, '提示', {
 		confirmButtonText: '确认',
 		cancelButtonText: '取消',
 		type: 'warning',
@@ -1115,7 +1115,7 @@ const onBusy = () => {
 };
 
 /*
-* 示忙返回值
+* 小休返回值
 {“Action”:”ResAgentBusy”,”Param”:{“Result”:}}
 Result:0-1
 0:成功 1:失败
@@ -1126,7 +1126,7 @@ const retBusy = (data: any) => {
 		m_strTelState.value = '201';
 		e_TopStateChange(m_strTelState.value);
 	} else {
-		ElMessage.error('示忙失败');
+		ElMessage.error('小休失败');
 	}
 };
 /*
@@ -2093,7 +2093,7 @@ const e_TopStateChange = (state: string) => {
 			break;
 		case '200': // 空闲
 			break;
-		case '201': // 示忙
+		case '201': // 小休
 			break;
 		case '300': //呼入振铃
 			break;
@@ -2121,7 +2121,7 @@ const e_TopStateChange = (state: string) => {
 };
 /**
  * 更新话机动作
- * 1:登录登出;2:示忙示闲;3:摘机
+ * 1:登录登出;2:小休示闲;3:摘机
  */
 const e_ActionUpdate = (strActionType: string) => {
 	const data = {

+ 8 - 0
src/router/route.ts

@@ -500,6 +500,14 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 			title: '修改记录',
 			isKeepAlive: true,
 		},
+	},{
+		path: '/statistics/call/detailSeatDate',
+		name: 'statisticsCallDetailSeatsDate',
+		component: () => import('@/views/statistics/call/detailSeatDate.vue'),
+		meta: {
+			title: '话务时段明细',
+			isKeepAlive: true,
+		},
 	},
 ];
 /**

+ 212 - 0
src/views/statistics/call/detailSeatDate.vue

@@ -0,0 +1,212 @@
+<template>
+	<div class="statistics-call-detail-seats-date-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<ProTable
+				ref="proTableRef"
+				:columns="columns"
+				:data="state.tableData"
+				@updateTable="queryList"
+				:loading="state.loading"
+				:total="state.total"
+				v-model:page-index="state.queryParams.PageIndex"
+				v-model:page-size="state.queryParams.PageSize"
+				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
+				:exportMethod="callDetailListDetailExport"
+				:exportParams="requestParams"
+			>
+				<template #table-search>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item label="工单编码" prop="No">
+							<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="主叫号码" prop="FromNo">
+							<el-input v-model="state.queryParams.FromNo" placeholder="主叫号码" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+				<template #operation="{ row }">
+					<el-button type="primary" @click="onPlaySoundRecording(row)" title="播放录音" link v-if="row.audioFile">播放录音</el-button>
+					<el-button link type="primary" @click="onDownload(row)" title="下载录音" v-if="row.audioFile">下载录音</el-button>
+				</template>
+				<template #orderTitle="{ row }">
+					<order-detail :order="{id:row.orderId,...row }" @updateList="queryList">{{ row.orderTitle }}</order-detail>
+				</template>
+			</ProTable>
+		</div>
+		<!-- 播放录音 -->
+		<play-record ref="playRecordRef" />
+		<el-drawer v-model="drawer" title="更多查询" size="500px">
+			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
+				<el-form-item prop="ToNo" label="被叫号码">
+					<el-input v-model="state.queryParams.ToNo" placeholder="被叫号码" clearable @keyup.enter="handleQuery" />
+				</el-form-item>
+				<el-form-item prop="TelNo" label="响应分机">
+					<el-input v-model="state.queryParams.TelNo" placeholder="响应分机" clearable @keyup.enter="handleQuery" />
+				</el-form-item>
+				<el-form-item prop="EndBy" label="挂断状态">
+					<el-select v-model="state.queryParams.EndBy" placeholder="挂断状态" clearable class="w100" @change="handleQuery">
+						<el-option v-for="item in EndByOptions" :value="item.key" :key="item.key" :label="item.value" />
+					</el-select>
+				</el-form-item>
+				<el-form-item prop="hrTime" label="呼入时间">
+					<el-date-picker
+						v-model="state.queryParams.hrTime"
+						type="datetimerange"
+						unlink-panels
+						range-separator="至"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						:shortcuts="shortcuts"
+						@change="handleQuery"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:default-time="defaultTimeStartEnd"
+					/>
+				</el-form-item>
+			</el-form>
+			<template #footer>
+				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+				<el-button @click="resetQuery(drawerRuleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
+			</template>
+		</el-drawer>
+	</div>
+</template>
+<script setup lang="tsx" name="statisticsCallDetailSeatsDate">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { ElMessageBox, FormInstance } from 'element-plus';
+import { callDateSimpleDetail, callDateSimpleDetailBase, callDetailListDetail, callDetailListDetailExport } from '@/api/statistics/call';
+import { useRoute } from 'vue-router';
+import { formatDate } from '@/utils/formatTime';
+import { fileDownload } from '@/api/public/file';
+import { downloadFileBySrc, downloadFileByStream } from '@/utils/tools';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
+import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+
+const PlayRecord = defineAsyncComponent(() => import('@/components/PlayRecord/index.vue')); // 播放录音
+const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
+// 表格配置项
+const columns = ref<any[]>([
+	{ prop: 'orderNo', label: '工单编码', minWidth: 140 },
+	{ prop: 'orderTitle', label: '工单标题', minWidth: 200 },
+	{ prop: 'fromNo', label: '主叫号码', minWidth: 120 },
+	{ prop: 'toNo', label: '被叫号码', minWidth: 120 },
+	{ prop: 'telNo', label: '响应分机' },
+	{ prop: 'endByTxt', label: '挂断状态', minWidth: 100 },
+	{ prop: 'userName', label: '话务员', minWidth: 120 },
+	{
+		prop: 'beginIvrTime',
+		label: '开始时间',
+		minWidth: 160,
+		render: (scope) => <span>{formatDate(scope.row.beginIvrTime, 'YYYY-mm-dd HH:MM:SS')}</span>,
+	},
+	{
+		prop: 'answeredTime',
+		label: '接通时间',
+		minWidth: 160,
+		render: (scope) => <span>{formatDate(scope.row.answeredTime, 'YYYY-mm-dd HH:MM:SS')}</span>,
+	},
+	{ prop: 'endTime', label: '挂断时间', minWidth: 160, render: (scope) => <span>{formatDate(scope.row.endTime, 'YYYY-mm-dd HH:MM:SS')}</span> },
+	{ prop: 'duration', label: '通话时间(秒)', minWidth: 110 },
+	{ prop: 'operation', label: '操作', fixed: 'right', width: 170, align: 'center' },
+]);
+// 定义变量内容
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive<any>({
+	queryParams: {
+		PageIndex: 1,
+		PageSize: 20,
+	},
+	tableData: [], //表单
+	loading: false, // 加载
+	total: 0, // 总数
+	callForwardingSource: [],
+	totalCount: {},
+});
+/** 搜索按钮操作 */
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+/** 重置按钮操作 */
+const drawer = ref(false);
+const drawerRuleFormRef = ref();
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	ruleFormRef.value?.resetFields();
+	queryList();
+};
+/** 获取列表 */
+const requestParams = ref<EmptyObjectType>({});
+const route = useRoute();
+const routeQueryParams = route.query;
+const queryList = async () => {
+	state.loading = true;
+	try {
+		requestParams.value = {
+			StartTime: routeQueryParams.StartTime,
+			EndTime: routeQueryParams.EndTime,
+			...state.queryParams,
+		};
+		const { result } = await callDateSimpleDetail(requestParams.value);
+		state.tableData = result?.items ?? [];
+		state.total = result.total ?? 0;
+		state.loading = false;
+	} catch (e) {
+		state.loading = false;
+		console.log(e);
+	}
+};
+// 播放录音
+const playRecordRef = ref<RefType>();
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const onPlaySoundRecording = (val: any) => {
+	playRecordRef.value.openDialog(val.id);
+};
+// 下载录音
+const onDownload = (row: any) => {
+	ElMessageBox.confirm(`您确定要下载此录音吗?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+		draggable: true,
+		cancelButtonClass: 'default-button',
+		autofocus: false,
+	})
+		.then(() => {
+			switch (themeConfig.value.appScope) {
+				case 'YiBin':
+					fileDownload({ path: themeConfig.value.recordDownLoadPrefix + row.audioFile })
+						.then((res: any) => {
+							downloadFileByStream(res, row.audioFile);
+						})
+						.catch(() => {});
+					break;
+				case 'ZiGong':
+				case 'LuZhou':
+					downloadFileBySrc(themeConfig.value.recordPrefix + row.audioFile, row.audioFile);
+					break;
+			}
+		})
+		.catch(() => {});
+};
+// 获取基础数据
+const EndByOptions = ref<EmptyArrayType>([])
+const getBaseData = async () => {
+	try {
+		const { result} = await callDateSimpleDetailBase();
+		EndByOptions.value = result.EndBy;
+	}catch (e){
+		console.log(e)
+	}
+};
+onMounted(() => {
+	getBaseData();
+	queryList();
+});
+</script>

+ 33 - 85
src/views/statistics/call/seatsDate.vue

@@ -1,5 +1,5 @@
 <template>
-	<div class="statistics-call-detail-index-container layout-padding">
+	<div class="statistics-call-seats-date-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
 			<ProTable
 				ref="proTableRef"
@@ -10,7 +10,7 @@
 				border
 				:pagination="false"
 				:toolButton="['refresh', 'setting', 'exportAll']"
-				:exportMethod="callDetailListExport"
+				:exportMethod="callDateSimpleExport"
 				:exportParams="requestParams"
 				show-summary
 				:summary-method="getSummaries"
@@ -34,7 +34,7 @@
 							<el-button circle title="口径说明"><SvgIcon name="ele-QuestionFilled" /></el-button>
 						</template>
 						<el-descriptions title="" :column="1" border style="max-height: 400px; overflow: auto">
-							<el-descriptions-item label="呼入总量">呼入接通+挂机量+胡如何队列挂断</el-descriptions-item>
+							<el-descriptions-item label="呼入总量">呼入接通+挂机量+呼入队列挂断</el-descriptions-item>
 							<el-descriptions-item label="接通率"> (呼入接通+挂机)/呼入总量 </el-descriptions-item>
 							<el-descriptions-item label="呼入已接">呼入已接的总量</el-descriptions-item>
 							<el-descriptions-item label="挂机量">呼入未接的总量</el-descriptions-item>
@@ -54,7 +54,7 @@ import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
 import { defaultDate } from '@/utils/constants';
 import Other from '@/utils/other';
-import { callDetailList, callDetailListExport, callPeriodBase } from '@/api/statistics/call';
+import { callDateSimple, callDateSimpleExport } from '@/api/statistics/call';
 import { useRouter } from 'vue-router';
 import dayjs from 'dayjs';
 
@@ -64,14 +64,7 @@ const columns = ref<any[]>([
 	{
 		prop: 'date',
 		label: '日期',
-		align: 'center',
-		render: (scope) => {
-			return (
-				<el-button type="primary" link onClick={() => linkDetail(scope, 'date')}>
-					{scope.row.date}
-				</el-button>
-			);
-		},
+		align: 'center'
 	},
 	{
 		prop: 'inTotal',
@@ -103,61 +96,61 @@ const columns = ref<any[]>([
 		},
 	},
 	{
-		prop: 'inConnectionQuantity',
+		prop: 'inNotAnswered',
 		label: '挂机量',
 		align: 'center',
 		render: (scope) => {
 			return (
 				<el-button type="primary" link onClick={() => linkDetail(scope)}>
-					{scope.row.inConnectionQuantity}
+					{scope.row.inNotAnswered}
 				</el-button>
 			);
 		},
 	},
 	{
-		prop: 'inConnectionQuantity',
+		prop: 'notAcceptedHang',
 		label: '呼入队列挂断',
 		align: 'center',
 		render: (scope) => {
 			return (
 				<el-button type="primary" link onClick={() => linkDetail(scope)}>
-					{scope.row.inConnectionQuantity}
+					{scope.row.notAcceptedHang}
 				</el-button>
 			);
 		},
 	},
 	{
-		prop: 'inConnectionQuantity',
+		prop: 'ivrByeCount',
 		label: '呼入IVR挂断',
 		align: 'center',
 		render: (scope) => {
 			return (
 				<el-button type="primary" link onClick={() => linkDetail(scope)}>
-					{scope.row.inConnectionQuantity}
+					{scope.row.ivrByeCount}
 				</el-button>
 			);
 		},
 	},
 	{
-		prop: 'inConnectionQuantity',
+		prop: 'outConnectionQuantity',
 		label: '呼出接通',
 		align: 'center',
 		render: (scope) => {
 			return (
 				<el-button type="primary" link onClick={() => linkDetail(scope)}>
-					{scope.row.inConnectionQuantity}
+					{scope.row.outConnectionQuantity}
 				</el-button>
 			);
 		},
 	},
 	{
-		prop: 'inConnectionQuantity',
+		prop: 'outNotAnswered',
 		label: '呼出未接通',
 		align: 'center',
 		render: (scope) => {
 			return (
 				<el-button type="primary" link onClick={() => linkDetail(scope)}>
-					{scope.row.inConnectionQuantity}
+					{scope.row.outNotAnswered}
 				</el-button>
 			);
 		},
@@ -190,7 +183,7 @@ const queryList = async () => {
 		requestParams.value.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
 		requestParams.value.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 		Reflect.deleteProperty(requestParams.value, 'crTime');
-		const { result } = await callDetailList(requestParams.value);
+		const { result } = await callDateSimple(requestParams.value);
 		state.tableData = result.list ?? [];
 		state.totalCount = result.total;
 		state.loading = false;
@@ -199,15 +192,6 @@ const queryList = async () => {
 		console.log(e);
 	}
 };
-// 获取基础信息
-const getBaseInfo = async () => {
-	try {
-		const { result } = await callPeriodBase();
-		state.callForwardingSource = result.callForwardingSource ?? [];
-	} catch (e) {
-		console.log(e);
-	}
-};
 /** 重置按钮操作 */
 const statisticalTimeRef = ref<RefType>();
 const resetQuery = (formEl: FormInstance | undefined) => {
@@ -229,50 +213,26 @@ const getSummaries = (param: any) => {
 			case 'inTotal':
 				sums[index] = state.totalCount?.inTotal;
 				break;
-			case 'inConnectionQuantity':
-				sums[index] = state.totalCount?.inConnectionQuantity;
-				break;
-			case 'notAcceptedHang':
-				sums[index] = state.totalCount?.notAcceptedHang;
-				break;
 			case 'inConnectionRate':
 				sums[index] = state.totalCount?.inConnectionRate;
 				break;
-			case 'averageDuration':
-				sums[index] = state.totalCount?.averageDuration;
-				break;
-			case 'inAvailableAnswer':
-				sums[index] = state.totalCount?.inAvailableAnswer;
-				break;
-			case 'inHangupImmediateWhenAnswered':
-				sums[index] = state.totalCount?.inHangupImmediateWhenAnswered;
-				break;
-			case 'effectiveConnectionRate':
-				sums[index] = state.totalCount?.effectiveConnectionRate;
-				break;
-			case 'timeoutConnection':
-				sums[index] = state.totalCount?.timeoutConnection;
-				break;
-			case 'timeoutSuspension':
-				sums[index] = state.totalCount?.timeoutSuspension;
+			case 'inConnectionQuantity':
+				sums[index] = state.totalCount?.inConnectionQuantity;
 				break;
-			case 'onTimeConnectionRate':
-				sums[index] = state.totalCount?.onTimeConnectionRate;
+			case 'inNotAnswered':
+				sums[index] = state.totalCount?.inNotAnswered;
 				break;
-			case 'queueByeCount':
-				sums[index] = state.totalCount?.queueByeCount;
+			case 'notAcceptedHang':
+				sums[index] = state.totalCount?.notAcceptedHang;
 				break;
 			case 'ivrByeCount':
 				sums[index] = state.totalCount?.ivrByeCount;
 				break;
-			case 'outTotal':
-				sums[index] = state.totalCount?.outTotal;
-				break;
 			case 'outConnectionQuantity':
 				sums[index] = state.totalCount?.outConnectionQuantity;
 				break;
-			case 'outConnectionRate':
-				sums[index] = state.totalCount?.outConnectionRate;
+			case 'outNotAnswered':
+				sums[index] = state.totalCount?.outNotAnswered;
 				break;
 			default:
 				sums[index] = '';
@@ -283,29 +243,17 @@ const getSummaries = (param: any) => {
 };
 // 查看详情
 const router = useRouter();
-const linkDetail = (scope: any, type?: string) => {
-	if (type === 'date') {
-		router.push({
-			path: '/statistics/call/detailIndexTime',
-			query: {
-				StartTime: dayjs(scope.row.date).startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
-				EndTime: dayjs(scope.row.date).endOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
-			},
-		});
-	} else {
-		const TypeCode = scope.column.property === 'inTotal' ? '1' : '2';
-		router.push({
-			path: '/statistics/call/detailIndexCall',
-			query: {
-				StartTime: dayjs(scope.row.date).startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
-				EndTime: dayjs(scope.row.date).endOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
-				TypeCode,
-			},
-		});
-	}
+const linkDetail = (scope: any) => {
+	console.log(scope)
+	router.push({
+		path: '/statistics/call/detailSeatDate',
+		query: {
+			StartTime: dayjs(scope.row.date).startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
+			EndTime: dayjs(scope.row.date).endOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
+		},
+	});
 };
 onMounted(() => {
-	getBaseInfo();
 	queryList();
 });
 </script>

+ 6 - 0
src/views/todo/seats/index.vue

@@ -142,6 +142,11 @@
 					>
 					</el-cascader>
 				</el-form-item>
+<!--				<el-form-item prop="Statuses" label="工单状态" v-if="state.queryParams.IsHandled === 'true'">
+					<el-select v-model="state.queryParams.Statuses" placeholder="请选择工单状态" clearable @change="handleQuery">
+						<el-option v-for="item in state.callDirection" :value="item.key" :key="item.key" :label="item.value" />
+					</el-select>
+				</el-form-item>-->
 			</el-form>
 			<template #footer>
 				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
@@ -178,6 +183,7 @@ const state = reactive<any>({
 		EndTime: null,
 		IsUrgent: null,
 		AreaCode: null,
+		Statuses:null
 	},
 	tableData: [], //表单
 	loading: false, // 加载