瀏覽代碼

Merge branch 'release' into dev

zhangchong 3 月之前
父節點
當前提交
923f22d39e

+ 8 - 8
src/components/ProcessAudit/ZGSSPProcess.vue

@@ -60,7 +60,7 @@
 							</el-form-item>
 						</el-col>
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-							<el-form-item label="是否合规" prop="compliantType" :rules="[{ required: false, message: '请选择是否合规', trigger: 'change' }]">
+							<el-form-item label="是否合规" prop="compliantType" :rules="[{ required: true, message: '请选择是否合规', trigger: 'change' }]">
 								<el-select v-model="state.ruleForm.compliantType" placeholder="请选择是否合规" class="w100" clearable>
 									<el-option v-for="item in compliantType" :key="item.key" :label="item.value" :value="item.key" />
 								</el-select>
@@ -1577,13 +1577,13 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
 		if (!valid) return;
-   /* if (orgAQYH.value || orgDQH.value) {
-      // 附件必填的情况
-      if (!handleFiles.value.length) {
-        ElMessage.error('附件必填');
-        return;
-      }
-    }*/
+		if (orgDQH.value) {
+			// 附件必填的情况
+			if (!handleFiles.value.length) {
+				ElMessage.error('附件必填,请先上传附件!');
+				return;
+			}
+		}
 		state.loading = true;
 		let submitObj = other.deepClone(state.ruleForm);
 		if (!flowDirection.value) {

+ 0 - 2
src/views/snapshot/centerMark/list.vue

@@ -258,5 +258,3 @@ onMounted(() => {
 	queryList();
 });
 </script>
-
-layout/routerView/parer

+ 0 - 2
src/views/snapshot/centerMark/log.vue

@@ -240,5 +240,3 @@ onMounted(() => {
 	queryList();
 });
 </script>
-
-layout/routerView/parer

+ 0 - 2
src/views/snapshot/handle/orderMark.vue

@@ -238,5 +238,3 @@ onMounted(() => {
 	queryList();
 });
 </script>
-
-layout/routerView/parer

+ 0 - 2
src/views/snapshot/publish/audit.vue

@@ -185,5 +185,3 @@ onMounted(() => {
 	queryList();
 });
 </script>
-
-layout/routerView/parer

+ 0 - 2
src/views/snapshot/publish/index.vue

@@ -336,5 +336,3 @@ onMounted(() => {
 	getBaseData();
 });
 </script>
-
-layout/routerView/parer

+ 238 - 0
src/views/snapshot/statistics/dqhOrder.vue

@@ -0,0 +1,238 @@
+<template>
+  <div class="snapshot-statistics-dqh-order-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" inline @submit.native.prevent :disabled="gridOptions.loading">
+            <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 label="工单标题" prop="Title">
+              <el-input v-model="state.queryParams.Title" 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 #order_detail="{ row }">
+          <order-detail :order="row" @updateList="queryList">{{ row.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="GuiderName">
+          <el-input
+              v-model="state.queryParams.GuiderName"
+              placeholder="请填写网格员姓名"
+              clearable
+              @keyup.enter="handleQuery"
+              class="keyword-input"
+          />
+        </el-form-item>
+        <el-form-item label="网格员电话" prop="GuiderPhoneNumber">
+          <el-input
+              v-model="state.queryParams.GuiderPhoneNumber"
+              placeholder="请填写网格员电话"
+              clearable
+              @keyup.enter="handleQuery"
+              class="keyword-input"
+          />
+        </el-form-item>
+        <el-form-item label="编号" prop="NewtorkENumber">
+          <el-input v-model="state.queryParams.NewtorkENumber" placeholder="请填写编号" clearable @keyup.enter="handleQuery" class="keyword-input" />
+        </el-form-item>
+        <el-form-item label="状态" prop="Satus">
+          <el-input v-model="state.queryParams.Satus" placeholder="请填写状态" clearable @keyup.enter="handleQuery" class="keyword-input" />
+        </el-form-item>
+        <el-form-item label="受理时间" prop="slTime">
+          <el-date-picker
+              v-model="state.queryParams.slTime"
+              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"
+          />
+        </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 lang="tsx" setup name="snapshotStatisticsDqhOrder">
+import { computed, defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { getClueList } from '@/api/snapshot/config';
+import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+import { getGridReplyCount } from '@/api/snapshot/statistics';
+import Other from '@/utils/other';
+
+// 引入组件
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
+
+// 定义变量内容
+const state = reactive<any>({
+  loading: false,
+  queryParams: {
+    // 查询参数
+    PageIndex: 1,
+    PageSize: 20,
+    No:null, // 工单编码
+    Title:null, // 工单编码
+    GuiderName:null, // 网格员姓名
+    GuiderPhoneNumber:null, // 网格员电话
+    NewtorkENumber:null, // 编号
+    slTime: [], // 受理时间
+    BeginCreationTime:null,
+    EndCreationTime:null,
+  },
+  total: 0, // 总条数
+});
+
+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();
+      },
+    },
+  },
+  customConfig: {
+    storage: true,
+  },
+  id: 'snapshotStatisticsDqhOrder',
+  rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+  height: 'auto',
+  columns: [
+    {
+      field: 'no',
+      title: '工单编码',
+      width: 140,
+    },
+    {
+      field: 'title',
+      title: '工单标题',
+      slots: { default: 'order_detail' },
+      minWidth: 200,
+    },
+    {
+      field: 'creationTime',
+      title: '受理时间',
+      formatter: 'formatDate',
+      width: 160,
+    },
+    {
+      field: 'county',
+      title: '区域',
+      width: 150,
+    },
+    {
+      field: 'replyResultTypeTxt',
+      title: '状态',
+      width: 100,
+    },
+    {
+      field: 'networkRemark',
+      title: '回复内容',
+      minWidth: 200,
+    },
+    {
+      field: 'replyDate',
+      title: '回复时间',
+      width: 160,
+      formatter: 'formatDate',
+    },
+    {
+      field: 'memberName',
+      title: '网格员姓名',
+      width: 120,
+    },
+    {
+      field: 'memberMobile',
+      title: '网格员电话',
+      width: 140,
+    },
+    {
+      field: 'networkENumber',
+      title: '编号',
+      width: 200,
+    },
+  ],
+  data: [],
+});
+/** 搜索按钮操作 节流操作 */
+const handleQuery = () => {
+  state.queryParams.PageIndex = 1;
+  queryList();
+};
+const requestParams = ref<EmptyObjectType>({});
+// 获取参数列表
+const queryList = () => {
+  state.loading = true;
+  gridOptions.loading = true;
+  requestParams.value = Other.deepClone(state.queryParams);
+  requestParams.value.BeginCreationTime = state.queryParams.slTime === null ? null : state.queryParams.slTime[0]; // 受理时间
+  requestParams.value.EndCreationTime = state.queryParams.slTime === null ? null : state.queryParams.slTime[1];
+  Reflect.deleteProperty(requestParams.value, 'slTime'); // 删除无用的参数
+  getGridReplyCount(requestParams.value)
+      .then((res) => {
+        state.loading = false;
+        gridOptions.data = res.result.items ?? [];
+        state.total = res.result.total ?? 0;
+        gridOptions.loading = false;
+      })
+      .finally(() => {
+        state.loading = false;
+        gridOptions.loading = false;
+      });
+};
+// 重置表单
+const drawerRuleFormRef = ref<RefType>();
+const ruleFormRef = ref<any>(null); // 表单ref
+const drawer = ref(false);
+const resetQuery = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  ruleFormRef.value?.resetFields();
+  queryList();
+};
+
+// 页面加载时
+onMounted(() => {
+  queryList();
+});
+</script>

+ 0 - 2
src/views/snapshot/statistics/gridReply.vue

@@ -236,5 +236,3 @@ onMounted(() => {
 	queryList();
 });
 </script>
-
-layout/routerView/parer

+ 328 - 0
src/views/snapshot/statistics/handleOrder.vue

@@ -0,0 +1,328 @@
+<template>
+	<div class="snapshot-statistics-handle-order-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 :disabled="gridOptions.loading">
+						<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 label="行业" prop="IndustryId">
+							<el-select v-model="state.queryParams.IndustryId" class="w100" placeholder="请选择行业" @change="queryList" clearable>
+								<el-option v-for="item in industry" :key="item.id" :label="item.name" :value="item.id" />
+							</el-select>
+						</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>
+				</template>
+			</vxe-grid>
+		</div>
+	</div>
+</template>
+
+<script lang="tsx" setup name="snapshotStatisticsHandleOrder">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { defaultDate } from '@/utils/constants';
+import { getGridReplyCount } from '@/api/snapshot/statistics';
+import Other from '@/utils/other';
+
+// 引入组件
+const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
+
+// 定义变量内容
+const state = reactive<any>({
+	loading: false,
+	queryParams: {
+		// 查询参数
+    crTime: defaultDate, // 时间默认今天开始到今天结束
+    StartTime: null,
+    EndTime: null,
+    IndustryId:null,
+	},
+	total: 0, // 总条数
+});
+
+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();
+			},
+		},
+	},
+	customConfig: {
+		storage: true,
+	},
+	id: 'snapshotStatisticsHandleOrder',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	columns: [
+		{
+			field: 'no',
+			title: '部门名称',
+			width: 200,
+			fixed: 'left',
+		},
+		{
+			field: 'no',
+			title: '信件总量',
+			width: 100,
+			fixed: 'left',
+		},
+		{
+			field: 'county',
+			title: '已办件数',
+			width: 100,
+			slots: {
+				default({ row }) {
+					return (
+						<el-button type="primary" onClick={() => linkDetail(row)} link>
+							{row.sumCount}
+						</el-button>
+					);
+				},
+			},
+		},
+    {
+      field: 'county',
+      title: '在办件数',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '办结率',
+      width: 100,
+    },
+    {
+      field: 'county',
+      title: '20分钟内接件',
+      width: 120,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'county',
+      title: '20分钟后接件',
+      width: 120,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '工单及时响应率',
+      width: 120,
+    },
+    {
+      field: 'no',
+      title: '退回件',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '办件总时长(小时)',
+      width: 140,
+    },
+    {
+      field: 'no',
+      title: '3日内办结',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '3至5日办结',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '5至7日办结',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '7日外办结',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '按时办结率',
+      width: 100,
+    },
+    {
+      field: 'no',
+      title: '满意量',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '不满意量',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+    {
+      field: 'no',
+      title: '满意率',
+      width: 100,
+    },
+    {
+      field: 'no',
+      title: '二次办理',
+      width: 100,
+      slots: {
+        default({ row }) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          );
+        },
+      },
+    },
+	],
+	data: [],
+});
+/** 搜索按钮操作 节流操作 */
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+const requestParams = ref<EmptyObjectType>({});
+// 获取参数列表
+const queryList = () => {
+	state.loading = true;
+	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'); // 删除无用的参数
+	getGridReplyCount(requestParams.value)
+		.then((res) => {
+			state.loading = false;
+			gridOptions.data = res.result.items ?? [];
+			state.total = res.result.total ?? 0;
+			gridOptions.loading = false;
+		})
+		.finally(() => {
+			state.loading = false;
+			gridOptions.loading = false;
+		});
+};
+// 重置表单
+const ruleFormRef = ref<any>(null); // 表单ref
+const statisticalTimeRef = ref<RefType>();
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	statisticalTimeRef.value.reset();
+	queryList();
+};
+// 跳转详情
+const linkDetail = (row: any) => {};
+const industry = ref<EmptyArrayType>([]);
+// 页面加载时
+onMounted(() => {
+	queryList();
+});
+</script>

+ 572 - 0
src/views/snapshot/statistics/handleTable.vue

@@ -0,0 +1,572 @@
+<template>
+	<div class="snapshot-statistics-handle-table-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+				<el-form-item prop="dateType">
+					<el-segmented
+						v-model="state.queryParams.dateType"
+						:options="[
+							{ label: '按日统计', value: 'date' },
+							{ label: '按周统计', value: 'week' },
+							{ label: '按月统计', value: 'month' },
+							{ label: '按时间段统计', value: 'datetimerange' },
+						]"
+						@change="changeDateType"
+						:disabled="state.loading"
+					/>
+				</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="changeDateType('datetimerange')"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:default-time="defaultTimeStartEnd"
+						: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="changeDateType(state.queryParams.dateType)"
+						:value-format="valueFormat"
+						:format="formats"
+						:clearable="false"
+						:default-time="defaultTimeStartEnd"
+					/>
+				</el-form-item>
+				<el-form-item label="行业" prop="IndustryId">
+					<el-select v-model="state.queryParams.IndustryId" class="w100" placeholder="请选择行业" @change="queryList" clearable>
+						<el-option v-for="item in industry" :key="item.id" :label="item.name" :value="item.id" />
+					</el-select>
+				</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-button class="default-button" :loading="state.loading" @click="exportWord"
+						><SvgIcon name="iconfont icon-daochu" class="mr5" /> 导出</el-button
+					>
+				</el-form-item>
+			</el-form>
+			<el-scrollbar v-loading="state.loading" class="scrollbar-view" always>
+				<table style="width: 85%; margin: 0 auto" ref="exportTableRef">
+					<tr>
+						<td>
+							<table style="width: 100%; border: 1px solid #000000; border-collapse: collapse; padding: 0">
+								<tbody>
+									<tr>
+										<th id="sspTitle" colspan="4" style="height: 79px; font-size: 2.2em; text-align: center; vertical-align: middle">
+											随手拍 {{ tableTitle }}办理工作统计
+										</th>
+									</tr>
+									<tr>
+										<td style="width: 360px; height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="3">
+											随手拍来件数
+										</td>
+										<td id="Td0" class="tdclick" rowspan="3" style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">
+											<el-button type="primary" link @click="linkDetail('1')">34</el-button>
+										</td>
+
+										<td style="width: 360px; height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">未在受理范围内件数</td>
+										<td id="Td1" style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">随手拍转12345件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" id="Td15" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">4</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内总件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">30</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td rowspan="3" style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">
+											受理范围内派给各网格员件数
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="3" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">8</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内派给网格员四小时内回复件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">6</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">
+											受理范围内派给网格员超过四小时回复件数
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclicks">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内派给网格员未回复件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td rowspan="2" style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">
+											受理范围内按12345直派给各区县或部门件数
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">
+											<el-button type="primary" link @click="linkDetail('1')">22</el-button>
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内按12345直派给各部门件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">8</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内按12345直派给各区县件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">14</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">受理范围内已办信件</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">
+											<el-button type="primary" link @click="linkDetail('1')">25</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">中心已办</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">2</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">部门已办</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">23</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">受理范围满意度</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">0.000%</td>
+
+										<td
+											style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"
+											title="非常满意+满意+甄别为满意+默认满意+一般+未做评价+未接通"
+										>
+											满意量
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" title="不满意+非常不满意">不满意量</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">9</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">审核发放奖励个数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">9</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">审批不同意红包个数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">审批同意红包个数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">9</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">局审核发放网格员奖励个数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">
+											<el-button type="primary" link @click="linkDetail('1')">8</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">审批同意(网格员)红包个数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">审批不同意(网格员)红包个数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="5">市民奖励总额</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="5">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">市民已发放奖励总额</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">市民待发奖励总额</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">已发(个)</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">无法联系(个)</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">婉拒红包(个)</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td rowspan="4" style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">网格员应发奖励金额</td>
+										<td rowspan="4" style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">网格员已发放奖励总额</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">网格员待发放奖励总额</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">网格员扣款总额(已发)</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">网格员扣款总额(待发)</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内多部门会签件件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">1</el-button>
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">受理范围内热线中心归档件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">热线中心发起会签件件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">1</el-button>
+										</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">安全隐患</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">
+											<el-button type="primary" link @click="linkDetail('1')">10</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">已完成安全隐患整改</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">9</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">申请延期工单件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">1</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">申请延期工单次数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">1</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">超期件</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080"></td>
+									</tr>
+
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="3">二次办理件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="3" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">1</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">二次办理件数-退回部门</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">二次办理件数-回访不满意重办</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">1</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">二次办理件数-特提到原一级部门</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">二次办理工单满意率</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="2">0.000%</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">二次办理工单满意率-退回部门</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">0.000%</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">二次办理工单满意率-回访不满意重办</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">0.000%</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="3">特提件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" rowspan="3" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">3</el-button>
+										</td>
+
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">特提到原一级部门件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">特提到派单组件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">3</el-button>
+										</td>
+									</tr>
+									<tr>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080">其他特提件数</td>
+										<td style="height: 36px; padding-left: 10px; font-size: 16px; border: 1px solid #808080" class="tdclick">
+											<el-button type="primary" link @click="linkDetail('1')">0</el-button>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</td>
+					</tr>
+				</table>
+				<el-backtop target=".scrollbar-view > div" />
+			</el-scrollbar>
+		</div>
+	</div>
+</template>
+<script setup lang="ts" name="snapshotStatisticsHandleTable">
+import { onMounted, reactive, ref } from 'vue';
+import { ElMessageBox, FormInstance } from 'element-plus';
+import { centerReportZG } from '@/api/statistics/center';
+import { defaultDate, defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+import dayjs from 'dayjs';
+import { exportAsDocx } from '@/utils/exportAsWord';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
+// 定义变量内容
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive(<any>{
+	queryParams: {
+		dateType: 'date', //
+		time: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), // 时间默认今天
+		crTime: defaultDate, // 时间默认今天开始到今天结束
+		IndustryId: null,
+	},
+	loading: false, // 加载
+});
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+const valueFormat = ref('YYYY-MM-DD');
+const formats = ref('YYYY-MM-DD');
+const tableTitle = ref(
+	`『${dayjs(state.queryParams.time).startOf('day').format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.time)
+		.endOf('day')
+		.format('YYYY-MM-DD HH:mm:ss')}』`
+);
+const changeDateType = (val: string) => {
+	switch (val) {
+		case 'date':
+			valueFormat.value = 'YYYY-MM-DD';
+			formats.value = 'YYYY-MM-DD';
+			tableTitle.value = `『${dayjs(state.queryParams.time).startOf('day').format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.time)
+				.endOf('day')
+				.format('YYYY-MM-DD HH:mm:ss')}』`;
+			state.queryParams.crTime = [
+				dayjs(state.queryParams.time).startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
+				dayjs(state.queryParams.time).endOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
+			];
+			queryList();
+			break;
+		case 'month':
+			valueFormat.value = 'YYYY-MM';
+			formats.value = 'YYYY-MM';
+			tableTitle.value = `『${dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.time)
+				.endOf('month')
+				.format('YYYY-MM-DD HH:mm:ss')}』`;
+			state.queryParams.crTime = [
+				dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD[T]HH:mm:ss'),
+				dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD[T]HH:mm:ss'),
+			];
+			queryList();
+			break;
+		case 'week':
+			valueFormat.value = 'YYYY-MM-DD';
+			formats.value = 'YYYY 第ww周';
+			tableTitle.value = `『${dayjs(state.queryParams.time).startOf('week').format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.time)
+				.endOf('week')
+				.format('YYYY-MM-DD HH:mm:ss')}』`;
+			state.queryParams.crTime = [
+				dayjs(state.queryParams.time).startOf('week').format('YYYY-MM-DD[T]HH:mm:ss'),
+				dayjs(state.queryParams.time).endOf('week').format('YYYY-MM-DD[T]HH:mm:ss'),
+			];
+			queryList();
+			break;
+		case 'datetimerange':
+			tableTitle.value = `『${dayjs(state.queryParams.crTime[0]).format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.crTime[1]).format(
+				'YYYY-MM-DD HH:mm:ss'
+			)}`;
+			queryList();
+			break;
+		default:
+			valueFormat.value = 'YYYY-MM-DD[T]HH:mm:ss';
+			formats.value = 'YYYY-MM-DD[T]HH:mm:ss';
+			tableTitle.value = `『${dayjs(state.queryParams.time).startOf('day').format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.time)
+				.endOf('day')
+				.format('YYYY-MM-DD HH:mm:ss')}』`;
+			state.queryParams.crTime = [
+				dayjs(state.queryParams.time).startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
+				dayjs(state.queryParams.time).endOf('day').format('YYYY-MM-DD[T]HH:mm:ss'),
+			];
+			queryList();
+			break;
+	}
+};
+
+const zhuanxian = ref<EmptyObjectType>([]);
+
+const centerReportCallInfoDto = ref<EmptyObjectType>({}); // 话务情况
+const centerReportCall = ref<EmptyObjectType>({}); // 话务情况
+const centerReportOrder = ref<EmptyObjectType>({}); // 工单数据
+const centerReportVisitd = ref<EmptyObjectType>({}); // 信件回访量
+const centerReportOrderSourceChannels = ref<EmptyArrayType>([]); // 信件来源
+const centerReportOrderAcceptTypes = ref<EmptyArrayType>([]); // 信件分类
+const orgStatisticsCityAll = ref<EmptyObjectType>({}); // 信件分布 城市
+const orgStatisticsAreaAll = ref<EmptyObjectType>({}); // 信件分布 区县
+/** 获取列表 */
+const queryList = () => {
+	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,
+	};
+	centerReportZG(request)
+		.then(({ result }) => {
+			centerReportCallInfoDto.value = result.centerReportCallInfoDto; // 话务情况
+			centerReportCall.value = result.centerReportCall; // 话务情况
+			centerReportOrder.value = result.centerReportOrder; // 工单情况
+			centerReportVisitd.value = result.centerReportVisitd; // 信件回访量
+			centerReportOrderSourceChannels.value = result.centerReportOrderSourceChannels; // 信件来源
+			centerReportOrderAcceptTypes.value = result.centerReportOrderAcceptTypes; // 信件分类
+			orgStatisticsCityAll.value = result.orgStatisticsCityAll; // 信件分布 城市
+			orgStatisticsAreaAll.value = result.orgStatisticsAreaAll; // 信件分布 区县
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
+};
+/** 重置按钮操作 */
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	valueFormat.value = 'YYYY-MM-DD[T]HH:mm:ss';
+	formats.value = 'YYYY-MM-DD';
+	tableTitle.value = `『${dayjs(state.queryParams.time).startOf('day').format('YYYY-MM-DD HH:mm:ss')}』-『${dayjs(state.queryParams.time)
+		.endOf('day')
+		.format('YYYY-MM-DD HH:mm:ss')}』`;
+	state.queryParams.crTime = [dayjs().startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'), dayjs().endOf('day').format('YYYY-MM-DD[T]HH:mm:ss')];
+	queryList();
+};
+const exportTableRef = ref<RefType>();
+const exportWord = () => {
+	ElMessageBox.confirm(`确定要导出 随手拍${tableTitle.value}办理工作统计,是否继续?`, '提示', {
+		confirmButtonText: '确认导出',
+		cancelButtonText: '取消',
+		type: 'warning',
+		draggable: true,
+		cancelButtonClass: 'default-button',
+		autofocus: false,
+	})
+		.then(() => {
+			exportAsDocx(exportTableRef.value, `随手拍${tableTitle.value}办理工作统计`);
+		})
+		.catch(() => {});
+};
+// 点击详情
+const linkDetail = (row: any) => {};
+const industry = ref<EmptyArrayType>([]);
+onMounted(() => {
+	queryList();
+});
+</script>

+ 211 - 0
src/views/snapshot/statistics/hotSubclass.vue

@@ -0,0 +1,211 @@
+<template>
+  <div  class="snapshot-statistics-hot-subclass-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 :disabled="gridOptions.loading">
+            <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 label="行业" prop="IndustryId">
+              <el-select v-model="state.queryParams.IndustryId" class="w100" placeholder="请选择行业" @change="queryList" clearable>
+                <el-option v-for="item in industry" :key="item.id" :label="item.name" :value="item.id" />
+              </el-select>
+            </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>
+        </template>
+      </vxe-grid>
+      <vxe-toolbar
+          ref="toolbarRef"
+          :loading="state.loading"
+          custom
+          :refresh="{
+					queryMethod: handleQuery,
+				}"
+          :tools="[{ toolRender: { name: 'exportAll' } }]"
+      >
+      </vxe-toolbar>
+    </div>
+  </div>
+</template>
+<script setup lang="tsx" name="snapshotStatisticsHotSubclass">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { departmentHotSmall, departmentHotSmallExport } from '@/api/statistics/order';
+import { defaultDate } from '@/utils/constants';
+import Other from '@/utils/other';
+import { formatDate } from '@/utils/formatTime';
+import XEUtils from 'xe-utils';
+import { useRouter } from 'vue-router';
+
+const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
+// 定义变量内容
+const ruleFormRef = ref<RefType>(); // 表单ref
+const state = reactive<any>({
+  queryParams: {
+    // 查询条件
+    TypeId: 0, // 关键词
+    time: formatDate(new Date(), 'YYYY-MM-DD'), // 时间默认今天
+    crTime: defaultDate, // 时间默认今天开始到今天结束
+  },
+  tableData: [], //表单
+  loading: false, // 加载
+  total: 0, // 总数
+  IndustryId:null,
+});
+
+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: 'snapshotStatisticsHotSubclass',
+  rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+  height: 'auto',
+  columns: [
+    { field: 'hotspotName', title: '热点名称', treeNode: true },
+    {
+      field: 'sumCount',
+      title: '分类统计',
+      slots:{
+        default ({row}) {
+          return (
+              <el-button type="primary" onClick={() => linkDetail(row)} link>
+                {row.sumCount}
+              </el-button>
+          )
+        }
+      }
+    },
+  ],
+  data: [],
+  params: {
+    exportMethod: departmentHotSmallExport,
+    exportParams: requestParams,
+  },
+  sortConfig: {
+    remote: true,
+  },
+  treeConfig: {
+    transform: true,
+    rowField: 'hotspotCode',
+    parentField: 'parentId',
+    lazy: true,
+    hasChild: 'hasChild',
+    loadMethod({ row }) {
+      // 异步加载子节点
+      return fetchChildListApi(row);
+    },
+  },
+  showFooter: true,
+  footerMethod: ({ columns, data }) => {
+    return [
+      columns.map((column: any, columnIndex: number) => {
+        if (columnIndex === 0) {
+          return '合计';
+        }
+        if (['sumCount'].includes(column.property)) {
+          return XEUtils.sum(data, column.property);
+        }
+        return null;
+      }),
+    ];
+  },
+});
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  // state.queryParams.PageIndex = 1;
+  state.tableData = [];
+  queryList();
+};
+/** 获取列表 */
+const queryList = () => {
+  state.loading = true;
+  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');
+  departmentHotSmall(requestParams.value)
+      .then((res: any) => {
+        state.tableData = res.result ?? [];
+        state.tableData = state.tableData.map((item: any) => {
+          item.children = [];
+          return item;
+        });
+        gridOptions.data = state.tableData;
+        state.loading = false;
+        gridOptions.loading = false;
+      })
+      .catch(() => {
+        state.loading = false;
+        gridOptions.loading = false;
+      });
+};
+/** 重置按钮操作 */
+const statisticalTimeRef = ref<RefType>();
+const resetQuery = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  statisticalTimeRef.value.reset();
+  queryList();
+};
+const fetchChildListApi = (row: any) => {
+  return new Promise((resolve) => {
+    const request = Other.deepClone(state.queryParams);
+    request.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+    request.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+    Reflect.deleteProperty(request, 'crTime');
+    request.HotspotCode = row.hotspotCode;
+    departmentHotSmall(request)
+        .then((res: any) => {
+          resolve(res.result ?? []);
+        })
+        .catch(() => {});
+  });
+};
+// 跳转详情
+const router = useRouter();
+const linkDetail = (row: any) => {
+  router.push({
+    path: '/statistics/order/detailHotspotArea',
+    query: {
+      StartTime: requestParams.value.StartTime,
+      EndTime: requestParams.value.EndTime,
+      HotspotCode: row.hotspotCode,
+      tagsViewName: `热点类型小类统计明细`,
+      type: 'hotspotSubclass',
+    },
+  });
+};
+const industry = ref<EmptyArrayType>([]);
+onMounted(() => {
+  queryList();
+});
+</script>

+ 270 - 0
src/views/snapshot/statistics/reAudit.vue

@@ -0,0 +1,270 @@
+<template>
+	<div class="snapshot-statistics-re-audit-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 :disabled="gridOptions.loading">
+						<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 label="行业" prop="IndustryId">
+							<el-select v-model="state.queryParams.IndustryId" class="w100" placeholder="请选择行业" @change="queryList" clearable>
+								<el-option v-for="item in industry" :key="item.id" :label="item.name" :value="item.id" />
+							</el-select>
+						</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>
+				</template>
+				<template #toolbar_buttons>
+					<el-popover :width="500" trigger="click">
+						<template #reference>
+							<el-button type="primary" title="字段说明"><SvgIcon name="ele-QuestionFilled" class="mr5" />字段说明</el-button>
+						</template>
+						<el-descriptions title="" :column="1" border style="max-height: 400px; overflow: auto">
+							<el-descriptions-item label="安全隐患举报(10元"
+								>获取行业类型为安全隐患的工单(剔除安全生产工单、电气焊作业举报工单)</el-descriptions-item
+							>
+							<el-descriptions-item label="安全隐患举报-安全生产(20元"> 行业类型为安全隐患且标记安全生产为【是】的工单 </el-descriptions-item>
+							<el-descriptions-item label="城市管理举报(10元)">获取行业类型为城市管理的工单</el-descriptions-item>
+							<el-descriptions-item label="环境保护举报(10元)">-获取行业类型为环境保护的工单</el-descriptions-item>
+							<el-descriptions-item label="市场监管举报(10元)"> 获取行业类型为市场监管的工单 </el-descriptions-item>
+							<el-descriptions-item label="交通管理设施隐患举报(10元"> 获取行业类型为交通管理设施隐患的工单 </el-descriptions-item>
+							<el-descriptions-item label="文化旅游举报(10元)"> 获取行业类型为文化旅游的工单 </el-descriptions-item>
+							<el-descriptions-item label="电气焊作业申报(20元)">获取行业类型为电气焊作业申报的工单 </el-descriptions-item>
+							<el-descriptions-item label="电气焊作业举报(20元)">获取行业类型为安全隐患,工单标签为动火作业的工单 </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>
+							<el-descriptions-item label="待发送红包个数">时间范围内审批同意尚未添加备注的工单总个数</el-descriptions-item>
+							<el-descriptions-item label="补充红包金额-">时间范围内补充标记金额的工单总金额</el-descriptions-item>
+							<el-descriptions-item label="补充红包个数">时间范围内补充标记金额的工单总个数</el-descriptions-item>
+						</el-descriptions>
+					</el-popover>
+				</template>
+				<template #industryName="{ row }">
+					{{ row.industryName }}
+				</template>
+			</vxe-grid>
+		</div>
+	</div>
+</template>
+
+<script lang="tsx" setup name="snapshotStatisticsReAudit">
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { defaultDate } from '@/utils/constants';
+import { getGridReplyCount } from '@/api/snapshot/statistics';
+import Other from '@/utils/other';
+
+// 引入组件
+const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
+
+// 定义变量内容
+const state = reactive<any>({
+	loading: false,
+	queryParams: {
+		crTime: defaultDate, // 时间默认今天开始到今天结束
+		StartTime: null,
+		EndTime: null,
+		IndustryId: null,
+	},
+	total: 0, // 总条数
+});
+
+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();
+			},
+		},
+		slots: {
+			buttons: 'toolbar_buttons',
+		},
+	},
+	customConfig: {
+		storage: true,
+	},
+	id: 'snapshotStatisticsReAudit',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	align: 'center',
+	columns: [
+		{
+			field: 'industryName',
+			title: '行业类型',
+			width: 200,
+			slots: { default: 'industryName' },
+		},
+		{
+			title: '审批',
+			children: [
+				{
+					field: 'creationTime',
+					title: '审批同意总金额',
+				},
+				{
+					field: 'creationTime',
+					title: '审批同意总个数',
+					slots: {
+						default({ row }) {
+							return (
+								<el-button type="primary" onClick={() => linkDetail(row)} link>
+									{row.sumCount}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+		{
+			title: '已发',
+			children: [
+				{
+					field: 'creationTime',
+					title: '发送成功金额',
+				},
+				{
+					field: 'creationTime',
+					title: '发送成功个数',
+					slots: {
+						default({ row }) {
+							return (
+								<el-button type="primary" onClick={() => linkDetail(row)} link>
+									{row.sumCount}
+								</el-button>
+							);
+						},
+					},
+				},
+				{
+					field: 'creationTime',
+					title: '发送失败金额',
+				},
+				{
+					field: 'creationTime',
+					title: '发送失败个数',
+					slots: {
+						default({ row }) {
+							return (
+								<el-button type="primary" onClick={() => linkDetail(row)} link>
+									{row.sumCount}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+		{
+			title: '待发',
+			children: [
+				{
+					field: 'creationTime',
+					title: '待发金额',
+				},
+				{
+					field: 'creationTime',
+					title: '待发个数',
+					slots: {
+						default({ row }) {
+							return (
+								<el-button type="primary" onClick={() => linkDetail(row)} link>
+									{row.sumCount}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+		{
+			title: '补充',
+			children: [
+				{
+					field: 'creationTime',
+					title: '补充红包金额',
+				},
+				{
+					field: 'creationTime',
+					title: '补充红包数',
+					slots: {
+						default({ row }) {
+							return (
+								<el-button type="primary" onClick={() => linkDetail(row)} link>
+									{row.sumCount}
+								</el-button>
+							);
+						},
+					},
+				},
+			],
+		},
+	],
+	data: [],
+});
+/** 搜索按钮操作 节流操作 */
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+const requestParams = ref<EmptyObjectType>({});
+// 获取参数列表
+const queryList = () => {
+	state.loading = true;
+	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'); // 删除无用的参数
+	getGridReplyCount(requestParams.value)
+		.then((res) => {
+			state.loading = false;
+			gridOptions.data = res.result.items ?? [];
+			state.total = res.result.total ?? 0;
+			gridOptions.loading = false;
+		})
+		.finally(() => {
+			state.loading = false;
+			gridOptions.loading = false;
+		});
+};
+// 重置表单
+const ruleFormRef = ref<any>(null); // 表单ref
+const statisticalTimeRef = ref<RefType>();
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	statisticalTimeRef.value.reset();
+	queryList();
+};
+// 跳转详情
+const linkDetail = (row: any) => {};
+const industry = ref<EmptyArrayType>([]);
+// 页面加载时
+onMounted(() => {
+	queryList();
+});
+</script>