123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- <template>
- <div class="statistics-department-satisfied-container layout-pd">
- <!-- 搜索 -->
- <el-card shadow="never">
- <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
- <el-form-item label="部门名称" prop="OrgName">
- <el-input v-model="state.queryParams.OrgName" placeholder="部门名称" clearable @keyup.enter="handleQuery" class="keyword-input" />
- </el-form-item>
- <el-form-item label="时间段" prop="crTime">
- <el-date-picker
- v-model="state.queryParams.crTime"
- type="daterange"
- unlink-panels
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- :shortcuts="shortcuts"
- @change="handleQuery"
- value-format="YYYY-MM-DD"
- :clearable="false"
- />
- </el-form-item>
- <!-- <el-form-item label="类型" prop="TypeId">
- <el-select v-model="state.queryParams.TypeId" placeholder="类型" @change="handleQuery">
- <el-option label="办件结果" value="1" />
- <el-option label="办件态度" value="2" />
- </el-select>
- </el-form-item>-->
- <el-form-item label="电话线路" prop="LineNum">
- <el-input v-model="state.queryParams.LineNum" 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="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
- <SvgIcon name="ele-Refresh" class="mr5" />重置
- </el-button>
- </el-form-item>
- </el-form>
- </el-card>
- <el-card shadow="never">
- <ProTable
- ref="proTableRef"
- :columns="columns"
- :data="state.tableData"
- @updateTable="queryList"
- :loading="state.loading"
- show-summary
- border
- :pagination="false"
- :summary-method="getSummaries"
- >
- <template #orgName="{ row }">
- <el-button link type="primary" @click="onDetailOrg(row)" v-if="!['市直合计', '区县合计'].includes(row.orgName)">{{
- row.orgName
- }}</el-button>
- <span v-else>{{ row.orgName }}</span>
- </template>
- <template #verySatisfiedCount="{ row }">
- <el-button
- link
- type="primary"
- @click="onDetail(row.verySatisfiedKey, row, '非常满意')"
- v-if="!['市直合计', '区县合计'].includes(row.orgName)"
- >{{ row.verySatisfiedCount }}</el-button
- >
- <span v-else>{{ row.verySatisfiedCount }}</span>
- </template>
- <template #satisfiedCount="{ row }">
- <el-button link type="primary" @click="onDetail(row.satisfiedKey, row, '满意')" v-if="!['市直合计', '区县合计'].includes(row.orgName)">{{
- row.satisfiedCount
- }}</el-button>
- <span v-else>{{ row.satisfiedCount }}</span>
- </template>
- <template #regardedAsSatisfiedCount="{ row }">
- <el-button
- link
- type="primary"
- @click="onDetail(row.regardedAsSatisfiedKey, row, '视为满意')"
- v-if="!['市直合计', '区县合计'].includes(row.orgName)"
- >{{ row.regardedAsSatisfiedCount }}</el-button
- >
- <span v-else>{{ row.regardedAsSatisfiedCount }}</span>
- </template>
- <template #defaultSatisfiedCount="{ row }">
- <el-button
- link
- type="primary"
- @click="onDetail(row.defaultSatisfiedKey, row, '默认满意')"
- v-if="!['市直合计', '区县合计'].includes(row.orgName)"
- >{{ row.defaultSatisfiedCount }}</el-button
- >
- <span v-else>{{ row.defaultSatisfiedCount }}</span>
- </template>
- <template #noSatisfiedCount="{ row }">
- <el-button
- link
- type="primary"
- @click="onDetail(row.noSatisfiedKey, row, '不满意')"
- v-if="!['市直合计', '区县合计'].includes(row.orgName)"
- >{{ row.noSatisfiedCount }}</el-button
- >
- <span v-else>{{ row.noSatisfiedCount }}</span>
- </template>
- <template #noEvaluateCount="{ row }">
- <el-button
- link
- type="primary"
- @click="onDetail(row.noEvaluateKey, row, '未作评价')"
- v-if="!['市直合计', '区县合计'].includes(row.orgName)"
- >{{ row.noEvaluateCount }}</el-button
- >
- <span v-else>{{ row.noEvaluateCount }}</span>
- </template>
- <template #noPutThroughCount="{ row }">
- <el-button
- link
- type="primary"
- @click="onDetail(row.noPutThroughKey, row, '未接通')"
- v-if="!['市直合计', '区县合计'].includes(row.orgName)"
- >{{ row.noPutThroughCount }}</el-button
- >
- <span v-else>{{ row.noPutThroughCount }}</span>
- </template>
- </ProTable>
- </el-card>
- </div>
- </template>
- <script setup lang="tsx" name="statisticsOrderShSatisfied">
- import { onMounted, reactive, ref } from 'vue';
- import { FormInstance } from 'element-plus';
- import { departmentSatisfaction } from '@/api/statistics/department';
- import { defaultDate, shortcuts } from "@/utils/constants";
- import { useRouter } from 'vue-router';
- import { guid } from "@/utils/tools";
- // 表格配置项
- const columns = ref<any[]>([
- { type: 'index', fixed: 'left', width: 55, label: '序号', align: 'center' },
- { prop: 'orgName', label: '部门名称', minWidth: 200 },
- { prop: 'orgTypeText', label: '部门类别', minWidth: 120 },
- { prop: 'totalSumCount', label: '小计' },
- {
- prop: 'totalSumRate',
- label: '总满意率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.totalSumRate}%`;
- },
- },
- { prop: 'verySatisfiedCount', label: '非常满意', minWidth: 120 },
- {
- prop: 'verySatisfiedRate',
- label: '非常满意率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.verySatisfiedRate}%`;
- },
- },
- { prop: 'satisfiedCount', label: '满意', minWidth: 120 },
- {
- prop: 'satisfiedRate',
- label: '满意率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.satisfiedRate}%`;
- },
- },
- { prop: 'regardedAsSatisfiedCount', label: '视为满意', minWidth: 120 },
- {
- prop: 'regardedAsSatisfiedRate',
- label: '视为满意率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.regardedAsSatisfiedRate}%`;
- },
- },
- { prop: 'defaultSatisfiedCount', label: '默认满意', minWidth: 120 },
- {
- prop: 'defaultSatisfiedRate',
- label: '默认满意率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.defaultSatisfiedRate}%`;
- },
- },
- { prop: 'noSatisfiedCount', label: '不满意', minWidth: 120 },
- {
- prop: 'noSatisfiedRate',
- label: '不满意率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.noSatisfiedRate}%`;
- },
- },
- { prop: 'noEvaluateCount', label: '未作评价', minWidth: 120 },
- {
- prop: 'noEvaluateRate',
- label: '未作评价率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.noEvaluateRate}%`;
- },
- },
- { prop: 'noPutThroughCount', label: '未接通', minWidth: 120 },
- {
- prop: 'noPutThroughRate',
- label: '未接通率',
- minWidth: 120,
- render: ({ row }) => {
- return `${row.noPutThroughRate}%`;
- },
- },
- ]);
- // 定义变量内容
- const ruleFormRef = ref<RefType>(); // 表单ref
- const state = reactive({
- queryParams: {
- // 查询条件
- PageIndex: 1,
- PageSize: 10,
- TypeId: '1', //
- LineNum: null,
- crTime: defaultDate, // 时间默认今天开始到今天结束
- },
- tableData: [], //表单
- loading: false, // 加载
- total: 0, // 总数
- totalCount: {},
- });
- /** 搜索按钮操作 */
- const handleQuery = () => {
- // state.queryParams.PageIndex = 1;
- queryList();
- };
- /** 获取列表 */
- const queryList = () => {
- /*state.loading = true;
- let StartDate = null;
- let EndDate = null;
- if (state.queryParams?.crTime) {
- StartDate = state.queryParams?.crTime[0];
- EndDate = state.queryParams?.crTime[1];
- }
- const request = {
- StartDate,
- EndDate,
- TypeId: state.queryParams.TypeId,
- LineNum: state.queryParams.LineNum,
- };
- departmentSatisfaction(request)
- .then((res: any) => {
- state.tableData = res.result?.dataList ?? [];
- if (res.result.dataList.length) {
- state.tableData.push(res.result.citySumModel);
- state.tableData.push(res.result.countySumModel);
- }
- state.totalCount = res.result.sumModel;
- state.loading = false;
- })
- .catch((err: any) => {
- state.loading = false;
- });*/
- }
- /** 重置按钮操作 */
- const resetQuery = (formEl: FormInstance | undefined) => {
- if (!formEl) return;
- formEl.resetFields();
- queryList();
- }
- // 合计
- const getSummaries = (param: any) => {
- const { columns } = param;
- const sums: string[] = [];
- columns.forEach((column: { property: string }, index: number) => {
- if (index === 0) {
- sums[index] = '合计';
- return;
- }
- switch (column.property) {
- case 'totalSumCount':
- sums[index] = state.totalCount?.totalSumCount;
- break;
- case 'totalSumRate':
- sums[index] = `${state.totalCount?.totalSumRate}%`;
- break;
- case 'verySatisfiedCount':
- sums[index] = state.totalCount?.verySatisfiedCount;
- break;
- case 'verySatisfiedRate':
- sums[index] = `${state.totalCount?.verySatisfiedRate}%`;
- break;
- case 'satisfiedCount':
- sums[index] = state.totalCount?.satisfiedCount;
- break;
- case 'satisfiedRate':
- sums[index] = `${state.totalCount?.satisfiedRate}%`;
- break;
- case 'regardedAsSatisfiedCount':
- sums[index] = state.totalCount?.regardedAsSatisfiedCount;
- break;
- case 'regardedAsSatisfiedRate':
- sums[index] = `${state.totalCount?.regardedAsSatisfiedRate}%`;
- break;
- case 'defaultSatisfiedCount':
- sums[index] = state.totalCount?.defaultSatisfiedCount;
- break;
- case 'defaultSatisfiedRate':
- sums[index] = `${state.totalCount?.defaultSatisfiedRate}%`;
- break;
- case 'noSatisfiedCount':
- sums[index] = state.totalCount?.noSatisfiedCount;
- break;
- case 'noSatisfiedRate':
- sums[index] = `${state.totalCount?.noSatisfiedRate}%`;
- break;
- case 'noEvaluateCount':
- sums[index] = state.totalCount?.noEvaluateCount;
- break;
- case 'noEvaluateRate':
- sums[index] = `${state.totalCount?.noEvaluateRate}%`;
- break;
- case 'noPutThroughCount':
- sums[index] = state.totalCount?.noPutThroughCount;
- break;
- case 'noPutThroughRate':
- sums[index] = `${state.totalCount?.noPutThroughRate}%`;
- break;
- default:
- sums[index] = '';
- break;
- }
- });
- return sums;
- };
- const router = useRouter();
- // 点击部门名称
- const onDetailOrg = (row: any) => {
- let StartDate = null;
- let EndDate = null;
- if (state.queryParams?.crTime) {
- StartDate = state.queryParams?.crTime[0];
- EndDate = state.queryParams?.crTime[1];
- }
- router.push({
- name: 'statisticsDepartmentSatisfiedOrg',
- state: {
- StartDate,
- EndDate,
- OrgCode: row.orgCode,
- TypeId: state.queryParams.TypeId,
- LineNum: state.queryParams.LineNum,
- },
- params: {
- key: guid()
- },
- });
- };
- // 点击数字
- const onDetail = (key: string, row, type: string) => {
- let StartDate = null;
- let EndDate = null;
- if (state.queryParams?.crTime) {
- StartDate = state.queryParams?.crTime[0];
- EndDate = state.queryParams?.crTime[1];
- }
- router.push({
- name: 'statisticsDepartmentSatisfiedDetail',
- params: {
- key: guid()
- },
- state: {
- StartDate,
- EndDate,
- OrgCode: row.orgCode,
- TypeId: state.queryParams.TypeId,
- LineNum: state.queryParams.LineNum,
- DateValue: key,
- },
- });
- };
- onMounted(() => {
- queryList();
- });
- </script>
|