|
@@ -1,5 +1,5 @@
|
|
<template>
|
|
<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">
|
|
<div class="layout-padding-auto layout-padding-view pd20">
|
|
<ProTable
|
|
<ProTable
|
|
ref="proTableRef"
|
|
ref="proTableRef"
|
|
@@ -10,7 +10,7 @@
|
|
border
|
|
border
|
|
:pagination="false"
|
|
:pagination="false"
|
|
:toolButton="['refresh', 'setting', 'exportAll']"
|
|
:toolButton="['refresh', 'setting', 'exportAll']"
|
|
- :exportMethod="callDetailListExport"
|
|
|
|
|
|
+ :exportMethod="callDateSimpleExport"
|
|
:exportParams="requestParams"
|
|
:exportParams="requestParams"
|
|
show-summary
|
|
show-summary
|
|
:summary-method="getSummaries"
|
|
:summary-method="getSummaries"
|
|
@@ -34,7 +34,7 @@
|
|
<el-button circle title="口径说明"><SvgIcon name="ele-QuestionFilled" /></el-button>
|
|
<el-button circle title="口径说明"><SvgIcon name="ele-QuestionFilled" /></el-button>
|
|
</template>
|
|
</template>
|
|
<el-descriptions title="" :column="1" border style="max-height: 400px; overflow: auto">
|
|
<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>
|
|
<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 { FormInstance } from 'element-plus';
|
|
import { defaultDate } from '@/utils/constants';
|
|
import { defaultDate } from '@/utils/constants';
|
|
import Other from '@/utils/other';
|
|
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 { useRouter } from 'vue-router';
|
|
import dayjs from 'dayjs';
|
|
import dayjs from 'dayjs';
|
|
|
|
|
|
@@ -64,14 +64,7 @@ const columns = ref<any[]>([
|
|
{
|
|
{
|
|
prop: 'date',
|
|
prop: 'date',
|
|
label: '日期',
|
|
label: '日期',
|
|
- align: 'center',
|
|
|
|
- render: (scope) => {
|
|
|
|
- return (
|
|
|
|
- <el-button type="primary" link onClick={() => linkDetail(scope, 'date')}>
|
|
|
|
- {scope.row.date}
|
|
|
|
- </el-button>
|
|
|
|
- );
|
|
|
|
- },
|
|
|
|
|
|
+ align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
prop: 'inTotal',
|
|
prop: 'inTotal',
|
|
@@ -103,61 +96,61 @@ const columns = ref<any[]>([
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- prop: 'inConnectionQuantity',
|
|
|
|
|
|
+ prop: 'inNotAnswered',
|
|
label: '挂机量',
|
|
label: '挂机量',
|
|
align: 'center',
|
|
align: 'center',
|
|
render: (scope) => {
|
|
render: (scope) => {
|
|
return (
|
|
return (
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
- {scope.row.inConnectionQuantity}
|
|
|
|
|
|
+ {scope.row.inNotAnswered}
|
|
</el-button>
|
|
</el-button>
|
|
);
|
|
);
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- prop: 'inConnectionQuantity',
|
|
|
|
|
|
+ prop: 'notAcceptedHang',
|
|
label: '呼入队列挂断',
|
|
label: '呼入队列挂断',
|
|
align: 'center',
|
|
align: 'center',
|
|
render: (scope) => {
|
|
render: (scope) => {
|
|
return (
|
|
return (
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
- {scope.row.inConnectionQuantity}
|
|
|
|
|
|
+ {scope.row.notAcceptedHang}
|
|
</el-button>
|
|
</el-button>
|
|
);
|
|
);
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- prop: 'inConnectionQuantity',
|
|
|
|
|
|
+ prop: 'ivrByeCount',
|
|
label: '呼入IVR挂断',
|
|
label: '呼入IVR挂断',
|
|
align: 'center',
|
|
align: 'center',
|
|
render: (scope) => {
|
|
render: (scope) => {
|
|
return (
|
|
return (
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
- {scope.row.inConnectionQuantity}
|
|
|
|
|
|
+ {scope.row.ivrByeCount}
|
|
</el-button>
|
|
</el-button>
|
|
);
|
|
);
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- prop: 'inConnectionQuantity',
|
|
|
|
|
|
+ prop: 'outConnectionQuantity',
|
|
label: '呼出接通',
|
|
label: '呼出接通',
|
|
align: 'center',
|
|
align: 'center',
|
|
render: (scope) => {
|
|
render: (scope) => {
|
|
return (
|
|
return (
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
- {scope.row.inConnectionQuantity}
|
|
|
|
|
|
+ {scope.row.outConnectionQuantity}
|
|
</el-button>
|
|
</el-button>
|
|
);
|
|
);
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- prop: 'inConnectionQuantity',
|
|
|
|
|
|
+ prop: 'outNotAnswered',
|
|
label: '呼出未接通',
|
|
label: '呼出未接通',
|
|
align: 'center',
|
|
align: 'center',
|
|
render: (scope) => {
|
|
render: (scope) => {
|
|
return (
|
|
return (
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
<el-button type="primary" link onClick={() => linkDetail(scope)}>
|
|
- {scope.row.inConnectionQuantity}
|
|
|
|
|
|
+ {scope.row.outNotAnswered}
|
|
</el-button>
|
|
</el-button>
|
|
);
|
|
);
|
|
},
|
|
},
|
|
@@ -190,7 +183,7 @@ const queryList = async () => {
|
|
requestParams.value.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
|
|
requestParams.value.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
|
|
requestParams.value.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
|
|
requestParams.value.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
|
|
Reflect.deleteProperty(requestParams.value, 'crTime');
|
|
Reflect.deleteProperty(requestParams.value, 'crTime');
|
|
- const { result } = await callDetailList(requestParams.value);
|
|
|
|
|
|
+ const { result } = await callDateSimple(requestParams.value);
|
|
state.tableData = result.list ?? [];
|
|
state.tableData = result.list ?? [];
|
|
state.totalCount = result.total;
|
|
state.totalCount = result.total;
|
|
state.loading = false;
|
|
state.loading = false;
|
|
@@ -199,15 +192,6 @@ const queryList = async () => {
|
|
console.log(e);
|
|
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 statisticalTimeRef = ref<RefType>();
|
|
const resetQuery = (formEl: FormInstance | undefined) => {
|
|
const resetQuery = (formEl: FormInstance | undefined) => {
|
|
@@ -229,50 +213,26 @@ const getSummaries = (param: any) => {
|
|
case 'inTotal':
|
|
case 'inTotal':
|
|
sums[index] = state.totalCount?.inTotal;
|
|
sums[index] = state.totalCount?.inTotal;
|
|
break;
|
|
break;
|
|
- case 'inConnectionQuantity':
|
|
|
|
- sums[index] = state.totalCount?.inConnectionQuantity;
|
|
|
|
- break;
|
|
|
|
- case 'notAcceptedHang':
|
|
|
|
- sums[index] = state.totalCount?.notAcceptedHang;
|
|
|
|
- break;
|
|
|
|
case 'inConnectionRate':
|
|
case 'inConnectionRate':
|
|
sums[index] = state.totalCount?.inConnectionRate;
|
|
sums[index] = state.totalCount?.inConnectionRate;
|
|
break;
|
|
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;
|
|
break;
|
|
- case 'onTimeConnectionRate':
|
|
|
|
- sums[index] = state.totalCount?.onTimeConnectionRate;
|
|
|
|
|
|
+ case 'inNotAnswered':
|
|
|
|
+ sums[index] = state.totalCount?.inNotAnswered;
|
|
break;
|
|
break;
|
|
- case 'queueByeCount':
|
|
|
|
- sums[index] = state.totalCount?.queueByeCount;
|
|
|
|
|
|
+ case 'notAcceptedHang':
|
|
|
|
+ sums[index] = state.totalCount?.notAcceptedHang;
|
|
break;
|
|
break;
|
|
case 'ivrByeCount':
|
|
case 'ivrByeCount':
|
|
sums[index] = state.totalCount?.ivrByeCount;
|
|
sums[index] = state.totalCount?.ivrByeCount;
|
|
break;
|
|
break;
|
|
- case 'outTotal':
|
|
|
|
- sums[index] = state.totalCount?.outTotal;
|
|
|
|
- break;
|
|
|
|
case 'outConnectionQuantity':
|
|
case 'outConnectionQuantity':
|
|
sums[index] = state.totalCount?.outConnectionQuantity;
|
|
sums[index] = state.totalCount?.outConnectionQuantity;
|
|
break;
|
|
break;
|
|
- case 'outConnectionRate':
|
|
|
|
- sums[index] = state.totalCount?.outConnectionRate;
|
|
|
|
|
|
+ case 'outNotAnswered':
|
|
|
|
+ sums[index] = state.totalCount?.outNotAnswered;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
sums[index] = '';
|
|
sums[index] = '';
|
|
@@ -283,29 +243,17 @@ const getSummaries = (param: any) => {
|
|
};
|
|
};
|
|
// 查看详情
|
|
// 查看详情
|
|
const router = useRouter();
|
|
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(() => {
|
|
onMounted(() => {
|
|
- getBaseInfo();
|
|
|
|
queryList();
|
|
queryList();
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|