Kaynağa Gözat

reactor:坐席话务统计分机对接;

zhangchong 1 yıl önce
ebeveyn
işleme
acce15d564
2 değiştirilmiş dosya ile 110 ekleme ve 39 silme
  1. 104 29
      src/views/statistics/call/seats.vue
  2. 6 10
      src/views/system/user/index.vue

+ 104 - 29
src/views/statistics/call/seats.vue

@@ -41,36 +41,86 @@
 				@selection-change="handleSelectionChange"
 				@sort-change="sortChange"
 				border
+				:summary-method="getSummaries"
 			>
 				<el-table-column type="selection" width="55" align="center" />
-				<el-table-column prop="orgName" label="坐席工号" show-overflow-tooltip align="center" width="120"></el-table-column>
-				<el-table-column prop="addNum" label="呼入总量" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
-				<el-table-column prop="deleteNum" label="接通总量" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼入秒挂" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼入超时未接" show-overflow-tooltip align="center" sortable="custom" width="140"></el-table-column>
-				<el-table-column prop="deleteNum" label="接通率" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼入平均时长" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="有效接通率" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="接通秒挂" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="有效接通率" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼出总量" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼出接通量" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼出接通率" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="呼出平均时长" show-overflow-tooltip align="center"></el-table-column>
-				<!--				<el-table-column prop="deleteNum" label="登录时长" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="小休+摘记时长" show-overflow-tooltip align="center"></el-table-column>
-				<el-table-column prop="deleteNum" label="工作效率" show-overflow-tooltip align="center"></el-table-column>-->
+				<el-table-column label="坐席工号" show-overflow-tooltip align="center" width="120">
+					<template #default="{ row }">
+						<span
+							>{{ row.name }} <span v-if="row.staffNo">({{ row.staffNo }})</span></span
+						>
+					</template>
+				</el-table-column>
+				<el-table-column prop="inTotal" label="呼入总量" show-overflow-tooltip align="center" sortable="custom" width="130"></el-table-column>
+				<el-table-column prop="inAnswered" label="接通总量" show-overflow-tooltip align="center" sortable="custom" width="130"></el-table-column>
+				<el-table-column
+					prop="inHangupImmediate"
+					label="呼入秒挂"
+					show-overflow-tooltip
+					align="center"
+					sortable="custom"
+					width="130"
+				></el-table-column>
+				<el-table-column prop="inHanguped" label="呼入超时未接" show-overflow-tooltip align="center" sortable="custom" width="140"></el-table-column>
+				<el-table-column prop="inAnsweredRate" label="接通率" show-overflow-tooltip align="center" sortable="custom" width="130">
+					<template #default="{ row }">
+						<span>{{ row.inAnsweredRate }}%</span>
+					</template>
+				</el-table-column>
+				<el-table-column
+					prop="outDurationAvg"
+					label="呼入平均时长"
+					show-overflow-tooltip
+					width="140"
+					align="center"
+					sortable="custom"
+				></el-table-column>
+				<el-table-column
+					prop="inAvailableAnswer"
+					label="有效接通率"
+					show-overflow-tooltip
+					width="130"
+					align="center"
+					sortable="custom"
+				></el-table-column>
+				<el-table-column
+					prop="inHangupImmediateWhenAnswered"
+					label="接通秒挂"
+					show-overflow-tooltip
+					align="center"
+					sortable="custom"
+					width="130"
+				></el-table-column>
+				<el-table-column
+					prop="inAnsweredRate"
+					label="有效接通率"
+					show-overflow-tooltip
+					align="center"
+					width="130"
+					sortable="custom"
+				></el-table-column>
+				<el-table-column prop="outTotal" label="呼出总量" show-overflow-tooltip align="center" sortable="custom" width="130"></el-table-column>
+				<el-table-column prop="outAnswered" label="呼出接通量" show-overflow-tooltip align="center" sortable="custom" width="130"></el-table-column>
+				<el-table-column prop="outAnsweredRate" label="呼出接通率" show-overflow-tooltip align="center" sortable="custom" width="130">
+					<template #default="{ row }">
+						<span>{{ row.outAnsweredRate }}%</span>
+					</template>
+				</el-table-column>
+				<el-table-column
+					prop="outDurationAvg"
+					label="呼出平均时长"
+					show-overflow-tooltip
+					align="center"
+					width="150"
+					sortable="custom"
+				></el-table-column>
+				<!--				<el-table-column prop="loginDuration" label="登录时长(分钟)" show-overflow-tooltip align="center"></el-table-column>
+				<el-table-column prop="restDuration" label="小休+摘记时长" show-overflow-tooltip align="center"></el-table-column>
+				<el-table-column prop="workRate" label="工作效率" show-overflow-tooltip align="center"></el-table-column>-->
 				<template #empty>
 					<Empty />
 				</template>
 			</el-table>
-			<!-- 分页 -->
-			<pagination
-				:total="state.total"
-				v-model:page="state.queryParams.PageIndex"
-				v-model:limit="state.queryParams.PageSize"
-				@pagination="queryList"
-			/>
 		</el-card>
 	</div>
 </template>
@@ -100,15 +150,12 @@ const queryList = throttle(() => {
 	const request = {
 		CreationTimeStart: state.queryParams.crTime[0],
 		CreationTimeEnd: state.queryParams.crTime[1],
-		PageIndex: state.queryParams.PageIndex,
-		PageSize: state.queryParams.PageSize,
 		SortField: state.queryParams.SortField,
 		SortRule: state.queryParams.SortRule,
 	};
 	callAgent(request)
 		.then((res: any) => {
-			state.tableData = res.result?.items ?? [];
-			state.total = res.result?.total ?? 0;
+			state.tableData = res.result;
 			state.loading = false;
 		})
 		.catch((err: any) => {
@@ -134,7 +181,35 @@ const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
 	multipleSelection.value = val;
 };
-
+// 合计
+const getSummaries = (param: any) => {
+	const { columns, data } = param;
+	const sums: string[] = [];
+	columns.forEach((column, index) => {
+		if (index === 0) {
+			sums[index] = '合计';
+			return;
+		}
+		const values = data.map((item) => Number(item[column.property]));
+		if (['inAnsweredRate', 'outAnsweredRate'].includes(column.property)) {
+			//百分比不能计算
+			sums[index] = '';
+			return '';
+		} else if (!values.every((value) => Number.isNaN(value))) {
+			sums[index] = `${values.reduce((prev, curr) => {
+				const value = Number(curr);
+				if (!Number.isNaN(value)) {
+					return prev + curr;
+				} else {
+					return prev;
+				}
+			}, 0)}`;
+		} else {
+			sums[index] = ' ';
+		}
+	});
+	return sums;
+};
 onMounted(() => {
 	queryList();
 });

+ 6 - 10
src/views/system/user/index.vue

@@ -5,7 +5,7 @@
 				<!-- 左侧组织树 -->
 				<el-col :xs="6" :sm="6" :md="6" :lg="4" :xl="4" class="orgTree" v-loading="state.loading">
 					<div class="h100 pr10">
-						<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable> </el-input>
+						<el-input v-model="filterOrg" placeholder="请输入部门名称" class="input-with-select mt10 mb10" clearable @input="onQueryChanged"> </el-input>
 						<el-scrollbar style="height: calc(100% - 40px);'" ref="scrollBarRef">
 							<el-tree-v2
 								:data="state.orgData"
@@ -159,16 +159,12 @@ const state = reactive<any>({
 const ruleFormRef = ref<FormInstance>(); //表单ref
 const filterOrg = ref(''); // 搜索部门名称
 const treRef = ref<RefType>(); // 树形组件ref
-watch(filterOrg, (val) => {
-	treRef.value!.filter(val);
-});
+const onQueryChanged = (query: string)=>{
+  treRef.value!.filter(query);
+}
 // 搜索部门名称
-const filterNodeOrg = (value: string, data: any) => {
-	if (value === '') {
-		state.defaultExpandedKeys = [];
-		return true;
-	}
-	return data.name.includes(value);
+const filterNodeOrg = (query: string, data: any) => {
+	return data.name!.includes(query);
 };
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {