Przeglądaj źródła

reactor:新增随手拍报表;

zhangchong 3 miesięcy temu
rodzic
commit
ba8baeffe6

+ 9 - 0
src/router/route.ts

@@ -574,6 +574,15 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 			isKeepAlive: true,
 		},
 	},
+	{
+		path: '/snapshot/statistics/detail',
+		name: 'snapshotStatisticsDetail',
+		component: () => import('@/views/snapshot/statistics/detailStatistics.vue'),
+		meta: {
+			title: '工单明细',
+			isKeepAlive: true,
+		},
+	},
 ];
 /**
  * 定义404、401界面

+ 199 - 0
src/views/snapshot/statistics/check.vue

@@ -0,0 +1,199 @@
+<template>
+	<div class="snapshot-statistics-check-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="snapshotStatisticsCheck">
+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';
+import { useRouter } from 'vue-router';
+
+// 引入组件
+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: 'snapshotStatisticsCheck',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	align: 'center',
+	columns: [
+		{
+			field: 'industryName',
+			title: '部门名称',
+			width: 200,
+		},
+		{
+			field: 'creationTime',
+			title: '工单总数',
+			slots: {
+				default({ row }) {
+					return (
+						<el-button type="primary" onClick={() => linkDetail(row)} link>
+							{row.sumCount}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			field: 'creationTime',
+			title: '首次检查合规',
+			slots: {
+				default({ row }) {
+					return (
+						<el-button type="primary" onClick={() => linkDetail(row)} link>
+							{row.sumCount}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			field: 'creationTime',
+			title: '第二次检查合规',
+			slots: {
+				default({ row }) {
+					return (
+						<el-button type="primary" onClick={() => linkDetail(row)} link>
+							{row.sumCount}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			field: 'creationTime',
+			title: '第三次及以上检查合规',
+			slots: {
+				default({ row }) {
+					return (
+						<el-button type="primary" onClick={() => linkDetail(row)} link>
+							{row.sumCount}
+						</el-button>
+					);
+				},
+			},
+		},
+		{
+			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 router = useRouter();
+const linkDetail = (row: any) => {
+	router.push({
+		path: '/snapshot/statistics/detail',
+	});
+};
+const industry = ref<EmptyArrayType>([]);
+// 页面加载时
+onMounted(() => {
+	queryList();
+});
+</script>

+ 475 - 0
src/views/snapshot/statistics/detailStatistics.vue

@@ -0,0 +1,475 @@
+<template>
+  <div class="snapshot-statistics-all-order-container layout-padding">
+    <div class="layout-padding-auto layout-padding-view pd20">
+      <vxe-grid v-bind="gridOptions" v-on="gridEvents" ref="gridRef" @checkbox-all="selectAllChangeEvent" @checkbox-change="selectChangeEvent">
+        <template #form>
+          <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline :disabled="state.loading">
+            <el-form-item label="工单标题" prop="Keyword">
+              <el-input v-model.trim="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
+            </el-form-item>
+            <el-form-item label="工单编码" prop="No">
+              <el-input v-model.trim="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 #toolbar_buttons>
+          <el-button type="primary" @click="onJbExport" :disabled="isChecked" :loading="state.loading"
+          ><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出<span v-if="checkTable.length">({{ checkTable.length }})</span></el-button
+          >
+        </template>
+        <template #statusTxt="{ row }">
+          <el-text type="danger" tag="b" v-if="[1, 2, 3, 9, 101, 102, 103, 104, 105, 200].includes(row.status)">{{ row.statusTxt }}</el-text>
+          <span v-else>{{ row.statusTxt }}</span>
+        </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="ActualHandleOrgName">
+          <el-input v-model="state.queryParams.ActualHandleOrgName" placeholder="请填写接办部门名称" clearable @keyup.enter="handleQuery" />
+        </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.key" :key="item.key" :label="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="受理人" prop="NameOrNo">
+          <el-input v-model="state.queryParams.NameOrNo" placeholder="受理人/坐席工号" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="接办人" prop="ActualHandlerName">
+          <el-input v-model="state.queryParams.ActualHandlerName" placeholder="接办人" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="来电号码" prop="FromPhone">
+          <el-input v-model.trim="state.queryParams.FromPhone" placeholder="来电号码" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="联系电话" prop="PhoneNo">
+          <el-input v-model.trim="state.queryParams.PhoneNo" placeholder="联系电话" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="来电人姓名" prop="FromName">
+          <el-input v-model="state.queryParams.FromName" placeholder="来电人姓名" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="期满时间" prop="exTime">
+          <el-date-picker
+              v-model="state.queryParams.exTime"
+              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-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-item label="工单状态" prop="Status">
+          <el-select v-model="state.queryParams.Status" placeholder="请选择工单状态" clearable @change="handleQuery">
+            <el-option v-for="item in state.orderStatusOptions" :value="item.key" :key="item.key" :label="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="区域" prop="County">
+          <el-select v-model="state.queryParams.County" placeholder="请选择区域" clearable @change="handleQuery">
+            <el-option v-for="item in state.area" :value="item.key" :key="item.key" :label="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否甄别" prop="IsScreen">
+          <el-select v-model="state.queryParams.IsScreen" placeholder="请选择是否甄别" clearable @change="handleQuery">
+            <el-option label="是" :value="true" />
+            <el-option label="否" :value="false" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="当前节点" prop="CurrentStepName">
+          <el-select v-model="state.queryParams.CurrentStepName" placeholder="请选择当前节点" clearable @change="handleQuery">
+            <el-option v-for="item in state.currentStepOptions" :value="item.value" :key="item.key" :label="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="办结时间" prop="doneTime">
+          <el-date-picker
+              v-model="state.queryParams.doneTime"
+              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-item label="热点分类" prop="Hotspot">
+          <el-input v-model.trim="state.queryParams.Hotspot" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="工单标签" prop="OrderTagCode" v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)">
+          <el-select v-model="state.queryParams.OrderTagCode" placeholder="请选择工单标签" clearable @change="handleQuery">
+            <el-option v-for="item in state.orderTagOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否紧急" prop="IsUrgent">
+          <el-select v-model="state.queryParams.IsUrgent" placeholder="请选择是否紧急" clearable @change="handleQuery">
+            <el-option :value="true" label="紧急" />
+            <el-option :value="false" label="不紧急" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="转接来源" prop="TransferPhone">
+          <el-input v-model="state.queryParams.TransferPhone" placeholder="转接来源" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="一级部门" prop="OrgLevelOneName">
+          <el-input v-model="state.queryParams.OrgLevelOneName" placeholder="请填写一级部门名称" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="不满意转办" prop="DiscontentTurnTo">
+          <el-select v-model="state.queryParams.DiscontentTurnTo" placeholder="请选择不满意转办" clearable @change="handleQuery">
+            <el-option :value="true" label="是" />
+            <el-option :value="false" label="否" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="行业" prop="IndustryId">
+          <el-select v-model="state.queryParams.IndustryId" placeholder="请选择行业" clearable @change="handleQuery">
+            <el-option v-for="item in state.industryOptions" :value="item.id" :key="item.id" :label="item.name" />
+          </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="snapshotStatisticsDetail">
+import { defineAsyncComponent, onMounted, reactive, ref, onActivated, onBeforeUnmount, computed } from 'vue';
+import type { FormInstance } from 'element-plus';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+import { exportOrder } from '@/api/business/order';
+import { addObserve } from '@/api/query/observe';
+import { exportAssignment } from '@/utils/tools';
+import Other from '@/utils/other';
+import mittBus from '@/utils/mitt';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
+import { getSSPAllBaseData, getSSPAllOrder } from '@/api/snapshot/statistics';
+
+// 引入组件
+const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
+// 定义变量内容
+const state = reactive<any>({
+  queryParams: {
+    PageIndex: 1, // 当前页
+    PageSize: 20, // 每页条数
+    // 查询条件
+    No: null, // 工单编码
+    ProvinceNo: null, // 省本地编码
+    ActualHandlerName: null, // 接办人
+    IsScreen: null, // 是否甄别
+    CurrentStepName: null, // 办理节点
+    IsOverTime: null, // 是否超期
+    FromName: null, // 来电人姓名
+    County: null, // 区域
+    FromPhone: null, // 来电号码
+    AcceptType: null, // 受理类型
+    Hotspot: null, //  热点分类名称
+    OrgId: null, // 接办部门
+    ActualHandleOrgName: null, // 接办部门
+    OrgLevelOneName: null, // 一级部门
+    NameOrNo: null, // 受理坐席
+    Status: null, // 工单状态
+    TransferPhone: null, // 转接来源
+    exTime: [], // 过期时间
+    BeginExpiredTime: null, //期满时间 开始
+    EndExpiredTime: null, //期满时间 结束
+    PhoneNo: null, // 手机号
+    doneTime: [], // 办结时间
+    BeginCenterToOrgTime: null,
+    EndCenterToOrgTime: null,
+    IsUrgent: null, // 是否加急
+    OrderTagCode: null, // 工单标签
+    SortField: null,
+    SortRule: null,
+    slTime: [], // 受理时间
+    BeginCreationTime: null,
+    EndCreationTime: null,
+    DiscontentTurnTo: null, // 不满意转办
+    IndustryId: null, // 行业
+  },
+  tableData: [], //表单
+  loading: false, // 加载
+  total: 0, // 总数
+  acceptTypeOptions: [], //受理类型
+  channelOptions: [], // 来源频道
+  orderStatusOptions: [], // 工单状态
+  currentStepOptions: [], // 办理节点
+  industryOptions: [], //行业
+  orgsOptions: [], // 部门
+  pushTypeOptions: [], //推送分类
+  orgData: [], // 机构数据
+  areaOptions: [], // 省市区数据
+  area: [], // 区域
+  industry: [], // 行业
+  orderStatus: [], // 工单状态
+  orderTags: [], // 工单标签
+  steps: [], // 当前节点
+});
+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' } }],*/
+    slots: {
+      buttons: 'toolbar_buttons',
+    },
+  },
+  customConfig: {
+    storage: true,
+  },
+  id: 'order',
+  rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+  height: 'auto',
+  columns: [
+    { type: 'checkbox', width: 50, align: 'center' },
+    {
+      field: 'snapshotStatisticsDetail',
+      title: '状态',
+      width: 60,
+      align: 'center',
+      slots: {
+        default: ({ row }) => {
+          return <span class={'overdue-status-' + row.expiredStatus} title={row.expiredStatusText}></span>;
+        },
+      },
+    },
+    { field: 'no', title: '工单编码', width: 140 },
+    {
+      field: 'statusTxt',
+      title: '工单状态',
+      width: 110,
+      slots: {
+        default: 'statusTxt',
+      },
+    },
+    { field: 'sourceChannel', title: '来源渠道', width: 110 },
+    { field: 'currentStepName', title: '当前节点', width: 120 },
+    { field: 'reTransactNum', title: '重办次数', width: 90 },
+    {
+      field: 'isUrgentText',
+      title: '是否紧急',
+      width: 90,
+      slots: {
+        default: ({ row }) => {
+          return <span class="color-danger font-bold">{row.isUrgentText}</span>;
+        },
+      },
+    },
+    {
+      field: 'startTime',
+      title: '受理时间',
+      width: 160,
+      sortable: true,
+      formatter: 'formatDate',
+    },
+    {
+      field: 'title',
+      title: '工单标题',
+      minWidth: 200,
+      slots: { default: 'order_detail' },
+    },
+    { field: 'industryName', title: '行业', width: 100 },
+    /*		{ field: 'industryName', title: '重点', width: 100 },
+        { field: 'industryName', title: '办理时长(天)', width: 120 },*/
+    { field: 'county', title: '区域', width: 150 },
+    { field: 'contact', title: '电话', width: 140 },
+
+    { field: 'memberName', title: '网格员姓名', width: 120 },
+    { field: 'memberMobile', title: '网格员电话', width: 140 },
+    { field: 'networkRemark', title: '网格员回复内容', width: 140 },
+    { field: 'networkENumber', title: '网格E通编号', width: 140 },
+    {
+      field: 'expiredTime',
+      title: '工单期满时间',
+      width: 160,
+      sortable: true,
+      formatter: 'formatDate',
+    },
+    { field: 'orgLevelOneName', title: '一级部门', width: 140 },
+    { field: 'actualHandleOrgName', title: '接办部门', width: 140 },
+    {
+      field: 'filedTime',
+      title: '办结时间',
+      width: 160,
+      sortable: true,
+      formatter: 'formatDate',
+    },
+    { field: 'hotspotName', title: '热点分类', width: 150 },
+    { field: 'acceptorName', title: '受理人', width: 120 },
+    { field: 'content', title: '受理内容', width: 200, visible: false },
+    { field: 'fileOpinion', title: '承办意见', width: 200, visible: false },
+  ],
+  data: [],
+  params: {
+    exportMethod: exportOrder,
+    exportParams: requestParams,
+  },
+  sortConfig: {
+    remote: true,
+  },
+});
+// 获取查询条件基础信息
+const getBaseData = async () => {
+  try {
+    const { result } = await getSSPAllBaseData();
+    console.log(result, '11');
+    const mappings: any = {
+      area: 'area',
+      industryOptions: 'industry',
+      orderStatusOptions: 'orderStatus',
+      orderTagOptions: 'orderTags',
+      acceptTypeOptions:'acceptType',
+      currentStepOptions:'steps'
+    };
+    for (const key in mappings) {
+      state[key] = result?.[mappings[key]] ?? [];
+    }
+  } catch (error) {
+    console.log(error);
+  }
+};
+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();
+  },
+};
+// 手动查询,将页码设置为1
+const handleQuery = () => {
+  state.queryParams.PageIndex = 1;
+  queryList();
+};
+// 改变页码
+const queryList = () => {
+  return new Promise((resolve, reject) => {
+    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'); // 删除无用的参数
+    requestParams.value.BeginExpiredTime = state.queryParams.exTime === null ? null : state.queryParams.exTime[0]; // 期满时间
+    requestParams.value.EndExpiredTime = state.queryParams.exTime === null ? null : state.queryParams.exTime[1];
+    Reflect.deleteProperty(requestParams.value, 'exTime'); // 删除无用的参数
+    requestParams.value.BeginCenterToOrgTime = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[0]; // 办结时间
+    requestParams.value.EndCenterToOrgTime = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
+    Reflect.deleteProperty(requestParams.value, 'doneTime'); // 删除无用的参数
+    state.loading = true;
+    gridOptions.loading = true;
+    getSSPAllOrder(requestParams.value)
+        .then((response: any) => {
+          gridOptions.data = response?.result.items ?? [];
+          state.total = response?.result.total;
+          state.loading = false;
+          gridOptions.loading = false;
+          gridRef.value.clearCheckboxRow();
+          checkTable.value = [];
+          resolve(response);
+        })
+        .catch(() => {
+          state.loading = false;
+          gridOptions.loading = false;
+          gridRef.value.clearCheckboxRow();
+          checkTable.value = [];
+          reject();
+        });
+  });
+};
+/** 重置按钮操作 */
+const drawerRuleFormRef = ref();
+const ruleFormRef = ref<RefType>(); // 表单ref
+const drawer = ref(false);
+const resetQuery = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  ruleFormRef.value?.resetFields();
+  queryList();
+};
+// 交办单导出
+const onJbExport = () => {
+  const ids = checkTable.value.map((item: any) => item.id);
+  exportAssignment(ids);
+};
+const checkTable = ref<EmptyArrayType>([]);
+const gridRef = ref<RefType>();
+const selectAllChangeEvent = ({ checked }) => {
+  if (gridRef.value) {
+    const records = gridRef.value.getCheckboxRecords();
+    checkTable.value = records;
+    console.log(checked ? '所有勾选事件' : '所有取消事件', records);
+  }
+};
+
+const selectChangeEvent = ({ checked }) => {
+  if (gridRef.value) {
+    const records = gridRef.value.getCheckboxRecords();
+    checkTable.value = records;
+    console.log(checked ? '勾选事件' : '取消事件', records);
+  }
+};
+const isChecked = computed(() => {
+  return !Boolean(checkTable.value.length);
+});
+
+onMounted(() => {
+  queryList().then(() => {
+    getBaseData();
+  });
+});
+</script>

+ 210 - 198
src/views/snapshot/statistics/handleOrder.vue

@@ -31,6 +31,7 @@ import { FormInstance } from 'element-plus';
 import { defaultDate } from '@/utils/constants';
 import { getGridReplyCount } from '@/api/snapshot/statistics';
 import Other from '@/utils/other';
+import { useRouter } from 'vue-router';
 
 // 引入组件
 const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
@@ -40,10 +41,10 @@ const state = reactive<any>({
 	loading: false,
 	queryParams: {
 		// 查询参数
-    crTime: defaultDate, // 时间默认今天开始到今天结束
-    StartTime: null,
-    EndTime: null,
-    IndustryId:null,
+		crTime: defaultDate, // 时间默认今天开始到今天结束
+		StartTime: null,
+		EndTime: null,
+		IndustryId: null,
 	},
 	total: 0, // 总条数
 });
@@ -74,6 +75,7 @@ const gridOptions = reactive<any>({
 	id: 'snapshotStatisticsHandleOrder',
 	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
 	height: 'auto',
+	align: 'center',
 	columns: [
 		{
 			field: 'no',
@@ -88,198 +90,203 @@ const gridOptions = reactive<any>({
 			fixed: 'left',
 		},
 		{
-			field: 'county',
-			title: '已办件数',
-			width: 100,
-			slots: {
-				default({ row }) {
-					return (
-						<el-button type="primary" onClick={() => linkDetail(row)} link>
-							{row.sumCount}
-						</el-button>
-					);
+			title: '办件信息',
+			children: [
+				{
+					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>
+							);
+						},
+					},
+				},
+			],
 		},
-    {
-      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: [],
 });
@@ -294,9 +301,9 @@ 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'); // 删除无用的参数
+	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;
@@ -319,7 +326,12 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	queryList();
 };
 // 跳转详情
-const linkDetail = (row: any) => {};
+const router = useRouter();
+const linkDetail = (row: any) => {
+	router.push({
+		path: '/snapshot/statistics/detail',
+	});
+};
 const industry = ref<EmptyArrayType>([]);
 // 页面加载时
 onMounted(() => {

+ 7 - 1
src/views/snapshot/statistics/handleTable.vue

@@ -418,6 +418,7 @@ import dayjs from 'dayjs';
 import { exportAsDocx } from '@/utils/exportAsWord';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { storeToRefs } from 'pinia';
+import {useRouter} from "vue-router";
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const state = reactive(<any>{
@@ -564,7 +565,12 @@ const exportWord = () => {
 		.catch(() => {});
 };
 // 点击详情
-const linkDetail = (row: any) => {};
+const router = useRouter();
+const linkDetail = (row: any) => {
+  router.push({
+    path: '/snapshot/statistics/detail',
+  });
+};
 const industry = ref<EmptyArrayType>([]);
 onMounted(() => {
 	queryList();

+ 7 - 1
src/views/snapshot/statistics/reAudit.vue

@@ -64,6 +64,7 @@ import { FormInstance } from 'element-plus';
 import { defaultDate } from '@/utils/constants';
 import { getGridReplyCount } from '@/api/snapshot/statistics';
 import Other from '@/utils/other';
+import {useRouter} from "vue-router";
 
 // 引入组件
 const StatisticalTime = defineAsyncComponent(() => import('@/components/StatisticalTime/index.vue')); // 日期类型选择组件
@@ -261,7 +262,12 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	queryList();
 };
 // 跳转详情
-const linkDetail = (row: any) => {};
+const router = useRouter();
+const linkDetail = (row: any) => {
+  router.push({
+    path: '/snapshot/statistics/detail',
+  });
+};
 const industry = ref<EmptyArrayType>([]);
 // 页面加载时
 onMounted(() => {