Browse Source

reactor:460 关于终止件的需求

zhangchong 4 weeks ago
parent
commit
ab980d1105

+ 1 - 1
src/api/snapshot/reAudit.ts

@@ -252,7 +252,7 @@ export const getSpecialRedEnvelopeApprovalAdditionalBaseInfo = (id?: string) =>
  */
  */
 export const specialRedEnvelopeApprovalAdditional = (data: object) => {
 export const specialRedEnvelopeApprovalAdditional = (data: object) => {
 	return request({
 	return request({
-		url: `/api/v1/RedPack/record`,
+		url: `/api/v1/RedPack/record/special`,
 		method: 'put',
 		method: 'put',
 		data,
 		data,
 	});
 	});

+ 14 - 5
src/components/OrderDetail/History.vue

@@ -31,17 +31,22 @@
 		:max-height="500"
 		:max-height="500"
 	>
 	>
 		<vxe-column field="no" title="工单编码" width="140"></vxe-column>
 		<vxe-column field="no" title="工单编码" width="140"></vxe-column>
-    <vxe-column field="title" title="工单标题" min-width="150">
-      <template #default="{ row }">
-        <order-detail :order="row" @updateList="searchHistory">{{ row.title }}</order-detail>
-      </template>
-    </vxe-column>
+		<vxe-column field="title" title="工单标题" min-width="150">
+			<template #default="{ row }">
+				<order-detail :order="row" @updateList="searchHistory">{{ row.title }}</order-detail>
+			</template>
+		</vxe-column>
 		<vxe-column field="currentStepName" title="当前节点" width="100"></vxe-column>
 		<vxe-column field="currentStepName" title="当前节点" width="100"></vxe-column>
 		<vxe-column field="isScreen" title="甄别状态" width="100">
 		<vxe-column field="isScreen" title="甄别状态" width="100">
 			<template #default="{ row }">
 			<template #default="{ row }">
 				<el-text :type="row.isScreen ? 'danger' : 'info'">{{ row.isScreen ? '已甄别' : '-' }}</el-text>
 				<el-text :type="row.isScreen ? 'danger' : 'info'">{{ row.isScreen ? '已甄别' : '-' }}</el-text>
 			</template>
 			</template>
 		</vxe-column>
 		</vxe-column>
+		<vxe-column field="TerminateStatusText" title="终止状态" width="100" v-if="['ZiGong'].includes(themeConfig.appScope)">
+			<template #default="{ row }">
+				<el-text :type="row.TerminateStatusText ? 'danger' : 'info'">{{ row.TerminateStatusText }}</el-text>
+			</template>
+		</vxe-column>
 		<vxe-column field="statusText" title="状态" width="100"></vxe-column>
 		<vxe-column field="statusText" title="状态" width="100"></vxe-column>
 		<vxe-column field="actualHandleOrgName" title="接办部门" width="140"></vxe-column>
 		<vxe-column field="actualHandleOrgName" title="接办部门" width="140"></vxe-column>
 	</vxe-table>
 	</vxe-table>
@@ -59,6 +64,8 @@ import { FormInstance } from 'element-plus';
 import { throttle } from '@/utils/tools';
 import { throttle } from '@/utils/tools';
 import { historyOrder } from '@/api/business/order';
 import { historyOrder } from '@/api/business/order';
 import { useRoute } from 'vue-router';
 import { useRoute } from 'vue-router';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
 
 
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
@@ -91,6 +98,8 @@ const state = reactive<any>({
 	},
 	},
 	loading: false,
 	loading: false,
 });
 });
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 const queryParamsRef = ref<RefType>(); // 历史工单查询参数
 const queryParamsRef = ref<RefType>(); // 历史工单查询参数
 const multipleSelection = ref<any[]>([]); // 重复件表格选中项
 const multipleSelection = ref<any[]>([]); // 重复件表格选中项
 /** 搜索按钮操作 */
 /** 搜索按钮操作 */

+ 9 - 0
src/router/route.ts

@@ -691,6 +691,15 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 			isKeepAlive: true,
 			isKeepAlive: true,
 		},
 		},
 	},
 	},
+	{
+		path: '/statistics/center/detailOrderNum',
+		name: 'statisticsCenterDetailOrderNum',
+		component: () => import('@/views/statistics/center/detailOrderNum.vue'),
+		meta: {
+			title: '工单业务量统计明细',
+			isKeepAlive: true,
+		},
+	},
 	{
 	{
 		path: '/statistics/department/detailDpReturn',
 		path: '/statistics/department/detailDpReturn',
 		name: 'statisticsDepartmentDetailDpReturn',
 		name: 'statisticsDepartmentDetailDpReturn',

+ 1 - 0
src/views/business/terminate/apply.vue

@@ -74,6 +74,7 @@
 					</vxe-column>
 					</vxe-column>
 					<vxe-column field="acceptType" title="受理类型" width="120"></vxe-column>
 					<vxe-column field="acceptType" title="受理类型" width="120"></vxe-column>
 					<vxe-column field="hotspotName" title="热点分类" width="150"></vxe-column>
 					<vxe-column field="hotspotName" title="热点分类" width="150"></vxe-column>
+					<vxe-column field="fileOpinion" title="承办意见" min-width="200"></vxe-column>
 					<vxe-column title="操作" fixed="right" width="240" align="center">
 					<vxe-column title="操作" fixed="right" width="240" align="center">
 						<template #default="{ row }">
 						<template #default="{ row }">
 							<el-button link type="primary" @click="onDetail(row)" title="终止明细" v-if="row.orderTerminates?.length"> 终止明细 </el-button>
 							<el-button link type="primary" @click="onDetail(row)" title="终止明细" v-if="row.orderTerminates?.length"> 终止明细 </el-button>

+ 7 - 2
src/views/business/terminate/components/Terminate-apply.vue

@@ -14,6 +14,11 @@
 		<div v-loading="state.loading">
 		<div v-loading="state.loading">
 			<el-form :model="state.terminateForm" label-width="110px" ref="terminateFormRef">
 			<el-form :model="state.terminateForm" label-width="110px" ref="terminateFormRef">
 				<el-row :gutter="10">
 				<el-row :gutter="10">
+					<el-col v-if="state.orderDetail?.fileOpinion">
+						<el-form-item label="承办意见">
+							<text-ellipsis :content="state.orderDetail?.fileOpinion" :rows="1"> </text-ellipsis>
+						</el-form-item>
+					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="工单编码"> {{ state.orderDetail.no }} </el-form-item>
 						<el-form-item label="工单编码"> {{ state.orderDetail.no }} </el-form-item>
 					</el-col>
 					</el-col>
@@ -91,11 +96,12 @@ import { computed, defineAsyncComponent, reactive, ref, watch } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { ElMessage, FormInstance } from 'element-plus';
 import other from '@/utils/other';
 import other from '@/utils/other';
 import { commonEnum } from '@/utils/constants';
 import { commonEnum } from '@/utils/constants';
-import {  terminateStartFlow, terminateStartFlowParams } from '@/api/business/terminate';
+import { terminateStartFlow, terminateStartFlowParams } from '@/api/business/terminate';
 
 
 // 引入组件
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
 const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
 const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
 const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
+const TextEllipsis = defineAsyncComponent(() => import('@/components/TextEllipsis/index.vue'));
 // 定义子组件向父组件传值/事件
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
 const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
 // 定义变量内容
 // 定义变量内容
@@ -119,7 +125,6 @@ const state = reactive<any>({
 });
 });
 // 打开弹窗
 // 打开弹窗
 const openDialog = async (val: any) => {
 const openDialog = async (val: any) => {
-	console.log(val);
 	state.dialogVisible = true;
 	state.dialogVisible = true;
 	state.loading = true;
 	state.loading = true;
 	try {
 	try {

+ 1 - 1
src/views/snapshot/reAudit/components/Re-supply-special.vue

@@ -110,7 +110,7 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 		loading.value = true;
 		loading.value = true;
 		const request = {
 		const request = {
 			...state.ruleForm,
 			...state.ruleForm,
-			redPackAuditId: state.auditObj.id,
+			redPackAuditId: state.auditObj.redPackAuditId,
 		};
 		};
 		specialRedEnvelopeApprovalAdditional(request)
 		specialRedEnvelopeApprovalAdditional(request)
 			.then(() => {
 			.then(() => {

+ 295 - 0
src/views/statistics/center/detailOrderNum.vue

@@ -0,0 +1,295 @@
+<template>
+	<div class="statistics-center-detail-order-num-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<vxe-grid v-bind="gridOptions" v-on="gridEvents">
+				<template #form>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline :disabled="gridOptions.loading">
+						<el-form-item prop="crTime" label="查询时间">
+							<el-date-picker
+								v-model="state.queryParams.crTime"
+								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"
+								:clearable="false"
+							/>
+						</el-form-item>
+						<el-form-item label="工单标题" prop="Title">
+							<el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<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>
+							<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 #statusText="{ row }">
+					<el-text type="danger" tag="b" v-if="[1, 2, 3, 9, 101, 102, 103, 104, 105, 200].includes(row.status)">{{ row.statusText }}</el-text>
+					<span v-else>{{ row.statusText }}</span>
+				</template>
+				<template #order_detail="{ row }">
+					<order-detail :order="{ ...row.order }" @updateList="queryList">{{ row.order?.title }}</order-detail>
+				</template>
+				<template #pager>
+					<pagination
+						@pagination="queryList"
+						:total="state.total"
+						v-model:current-page="state.queryParams.PageIndex"
+						v-model:page-size="state.queryParams.PageSize"
+						:disabled="state.loading"
+					/>
+				</template>
+			</vxe-grid>
+		</div>
+		<!--	更多查询	-->
+		<el-drawer v-model="drawer" title="更多查询" size="500px">
+			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
+				<el-form-item label="来源渠道" prop="Channel">
+					<el-select v-model="state.queryParams.Channel" placeholder="请选择来源渠道" clearable @change="handleQuery">
+						<el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+					</el-select>
+				</el-form-item>
+				<el-form-item label="受理类型" prop="AcceptType">
+					<el-select v-model="state.queryParams.AcceptType" placeholder="请选择受理类型" clearable @change="handleQuery">
+						<el-option v-for="item in state.acceptTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+					</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>
+				<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="statisticsCenterDetailOrderNum">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import { centerOverdueReturnDetail, centerOverdueReturnDetailBasic, centerOverdueReturnDetailExport } from '@/api/statistics/center';
+import Other from '@/utils/other';
+import { FormInstance } from 'element-plus';
+import { defaultDate, defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+
+// 引入组件
+const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
+const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+// 定义变量内容
+const state = reactive<any>({
+	queryParams: {
+		// 查询条件
+		crTime: defaultDate, //
+		StartTime: null,
+		EndTime: null,
+		Title: null, // 标题
+		No: null, // 工单编号
+		PageIndex: 1, // 当前页码
+		PageSize: 20, // 每页条数
+		Channels: null, // 来源渠道
+		AcceptType: null, // 受理类型
+		Hotspot: null, // 热点分类
+		slTime: [], // 受理时间
+		CreationTimeStart: null,
+		CreationTimeEnd: null,
+		ApplyOrgName: null, // 申请部门
+		ApplyUserName: null, // 申请人
+		State: null, // 退回审批状态
+		AuditUser: null, // 审批人
+		spTime: [], // 审批时间
+		AuditTimeStart: null,
+		AuditTimeEnd: null,
+		AuditContent: null, // 审批意见
+	},
+	loading: false, // 加载
+	total: 0,
+	channelOptions: [], // 来源渠道
+	acceptTypeOptions: [], // 受理类型
+	sendBackAuditState: [], // 退回审批状态
+});
+
+const requestParams = ref<EmptyObjectType>({});
+const gridOptions = reactive<any>({
+	loading: false,
+	border: true,
+	showOverflow: true,
+	columnConfig: {
+		resizable: true,
+	},
+	scrollY: {
+		enabled: true,
+		gt: 100,
+	},
+	toolbarConfig: {
+		zoom: true,
+		custom: true,
+		refresh: {
+			queryMethod: () => {
+				handleQuery();
+			},
+		},
+		tools: [{ toolRender: { name: 'exportCurrent' } }, { toolRender: { name: 'exportAll' } }],
+	},
+	customConfig: {
+		storage: true,
+	},
+	id: 'statisticsCenterDetailOrderNum',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	columns: [
+		{
+			field: 'expiredStatusText',
+			title: '状态',
+			width: 60,
+			align: 'center',
+			slots: {
+				default: ({ row }) => {
+					return <span class={'overdue-status-' + row.expiredStatus} title={row.expiredStatusText}></span>;
+				},
+			},
+		},
+		{
+			field: 'statusText',
+			title: '工单状态',
+			width: 110,
+			slots: {
+				default: 'statusText',
+			},
+		},
+		{ field: 'currentStepName', title: '当前节点', width: 120 },
+		{ field: 'reTransactNum', title: '重办次数', width: 130 },
+		{ field: 'order.no', title: '工单编码', minWidth: 140 },
+		{
+			field: 'order.creationTime',
+			title: '受理时间',
+			width: 160,
+			formatter: 'formatDate',
+		},
+		{
+			field: 'order.title',
+			title: '工单标题',
+			minWidth: 200,
+			slots: { default: 'order_detail' },
+		},
+		{ field: 'order.county', title: '区域', width: 110 },
+		{
+			field: 'expiredTime',
+			title: '期满时间',
+			width: 160,
+			formatter: 'formatDate',
+		},
+		{ field: 'actualHandleOrgName', title: '接办部门', width: 140 },
+		{
+			field: 'actualHandleTime',
+			title: '接办时间',
+			width: 160,
+			formatter: 'formatDate',
+		},
+		{
+			field: 'filedTime',
+			title: '办结时间',
+			width: 160,
+			formatter: 'formatDate',
+		},
+		{ field: 'acceptType', title: '受理类型', width: 110 },
+		{ field: 'hotspotName', title: '热点分类', width: 150 },
+	],
+	data: [],
+	params: {
+		exportMethod: centerOverdueReturnDetailExport,
+		exportParams: requestParams,
+	},
+	sortConfig: {
+		remote: true,
+	},
+	showFooter: true,
+	footerData: [],
+});
+// 手动查询,将页码设置为1
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+/** 重置按钮操作 */
+const statisticalTimeRef = ref<RefType>();
+const drawerRuleFormRef = ref();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const drawer = ref(false);
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	statisticalTimeRef.value.reset();
+	ruleFormRef.value?.resetFields();
+	queryList();
+};
+// 是否展示时间选择
+const showTimePicker = ref<boolean>(true);
+/** 获取列表 */
+const route = useRoute();
+const routeQueryParams = route.query;
+const queryList = async () => {
+	try {
+		state.loading = true;
+		gridOptions.loading = true;
+		requestParams.value = Other.deepClone(state.queryParams);
+		showTimePicker.value = false;
+		requestParams.value.StartTime = routeQueryParams.StartTime;
+		requestParams.value.EndTime = routeQueryParams.EndTime;
+		requestParams.value.Type = Number(routeQueryParams.Type);
+		requestParams.value.OrgId = routeQueryParams.OrgId;
+		Reflect.deleteProperty(requestParams.value, 'crTime');
+		requestParams.value.CreationTimeStart = state.queryParams.slTime === null ? null : state.queryParams.slTime[0]; // 受理时间
+		requestParams.value.CreationTimeEnd = state.queryParams.slTime === null ? null : state.queryParams.slTime[1];
+		Reflect.deleteProperty(requestParams.value, 'slTime'); // 删除无用的参数
+		requestParams.value.AuditTimeStart = state.queryParams.spTime === null ? null : state.queryParams.spTime[0]; // 审批时间
+		requestParams.value.AuditTimeEnd = state.queryParams.spTime === null ? null : state.queryParams.spTime[1];
+		Reflect.deleteProperty(requestParams.value, 'spTime'); // 删除无用的参数
+		const { result } = await centerOverdueReturnDetail(requestParams.value);
+		gridOptions.data = result.items ?? [];
+		state.total = result.total ?? 0;
+		state.loading = false;
+		gridOptions.loading = false;
+	} catch (e) {
+		console.log(e);
+		state.loading = false;
+		gridOptions.loading = false;
+	}
+};
+// 排序
+const gridEvents = {
+	sortChange(val: any) {
+		state.queryParams.SortField = val.order ? val.field : null;
+		// 0 升序 1 降序
+		state.queryParams.SortRule = val.order ? (val.order == 'desc' ? 1 : 0) : null;
+		handleQuery();
+	},
+};
+// 获取基础数据
+const getBaseData = async () => {
+	try {
+		const { result } = await centerOverdueReturnDetailBasic();
+		const mappings: any = {
+			acceptTypeOptions: 'acceptTypeOptions',
+			channelOptions: 'channelOptions',
+			sendBackAuditState: 'sendBackAuditState',
+		};
+		for (const key in mappings) {
+			state[key] = result?.[mappings[key]] ?? [];
+		}
+	} catch (error) {
+		console.log(error);
+	}
+};
+onMounted(() => {
+	queryList();
+	getBaseData();
+	state.queryParams.crTime = [routeQueryParams.StartTime, routeQueryParams.EndTime];
+});
+</script>

+ 1 - 1
src/views/statistics/center/detailOverdueReturn.vue

@@ -188,7 +188,7 @@ const gridOptions = reactive<any>({
 		{ field: 'order.acceptType', title: '受理类型', width: 110 },
 		{ field: 'order.acceptType', title: '受理类型', width: 110 },
 		{ field: 'order.hotspotName', title: '热点分类', width: 150 },
 		{ field: 'order.hotspotName', title: '热点分类', width: 150 },
 		{
 		{
-			field: 'order.startTime',
+			field: 'order.creationTime',
 			title: '受理时间',
 			title: '受理时间',
 			width: 160,
 			width: 160,
 			sortable: true,
 			sortable: true,

+ 264 - 0
src/views/statistics/center/orderNum.vue

@@ -0,0 +1,264 @@
+<template>
+	<div class="statistics-center-order-num-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<vxe-grid v-bind="gridOptions" ref="gridRef">
+				<template #form>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item prop="crTime">
+							<statistical-time v-model="state.queryParams.crTime" @change="handleQuery" ref="statisticalTimeRef" :disabled="gridOptions.loading" />
+						</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="gridOptions.loading">
+								<SvgIcon name="ele-Search" class="mr5" />查询
+							</el-button>
+							<el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="gridOptions.loading">
+								<SvgIcon name="ele-Refresh" class="mr5" />重置
+							</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+			</vxe-grid>
+		</div>
+	</div>
+</template>
+<script setup lang="tsx" name="statisticsCenterOrderNum">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { defaultDate } from '@/utils/constants';
+import Other from '@/utils/other';
+import { centerOverdueReturn, centerOverdueReturnExport } from '@/api/statistics/center';
+import { useRouter } from 'vue-router';
+
+const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive<any>({
+	queryParams: {
+		// 查询条件
+		crTime: defaultDate, // 时间默认今天开始到今天结束
+	},
+	loading: false, // 加载
+	total: 0, // 总数
+});
+
+const requestParams = ref<EmptyObjectType>({});
+const gridOptions = reactive<any>({
+	loading: false,
+	border: true,
+	showOverflow: true,
+	columnConfig: {
+		resizable: true,
+	},
+	scrollY: {
+		enabled: true,
+		gt: 100,
+	},
+	toolbarConfig: {
+		zoom: true,
+		custom: true,
+		refresh: {
+			queryMethod: () => {
+				handleQuery();
+			},
+		},
+		tools: [{ toolRender: { name: 'exportAll' } }],
+	},
+	customConfig: {
+		storage: true,
+	},
+	id: 'statisticsCenterOrderNum',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	align: 'center',
+	columns: [
+		{ field: '姓名', title: '一级部门名称' },
+		{
+			title: '回访量',
+			children: [
+				{
+					field: 'totalNum',
+					title: '中心归档量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+				{
+					field: 'totalNum',
+					title: '部门归档量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+		{
+			title: '发布量',
+			children: [
+				{
+					field: 'totalNum',
+					title: '中心发布量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+				{
+					field: 'totalNum',
+					title: '部门发布量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+				{
+					field: 'totalNum',
+					title: '公开发布量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+		{
+			title: '派单量',
+			children: [
+				{
+					field: 'totalNum',
+					title: '中心派单量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+				{
+					field: 'totalNum',
+					title: '部门派单量',
+					slots: {
+						default: ({ row }) => {
+							return (
+								<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+									{row.totalNum}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+		{
+			field: 'passNum',
+			title: '重办信件量',
+			slots: {
+				default: ({ row }) => {
+					return (
+						<el-button link type="primary" onClick={() => linkDetail(row, '2')}>
+							{row.passNum}
+						</el-button>
+					);
+				},
+			},
+		},
+	],
+	data: [],
+	params: {
+		exportMethod: centerOverdueReturnExport,
+		exportParams: requestParams,
+	},
+	sortConfig: {
+		remote: true,
+	},
+});
+/** 搜索按钮操作 */
+const handleQuery = () => {
+	// state.queryParams.PageIndex = 1;
+	queryList();
+};
+/** 获取列表 */
+const queryList = () => {
+	gridOptions.loading = true;
+	requestParams.value = Other.deepClone(state.queryParams);
+	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');
+	centerOverdueReturn(requestParams.value)
+		.then((res: any) => {
+			gridOptions.data = res.result ?? [];
+			gridOptions.loading = false;
+		})
+		.catch(() => {
+			gridOptions.loading = false;
+		});
+};
+/** 重置按钮操作 */
+const statisticalTimeRef = ref<RefType>();
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	statisticalTimeRef.value.reset();
+	queryList();
+};
+// 查看详情
+const router = useRouter();
+const linkDetail = (row: any, type?: string) => {
+	// 点击数字
+	if (row.orgName === '合计') {
+		router.push({
+			path: '/statistics/center/detailOrderNum',
+			query: {
+				tagsViewName: '工单业务量统计明细',
+				mode: 'detail',
+				StartTime: state.queryParams.crTime[0],
+				EndTime: state.queryParams.crTime[1],
+				Type: type,
+			},
+		});
+	} else {
+		router.push({
+			path: '/statistics/center/detailOrderNum',
+			query: {
+				tagsViewName: '工单业务量统计明细',
+				mode: 'detail',
+				OrgId: row.orgId,
+				StartTime: state.queryParams.crTime[0],
+				EndTime: state.queryParams.crTime[1],
+				Type: type,
+			},
+		});
+	}
+};
+onMounted(() => {
+	queryList();
+});
+</script>

+ 119 - 80
src/views/statistics/center/overdueReturn.vue

@@ -1,69 +1,26 @@
 <template>
 <template>
 	<div class="statistics-center-overdue-return-container layout-padding">
 	<div class="statistics-center-overdue-return-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
-				<el-form-item prop="crTime">
-					<statistical-time v-model="state.queryParams.crTime" @change="handleQuery" ref="statisticalTimeRef" :disabled="state.loading" />
-				</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>
-			<vxe-toolbar
-				ref="toolbarRef"
-				:loading="state.loading"
-				custom
-				:refresh="{
-					queryMethod: handleQuery,
-				}"
-				:tools="[{ toolRender: { name: 'exportAll' } }]"
-			>
-				<template #buttons>
+			<vxe-grid v-bind="gridOptions" ref="gridRef">
+				<template #form>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item prop="crTime">
+							<statistical-time v-model="state.queryParams.crTime" @change="handleQuery" ref="statisticalTimeRef" :disabled="gridOptions.loading" />
+						</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="gridOptions.loading">
+								<SvgIcon name="ele-Search" class="mr5" />查询
+							</el-button>
+							<el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="gridOptions.loading">
+								<SvgIcon name="ele-Refresh" class="mr5" />重置
+							</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+				<template #toolbar_buttons>
 					<el-button type="primary" @click="linkDetail(null)">明细表</el-button>
 					<el-button type="primary" @click="linkDetail(null)">明细表</el-button>
 				</template>
 				</template>
-			</vxe-toolbar>
-			<div style="overflow: hidden; width: 100%; height: 100%; flex: 1">
-				<vxe-table
-					border
-					:loading="state.loading"
-					:data="state.tableData"
-					:column-config="{ resizable: true }"
-					:row-config="{ isCurrent: true, isHover: true, height: 30, useKey: true }"
-					ref="tableRef"
-					height="auto"
-					auto-resize
-					:scrollY="{ enabled: true, gt: 100 }"
-					show-overflow
-					id="statisticsCenterOverdueReturn"
-					:custom-config="{ storage: true }"
-					:params="{ exportMethod: centerOverdueReturnExport, exportParams: requestParams }"
-				>
-					<vxe-column field="orgName" title="一级部门名称"></vxe-column>
-					<vxe-column field="totalNum" title="退回总量">
-						<template #default="{ row }">
-							<el-button type="primary" link @click="linkDetail(row, '1')">{{ row.totalNum }}</el-button>
-						</template>
-					</vxe-column>
-					<vxe-column field="passNum" title="退回审批通过量">
-						<template #default="{ row }">
-							<el-button type="primary" link @click="linkDetail(row, '2')">{{ row.passNum }}</el-button>
-						</template>
-					</vxe-column>
-					<vxe-column field="noPassNum" title="退回审批不通过量">
-						<template #default="{ row }">
-							<el-button type="primary" link @click="linkDetail(row, '3')">{{ row.noPassNum }}</el-button>
-						</template>
-					</vxe-column>
-					<vxe-column field="auditNum" title="退回审批中">
-						<template #default="{ row }">
-							<el-button type="primary" link @click="linkDetail(row, '4')">{{ row.auditNum }}</el-button>
-						</template>
-					</vxe-column>
-				</vxe-table>
-			</div>
+			</vxe-grid>
 		</div>
 		</div>
 	</div>
 	</div>
 </template>
 </template>
@@ -82,14 +39,103 @@ const state = reactive<any>({
 		// 查询条件
 		// 查询条件
 		crTime: defaultDate, // 时间默认今天开始到今天结束
 		crTime: defaultDate, // 时间默认今天开始到今天结束
 	},
 	},
-	tableData: [],
 	loading: false, // 加载
 	loading: false, // 加载
 	total: 0, // 总数
 	total: 0, // 总数
-	data: {
-		aiVisitCount: 0,
-		aiVisitSatisfiedCount: 0,
-		aiVisitNoSatisfiedCount: 0,
-		aiVisitFailCount: 0,
+});
+
+const requestParams = ref<EmptyObjectType>({});
+const gridOptions = reactive<any>({
+	loading: false,
+	border: true,
+	showOverflow: true,
+	columnConfig: {
+		resizable: true,
+	},
+	scrollY: {
+		enabled: true,
+		gt: 100,
+	},
+	toolbarConfig: {
+		zoom: true,
+		custom: true,
+		refresh: {
+			queryMethod: () => {
+				handleQuery();
+			},
+		},
+		tools: [{ toolRender: { name: 'exportAll' } }],
+		slots: {
+			buttons: 'toolbar_buttons',
+		},
+	},
+	customConfig: {
+		storage: true,
+	},
+	id: 'statisticsCenterOverdueReturn',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	columns: [
+		{ field: 'orgName', title: '一级部门名称' },
+		{
+			field: 'totalNum',
+			title: '退回总量',
+			slots: {
+				default: ({ row }) => {
+					return (
+						<el-button link type="primary" onClick={() => linkDetail(row, '1')}>
+							{row.totalNum}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			field: 'passNum',
+			title: '退回审批通过量',
+			slots: {
+				default: ({ row }) => {
+					return (
+						<el-button link type="primary" onClick={() => linkDetail(row, '2')}>
+							{row.passNum}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			field: 'noPassNum',
+			title: '退回审批不通过量',
+			slots: {
+				default: ({ row }) => {
+					return (
+						<el-button link type="primary" onClick={() => linkDetail(row, '3')}>
+							{row.noPassNum}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			field: 'auditNum',
+			title: '退回审批中',
+			slots: {
+				default: ({ row }) => {
+					return (
+						<el-button link type="primary" onClick={() => linkDetail(row, '4')}>
+							{row.auditNum}
+						</el-button>
+					);
+				},
+			},
+		},
+	],
+	data: [],
+	params: {
+		exportMethod: centerOverdueReturnExport,
+		exportParams: requestParams,
+	},
+	sortConfig: {
+		remote: true,
 	},
 	},
 });
 });
 /** 搜索按钮操作 */
 /** 搜索按钮操作 */
@@ -98,21 +144,19 @@ const handleQuery = () => {
 	queryList();
 	queryList();
 };
 };
 /** 获取列表 */
 /** 获取列表 */
-const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {
 const queryList = () => {
-	state.loading = true;
+	gridOptions.loading = true;
 	requestParams.value = Other.deepClone(state.queryParams);
 	requestParams.value = Other.deepClone(state.queryParams);
 	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');
 	centerOverdueReturn(requestParams.value)
 	centerOverdueReturn(requestParams.value)
 		.then((res: any) => {
 		.then((res: any) => {
-			state.tableData = res.result ?? [];
-			state.data = res.result ?? {};
-			state.loading = false;
+			gridOptions.data = res.result ?? [];
+			gridOptions.loading = false;
 		})
 		})
 		.catch(() => {
 		.catch(() => {
-			state.loading = false;
+			gridOptions.loading = false;
 		});
 		});
 };
 };
 /** 重置按钮操作 */
 /** 重置按钮操作 */
@@ -144,7 +188,7 @@ const linkDetail = (row: any, type?: string) => {
 				path: '/statistics/center/detailOverdueReturn',
 				path: '/statistics/center/detailOverdueReturn',
 				query: {
 				query: {
 					tagsViewName: '超期退回统计明细',
 					tagsViewName: '超期退回统计明细',
-          mode: 'detail',
+					mode: 'detail',
 					OrgId: row.orgId,
 					OrgId: row.orgId,
 					StartTime: state.queryParams.crTime[0],
 					StartTime: state.queryParams.crTime[0],
 					EndTime: state.queryParams.crTime[1],
 					EndTime: state.queryParams.crTime[1],
@@ -157,17 +201,12 @@ const linkDetail = (row: any, type?: string) => {
 			path: '/statistics/center/detailOverdueReturn',
 			path: '/statistics/center/detailOverdueReturn',
 			query: {
 			query: {
 				tagsViewName: '超期退回统计明细列表',
 				tagsViewName: '超期退回统计明细列表',
-        mode: 'list',
+				mode: 'list',
 			},
 			},
 		});
 		});
 	}
 	}
 };
 };
-const toolbarRef = ref<RefType>();
-const tableRef = ref<RefType>();
 onMounted(() => {
 onMounted(() => {
 	queryList();
 	queryList();
-	if (tableRef.value && toolbarRef.value) {
-		tableRef.value.connect(toolbarRef.value);
-	}
 });
 });
 </script>
 </script>

+ 1 - 1
src/views/statistics/department/detailDpReturn.vue

@@ -189,7 +189,7 @@ const gridOptions = reactive<any>({
 		{ field: 'order.acceptType', title: '受理类型', width: 110 },
 		{ field: 'order.acceptType', title: '受理类型', width: 110 },
 		{ field: 'order.hotspotName', title: '热点分类', width: 150 },
 		{ field: 'order.hotspotName', title: '热点分类', width: 150 },
 		{
 		{
-			field: 'order.startTime',
+			field: 'order.creationTime',
 			title: '受理时间',
 			title: '受理时间',
 			width: 160,
 			width: 160,
 			sortable: true,
 			sortable: true,

+ 9 - 0
src/views/todo/seats/accept/History.vue

@@ -36,6 +36,11 @@
 				<el-text :type="row.isScreen ? 'danger' : 'info'">{{ row.isScreen ? '已甄别' : '-' }}</el-text>
 				<el-text :type="row.isScreen ? 'danger' : 'info'">{{ row.isScreen ? '已甄别' : '-' }}</el-text>
 			</template>
 			</template>
 		</vxe-column>
 		</vxe-column>
+		<vxe-column field="TerminateStatusText" title="终止状态" width="100" v-if="['ZiGong'].includes(themeConfig.appScope)">
+			<template #default="{ row }">
+				<el-text :type="row.TerminateStatusText ? 'danger' : 'info'">{{ row.TerminateStatusText }}</el-text>
+			</template>
+		</vxe-column>
 		<vxe-column field="statusText" title="状态" width="100"></vxe-column>
 		<vxe-column field="statusText" title="状态" width="100"></vxe-column>
 		<vxe-column field="actualHandleOrgName" title="接办部门" width="140"></vxe-column>
 		<vxe-column field="actualHandleOrgName" title="接办部门" width="140"></vxe-column>
 		<vxe-column align="center" title="操作" width="70" fixed="left" v-auth="'todo:seats:supply'">
 		<vxe-column align="center" title="操作" width="70" fixed="left" v-auth="'todo:seats:supply'">
@@ -59,6 +64,8 @@ import { reactive, ref, defineAsyncComponent } from 'vue';
 import { FormInstance } from 'element-plus';
 import { FormInstance } from 'element-plus';
 import { throttle } from '@/utils/tools';
 import { throttle } from '@/utils/tools';
 import { historyOrder } from '@/api/business/order';
 import { historyOrder } from '@/api/business/order';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
 
 
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
@@ -96,6 +103,8 @@ const state = reactive<any>({
 	},
 	},
 	loading: false,
 	loading: false,
 });
 });
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 const queryParamsRef = ref<RefType>(); // 历史工单查询参数
 const queryParamsRef = ref<RefType>(); // 历史工单查询参数
 const multipleSelection = ref<any[]>([]); // 重复件表格选中项
 const multipleSelection = ref<any[]>([]); // 重复件表格选中项
 /** 搜索按钮操作 */
 /** 搜索按钮操作 */