Browse Source

reactor:对接热点类型统计;

zhangchong 1 year ago
parent
commit
0c12de6d86

+ 71 - 49
src/api/statistics/order/index.ts

@@ -7,76 +7,98 @@ import request from '@/utils/request';
  * @description 部门数据统计列表查询
  * @param {object} params
  */
-export const departmentList = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/org_data_list`,
-        method: 'get',
-        params
-    });
-}
+export const departmentList = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/org_data_list`,
+		method: 'get',
+		params,
+	});
+};
 /**
  * @description 中心统计列表查询
  * @param {object} params
  */
-export const centerList = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/centre_data_list`,
-        method: 'get',
-        params
-    });
-}
+export const centerList = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/centre_data_list`,
+		method: 'get',
+		params,
+	});
+};
 /**
  * @description 部门不满意统计
  * @param {object} params
  */
-export const departmentUnsatisfied = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/visit-nosatisfied`,
-        method: 'get',
-        params
-    });
-}
+export const departmentUnsatisfied = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/visit-nosatisfied`,
+		method: 'get',
+		params,
+	});
+};
 /**
  * @description 部门不满意统计明细
  * @param {object} params
  */
-export const departmentUnsatisfiedDetail = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/visit-nosatisfied-detail`,
-        method: 'get',
-        params
-    });
-}
+export const departmentUnsatisfiedDetail = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/visit-nosatisfied-detail`,
+		method: 'get',
+		params,
+	});
+};
 /**
  * @description 部门延期统计
  * @param {object} params
  */
-export const departmentDelay = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/order-delay-data-list`,
-        method: 'get',
-        params
-    });
-}
+export const departmentDelay = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/order-delay-data-list`,
+		method: 'get',
+		params,
+	});
+};
 /**
  * @description 特提统计
  * @param {object} params
  */
-export const departmentSpecial = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/special_data_list`,
-        method: 'get',
-        params
-    });
-}
+export const departmentSpecial = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/special_data_list`,
+		method: 'get',
+		params,
+	});
+};
 /**
  * @description 特提统计明细
  * @param {object} params
  */
-export const departmentSpecialDetail = (params:object) => {
-    return request({
-        url: `/api/v1/BiOrder/special_data_list/list`,
-        method: 'get',
-        params
-    });
-}
+export const departmentSpecialDetail = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/special_data_list/list`,
+		method: 'get',
+		params,
+	});
+};
+/**
+ * @description 热点类型统计
+ * @param {object} params
+ */
+export const departmentHot = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/hotspot_data_list`,
+		method: 'get',
+		params,
+	});
+};
+/**
+ * @description 部门热点类型统计
+ * @param {object} params
+ */
+export const departmentHotDetail = (params: object) => {
+	return request({
+		url: `/api/v1/BiOrder/hot_data_list/list`,
+		method: 'get',
+		params,
+	});
+};

+ 23 - 0
src/theme/app.scss

@@ -488,6 +488,29 @@ li {
 		}
 	}
 }
+/* 超期圆形 */
+.overdue-circle {
+	width: 15px;
+	height: 15px;
+	border-radius: 50%;
+	display: inline-block;
+	margin-right: 5px;
+}
+/* 正常状态样式 */
+.overdue-status-0 {
+	@extend .overdue-circle;
+	background-color: #109688;
+}
+/* 即将超期状态样式 */
+.overdue-status-1 {
+	@extend .overdue-circle;
+	background-color: #F49934;
+}
+/* 已超期状态样式 */
+.overdue-status-2 {
+	@extend .overdue-circle;
+	background-color: #D70024;
+}
 /* 关键词查询输入框宽度 */
 .keyword-input{
 	width: 250px;

+ 5 - 0
src/views/business/delay/index.vue

@@ -23,6 +23,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column width="100" label="省/市工单" prop="isProvince">
 					<template #default="{ row }">

+ 1 - 3
src/views/business/order/index.vue

@@ -159,9 +159,7 @@
 				<el-table-column type="selection" width="55" />
         <el-table-column label="超期状态" width="80" align="center">
           <template #default="{ row }">
-            <el-tag v-if="row.expiredStatus === 0" type="info" effect="dark">{{ row.expiredStatusText }}</el-tag>
-            <el-tag v-if="row.expiredStatus === 1" type="success" effect="dark">{{ row.expiredStatusText }}</el-tag>
-            <el-tag v-if="row.expiredStatus === 2" type="danger" effect="dark">{{ row.expiredStatusText }}</el-tag>
+            <span :class="'overdue-status-'+row.expiredStatus" :title="row.expiredStatusText"></span>
           </template>
         </el-table-column>
 				<el-table-column prop="no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>

+ 1 - 4
src/views/home/component/ToDo.vue

@@ -19,10 +19,7 @@
 			<template v-if="activeName === '0' && auth('home:orderTodo')">
 				<el-table-column label="超期状态" width="80" align="center">
 					<template #default="{ row }">
-						<!--            <span :class="'overdue-status-'+row.expiredStatus" :title="row.expiredStatusText"></span>-->
-						<el-tag v-if="row.expiredStatus === 0" type="info" effect="dark">{{ row.expiredStatusText }}</el-tag>
-						<el-tag v-if="row.expiredStatus === 1" type="success" effect="dark">{{ row.expiredStatusText }}</el-tag>
-						<el-tag v-if="row.expiredStatus === 2" type="danger" effect="dark">{{ row.expiredStatusText }}</el-tag>
+            <span :class="'overdue-status-'+row.expiredStatus" :title="row.expiredStatusText"></span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>

+ 5 - 0
src/views/query/countersign/index.vue

@@ -23,6 +23,11 @@
 		<el-card shadow="never">
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading">
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="id" label="会签编码" show-overflow-tooltip width="300"></el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>

+ 5 - 0
src/views/query/end/index.vue

@@ -24,6 +24,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="order.currentStepName" label="当前节点" show-overflow-tooltip width="120"></el-table-column>

+ 5 - 0
src/views/query/observe/index.vue

@@ -24,6 +24,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip width="120"></el-table-column>
 				<el-table-column prop="order.currentStepName" label="当前节点" show-overflow-tooltip></el-table-column>

+ 5 - 0
src/views/query/urge/index.vue

@@ -18,6 +18,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="order.currentStepName" label="办理节点" show-overflow-tooltip width="150"></el-table-column>

+ 162 - 106
src/views/statistics/order/hotspot.vue

@@ -1,136 +1,192 @@
 <template>
-  <div class="statistics-order-org-overdue-container layout-pd">
-    <!-- 搜索  -->
-    <el-card shadow="never">
-      <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent  inline>
-        <el-form-item  prop="dateType" label="时间单位">
-          <el-select v-model="state.queryParams.dateType" placeholder="部门名称" @change="changeDateType">
-            <el-option label="年" value="year" />
-            <el-option label="月" value="month" />
-            <el-option label="日" value="date" />
-            <el-option label="自定义" value="daterange" />
-          </el-select>
-        </el-form-item>
-        <el-form-item prop="crTime" v-if="state.queryParams.dateType === 'daterange'" label="时间">
-          <el-date-picker
-            v-model="state.queryParams.crTime"
-            :type="state.queryParams.dateType"
-            unlink-panels
-            range-separator="至"
-            start-placeholder="开始时间"
-            end-placeholder="结束时间"
-            :shortcuts="shortcuts"
-            @change="queryList"
-            value-format="YYYY-MM-DD[T]HH:mm:ss"
-            :clearable="false"
-          />
-        </el-form-item>
-        <el-form-item prop="time" v-else label="时间">
-          <el-date-picker
-            v-model="state.queryParams.time"
-            :type="state.queryParams.dateType"
-            placeholder="选择时间"
-            @change="queryList"
-            :value-format="valueFormat"
-            :clearable="false"
-          />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="queryList" :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">
-      <!-- 表格 -->
-      <el-table
-        :data="state.tableData"
-        v-loading="state.loading"
-        show-summary
-        row-key="orgId"
-        ref="multipleTableRef"
-        @selection-change="handleSelectionChange"
-        border
-      >
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column prop="orgName" label="部门名称" show-overflow-tooltip align="center"></el-table-column>
-        <el-table-column prop="allTotal" label="小计" show-overflow-tooltip align="center"></el-table-column>
-        <el-table-column prop="passTotal" label="延期已同意次数" show-overflow-tooltip align="center"></el-table-column>
-        <el-table-column prop="noPassTotal" label="延期未同意次数" show-overflow-tooltip align="center"></el-table-column>
-        <el-table-column prop="examiningTotal" label="延期审批中次数" show-overflow-tooltip align="center"></el-table-column>
-        <template #empty>
-          <Empty />
-        </template>
-      </el-table>
-    </el-card>
-  </div>
+	<div class="statistics-order-org-overdue-container layout-pd">
+		<!-- 搜索  -->
+		<el-card shadow="never">
+			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+				<el-form-item prop="dateType" label="时间单位">
+					<el-select v-model="state.queryParams.dateType" placeholder="部门名称" @change="changeDateType">
+						<el-option label="年" value="year" />
+						<el-option label="月" value="month" />
+						<el-option label="日" value="date" />
+						<el-option label="自定义" value="datetimerange" />
+					</el-select>
+				</el-form-item>
+				<el-form-item prop="crTime" v-if="state.queryParams.dateType === 'datetimerange'" label="时间">
+					<el-date-picker
+						v-model="state.queryParams.crTime"
+						type="datetimerange"
+						unlink-panels
+						range-separator="至"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						:shortcuts="shortcuts"
+						@change="queryList"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:clearable="false"
+					/>
+				</el-form-item>
+				<el-form-item prop="time" v-else label="时间">
+					<el-date-picker
+						v-model="state.queryParams.time"
+						:type="state.queryParams.dateType"
+						placeholder="选择时间"
+						@change="queryList"
+						:value-format="valueFormat"
+						:clearable="false"
+					/>
+				</el-form-item>
+				<el-form-item>
+					<el-button type="primary" @click="queryList" :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">
+			<!-- 表格 -->
+			<el-table
+				:data="state.tableData"
+				v-loading="state.loading"
+				row-key="id"
+				lazy
+				:load="load"
+				:tree-props="{ children: 'children', hasChildren: 'sublevel' }"
+				show-summary
+			>
+				<el-table-column prop="name" label="热点名称" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="num" label="工单数" show-overflow-tooltip> </el-table-column>
+				<el-table-column prop="chainNum" label="环比工单数" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="chainRate" label="日环比" show-overflow-tooltip></el-table-column>
+				<template #empty>
+					<Empty />
+				</template>
+			</el-table>
+		</el-card>
+	</div>
 </template>
 <script setup lang="ts" name="statisticsOrderHotspot">
-import { computed, onMounted, reactive, ref } from "vue";
+import { computed, onMounted, reactive, ref } from 'vue';
 import { ElButton, FormInstance } from 'element-plus';
 import { throttle } from '@/utils/tools';
-import { departmentDelay } from '@/api/statistics/order';
+import { departmentHot } from '@/api/statistics/order';
 import { shortcuts } from '@/utils/constants';
 import dayjs from 'dayjs';
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const state = reactive(<any>{
-  queryParams: {
-    // 查询条件
-    dateType: 'date', // 关键词
-    time: dayjs(new Date()).format('YYYY-MM-DD'), // 时间默认今天
-    crTime: [], // 时间默认今天开始到今天结束
-  },
-  tableData: [], //表单
-  loading: false, // 加载
-  total: 0, // 总数
+	queryParams: {
+		// 查询条件
+		dateType: 'date', // 关键词
+		time: dayjs(new Date()).format('YYYY-MM-DD'), // 时间默认今天
+		crTime: [dayjs(new Date()).startOf('date').format('YYYY-MM-DD[T]HH:mm:ss'), dayjs(new Date()).endOf('date').format('YYYY-MM-DD[T]HH:mm:ss')], // 时间默认今天开始到今天结束
+	},
+	tableData: [], //表单
+	loading: false, // 加载
+	total: 0, // 总数
 });
 const valueFormat = computed(() => {
-  return state.queryParams.dateType === 'date' ? 'YYYY-MM-DD' : state.queryParams.dateType === 'month' ? 'YYYY-MM' : 'YYYY';
+	return state.queryParams.dateType === 'date' ? 'YYYY-MM-DD' : state.queryParams.dateType === 'month' ? 'YYYY-MM' : 'YYYY';
 });
+// 设置当前时间的映射值
+const getType = computed(() => {
+	const statusMap: any = {
+		date: '1',
+		year: '3',
+		month: '2',
+		datetimerange: '0',
+	};
+	return statusMap[state.queryParams.dateType] || '';
+});
+
 /** 获取列表 */
 const queryList = throttle(() => {
-  console.log(state.queryParams.time)
-  state.loading = true;
-  let StartTime = null;
-  let EndTime = null;
-  if (state.queryParams?.crTime) {
-    StartTime = state.queryParams?.crTime[0];
-    EndTime = state.queryParams?.crTime[1];
-  }
-  const request = {
-    StartTime,
-    EndTime,
-    OrgName: state.queryParams.OrgName,
-  };
-  departmentDelay(request)
-    .then((res: any) => {
-      state.tableData = res.result ?? [];
-      state.loading = false;
-    })
-    .catch(() => {
-      state.loading = false;
-    });
+	state.loading = true;
+	let StartTime = null;
+	let EndTime = null;
+	switch (state.queryParams.dateType) {
+		case 'date':
+			StartTime = dayjs(state.queryParams.time).startOf('date').format('YYYY-MM-DD[T]HH:mm:ss');
+			EndTime = dayjs(state.queryParams.time).endOf('date').format('YYYY-MM-DD[T]HH:mm:ss');
+			break;
+		case 'month':
+			StartTime = dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD[T]HH:mm:ss');
+			EndTime = dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD[T]HH:mm:ss');
+			break;
+		case 'year':
+			StartTime = dayjs(state.queryParams.time).startOf('year').format('YYYY-MM-DD[T]HH:mm:ss');
+			EndTime = dayjs(state.queryParams.time).endOf('year').format('YYYY-MM-DD[T]HH:mm:ss');
+			break;
+		case 'datetimerange':
+			StartTime = state.queryParams?.crTime[0];
+			EndTime = state.queryParams?.crTime[1];
+			break;
+	}
+	const request = {
+		Type: getType.value,
+		StartTime,
+		EndTime,
+	};
+	departmentHot(request)
+		.then((res: any) => {
+			state.tableData = res.result ?? [];
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
 }, 300);
 /** 重置按钮操作 */
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 }, 300);
+// 懒加载
+const load = (row: any, treeNode: unknown, resolve: (date: any[]) => void) => {
+	let StartTime = null;
+	let EndTime = null;
+	switch (state.queryParams.dateType) {
+		case 'date':
+			StartTime = dayjs(state.queryParams.time).startOf('date').format('YYYY-MM-DD[T]HH:mm:ss');
+			EndTime = dayjs(state.queryParams.time).endOf('date').format('YYYY-MM-DD[T]HH:mm:ss');
+			break;
+		case 'month':
+			StartTime = dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD[T]HH:mm:ss');
+			EndTime = dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD[T]HH:mm:ss');
+			break;
+		case 'year':
+			StartTime = dayjs(state.queryParams.time).startOf('year').format('YYYY-MM-DD[T]HH:mm:ss');
+			EndTime = dayjs(state.queryParams.time).endOf('year').format('YYYY-MM-DD[T]HH:mm:ss');
+			break;
+		case 'datetimerange':
+			StartTime = state.queryParams?.crTime[0];
+			EndTime = state.queryParams?.crTime[1];
+			break;
+	}
+	const request = {
+		Type: getType.value,
+		StartTime,
+		EndTime,
+		Id: row.id,
+	};
+	departmentHot(request)
+		.then((res: any) => {
+			resolve(res.result ?? []);
+		})
+		.catch(() => {});
+};
 const changeDateType = () => {
-  ruleFormRef.value.resetFields('time');
+	queryList();
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();
 const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
-  multipleSelection.value = val;
+	multipleSelection.value = val;
 };
 
 onMounted(() => {
-  queryList();
+	queryList();
 });
 </script>

+ 138 - 0
src/views/statistics/order/orgHotspot.vue

@@ -0,0 +1,138 @@
+<template>
+  <div class="statistics-order-center-container layout-pd">
+    <!-- 搜索  -->
+    <el-card shadow="never">
+      <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent  inline>
+        <el-form-item label="姓名" prop="Keyword">
+          <el-input v-model="state.queryParams.Keyword" placeholder="姓名" clearable @keyup.enter="queryList" class="keyword-input" />
+        </el-form-item>
+        <el-form-item label="时间段" prop="crTime">
+          <el-date-picker
+            v-model="state.queryParams.crTime"
+            type="datetimerange"
+            unlink-panels
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            :shortcuts="shortcuts"
+            @change="queryList"
+            value-format="YYYY-MM-DD[T]HH:mm:ss"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="queryList" :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">
+      <!-- 表格 -->
+      <el-table
+        :data="state.tableData"
+        v-loading="state.loading"
+        show-summary
+        row-key="userId"
+        ref="multipleTableRef"
+        @selection-change="handleSelectionChange"
+        @sort-change="sortChange"
+      >
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column prop="userName" label="姓名" show-overflow-tooltip align="center"></el-table-column>
+        <el-table-column label="有效件" align="center">
+          <el-table-column prop="centreArchive" label="中心归档件" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
+          <el-table-column prop="centreCareOf" label="转办信件" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
+          <!--          <el-table-column prop="addNum" label="待转办信件" show-overflow-tooltip align="center" sortable="custom"></el-table-column>-->
+        </el-table-column>
+        <el-table-column prop="invalid" label="无效信件" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
+        <el-table-column prop="repeat" label="重复信件" show-overflow-tooltip align="center" sortable="custom"></el-table-column>
+        <el-table-column prop="subtotal" label="所有信件" show-overflow-tooltip align="center" sortable="custom"></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>
+<script setup lang="ts" name="statisticsOrderOrgHotspot">
+import { onMounted, reactive, ref } from 'vue';
+import { ElButton, FormInstance } from 'element-plus';
+import { throttle } from '@/utils/tools';
+import { centerList } from '@/api/statistics/order';
+import { shortcuts } from '@/utils/constants';
+import dayjs from 'dayjs';
+// 定义变量内容
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive(<any>{
+  queryParams: {
+    // 查询条件
+    PageIndex: 1,
+    PageSize: 10,
+    Keyword: null, // 关键词
+    crTime: [dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss'), dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')], // 时间默认今天开始到今天结束
+  },
+  tableData: [], //表单
+  loading: false, // 加载
+  total: 0, // 总数
+});
+/** 获取列表 */
+const queryList = throttle(() => {
+  state.loading = true;
+  let StartTime = null;
+  let EndTime = null;
+  if (state.queryParams?.crTime) {
+    StartTime = state.queryParams?.crTime[0];
+    EndTime = state.queryParams?.crTime[1];
+  }
+  const request = {
+    StartTime,
+    EndTime,
+    DelayState: state.queryParams.DelayState,
+    PageIndex: state.queryParams.PageIndex,
+    PageSize: state.queryParams.PageSize,
+    Keyword: state.queryParams.Keyword,
+    SortField: state.queryParams.SortField,
+    SortRule: state.queryParams.SortRule,
+  };
+  centerList(request)
+    .then((res: any) => {
+      state.tableData = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
+      state.loading = false;
+    })
+    .catch(() => {
+      state.loading = false;
+    });
+}, 300);
+// 排序
+const sortChange = (val: any) => {
+  state.queryParams.SortField = val.order ? val.prop : null;
+  // 0 升序 1 降序
+  state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+  queryList();
+};
+/** 重置按钮操作 */
+const resetQuery = throttle((formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  queryList();
+}, 300);
+// 表格多选
+const multipleTableRef = ref<RefType>();
+const multipleSelection = ref<any>([]);
+const handleSelectionChange = (val: any[]) => {
+  multipleSelection.value = val;
+};
+
+onMounted(() => {
+  queryList();
+});
+</script>

+ 5 - 0
src/views/todo/delay/index.vue

@@ -20,6 +20,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<template v-if="state.queryParams.IsApply === 'false'">
 					<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 					<el-table-column width="100" label="省/市工单" prop="isProvince">

+ 5 - 0
src/views/todo/discern/index.vue

@@ -33,6 +33,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<template v-if="state.queryParams.Status === '0'">
 					<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 					<el-table-column width="100" label="省/市工单" prop="isProvince">

+ 1 - 3
src/views/todo/order/index.vue

@@ -27,9 +27,7 @@
 				<el-table-column type="selection" width="40" />
         <el-table-column label="超期状态" width="80" align="center">
           <template #default="{ row }">
-            <el-tag v-if="row.expiredStatus === 0" type="info" effect="dark">{{ row.expiredStatusText }}</el-tag>
-            <el-tag v-if="row.expiredStatus === 1" type="success" effect="dark">{{ row.expiredStatusText }}</el-tag>
-            <el-tag v-if="row.expiredStatus === 2" type="danger" effect="dark">{{ row.expiredStatusText }}</el-tag>
+            <span :class="'overdue-status-'+row.expiredStatus" :title="row.expiredStatusText"></span>
           </template>
         </el-table-column>
 				<template v-if="state.queryParams.IsHandled === 'false'">

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

@@ -29,6 +29,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="40" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.expiredStatus" :title="row.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<template v-if="state.queryParams.IsHandled === 'false'">
 					<el-table-column prop="no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 					<el-table-column width="100" label="省/市工单" prop="isProvince">

+ 5 - 0
src/views/todo/supervise/index.vue

@@ -18,6 +18,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column label="工单标题" show-overflow-tooltip width="300">
 					<template #default="{ row }">

+ 5 - 0
src/views/todo/urge/index.vue

@@ -18,6 +18,11 @@
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
+        <el-table-column label="超期状态" width="80" align="center">
+          <template #default="{ row }">
+            <span :class="'overdue-status-'+row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
+          </template>
+        </el-table-column>
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column label="工单标题" show-overflow-tooltip width="300">
 					<template #default="{ row }">