Prechádzať zdrojové kódy

Merge branch 'dev'

# Conflicts:
#	src/views/business/publish/component/Order-publish-edit.vue
zhangchong 10 mesiacov pred
rodič
commit
b82b3be6b9
41 zmenil súbory, kde vykonal 698 pridanie a 863 odobranie
  1. BIN
      src/assets/images/login/bg.png
  2. BIN
      src/assets/images/login/bgYb.png
  3. 7 12
      src/layout/navBars/breadcrumb/ybTel.vue
  4. 7 16
      src/layout/navBars/breadcrumb/zgTel.vue
  5. 18 40
      src/router/route.ts
  6. 3 3
      src/stores/telStatus.ts
  7. 1 13
      src/views/auxiliary/notice/detail.vue
  8. 0 10
      src/views/auxiliary/notice/index.vue
  9. 2 4
      src/views/business/order/copy-index.vue
  10. 5 5
      src/views/business/order/index.vue
  11. 7 7
      src/views/business/publish/component/Order-publish-edit.vue
  12. 1 1
      src/views/business/special/components/Special-audit-detail.vue
  13. 5 4
      src/views/dataShare/callLog.vue
  14. 11 27
      src/views/judicial/statistics/department.vue
  15. 5 5
      src/views/judicial/statistics/detailDepartment.vue
  16. 24 42
      src/views/judicial/statistics/detailDepartmentSub.vue
  17. 5 5
      src/views/judicial/statistics/detailEventClass.vue
  18. 15 29
      src/views/judicial/statistics/eventClass.vue
  19. 6 7
      src/views/judicial/statistics/satisfaction.vue
  20. 7 8
      src/views/statistics/call/detailTalkTime.vue
  21. 15 38
      src/views/statistics/call/talkTime.vue
  22. 19 48
      src/views/statistics/center/detailEventFrequently.vue
  23. 21 44
      src/views/statistics/center/detailTelFrequently.vue
  24. 89 81
      src/views/statistics/center/frequentlyEvent.vue
  25. 12 24
      src/views/statistics/center/frequentlyTel.vue
  26. 19 15
      src/views/statistics/department/detailSatisfied.vue
  27. 133 102
      src/views/statistics/department/detailSatisfiedOrg.vue
  28. 156 126
      src/views/statistics/department/satisfied.vue
  29. 4 4
      src/views/statistics/order/specialTable.vue
  30. 26 34
      src/views/statistics/order/specials.vue
  31. 12 29
      src/views/statistics/order/visitDiscontent.vue
  32. 16 18
      src/views/statistics/order/visitTable.vue
  33. 1 1
      src/views/system/config/workflow/index.vue
  34. 4 5
      src/views/system/dataAuth/component/Data-auth-add.vue
  35. 4 5
      src/views/system/dataAuth/component/Data-auth-edit.vue
  36. 1 1
      src/views/system/dataAuth/index.vue
  37. 2 5
      src/views/system/roles/index.vue
  38. 3 7
      src/views/tels/callLog/index.vue
  39. 3 5
      src/views/todo/center/index.vue
  40. 25 23
      src/views/todo/seats/accept/index.vue
  41. 4 10
      src/views/todo/seats/index.vue

BIN
src/assets/images/login/bg.png


BIN
src/assets/images/login/bgYb.png


+ 7 - 12
src/layout/navBars/breadcrumb/ybTel.vue

@@ -1194,18 +1194,13 @@ const onMessage = async (event: any) => {
 
 						await router.push({
 							name: 'orderAccept',
-							state: {
-								createBy: 'tel',
-								fromTel: data.ani, // 来电号码
-								telGuid: data.other_accept,
-								transfer: data.gateway, // 转接来源(如12345,12333)
-								telArea: '',
-								identityType: data.app_data.dtmf_his, // 按键接收(1:市民 2:企业 3:智能应答)
-							},
-							params: {
-								callId: data.other_accept, // 通话唯一ID
-								tagsViewName: '工单受理',
-							},
+              query:{
+                createBy: 'tel',
+                fromTel: data.ani, // 来电号码
+                callId: data.other_accept,
+                transfer: data.gateway, // 转接来源(如12345,12333)
+                identityType: data.app_data.dtmf_his, // 按键接收(1:市民 2:企业 3:智能应答)
+              }
 						});
 					} else if (data.private_data == 'answered') {
 						// 开始计时

+ 7 - 16
src/layout/navBars/breadcrumb/zgTel.vue

@@ -1076,18 +1076,13 @@ const evtCallAlerting = (data) => {
       );
       router.push({
         name: 'orderAccept',
-        state: {
+        query:{
           createBy: 'tel',
-          fromTel: strTelNumber, // 来电号码
-          telGuid: callId.value,
-          transfer: strCalledNum, // 转接来源(如12345,12333)
-          telArea: '',
+          fromTel: data.ani, // 来电号码
+          callId: data.other_accept,
+          transfer: data.gateway, // 转接来源(如12345,12333)
           identityType: strDigit, // 按键接收(1:市民 2:企业 3:智能应答)
-        },
-        params: {
-          callId: callId.value, // 通话唯一ID
-          tagsViewName: '工单受理',
-        },
+        }
       });
     }
   }
@@ -1246,15 +1241,11 @@ const evtEvtCalling = (data) => {
         state: {
           createBy: 'tel',
           fromTel: strTelNumber, // 来电号码
-          telGuid: callId.value,
+          callId: callId.value, // 通话ID
           transfer: strCalledNum, // 转接来源(如12345,12333)
           telArea: '',
           identityType: '', // 按键接收(1:市民 2:企业 3:智能应答)
-        },
-        params: {
-          callId: callId.value, // 通话唯一ID
-          tagsViewName: '工单受理',
-        },
+        }
       });
     }
   }

+ 18 - 40
src/router/route.ts

@@ -64,17 +64,16 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 		],
 	},
 	{
-		path: '/todo/seats/accept/:tagsViewName/:callId?/:id?',
+		path: '/todo/seats/accept',
 		name: 'orderAccept',
 		component: () => import('@/views/todo/seats/accept/index.vue'),
 		meta: {
 			title: '工单受理',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/knowledge/index/edit/:id?/:tagsViewName/:isDraft?',
+		path: '/knowledge/index/edit/:id?/:tagsViewName?',
 		name: 'knowledgeEdit',
 		component: () => import('@/views/knowledge/index/edit.vue'),
 		meta: {
@@ -94,17 +93,16 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 		},
 	},
 	{
-		path: '/system/roles/dataAuth/:id/:tagsViewName?',
+		path: '/system/roles/dataAuth',
 		name: 'systemDataAuth',
 		component: () => import('@/views/system/dataAuth/index.vue'),
 		meta: {
 			title: '数据权限',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/system/config/workflow/edit/:id?/:tagsViewName',
+		path: '/system/config/workflow/edit/:id?/:tagsViewName?',
 		name: 'workflowAddEdit',
 		component: () => import('@/views/system/config/workflow/component/workflowEdit.vue'),
 		meta: {
@@ -114,7 +112,7 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 		},
 	},
 	{
-		path: '/auxiliary/notice/detail/:tagsViewName/:id/:isRead',
+		path: '/auxiliary/notice/detail/:tagsViewName/:id',
 		name: 'auxiliaryNoticeDetail',
 		component: () => import('@/views/auxiliary/notice/detail.vue'),
 		meta: {
@@ -134,103 +132,84 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 		},
 	},
 	{
-		path: '/statistics/order/visitTable/:id/:tagsViewName?',
+		path: '/statistics/order/visitTable',
 		name: 'statisticsOrderVisitTable',
 		component: () => import('@/views/statistics/order/visitTable.vue'),
 		meta: {
 			title: '回访不满意原因统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/statistics/order/specialTable/:cause/:tagsViewName?',
+		path: '/statistics/order/specialTable',
 		name: 'statisticsOrderSpecialTable',
 		component: () => import('@/views/statistics/order/specialTable.vue'),
 		meta: {
 			title: '特提统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/statistics/department/Detail/:key/:tagsViewName?',
+		path: '/statistics/department/Detail',
 		name: 'statisticsDepartmentSatisfiedDetail',
 		component: () => import('@/views/statistics/department/detailSatisfied.vue'),
 		meta: {
 			title: '部门满意度统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/statistics/detailSatisfiedOrg/org/:key/:tagsViewName?',
+		path: '/statistics/detailSatisfiedOrg/org',
 		name: 'statisticsDepartmentSatisfiedOrg',
 		component: () => import('@/views/statistics/department/detailSatisfiedOrg.vue'),
 		meta: {
-			title: '部门满意度统计明细部门',
+			title: '部门满意度统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/statistics/center/detailTelFrequently/:FromPhone/:tagsViewName?',
+		path: '/statistics/center/detailTelFrequently',
 		name: 'telFrequentlyDetail',
 		component: () => import('@/views/statistics/center/detailTelFrequently.vue'),
 		meta: {
-			title: '高频来电统计明细',
+			title: '高频来电明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/statistics/center/detailEventFrequently/:id/:tagsViewName?',
+		path: '/statistics/center/detailEventFrequently',
 		name: 'eventFrequentlyDetail',
 		component: () => import('@/views/statistics/center/detailEventFrequently.vue'),
 		meta: {
-			title: '高频事项预警统计明细',
+			title: '高频事项预警明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/statistics/department/detailOverdue/:id/:tagsViewName?',
-		name: 'statisticsDepartmentOverdueDetail',
-		component: () => import('@/views/statistics/department/detailOverdue.vue'),
-		meta: {
-			title: '部门超期统计明细',
-			isKeepAlive: true,
-			isDynamic:true
-		},
-	},
-	{
-		path: '/judicial/statistics/detailEventClass/:id/:tagsViewName?',
+		path: '/judicial/statistics/detailEventClass',
 		name: 'judicialDetailEventClass',
 		component: () => import('@/views/judicial/statistics/detailEventClass.vue'),
 		meta: {
 			title: '事项分类统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/judicial/statistics/detailDepartmentSub/:id/:tagsViewName?', // 部门
+		path: '/judicial/statistics/detailDepartmentSub', // 部门
 		name: 'judicialStatisticsDepartmentSub',
 		component: () => import('@/views/judicial/statistics/detailDepartmentSub.vue'),
 		meta: {
 			title: '执法部门办件统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
-		path: '/judicial/statistics/detailDepartment/:id/:tagsViewName?', //工单
+		path: '/judicial/statistics/detailDepartment', //工单
 		name: 'judicialDetailDepartment',
 		component: () => import('@/views/judicial/statistics/detailDepartment.vue'),
 		meta: {
 			title: '执法部门办件统计明细',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},
 	{
@@ -312,13 +291,12 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 		},
 	},
 	{
-		path: '/statistics/call/detailTalkTime/:id/:tagsViewName?',
+		path: '/statistics/call/detailTalkTime',
 		name: 'statisticsCallDetailTalkTime',
 		component: () => import('@/views/statistics/call/detailTalkTime.vue'),
 		meta: {
 			title: '通话时段明细表',
 			isKeepAlive: true,
-			isDynamic:true
 		},
 	},{
 		path: '/statistics/department/detailOverdue/:id/:tagsViewName?',

+ 3 - 3
src/stores/telStatus.ts

@@ -35,7 +35,7 @@ export const useTelStatus = defineStore('telStatus', {
 		telStatusInfo: {
 			isCallOut: boolean;
 			fromTel: string;
-			telGuid: string;
+			callId: string;
 			isMute: boolean;
 			isMeeting: boolean;
 			isDutyOn: boolean;
@@ -64,7 +64,7 @@ export const useTelStatus = defineStore('telStatus', {
 			groupName: "", // 分机组名称
 			telGongHao: "", // 电话工号
 			telArea: "", // 电话区号
-			telGuid: "", // 电话guid
+			callId: "", // 电话guid
 			telIVR: "", // 电话IVR
 			telType: "", //来电 外呼 转接
 			fromTel: "", // 来电号码
@@ -125,7 +125,7 @@ export const useTelStatus = defineStore('telStatus', {
 				groupName: "", // 分机组名称
 				telGongHao: "", // 电话工号
 				telArea: "", // 电话区号
-				telGuid: "", // 电话guid
+				callId: "", // 电话guid
 				telIVR: "", // 电话IVR
 				telType: "", //来电 外呼 转接
 				fromTel: "", // 来电号码

+ 1 - 13
src/views/auxiliary/notice/detail.vue

@@ -178,21 +178,9 @@ const onAudit = () => {
 const router = useRouter();
 const closePage = () => {
 	state.dialogVisible = false;
+  mittBus.emit('clearCache', 'auxiliaryNotice');
 	// 关闭当前 tagsView
 	mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
-	mittBus.emit('clearCache', 'auxiliaryNotice');
-	if (noticeType.value === '通知详情') {
-		router.push({
-			path: '/auxiliary/notice',
-		});
-	} else if (noticeType.value === '公告详情') {
-		router.push({
-			name: 'auxiliaryNotice',
-			state: {
-				index: '1',
-			},
-		});
-	}
 };
 const examineFormRef = ref<RefType>();
 // 审核通过

+ 0 - 10
src/views/auxiliary/notice/index.vue

@@ -400,7 +400,6 @@ const onDetail = (row: any, type: string) => {
 		name: 'auxiliaryNoticeDetail',
 		params: {
 			id: row.id,
-			isRead: 0,
 			tagsViewName,
 		},
 	});
@@ -460,18 +459,9 @@ const onCommit = (row: any, type: string) => {
 		})
 		.catch(() => {});
 };
-const params = history.state;
 // 页面加载时
 onMounted(() => {
 	getBaseData();
-	if (params.index) {
-		listType.value = params.index as string;
-	}
 	queryList();
 });
-onActivated(() => {
-	if (params.index) {
-		listType.value = params.index as string;
-	}
-});
 </script>

+ 2 - 4
src/views/business/order/copy-index.vue

@@ -863,11 +863,9 @@ const onCreateRepeatEvent = () => {
 const onOrderEdit = (row: any) => {
   router.push({
     name: 'orderAccept',
-    params: {
-      tagsViewName: '工单受理-' + row.no,
+    query:{
       id: row.id,
-      callId: '0',
-    },
+    }
   });
 };
 // 工单省退回

+ 5 - 5
src/views/business/order/index.vue

@@ -434,6 +434,8 @@ const state = reactive<any>({
 		PhoneNo: null, // 手机号
 		Statuses: [], // 状态
 		doneTime: [], // 办结时间
+    ActualHandleTimeStart:null,
+    ActualHandleTimeEnd:null,
 		PushTypeCode: null, //推送类型
 		IsProvinceOrder: null, // 省市工单
 		IsSensitiveWord: null, // 是否敏感词工单
@@ -738,11 +740,9 @@ const onCreateRepeatEvent = () => {
 const onOrderEdit = (row: any) => {
 	router.push({
 		name: 'orderAccept',
-		params: {
-			tagsViewName: '工单受理-' + row.no,
-			id: row.id,
-			callId: '0',
-		},
+    query:{
+      id: row.id,
+    }
 	});
 };
 // 工单省退回

+ 7 - 7
src/views/business/publish/component/Order-publish-edit.vue

@@ -112,13 +112,13 @@
 							{{ state.publishDetail.actualHandleOrgName?.value }}
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="idNamesArray.length">
-						<el-form-item label="需回访部门" prop="checkList" :rules="[{ required: false, message: '请选择需回访部门', trigger: 'blur' }]">
-							<el-checkbox-group v-model="state.ruleForm.idNames" disabled>
-                <el-checkbox :label="item" v-for="item in idNamesArray" :key="item.key">{{ item.value }}</el-checkbox>
-							</el-checkbox-group>
-						</el-form-item>
-					</el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="idNamesArray.length">
+              <el-form-item label="需回访部门" prop="idNames">
+                <el-checkbox-group v-model="state.ruleForm.idNames" disabled>
+                  <el-checkbox :label="item" v-for="item in idNamesArray" :key="item.key">{{ item.value }}</el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
 				</el-row>
 			</el-form>
 		</div>

+ 1 - 1
src/views/business/special/components/Special-audit-detail.vue

@@ -72,7 +72,7 @@
               </el-form-item>
             </el-col>
           </template>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.detail.opinion">
 						<el-form-item label="审批意见">
 							{{ state.detail?.opinion }}
 						</el-form-item>

+ 5 - 4
src/views/dataShare/callLog.vue

@@ -12,14 +12,15 @@
 				<el-form-item label="时间段" prop="crTime">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
-						type="daterange"
+						type="datetimerange"
 						unlink-panels
 						range-separator="至"
 						start-placeholder="开始时间"
 						end-placeholder="结束时间"
 						:shortcuts="shortcuts"
 						@change="handleQuery"
-						value-format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD[T]HH:mm:ss"
+            :default-time="defaultTimeStartEnd"
 						:clearable="false"
 					/>
 				</el-form-item>
@@ -50,7 +51,7 @@
 <script setup lang="tsx" name="dataShareCallLog">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { defaultDate, shortcuts } from '@/utils/constants';
+import { defaultDate, defaultDateTime, defaultTimeStartEnd, shortcuts } from "@/utils/constants";
 import { formatDate } from '@/utils/formatTime';
 import { getCallList } from '@/api/dataShare';
 import Other from "@/utils/other";
@@ -126,7 +127,7 @@ const state = reactive<any>({
 		Id: null, // 热线号码
 		IsSuccess: null, // 是否成功
 		Keyword: null, // 关键字
-		crTime: defaultDate,
+		crTime: defaultDateTime,
     StartTime:null,
     EndTime:null
 	},

+ 11 - 27
src/views/judicial/statistics/department.vue

@@ -6,14 +6,15 @@
 				<el-form-item label="受理时间段" prop="crTime">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
-						type="daterange"
+						type="datetimerange"
 						unlink-panels
 						range-separator="至"
 						start-placeholder="开始时间"
 						end-placeholder="结束时间"
 						:shortcuts="shortcuts"
 						@change="handleQuery"
-						value-format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD[T]HH:mm:ss"
+            :default-time="defaultTimeStartEnd"
 						:clearable="false"
 					/>
 				</el-form-item>
@@ -44,15 +45,12 @@
 <script setup lang="tsx" name="judicialStatisticsDepartment">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { shortcuts } from '@/utils/constants';
-import dayjs from 'dayjs';
+import { defaultDateTime, defaultTimeStartEnd, shortcuts } from "@/utils/constants";
 import { departmentStatistics } from '@/api/judicial';
 import { useRouter } from 'vue-router';
-import { guid } from "@/utils/tools";
 // 定义变量内容
 
 const columns = ref<any>([
-	{ type: 'index', fixed: 'left', width: 55, label: '序号', align: 'center' },
 	{
 		prop: 'orgName',
 		label: '部门名称',
@@ -119,7 +117,7 @@ const state = reactive({
 	queryParams: {
 		// 查询条件
 		VisitName: null, // 关键词
-		crTime: [dayjs().startOf('day').format('YYYY-MM-DD'), dayjs().endOf('day').format('YYYY-MM-DD')], // 时间默认今天开始到今天结束
+		crTime:defaultDateTime ,
 	},
 	tableData: [],
 	loading: false, // 加载
@@ -201,24 +199,19 @@ const linkDetail = (row: any, type: string) => {
 		case 'orgName':
 			router.push({
 				name: 'judicialStatisticsDepartmentSub',
-				params: {
-					id: row.orgCode,
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'orgName',
           OrgCode: row.orgCode,
+          id: row.orgCode,
 				},
 			});
 			break;
 		case 'countNum':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+        query: {
 					StartDate,
 					EndDate,
 					type: 'countNum',
@@ -229,10 +222,7 @@ const linkDetail = (row: any, type: string) => {
 		case 'theClueIsTrue':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+        query: {
 					StartDate,
 					EndDate,
 					type: 'theClueIsTrue',
@@ -243,10 +233,7 @@ const linkDetail = (row: any, type: string) => {
 		case 'theClueIsNotTrue':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'theClueIsNotTrue',
@@ -257,10 +244,7 @@ const linkDetail = (row: any, type: string) => {
 		case 'enforcementOrder':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+        query: {
 					StartDate,
 					EndDate,
 					type: 'enforcementOrder',

+ 5 - 5
src/views/judicial/statistics/detailDepartment.vue

@@ -108,17 +108,17 @@ const columns = ref<any[]>([
 	{ prop: 'eventTypeName', label: '事项类型', width: 200 },
 ]);
 /** 获取列表 */
-const historyParams = history.state;
+const routeQueryParams = route.query;
 const queryList = () => {
 	let request = {};
   const data = {
     PageIndex: state.queryParams.PageIndex,
     PageSize: state.queryParams.PageSize,
-    StartDate: historyParams.StartDate,
-    EndDate: historyParams.EndDate,
-    OrgCode: historyParams.OrgCode,
+    StartDate: routeQueryParams.StartDate,
+    EndDate: routeQueryParams.EndDate,
+    OrgCode: routeQueryParams.OrgCode,
   }
-	switch (historyParams.type) {
+	switch (routeQueryParams.type) {
 		case 'countNum':
 			request = {
 				...data,

+ 24 - 42
src/views/judicial/statistics/detailDepartmentSub.vue

@@ -6,14 +6,15 @@
 				<el-form-item label="办结时间段" prop="crTime">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
-						type="daterange"
+						type="datetimerange"
 						unlink-panels
 						range-separator="至"
 						start-placeholder="开始时间"
 						end-placeholder="结束时间"
 						:shortcuts="shortcuts"
 						@change="handleQuery"
-						value-format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD[T]HH:mm:ss"
+            :default-time="defaultTimeStartEnd"
 						:clearable="false"
 					/>
 				</el-form-item>
@@ -44,7 +45,7 @@
 <script setup lang="tsx" name="judicialStatisticsDepartmentSub">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { shortcuts } from '@/utils/constants';
+import { defaultDateTime, defaultTimeStartEnd, shortcuts } from "@/utils/constants";
 import dayjs from 'dayjs';
 import { departmentStatisticsDepartmentDetail } from '@/api/judicial';
 import { useRoute, useRouter } from 'vue-router';
@@ -115,11 +116,11 @@ const columns = ref<any>([
 	},
 ]);
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		VisitName: null, // 关键词
-		crTime: [dayjs().startOf('day').format('YYYY-MM-DD'), dayjs().endOf('day').format('YYYY-MM-DD')], // 时间默认今天开始到今天结束
+		crTime: defaultDateTime,
 	},
 	tableData: [],
 	loading: false, // 加载
@@ -131,23 +132,22 @@ const handleQuery = () => {
 	queryList();
 };
 /** 获取列表 */
-const historyParams = history.state;
-if (historyParams.StartDate) {
-	state.queryParams.crTime = [dayjs(historyParams.StartDate).format('YYYY-MM-DD'), dayjs(historyParams.EndDate).format('YYYY-MM-DD')];
-}
 const route = useRoute();
+const routeQueryParams = route.query;
+if (routeQueryParams.StartDate) {
+	state.queryParams.crTime = [
+		dayjs(routeQueryParams.StartDate as string).format('YYYY-MM-DD[T]HH:mm:ss'),
+		dayjs(routeQueryParams.EndDate as string).format('YYYY-MM-DD[T]HH:mm:ss'),
+	];
+}
 const queryList = () => {
 	state.loading = true;
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	const request = {
 		StartDate,
 		EndDate,
-		OrgCode: historyParams.OrgCode,
+		OrgCode: routeQueryParams.OrgCode,
 	};
 	departmentStatisticsDepartmentDetail(request)
 		.then((res: any) => {
@@ -196,34 +196,25 @@ const getSummaries = (param: any) => {
 // 跳转详情
 const router = useRouter();
 const linkDetail = (row: any, type: string) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	switch (type) {
 		case 'orgName':
 			router.push({
 				name: 'judicialStatisticsDepartmentSub',
-				params: {
-					id: row.orgCode,
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'orgName',
 					OrgCode: row.orgCode,
+					id: row.orgCode,
 				},
 			});
 			break;
 		case 'countNum':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'countNum',
@@ -234,10 +225,7 @@ const linkDetail = (row: any, type: string) => {
 		case 'theClueIsTrue':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'theClueIsTrue',
@@ -248,10 +236,7 @@ const linkDetail = (row: any, type: string) => {
 		case 'theClueIsNotTrue':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'theClueIsNotTrue',
@@ -262,10 +247,7 @@ const linkDetail = (row: any, type: string) => {
 		case 'enforcementOrder':
 			router.push({
 				name: 'judicialDetailDepartment',
-				params: {
-					id: guid(),
-				},
-				state: {
+				query: {
 					StartDate,
 					EndDate,
 					type: 'enforcementOrder',

+ 5 - 5
src/views/judicial/statistics/detailEventClass.vue

@@ -108,15 +108,15 @@ const columns = ref<any[]>([
 	{ prop: 'eventTypeName', label: '事项类型', width: 200 }
 ]);
 /** 获取列表 */
-const historyParams = history.state;
+const routeQueryParams = route.query;
 const queryList = () => {
 	const request = {
-		EventTypeId: historyParams.EventTypeId,
-		AreaCode: historyParams.AreaCode,
+		EventTypeId: routeQueryParams.EventTypeId,
+		AreaCode: routeQueryParams.AreaCode,
 		PageIndex: state.queryParams.PageIndex,
 		PageSize: state.queryParams.PageSize,
-		StartDate: historyParams.StartDate,
-		EndDate: historyParams.EndDate,
+		StartDate: routeQueryParams.StartDate,
+		EndDate: routeQueryParams.EndDate,
 	};
 	state.loading = true;
 	eventStatisticsDetail(request)

+ 15 - 29
src/views/judicial/statistics/eventClass.vue

@@ -6,14 +6,15 @@
 				<el-form-item prop="crTime" label="受理时间段">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
-						type="daterange"
+						type="datetimerange"
 						unlink-panels
 						range-separator="至"
 						start-placeholder="开始时间"
 						end-placeholder="结束时间"
 						:shortcuts="shortcuts"
 						@change="handleQuery"
-						value-format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD[T]HH:mm:ss"
+            :default-time="defaultTimeStartEnd"
 						:clearable="false"
 					/>
 				</el-form-item>
@@ -90,11 +91,12 @@
 <script setup lang="tsx" name="judicialStatisticsEventClass">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { shortcuts } from '@/utils/constants';
+import { defaultDate, defaultDateTime, defaultTimeStartEnd, shortcuts } from "@/utils/constants";
 import dayjs from 'dayjs';
 import { eventStatistics, getArea } from '@/api/judicial';
 import { useRouter } from 'vue-router';
 import { guid } from "@/utils/tools";
+import Other from "@/utils/other";
 
 const columns = ref<any>([
   { type: 'index', fixed: 'left', width: 55, label: '序号', align: 'center' },
@@ -114,11 +116,11 @@ const columns = ref<any>([
 ]); // 表头
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		AreaCode: null,
-		crTime: [dayjs(new Date()).startOf('date').format('YYYY-MM-DD'), dayjs(new Date()).endOf('date').format('YYYY-MM-DD')], // 时间默认今天开始到今天结束
+		crTime: defaultDateTime, // 时间默认今天开始到今天结束
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -139,12 +141,8 @@ const handleQuery = () => {
 /** 获取列表 */
 const queryList = () => {
 	state.loading = true;
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	const request = {
 		StartDate,
 		EndDate,
@@ -170,12 +168,8 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 };
 // 懒加载
 const load = (row: any, treeNode: unknown, resolve: (date: any[]) => void) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	const request = {
 		StartDate,
 		EndDate,
@@ -202,22 +196,14 @@ const getBaseData = async () => {
 // 查看详情
 const router = useRouter();
 const linkDetail = (row: any) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
-	const AreaCode = state.AreaCode;
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'judicialDetailEventClass',
-		params: {
-			id: guid(),
-		},
-		state: {
+		query: {
 			StartDate,
 			EndDate,
-			AreaCode,
+			AreaCode:state.AreaCode,
       EventTypeId:row.id,
 		},
 	});

+ 6 - 7
src/views/judicial/statistics/satisfaction.vue

@@ -6,14 +6,15 @@
 				<el-form-item label="回访时间段" prop="crTime">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
-						type="daterange"
+						type="datetimerange"
 						unlink-panels
 						range-separator="至"
 						start-placeholder="开始时间"
 						end-placeholder="结束时间"
 						:shortcuts="shortcuts"
 						@change="handleQuery"
-						value-format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD[T]HH:mm:ss"
+            :default-time="defaultTimeStartEnd"
 						:clearable="false"
 					/>
 				</el-form-item>
@@ -123,16 +124,14 @@
 <script setup lang="tsx" name="judicialStatisticsSatisfaction">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { shortcuts } from '@/utils/constants';
-import dayjs from 'dayjs';
+import { defaultDateTime, defaultTimeStartEnd, shortcuts } from "@/utils/constants";
 import { departmentSatisfaction } from '@/api/judicial';
 import { useRouter } from 'vue-router';
 import { guid } from "@/utils/tools";
 // 定义变量内容
 
 const columns = ref<any>([
-	{ type: 'index', fixed: 'left', width: 55, label: '序号', align: 'center' },
-	{ prop: 'orgName', label: '部门名称', minWidth: 200 },
+	{ prop: 'orgName', label: '部门名称', minWidth: 200,fixed: 'left' },
 	{ prop: 'orgTypeText', label: '部门类别', minWidth: 120 },
 	{ prop: 'totalSumCount', label: '小计' },
 	{
@@ -211,7 +210,7 @@ const ruleFormRef = ref<RefType>(); // 表单ref
 const state = reactive({
 	queryParams: {
 		// 查询条件
-		crTime: [dayjs().startOf('day').format('YYYY-MM-DD'), dayjs().endOf('day').format('YYYY-MM-DD')], // 时间默认今天开始到今天结束
+		crTime: defaultDateTime, // 时间默认今天开始到今天结束
 		TypeId: '1',
 	},
 	tableData: [],

+ 7 - 8
src/views/statistics/call/detailTalkTime.vue

@@ -81,7 +81,7 @@ const columns = ref<any[]>([
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		type: null,
@@ -105,17 +105,16 @@ const handleQuery = () => {
 /** 获取列表 */
 const queryList = () => {
 	state.loading = true;
-	if (historyParams.type) {
-		state.queryParams.type = historyParams.type;
+	if (route.query.type) {
+		state.queryParams.type = route.query.type;
 	}
 	let beginDate = null;
 	let endDate = null;
-
 	if (state.queryParams?.crTime) {
 		beginDate = state.queryParams?.crTime[0];
 		endDate = state.queryParams?.crTime[1];
 	}
-	if (historyParams.startHourTo) state.queryParams.startHourTo = historyParams.startHourTo;
+	if (route.query.startHourTo) state.queryParams.startHourTo = route.query.startHourTo;
 	state.loading = true;
 	const request = {
 		beginDate,
@@ -185,11 +184,11 @@ const getBaseInfo = async () => {
 const historyParams = history.state;
 const route = useRoute();
 const showSearch = computed(() => {
-	return historyParams.showSearch;
+	return route.query.showSearch;
 });
 onMounted(() => {
-  if (historyParams.beginDate) {
-    state.queryParams.crTime = [historyParams.beginDate, historyParams.endDate];
+  if (route.query.beginDate) {
+    state.queryParams.crTime = [route.query.beginDate, route.query.endDate];
   }
 	getBaseInfo();
 	queryList();

+ 15 - 38
src/views/statistics/call/talkTime.vue

@@ -31,7 +31,7 @@
 				</el-form-item>
 			</el-form>
 		</el-card>
-<!--    :toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"-->
+		<!--    :toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"-->
 		<el-card shadow="never">
 			<ProTable
 				ref="proTableRef"
@@ -42,7 +42,6 @@
 				:pagination="false"
 				border
 				show-summary
-
 				@exportCurrent="exportCurrent"
 				@exportAll="exportAll"
 			>
@@ -56,7 +55,7 @@ import { FormInstance } from 'element-plus';
 import { callPeriod, callPeriodBase } from '@/api/statistics/call';
 import { defaultDate, shortcuts } from '@/utils/constants';
 import { useRouter } from 'vue-router';
-import { guid } from '@/utils/tools';
+import Other from '@/utils/other';
 
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
@@ -138,7 +137,7 @@ const columns = ref<any[]>([
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		Keyword: null, // 关键词
@@ -158,18 +157,10 @@ const handleQuery = () => {
 /** 获取列表 */
 const queryList = () => {
 	state.loading = true;
-	let beginDate = null;
-	let endDate = null;
-	if (state.queryParams?.crTime) {
-		beginDate = state.queryParams?.crTime[0];
-		endDate = state.queryParams?.crTime[1];
-	}
-	const request = {
-		beginDate,
-		endDate,
-		Keyword: state.queryParams.Keyword,
-		source: state.queryParams.source,
-	};
+	let request = Other.deepClone(state.queryParams);
+	request.beginDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	request.endDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+	Reflect.deleteProperty(request, 'crTime');
 	callPeriod(request)
 		.then((res: any) => {
 			state.tableData = res.result;
@@ -188,19 +179,12 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 // 通话时段分析
 const router = useRouter();
 const onDetail = () => {
-	let beginDate = null;
-	let endDate = null;
-	if (state.queryParams?.crTime) {
-		beginDate = state.queryParams?.crTime[0];
-		endDate = state.queryParams?.crTime[1];
-	}
+	const beginDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	const endDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'statisticsCallDetailTalkTime',
-		params: {
-			id: guid(),
-		},
-		state: {
-			showSearch: true,
+		query: {
+			showSearch: 'true',
 			beginDate,
 			endDate,
 		},
@@ -208,22 +192,15 @@ const onDetail = () => {
 };
 // 查看详情
 const linkDetail = (scope: any) => {
-	let beginDate = null;
-	let endDate = null;
-	if (state.queryParams?.crTime) {
-		beginDate = state.queryParams?.crTime[0];
-		endDate = state.queryParams?.crTime[1];
-	}
+	const beginDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	const endDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'statisticsCallDetailTalkTime',
-		params: {
-			id: guid(),
-		},
-		state: {
+		query: {
 			type: scope.column.property,
 			beginDate,
 			endDate,
-      startHourTo:scope.row.startHourTo
+			startHourTo: scope.row.startHourTo,
 		},
 	});
 };

+ 19 - 48
src/views/statistics/center/detailEventFrequently.vue

@@ -115,7 +115,7 @@
 									start-placeholder="开始时间"
 									end-placeholder="结束时间"
 									:shortcuts="shortcuts"
-									@change="timeStartChangeEx"
+									@change="handleQuery"
 									value-format="YYYY-MM-DD[T]HH:mm:ss"
                   :default-time="defaultTimeStartEnd"
 								/>
@@ -159,7 +159,7 @@
 									start-placeholder="开始时间"
 									end-placeholder="结束时间"
 									:shortcuts="shortcuts"
-									@change="timeStartChangeDone"
+									@change="handleQuery"
 									value-format="YYYY-MM-DD[T]HH:mm:ss"
                   :default-time="defaultTimeStartEnd"
 								/>
@@ -213,8 +213,6 @@
 				:total="state.total"
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
-				@export-current="exportCurrent"
-				@export-all="exportAll"
 				:key="Math.random()"
 			>
 				<template #expiredStatusText="{ row }">
@@ -240,6 +238,7 @@ import { useRoute, useRouter } from 'vue-router';
 import { formatDate } from '@/utils/formatTime';
 import { listBaseData } from '@/api/business/order';
 import { departmentHighFrequencyEventDetail } from '@/api/statistics/center';
+import Other from "@/utils/other";
 
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
@@ -257,7 +256,6 @@ const state = reactive<any>({
 		CurrentStepCode: null, // 当前办理节点
 		IsOverTime: null, // 是否超期
 		FromName: null, // 来电人姓名
-		AreaCodes: [], // 事发地址
 		FromPhone: null, // 来电号码
 		Keyword: null, // 关键字
 		Content: null, // 工单内容
@@ -349,24 +347,6 @@ const changeOrg = () => {
 const closeSearch = () => {
 	searchCol.value = !searchCol.value;
 };
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-	handleQuery();
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
-// 办结时间
-const timeStartChangeDone = (val: string[]) => {
-	handleTimeChange(val, 'ActualHandleTimeStart', 'ActualHandleTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	try {
@@ -391,18 +371,24 @@ const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
 	queryList();
 };
-const historyParams = history.state;
+const routeQueryParams = route.query;
 /** 获取列表 */
 const queryList = () => {
-	let request = other.deepClone(state.queryParams);
-	Reflect.deleteProperty(request, 'crTime'); // 删除无用的参数
-	Reflect.deleteProperty(request, 'exTime'); // 删除无用的参数
-	Reflect.deleteProperty(request, 'doneTime'); // 删除无用的参数
-	request.StartDate = historyParams.StartDate;
-	request.EndDate = historyParams.EndDate;
-	request.HotspotId = historyParams.HotspotId;
-	request.AreaCode = historyParams.AreaCode;
-	request.AcceptTypeCode = historyParams.AcceptTypeCode;
+  let request = Other.deepClone(state.queryParams);
+  request.CreationTimeStart = state.queryParams.crTime === null ? null : state.queryParams.crTime[0]; // 生成时间
+  request.CreationTimeEnd = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+  Reflect.deleteProperty(request, 'crTime'); // 删除无用的参数
+  request.ExpiredTimeStart = state.queryParams.exTime === null ? null : state.queryParams.exTime[0]; // 期满时间
+  request.ExpiredTimeEnd = state.queryParams.exTime === null ? null : state.queryParams.exTime[1];
+  Reflect.deleteProperty(request, 'exTime'); // 删除无用的参数
+  request.ActualHandleTimeStart = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[0]; // 办结时间
+  request.ActualHandleTimeEnd = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
+  Reflect.deleteProperty(request, 'doneTime'); // 删除无用的参数
+	request.StartDate = routeQueryParams.StartDate;
+	request.EndDate = routeQueryParams.EndDate;
+	request.HotspotId = routeQueryParams.HotspotId;
+	request.AreaCode = routeQueryParams.AreaCode;
+	request.AcceptTypeCode = routeQueryParams.AcceptTypeCode;
 	state.loading = true;
 	departmentHighFrequencyEventDetail(request)
 		.then((response: any) => {
@@ -415,27 +401,12 @@ const queryList = () => {
 			state.loading = false;
 		});
 };
-const hotSpotRef = ref<RefType>();
 /** 重置按钮操作 */
 const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = null;
-	state.queryParams.CreationTimeEnd = null;
-	state.queryParams.ExpiredTimeStart = null;
-	state.queryParams.ExpiredTimeEnd = null;
-  state.queryParams.ActualHandleTimeStart = null;
-  state.queryParams.ActualHandleTimeEnd = null;
-	hotSpotRef.value.reset();
-  state.queryParams.AreaCodes = [];
 	queryList();
 };
-const exportCurrent = () => {
-	console.log('导出当前页', proTableRef.value);
-};
-const exportAll = () => {
-	console.log('导出全部', proTableRef.value);
-};
 onMounted(() => {
 	getBaseData();
 	queryList();

+ 21 - 44
src/views/statistics/center/detailTelFrequently.vue

@@ -153,7 +153,7 @@
 									start-placeholder="开始时间"
 									end-placeholder="结束时间"
 									:shortcuts="shortcuts"
-									@change="timeStartChangeCr"
+									@change="handleQuery"
 									value-format="YYYY-MM-DD[T]HH:mm:ss"
                   :default-time="defaultTimeStartEnd"
 								/>
@@ -187,7 +187,7 @@
 									start-placeholder="开始时间"
 									end-placeholder="结束时间"
 									:shortcuts="shortcuts"
-									@change="timeStartChangeEx"
+									@change="handleQuery"
 									value-format="YYYY-MM-DD[T]HH:mm:ss"
                   :default-time="defaultTimeStartEnd"
 								/>
@@ -231,7 +231,7 @@
 									start-placeholder="开始时间"
 									end-placeholder="结束时间"
 									:shortcuts="shortcuts"
-									@change="timeStartChangeDone"
+									@change="handleQuery"
 									value-format="YYYY-MM-DD[T]HH:mm:ss"
                   :default-time="defaultTimeStartEnd"
 								/>
@@ -295,10 +295,6 @@
 				<template #title="{ row }">
 					<order-detail :order="row" @updateList="queryList">{{ row.title }}</order-detail>
 				</template>
-				<!-- 表格操作 -->
-				<template #operation="{ row }">
-					<order-detail :order="row" @updateList="queryList" />
-				</template>
 			</ProTable>
 		</el-card>
 	</div>
@@ -313,6 +309,7 @@ import { formatDate } from '@/utils/formatTime';
 import { listBaseData } from '@/api/business/order';
 import { treeArea } from '@/api/auxiliary/area';
 import { departmentHighFrequencyDetail } from '@/api/statistics/center';
+import Other from "@/utils/other";
 
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
@@ -351,6 +348,8 @@ const state = reactive<any>({
 		PhoneNo: null, // 手机号
 		Statuses: [], // 状态
 		doneTime: [], // 办结时间
+    ActualHandleTimeStart:null,
+    ActualHandleTimeEnd:null,
 		PushTypeCode: null, //推送类型
 		IsProvinceOrder: null, // 省市工单
 	},
@@ -368,7 +367,6 @@ const state = reactive<any>({
 	areaOptions: [], // 省市区数据
 });
 const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 展开/收起
 const route = useRoute(); // 路由
 const router = useRouter(); // 路由
 const proTableRef = ref<RefType>(); // 表格ref
@@ -421,31 +419,10 @@ const changeOrg = () => {
 	state.queryParams.orgCode = currentNode[0]?.data.orgCode ?? '';
 };
 // 展开/收起
+const searchCol = ref(true); // 展开/收起
 const closeSearch = () => {
 	searchCol.value = !searchCol.value;
 };
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-	handleQuery();
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
-// 办结时间
-const timeStartChangeDone = (val: string[]) => {
-	handleTimeChange(val, 'ActualHandleTimeStart', 'ActualHandleTimeEnd');
-};
 // 选择事发地址
 const areaRef = ref<RefType>();
 const changeArea = () => {
@@ -479,17 +456,23 @@ const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
 	queryList();
 };
-const historyParams = history.state;
 /** 获取列表 */
+const routeQueryParams = route.query;
 const queryList = () => {
-	let request = other.deepClone(state.queryParams);
-	Reflect.deleteProperty(request, 'crTime'); // 删除无用的参数
-	Reflect.deleteProperty(request, 'exTime'); // 删除无用的参数
-	Reflect.deleteProperty(request, 'doneTime'); // 删除无用的参数
+  let request = Other.deepClone(state.queryParams);
+  request.CreationTimeStart = state.queryParams.crTime === null ? null : state.queryParams.crTime[0]; // 生成时间
+  request.CreationTimeEnd = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+  Reflect.deleteProperty(request, 'crTime'); // 删除无用的参数
+  request.ExpiredTimeStart = state.queryParams.exTime === null ? null : state.queryParams.exTime[0]; // 期满时间
+  request.ExpiredTimeEnd = state.queryParams.exTime === null ? null : state.queryParams.exTime[1];
+  Reflect.deleteProperty(request, 'exTime'); // 删除无用的参数
+  request.ActualHandleTimeStart = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[0]; // 办结时间
+  request.ActualHandleTimeEnd = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
+  Reflect.deleteProperty(request, 'doneTime'); // 删除无用的参数
 	Reflect.deleteProperty(request, 'AreaCode'); // 删除无用的参数
-	request.StartDate = historyParams.StartDate;
-	request.EndDate = historyParams.EndDate;
-	request.FromPhone = route.params.FromPhone;
+	request.StartDate = routeQueryParams.StartDate;
+	request.EndDate = routeQueryParams.EndDate;
+	request.FromPhone = routeQueryParams.FromPhone;
 	state.loading = true;
 	departmentHighFrequencyDetail(request)
 		.then((response: any) => {
@@ -507,12 +490,6 @@ const hotSpotRef = ref<RefType>();
 const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = null;
-	state.queryParams.CreationTimeEnd = null;
-	state.queryParams.ExpiredTimeStart = null;
-	state.queryParams.ExpiredTimeEnd = null;
-	state.queryParams.ActualHandleTimeStart = null;
-	state.queryParams.ActualHandleTimeEnd = null;
 	state.queryParams.AreaCodes = [];
 	hotSpotRef.value.reset();
 	queryList();

+ 89 - 81
src/views/statistics/center/frequentlyEvent.vue

@@ -2,25 +2,26 @@
 	<div class="statistics-center-frequently-event-container layout-pd">
 		<!-- 搜索  -->
 		<el-card shadow="never">
-			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
-				<el-form-item label="事发地址" prop="AreaCode">
-					<el-cascader
-						:options="areaOptions"
-						filterable
-						:show-all-levels="false"
-						:props="{ checkStrictly: true, value: 'id', label: 'areaName', multiple: true }"
-						placeholder="请选择事发地址"
-						clearable
-						class="w100"
-						v-model="state.queryParams.AreaCode"
-						collapse-tags
-						collapse-tags-tooltip
-						:max-collapse-tags="2"
-						@change="changeArea"
-						ref="areaRef"
-					>
-					</el-cascader>
-				</el-form-item>
+      <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent label-width="100px">
+        <el-row :gutter="10">
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+          <el-form-item label="受理时间" prop="crTime">
+            <el-date-picker
+              v-model="state.queryParams.crTime"
+              type="daterange"
+              unlink-panels
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              :shortcuts="shortcuts"
+              @change="handleQuery"
+              value-format="YYYY-MM-DD"
+              :clearable="false"
+            />
+          </el-form-item>
+
+        </el-col>
+        <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
 				<el-form-item label="受理类型" prop="AcceptTypeCodes">
 					<el-select
 						v-model="state.queryParams.AcceptTypeCodes"
@@ -35,6 +36,8 @@
 						<el-option v-for="item in acceptTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
 					</el-select>
 				</el-form-item>
+        </el-col>
+        <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
 				<el-form-item label="热点分类" prop="HotspotIds">
 					<hot-spot-select
 						v-model="state.queryParams.HotspotIds"
@@ -45,26 +48,44 @@
 						@confirm="handleQuery"
 					/>
 				</el-form-item>
-				<el-form-item label="受理时间" prop="crTime">
-					<el-date-picker
-						v-model="state.queryParams.crTime"
-						type="daterange"
-						unlink-panels
-						range-separator="至"
-						start-placeholder="开始时间"
-						end-placeholder="结束时间"
-						:shortcuts="shortcuts"
-						@change="timeStartChangeCr"
-						value-format="YYYY-MM-DD"
-						:clearable="false"
-					/>
-				</el-form-item>
-				<el-form-item label-width="0">
-					<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-col>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+        <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+          <el-form-item label="事发地址" prop="AreaCode">
+            <el-cascader
+              :options="areaOptions"
+              filterable
+              :show-all-levels="false"
+              :props="{ checkStrictly: true, value: 'id', label: 'areaName', multiple: true }"
+              placeholder="请选择事发地址"
+              clearable
+              class="w100"
+              v-model="state.queryParams.AreaCode"
+              collapse-tags
+              collapse-tags-tooltip
+              :max-collapse-tags="2"
+              @change="changeArea"
+              ref="areaRef"
+            >
+            </el-cascader>
+          </el-form-item>
+        </el-col>
+          </transition>
+        <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+          <el-form-item label=" ">
+            <div class="flex-end w100">
+              <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-button link type="primary" @click="closeSearch" :loading="state.loading">
+                {{ searchCol ? '展开' : '收起' }}
+                <SvgIcon :class="{ 'is-reverse': searchCol }" name="ele-ArrowUp" class="mr5 arrow" size="18px" />
+              </el-button>
+            </div>
+          </el-form-item>
+        </el-col>
+        </el-row>
 			</el-form>
 		</el-card>
 		<el-card shadow="never">
@@ -109,6 +130,7 @@ import { smartVisitBaseData } from '@/api/smartVisit';
 import { treeArea } from '@/api/auxiliary/area';
 import { departmentHighFrequencyEvent } from '@/api/statistics/center';
 import { useRouter } from 'vue-router';
+import Other from "@/utils/other";
 
 const HotSpotSelect = defineAsyncComponent(() => import('@/components/Hotspot/index.vue')); // 选择热点
 const proTableRef = ref<RefType>(); // 表格ref
@@ -133,7 +155,7 @@ const columns = ref<any[]>([
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		AreaCode: [], // 事发地址
@@ -141,6 +163,8 @@ const state = reactive({
 		AcceptTypeCodes: [], // 受理类型
 		HotspotIds: [], // 热点分类
 		crTime: defaultDate,
+    StartDate:null,
+    EndDate:null,
 		PageIndex: 1,
 		PageSize: 10,
 	},
@@ -148,27 +172,16 @@ const state = reactive({
 	loading: false, // 加载
 	total: 0, // 总数
 });
-
+// 展开/收起
+const searchCol = ref(true); // 展开/收起
+const closeSearch = () => {
+  searchCol.value = !searchCol.value;
+};
 // 选择事发地址
 const areaRef = ref<RefType>();
 const changeArea = () => {
 	const area = areaRef.value?.getCheckedNodes() ?? [];
 	state.queryParams.AreaCodes = area.map((item: any) => item.value);
-	handleQuery();
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-	handleQuery();
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
 };
 // 基础信息
 const acceptTypeOptions = ref([]); // 受理类型
@@ -186,21 +199,10 @@ const handleQuery = () => {
 /** 获取列表 */
 const queryList = () => {
 	state.loading = true;
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
-	const request = {
-		StartDate,
-		EndDate,
-		HotspotIds: state.queryParams.HotspotIds,
-		AreaCodes: state.queryParams.AreaCodes,
-		AcceptTypeCodes: state.queryParams.AcceptTypeCodes,
-		PageIndex: state.queryParams.PageIndex,
-		PageSize: state.queryParams.PageSize,
-	};
+  let request = Other.deepClone(state.queryParams);
+  request.StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  request.EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+  Reflect.deleteProperty(request, 'crTime');
 	departmentHighFrequencyEvent(request)
 		.then((res: any) => {
 			state.tableData = res.result?.items ?? [];
@@ -222,23 +224,17 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 // 查看详情
 const router = useRouter();
 const linkDetail = (row: any) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'eventFrequentlyDetail',
-		params: {
-			id: row.id,
-		},
-		state: {
+		query: {
 			StartDate,
 			EndDate,
 			HotspotId: row.hotspotId,
 			AreaCode: row.areaCode,
 			AcceptTypeCode: row.acceptTypeCode,
+      id: row.id,
 		},
 	});
 };
@@ -251,3 +247,15 @@ onMounted(() => {
 	queryList();
 });
 </script>
+<style scoped lang="scss">
+.statistics-center-frequently-event-container {
+  .arrow {
+    transition: transform var(--el-transition-duration);
+    cursor: pointer;
+  }
+  .arrow.is-reverse {
+    transform: rotateZ(-180deg);
+  }
+}
+</style>
+

+ 12 - 24
src/views/statistics/center/frequentlyTel.vue

@@ -50,6 +50,7 @@ import { FormInstance } from 'element-plus';
 import { departmentHighFrequency } from '@/api/statistics/center';
 import { defaultDate, shortcuts } from "@/utils/constants";
 import { useRouter } from 'vue-router';
+import Other from "@/utils/other";
 
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
@@ -70,13 +71,15 @@ const columns = ref<any[]>([
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
 		PageSize: 10,
 		PhoneNum: null, // 来电号码
 		crTime: defaultDate,
+    StartDate:null,
+    EndDate:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -90,19 +93,10 @@ const handleQuery = () => {
 /** 获取列表 */
 const queryList = () => {
 	state.loading = true;
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
-	const request = {
-		StartDate,
-		EndDate,
-		PhoneNum: state.queryParams.PhoneNum,
-		PageSize: state.queryParams.PageSize,
-		PageIndex: state.queryParams.PageIndex,
-	};
+  let request = Other.deepClone(state.queryParams);
+  request.StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  request.EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+  Reflect.deleteProperty(request, 'crTime');
 	departmentHighFrequency(request)
 		.then((res: any) => {
 			state.tableData = res.result?.items ?? [];
@@ -116,20 +110,14 @@ const queryList = () => {
 // 查看详情
 const router = useRouter();
 const linkDetail = (row: any) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+  const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'telFrequentlyDetail',
-		params: {
-			FromPhone: row.callnum
-		},
-		state: {
+		query: {
 			StartDate,
 			EndDate,
+      FromPhone: row.callnum
 		},
 	});
 };

+ 19 - 15
src/views/statistics/department/detailSatisfied.vue

@@ -35,6 +35,7 @@ import { departmentSatisfactionDetail, departmentSatisfactionDetailExport } from
 import { formatDate } from '@/utils/formatTime';
 import { defaultDate } from '@/utils/constants';
 import { downloadFileByStream } from "@/utils/tools";
+import { useRoute } from "vue-router";
 
 // 引入组件
 const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit/component/Visit-detail.vue')); // 回访
@@ -96,6 +97,7 @@ const columns = ref<any[]>([
 	},
 	{ prop: 'order.counterSignTypeText', label: '是否会签', width: 100 },
 	{ prop: 'seatEvaluateText', label: '语音评价', width: 150 },
+  { prop: 'orgProcessingResultsText', label: '满意度', width: 150 },
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 170, align: 'center' },
 ]);
 // 定义变量内容
@@ -118,20 +120,22 @@ const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
 	queryList();
 };
-const historyParams = history.state;
+
 /** 获取列表 */
+const route = useRoute();
+const routeQueryParams = route.query;
 const queryList = () => {
 	state.loading = true;
 	const request = {
-		StartDate: historyParams.StartDate,
-		EndDate: historyParams.EndDate,
-		TypeId: historyParams.TypeId,
-		LineNum: historyParams.LineNum,
-		OrgCode: historyParams.OrgCode,
-		DateValue: historyParams.DateValue,
+		StartDate: routeQueryParams.StartDate,
+		EndDate: routeQueryParams.EndDate,
+		TypeId: routeQueryParams.TypeId,
+		LineNum: routeQueryParams.LineNum,
+		OrgCode: routeQueryParams.OrgCode,
+		DateValue: routeQueryParams.DateValue,
 		PageIndex: state.queryParams.PageIndex,
 		PageSize: state.queryParams.PageSize,
-		IsOnlyMy: historyParams.IsOnlyMy,
+		IsOnlyMy: routeQueryParams.IsOnlyMy,
 	};
 	departmentSatisfactionDetail(request)
 		.then((res: any) => {
@@ -161,15 +165,15 @@ const visitDetail = (row: any) => {
 // 表格导出
 const exportTable = (columnInfos: any, isExportAll = false) => {
   const request = {
-    StartDate: historyParams.StartDate,
-    EndDate: historyParams.EndDate,
-    TypeId: historyParams.TypeId,
-    LineNum: historyParams.LineNum,
-    OrgCode: historyParams.OrgCode,
-    DateValue: historyParams.DateValue,
+    StartDate: routeQueryParams.StartDate,
+    EndDate: routeQueryParams.EndDate,
+    TypeId: routeQueryParams.TypeId,
+    LineNum: routeQueryParams.LineNum,
+    OrgCode: routeQueryParams.OrgCode,
+    DateValue: routeQueryParams.DateValue,
     PageIndex: state.queryParams.PageIndex,
     PageSize: state.queryParams.PageSize,
-    IsOnlyMy: historyParams.IsOnlyMy,
+    IsOnlyMy: routeQueryParams.IsOnlyMy,
   };
   const req = {
     queryDto: request,

+ 133 - 102
src/views/statistics/department/detailSatisfiedOrg.vue

@@ -50,90 +50,24 @@
         :toolButton="['refresh', 'setting', 'exportAll']"
         @export-all="exportTable($event, true)"
 			>
-				<template #orgName="{ row }">
-					<span>{{ row.orgName }}</span>
-				</template>
-				<template #verySatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.verySatisfiedKey, row, '非常满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.verySatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.verySatisfiedCount }}</span>
-				</template>
-				<template #satisfiedCount="{ row }">
-					<el-button link type="primary" @click="onDetail(row.satisfiedKey, row, '满意')" v-if="!['市直合计', '区县合计'].includes(row.orgName)">{{
-						row.satisfiedCount
-					}}</el-button>
-					<span v-else>{{ row.satisfiedCount }}</span>
-				</template>
-				<template #regardedAsSatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.regardedAsSatisfiedKey, row, '视为满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.regardedAsSatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.regardedAsSatisfiedCount }}</span>
-				</template>
-				<template #defaultSatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.defaultSatisfiedKey, row, '默认满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.defaultSatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.defaultSatisfiedCount }}</span>
-				</template>
-				<template #noSatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.noSatisfiedKey, row, '不满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.noSatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.noSatisfiedCount }}</span>
-				</template>
-				<template #noEvaluateCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.noEvaluateKey, row, '未作评价')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.noEvaluateCount }}</el-button
-					>
-					<span v-else>{{ row.noEvaluateCount }}</span>
-				</template>
-				<template #noPutThroughCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.noPutThroughKey, row, '未接通')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.noPutThroughCount }}</el-button
-					>
-					<span v-else>{{ row.noPutThroughCount }}</span>
-				</template>
 			</ProTable>
 		</el-card>
 	</div>
 </template>
-<script setup lang="tsx" name="statisticsDepartmentSatisfied">
+<script setup lang="tsx" name="statisticsDepartmentSatisfiedOrg">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { departmentSatisfactionExport, departmentSatisfactionOrg, departmentSatisfactionOrgExport } from "@/api/statistics/department";
-import { useRouter } from 'vue-router';
-import { downloadFileByStream, guid } from "@/utils/tools";
-import Other from "@/utils/other";
+import { departmentSatisfactionOrg, departmentSatisfactionOrgExport } from "@/api/statistics/department";
+import { useRoute, useRouter } from "vue-router";
+import { downloadFileByStream }from "@/utils/tools";
 
 // 表格配置项
 const columns = ref<any[]>([
-  { prop: 'orgName', label: '部门名称', minWidth: 200 },
+  {
+    prop: 'orgName',
+    label: '部门名称',
+    minWidth: 200,
+  },
   { prop: 'orgTypeText', label: '部门类别', minWidth: 120 },
   { prop: 'totalSumCount', label: '小计' },
   {
@@ -141,43 +75,142 @@ const columns = ref<any[]>([
     label: '总满意率',
     minWidth: 120,
   },
-  { prop: 'verySatisfiedCount', label: '非常满意', minWidth: 120 },
+  {
+    prop: 'verySatisfiedCount',
+    label: '非常满意',
+    minWidth: 120,
+    render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.verySatisfiedKey, scope.row)}>
+              {scope.row.verySatisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.verySatisfiedCount}</span>
+          )}
+        </>
+      );
+    },
+  },
   {
     prop: 'verySatisfiedRateText',
     label: '非常满意率',
     minWidth: 120,
   },
-  { prop: 'satisfiedCount', label: '满意', minWidth: 120 },
+  {
+    prop: 'satisfiedCount',
+    label: '满意',
+    minWidth: 120,
+    render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.satisfiedKey, scope.row)}>
+              {scope.row.satisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.satisfiedCount}</span>
+          )}
+        </>
+      );
+    },
+  },
   {
     prop: 'satisfiedRateText',
     label: '满意率',
     minWidth: 120,
   },
-  { prop: 'regardedAsSatisfiedCount', label: '视为满意', minWidth: 120 },
+  {
+    prop: 'regardedAsSatisfiedCount',
+    label: '视为满意',
+    minWidth: 120,
+    render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.regardedAsSatisfiedKey, scope.row)}>
+              {scope.row.regardedAsSatisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.regardedAsSatisfiedCount}</span>
+          )}
+        </>
+      );
+    }
+  },
   {
     prop: 'regardedAsSatisfiedRateText',
     label: '视为满意率',
     minWidth: 120,
   },
-  { prop: 'defaultSatisfiedCount', label: '默认满意', minWidth: 120 },
+  { prop: 'defaultSatisfiedCount', label: '默认满意', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.defaultSatisfiedKey, scope.row)}>
+              {scope.row.defaultSatisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.defaultSatisfiedCount}</span>
+          )}
+        </>
+      );
+    } },
   {
     prop: 'defaultSatisfiedRateText',
     label: '默认满意率',
     minWidth: 120,
   },
-  { prop: 'noSatisfiedCount', label: '不满意', minWidth: 120 },
+  { prop: 'noSatisfiedCount', label: '不满意', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.noSatisfiedKey, scope.row)}>
+              {scope.row.noSatisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.noSatisfiedCount}</span>
+          )}
+        </>
+      );
+    }},
   {
     prop: 'noSatisfiedRateText',
     label: '不满意率',
     minWidth: 120,
   },
-  { prop: 'noEvaluateCount', label: '未作评价', minWidth: 120 },
+  { prop: 'noEvaluateCount', label: '未作评价', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.noEvaluateKey, scope.row)}>
+              {scope.row.noEvaluateCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.noEvaluateCount}</span>
+          )}
+        </>
+      );
+    } },
   {
     prop: 'noEvaluateRateText',
     label: '未作评价率',
     minWidth: 120,
   },
-  { prop: 'noPutThroughCount', label: '未接通', minWidth: 120 },
+  { prop: 'noPutThroughCount', label: '未接通', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.noPutThroughKey, scope.row)}>
+              {scope.row.noPutThroughCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.noPutThroughCount}</span>
+          )}
+        </>
+      );
+    } },
   {
     prop: 'noPutThroughRateText',
     label: '未接通率',
@@ -204,16 +237,17 @@ const handleQuery = () => {
   queryList();
 };
 /** 获取列表 */
-const historyParams = history.state;
+const route = useRoute();
+const routeQueryParams = route.query;
 const queryList = () => {
 	state.loading = true;
 	const request = {
-		StartDate: historyParams.StartDate,
-		EndDate: historyParams.EndDate,
-		TypeId: historyParams.TypeId,
-		LineNum: historyParams.LineNum,
-		OrgCode: historyParams.OrgCode,
-		DateValue: historyParams.DateValue,
+		StartDate: routeQueryParams.StartDate,
+		EndDate: routeQueryParams.EndDate,
+		TypeId: routeQueryParams.TypeId,
+		LineNum: routeQueryParams.LineNum,
+		OrgCode: routeQueryParams.OrgCode,
+		DateValue: routeQueryParams.DateValue,
 	};
 	departmentSatisfactionOrg(request)
 		.then((res: any) => {
@@ -308,27 +342,24 @@ const router = useRouter();
 const onDetail = (key: string, row) => {
 	router.push({
 		name: 'statisticsDepartmentSatisfiedDetail',
-		params: {
-			key: guid()
-		},
-		state: {
-      StartDate: historyParams.StartDate,
-      EndDate: historyParams.EndDate,
+		query: {
+      StartDate: routeQueryParams.StartDate,
+      EndDate: routeQueryParams.EndDate,
 			OrgCode: row.orgCode,
 			TypeId: state.queryParams.TypeId,
 			DateValue: key,
       IsOnlyMy:true
-		},
+		}
 	});
 };
 const exportTable = (columnInfos: any, isExportAll = false) => {
   const request = {
-    StartDate: historyParams.StartDate,
-    EndDate: historyParams.EndDate,
-    TypeId: historyParams.TypeId,
-    LineNum: historyParams.LineNum,
-    OrgCode: historyParams.OrgCode,
-    DateValue: historyParams.DateValue,
+    StartDate: routeQueryParams.StartDate,
+    EndDate: routeQueryParams.EndDate,
+    TypeId: routeQueryParams.TypeId,
+    LineNum: routeQueryParams.LineNum,
+    OrgCode: routeQueryParams.OrgCode,
+    DateValue: routeQueryParams.DateValue,
   };
   const req = {
     queryDto: request,

+ 156 - 126
src/views/statistics/department/satisfied.vue

@@ -50,81 +50,9 @@
 				border
 				:pagination="false"
 				:summary-method="getSummaries"
-        :toolButton="['refresh', 'setting', 'exportAll']"
-        @export-all="exportTable($event, true)"
+				:toolButton="['refresh', 'setting', 'exportAll']"
+				@export-all="exportTable($event, true)"
 			>
-				<template #orgName="{ row }">
-					<el-button link type="primary" @click="onDetailOrg(row)" v-if="!['市直合计', '区县合计'].includes(row.orgName)">{{
-						row.orgName
-					}}</el-button>
-					<span v-else>{{ row.orgName }}</span>
-				</template>
-				<template #verySatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.verySatisfiedKey, row, '非常满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.verySatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.verySatisfiedCount }}</span>
-				</template>
-				<template #satisfiedCount="{ row }">
-					<el-button link type="primary" @click="onDetail(row.satisfiedKey, row, '满意')" v-if="!['市直合计', '区县合计'].includes(row.orgName)">{{
-						row.satisfiedCount
-					}}</el-button>
-					<span v-else>{{ row.satisfiedCount }}</span>
-				</template>
-				<template #regardedAsSatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.regardedAsSatisfiedKey, row, '视为满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.regardedAsSatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.regardedAsSatisfiedCount }}</span>
-				</template>
-				<template #defaultSatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.defaultSatisfiedKey, row, '默认满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.defaultSatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.defaultSatisfiedCount }}</span>
-				</template>
-				<template #noSatisfiedCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.noSatisfiedKey, row, '不满意')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.noSatisfiedCount }}</el-button
-					>
-					<span v-else>{{ row.noSatisfiedCount }}</span>
-				</template>
-				<template #noEvaluateCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.noEvaluateKey, row, '未作评价')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.noEvaluateCount }}</el-button
-					>
-					<span v-else>{{ row.noEvaluateCount }}</span>
-				</template>
-				<template #noPutThroughCount="{ row }">
-					<el-button
-						link
-						type="primary"
-						@click="onDetail(row.noPutThroughKey, row, '未接通')"
-						v-if="!['市直合计', '区县合计'].includes(row.orgName)"
-						>{{ row.noPutThroughCount }}</el-button
-					>
-					<span v-else>{{ row.noPutThroughCount }}</span>
-				</template>
 			</ProTable>
 		</el-card>
 	</div>
@@ -132,16 +60,33 @@
 <script setup lang="tsx" name="statisticsDepartmentSatisfied">
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
-import { departmentSatisfaction, departmentSatisfactionExport } from "@/api/statistics/department";
+import { departmentSatisfaction, departmentSatisfactionExport } from '@/api/statistics/department';
 import { defaultDate, shortcuts } from '@/utils/constants';
 import { useRouter } from 'vue-router';
-import { downloadFileByStream, guid } from "@/utils/tools";
+import { downloadFileByStream } from '@/utils/tools';
 import { callPeriodBase } from '@/api/statistics/call';
 import Other from '@/utils/other';
 
 // 表格配置项
 const columns = ref<any[]>([
-	{ prop: 'orgName', label: '部门名称', minWidth: 200 },
+	{
+		prop: 'orgName',
+		label: '部门名称',
+		minWidth: 200,
+		render: (scope) => {
+			return (
+				<>
+					{!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+						<el-button type="primary" link onClick={() => onDetailOrg(scope.row)}>
+							{scope.row.orgName}
+						</el-button>
+					) : (
+						<span>{scope.row.orgName}</span>
+					)}
+				</>
+			);
+		},
+	},
 	{ prop: 'orgTypeText', label: '部门类别', minWidth: 120 },
 	{ prop: 'totalSumCount', label: '小计' },
 	{
@@ -149,43 +94,142 @@ const columns = ref<any[]>([
 		label: '总满意率',
 		minWidth: 120,
 	},
-	{ prop: 'verySatisfiedCount', label: '非常满意', minWidth: 120 },
+	{
+		prop: 'verySatisfiedCount',
+		label: '非常满意',
+		minWidth: 120,
+		render: (scope) => {
+			return (
+				<>
+					{!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+						<el-button type="primary" link onClick={() => onDetail(scope.row.verySatisfiedKey, scope.row)}>
+							{scope.row.verySatisfiedCount}
+						</el-button>
+					) : (
+						<span>{scope.row.verySatisfiedCount}</span>
+					)}
+				</>
+			);
+		},
+	},
 	{
 		prop: 'verySatisfiedRateText',
 		label: '非常满意率',
 		minWidth: 120,
 	},
-	{ prop: 'satisfiedCount', label: '满意', minWidth: 120 },
+	{
+		prop: 'satisfiedCount',
+		label: '满意',
+		minWidth: 120,
+		render: (scope) => {
+			return (
+				<>
+					{!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+						<el-button type="primary" link onClick={() => onDetail(scope.row.satisfiedKey, scope.row)}>
+							{scope.row.satisfiedCount}
+						</el-button>
+					) : (
+						<span>{scope.row.satisfiedCount}</span>
+					)}
+				</>
+			);
+		},
+	},
 	{
 		prop: 'satisfiedRateText',
 		label: '满意率',
 		minWidth: 120,
 	},
-	{ prop: 'regardedAsSatisfiedCount', label: '视为满意', minWidth: 120 },
+	{
+		prop: 'regardedAsSatisfiedCount',
+		label: '视为满意',
+		minWidth: 120,
+		render: (scope) => {
+			return (
+				<>
+					{!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+						<el-button type="primary" link onClick={() => onDetail(scope.row.regardedAsSatisfiedKey, scope.row)}>
+							{scope.row.regardedAsSatisfiedCount}
+						</el-button>
+					) : (
+						<span>{scope.row.regardedAsSatisfiedCount}</span>
+					)}
+				</>
+			);
+		}
+	},
 	{
 		prop: 'regardedAsSatisfiedRateText',
 		label: '视为满意率',
 		minWidth: 120,
 	},
-	{ prop: 'defaultSatisfiedCount', label: '默认满意', minWidth: 120 },
+	{ prop: 'defaultSatisfiedCount', label: '默认满意', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.defaultSatisfiedKey, scope.row)}>
+              {scope.row.defaultSatisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.defaultSatisfiedCount}</span>
+          )}
+        </>
+      );
+    } },
 	{
 		prop: 'defaultSatisfiedRateText',
 		label: '默认满意率',
 		minWidth: 120,
 	},
-	{ prop: 'noSatisfiedCount', label: '不满意', minWidth: 120 },
+	{ prop: 'noSatisfiedCount', label: '不满意', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.noSatisfiedKey, scope.row)}>
+              {scope.row.noSatisfiedCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.noSatisfiedCount}</span>
+          )}
+        </>
+      );
+    }},
 	{
 		prop: 'noSatisfiedRateText',
 		label: '不满意率',
 		minWidth: 120,
 	},
-	{ prop: 'noEvaluateCount', label: '未作评价', minWidth: 120 },
+	{ prop: 'noEvaluateCount', label: '未作评价', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.noEvaluateKey, scope.row)}>
+              {scope.row.noEvaluateCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.noEvaluateCount}</span>
+          )}
+        </>
+      );
+    } },
 	{
 		prop: 'noEvaluateRateText',
 		label: '未作评价率',
 		minWidth: 120,
 	},
-	{ prop: 'noPutThroughCount', label: '未接通', minWidth: 120 },
+	{ prop: 'noPutThroughCount', label: '未接通', minWidth: 120,render: (scope) => {
+      return (
+        <>
+          {!['市直合计', '区县合计'].includes(scope.row.orgName) ? (
+            <el-button type="primary" link onClick={() => onDetail(scope.row.noPutThroughKey, scope.row)}>
+              {scope.row.noPutThroughCount}
+            </el-button>
+          ) : (
+            <span>{scope.row.noPutThroughCount}</span>
+          )}
+        </>
+      );
+    } },
 	{
 		prop: 'noPutThroughRateText',
 		label: '未接通率',
@@ -252,9 +296,9 @@ const getSummaries = (param: any) => {
 			return;
 		}
 		switch (column.property) {
-      case 'orgTypeText':
-        sums[index] = state.totalCount?.orgTypeText;
-        break;
+			case 'orgTypeText':
+				sums[index] = state.totalCount?.orgTypeText;
+				break;
 			case 'totalSumCount':
 				sums[index] = state.totalCount?.totalSumCount;
 				break;
@@ -313,40 +357,26 @@ const getSummaries = (param: any) => {
 const router = useRouter();
 // 点击部门名称
 const onDetailOrg = (row: any) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+	const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'statisticsDepartmentSatisfiedOrg',
-		state: {
+		query: {
 			StartDate,
 			EndDate,
 			OrgCode: row.orgCode,
 			TypeId: state.queryParams.TypeId,
 			LineNum: state.queryParams.LineNum,
 		},
-		params: {
-			key: guid(),
-		},
 	});
 };
 // 点击数字
-const onDetail = (key: string, row, type: string) => {
-	let StartDate = null;
-	let EndDate = null;
-	if (state.queryParams?.crTime) {
-		StartDate = state.queryParams?.crTime[0];
-		EndDate = state.queryParams?.crTime[1];
-	}
+const onDetail = (key: string, row: any) => {
+	const StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	const EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'statisticsDepartmentSatisfiedDetail',
-		params: {
-			key: guid(),
-		},
-		state: {
+		query: {
 			StartDate,
 			EndDate,
 			OrgCode: row.orgCode,
@@ -366,24 +396,24 @@ const getBaseInfo = async () => {
 	}
 };
 const exportTable = (columnInfos: any, isExportAll = false) => {
-  let request = Other.deepClone(state.queryParams);
-  request.StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
-  request.EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
-  Reflect.deleteProperty(request, 'crTime');
-  const req = {
-    queryDto: request,
-    columnInfos,
-    isExportAll,
-  };
-  state.loading = true;
-  departmentSatisfactionExport(req)
-    .then((res: any) => {
-      state.loading = false;
-      downloadFileByStream(res);
-    })
-    .catch(() => {
-      state.loading = false;
-    });
+	let request = Other.deepClone(state.queryParams);
+	request.StartDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	request.EndDate = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+	Reflect.deleteProperty(request, 'crTime');
+	const req = {
+		queryDto: request,
+		columnInfos,
+		isExportAll,
+	};
+	state.loading = true;
+	departmentSatisfactionExport(req)
+		.then((res: any) => {
+			state.loading = false;
+			downloadFileByStream(res);
+		})
+		.catch(() => {
+			state.loading = false;
+		});
 };
 onMounted(() => {
 	getBaseInfo();

+ 4 - 4
src/views/statistics/order/specialTable.vue

@@ -106,17 +106,17 @@ const handleQuery = () => {
 };
 /** 获取列表 */
 const route = useRoute();
+const routeQueryParams = route.query;
 const queryList = () => {
 	state.loading = true;
-	const historyParams = history.state;
 	const request = {
 		PageIndex: state.queryParams.PageIndex,
 		PageSize: state.queryParams.PageSize,
 		Keyword: state.queryParams.Keyword,
-		Cause: historyParams.cause,
+		Cause: routeQueryParams.cause,
 		State: state.queryParams.State,
-		StartTime: historyParams.startTime,
-		EndTime: historyParams.endTime,
+		StartTime: routeQueryParams.startTime,
+		EndTime: routeQueryParams.endTime,
 	};
 	departmentSpecialDetail(request)
 		.then((res: any) => {

+ 26 - 34
src/views/statistics/order/specials.vue

@@ -37,9 +37,6 @@
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
 			>
-				<template #orderNum="{ row }">
-					<el-button link @click="handleDetail(row)" type="primary">{{ row.orderNum }}</el-button>
-				</template>
 			</ProTable>
 		</el-card>
 	</div>
@@ -48,16 +45,26 @@
 import { onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
 import { departmentSpecial } from '@/api/statistics/order';
-import { defaultDate, shortcuts } from "@/utils/constants";
+import { defaultDate, shortcuts } from '@/utils/constants';
 import { formatDate } from '@/utils/formatTime';
 import { useRouter } from 'vue-router';
-import { guid } from "@/utils/tools";
+import Other from '@/utils/other';
 
 // 表格配置项
 const columns = ref<any[]>([
-	{ type: 'index', fixed: 'left', width: 55, label: '序号', align: 'center' },
 	{ prop: 'cause', label: '特提原因', align: 'center' },
-	{ prop: 'orderNum', label: '特提工单数', align: 'center' },
+	{
+		prop: 'orderNum',
+		label: '特提工单数',
+		align: 'center',
+		render: (scope) => {
+			return (
+				<el-button type="primary" onClick={() => handleDetail(scope.row)} link>
+					{scope.row.orderNum}
+				</el-button>
+			);
+		},
+	},
 	{
 		prop: 'passTotal',
 		label: '特提时间',
@@ -67,7 +74,7 @@ const columns = ref<any[]>([
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1, // 页码
@@ -86,18 +93,10 @@ const handleQuery = () => {
 /** 获取列表 */
 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,
-		PageIndex: state.queryParams.PageIndex,
-		PageSize: state.queryParams.PageSize,
-	};
+	let 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');
 	departmentSpecial(request)
 		.then((res: any) => {
 			state.tableData = res.result?.items ?? [];
@@ -116,22 +115,15 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 };
 const router = useRouter();
 const handleDetail = (row: any) => {
-	let startTime = null;
-	let endTime = null;
-	if (state.queryParams?.crTime) {
-		startTime = state.queryParams?.crTime[0];
-		endTime = state.queryParams?.crTime[1];
-	}
+	const startTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+	const endTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'statisticsOrderSpecialTable',
-		params: {
-			cause: guid()
-		},
-		state: {
-			startTime: startTime ?? 'null',
-			endTime: endTime ?? 'null',
-      cause:row.cause
-		},
+		query: {
+			startTime: startTime,
+			endTime: endTime,
+			cause: row.cause,
+		}
 	});
 };
 onMounted(() => {

+ 12 - 29
src/views/statistics/order/visitDiscontent.vue

@@ -51,12 +51,12 @@ import { FormInstance } from 'element-plus';
 import { departmentUnsatisfied } from '@/api/statistics/order';
 import { defaultDate, shortcuts } from "@/utils/constants";
 import { useRouter } from 'vue-router';
-import { guid } from "@/utils/tools";
+import Other from "@/utils/other";
 // 定义变量内容
 
 const columns = ref([]);
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		OrgName: null, // 关键词
@@ -74,20 +74,10 @@ const handleQuery = () => {
 /** 获取列表 */
 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,
-		OrgName: state.queryParams.OrgName,
-		Keyword: state.queryParams.Keyword,
-		SortField: state.queryParams.SortField,
-		SortRule: state.queryParams.SortRule,
-	};
+  let 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');
 	departmentUnsatisfied(request)
 		.then((res: any) => {
 			columns.value = res.result?.dicReason ?? [];
@@ -106,7 +96,7 @@ const queryList = () => {
 					},
 				};
 			});
-			columns.value.unshift({ type: 'index', fixed: 'left', width: 55, label: '序号', align: 'center' },{
+			columns.value.unshift({
 				prop: 'OrgName',
 				label: '部门名称',
 				minWidth: 140,
@@ -139,20 +129,13 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 const router = useRouter();
 const handleDetail = (row: any) => {
 	const columnKey = Object.keys(row.row).find((item) => item === row.column.property);
-	let startTime = null;
-	let endTime = null;
-	if (state.queryParams?.crTime) {
-		startTime = state.queryParams?.crTime[0];
-		endTime = state.queryParams?.crTime[1];
-	}
+  const startTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
+  const endTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	router.push({
 		name: 'statisticsOrderVisitTable',
-		params: {
-			id: guid()
-		},
-		state: {
-			startTime: startTime ?? 'null',
-			endTime: endTime ?? 'null',
+		query: {
+			startTime: startTime,
+			endTime: endTime,
 			orgId: row.row?.OrgCode,
       columnKey
 		},

+ 16 - 18
src/views/statistics/order/visitTable.vue

@@ -74,12 +74,12 @@
 					<Empty />
 				</template>
 			</el-table>
-      <pagination
-        @pagination="queryList"
-        :total="state.total"
-        v-model:current-page="state.queryParams.PageIndex"
-        v-model:page-size="state.queryParams.PageSize"
-      />
+			<pagination
+				@pagination="queryList"
+				:total="state.total"
+				v-model:current-page="state.queryParams.PageIndex"
+				v-model:page-size="state.queryParams.PageSize"
+			/>
 		</el-card>
 		<!-- 回访详情 -->
 		<visit-detail-com ref="visitDetailRef" @updateList="queryList" />
@@ -117,19 +117,20 @@ const route = useRoute();
 const historyParams = history.state;
 /** 搜索按钮操作 */
 const handleQuery = () => {
-  state.queryParams.PageIndex = 1;
-  queryList();
+	state.queryParams.PageIndex = 1;
+	queryList();
 };
+const routeQueryParams = route.query;
 const queryList = () => {
 	state.loading = true;
 	const request = {
 		PageIndex: state.queryParams.PageIndex,
 		PageSize: state.queryParams.PageSize,
 		Keyword: state.queryParams.Keyword,
-		OrgCode: historyParams.orgId,
-		DissatisfiedKey: historyParams.columnKey,
-		StartTime: historyParams.startTime,
-		EndTime: historyParams.endTime,
+		OrgCode: routeQueryParams.orgId,
+		DissatisfiedKey: routeQueryParams.columnKey,
+		StartTime: routeQueryParams.startTime,
+		EndTime: routeQueryParams.endTime,
 	};
 	departmentUnsatisfiedDetail(request)
 		.then((res: any) => {
@@ -140,23 +141,20 @@ const queryList = () => {
 		.catch(() => {
 			state.loading = false;
 		});
-}
+};
 
 /** 重置按钮操作 */
 const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
 	queryList();
-}
+};
 // 回访详情
 const visitDetailRef = ref<RefType>();
 const visitDetail = (row: any) => {
 	visitDetailRef.value.openDialog(row.orderVisit, '回访详情');
 };
 onMounted(() => {
-	if (route.params.id) queryList();
-	else {
-		ElMessage.warning('参数错误');
-	}
+	queryList();
 });
 </script>

+ 1 - 1
src/views/system/config/workflow/index.vue

@@ -268,7 +268,7 @@ const onEditTemp = (row: any) => {
 	router.push({
 		name: 'workflowAddEdit',
 		params: {
-			tagsViewName: '编辑流程-' + row.name,
+			tagsViewName: `编辑流程-${row.name}`,
 			id: row.id,
 		},
 	});

+ 4 - 5
src/views/system/dataAuth/component/Data-auth-add.vue

@@ -28,7 +28,7 @@
 	</el-dialog>
 </template>
 
-<script setup lang="ts" name="systemDataAuthAdd">
+<script setup lang="ts">
 import { reactive, ref, onMounted } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { useRoute } from 'vue-router';
@@ -107,11 +107,10 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 			});
 	});
 }, 1000);
-const historyParams = history.state;
 onMounted(() => {
-	state.ruleForm.roleId = route.params.id;
-	state.ruleForm.roleCode = historyParams.code;
-	state.ruleForm.roleDisplay = historyParams.roleDisplay;
+	state.ruleForm.roleId = route.query.id;
+	state.ruleForm.roleCode = route.query.code;
+	state.ruleForm.roleDisplay = route.query.roleDisplay;
 });
 // 暴露变量
 defineExpose({

+ 4 - 5
src/views/system/dataAuth/component/Data-auth-edit.vue

@@ -28,7 +28,7 @@
 	</el-dialog>
 </template>
 
-<script setup lang="ts" name="systemDataAuthEdit">
+<script setup lang="ts">
 import { reactive, ref, onMounted } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { useRoute } from 'vue-router';
@@ -113,11 +113,10 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 			});
 	});
 }, 1000);
-const historyParams = history.state;
 onMounted(() => {
-	state.ruleForm.roleId = route.params.id;
-	state.ruleForm.roleCode = historyParams.code;
-	state.ruleForm.roleDisplay = historyParams.roleDisplay;
+  state.ruleForm.roleId = route.query.id;
+  state.ruleForm.roleCode = route.query.code;
+  state.ruleForm.roleDisplay = route.query.roleDisplay;
 });
 // 暴露变量
 defineExpose({

+ 1 - 1
src/views/system/dataAuth/index.vue

@@ -52,7 +52,7 @@ const handleQuery = () => {
 }
 /** 获取用户列表 */
 const route = useRoute();
-state.roleId = route.params.id as string;
+state.roleId = route.query.id as string;
 const queryList = () => {
 	state.loading = true;
 	getDataAuthorityByRole(state.roleId)

+ 2 - 5
src/views/system/roles/index.vue

@@ -169,11 +169,8 @@ const showUserList = (row: Object) => {
 const onDataAuth = (row: any) => {
 	router.push({
 		name: 'systemDataAuth',
-		params: {
-			id: row.id,
-			tagsViewName: '数据权限 ' + row.displayName,
-		},
-		state: {
+		query: {
+      id: row.id,
 			code: row.name,
 			roleDisplay: row.displayName,
 		},

+ 3 - 7
src/views/tels/callLog/index.vue

@@ -897,17 +897,13 @@ const router = useRouter();
 const onCreate = (row: any) => {
 	router.push({
 		name: 'orderAccept',
-		state: {
+		query: {
 			createBy: 'tel',
 			fromTel: row.cpn,
-			telGuid: row.otherAccept,
+      callId: row.otherAccept,
 			transfer: row.gateway,
 			telArea: '',
-		},
-		params: {
-			callId: row.otherAccept,
-			tagsViewName: '创建失联工单',
-		},
+		}
 	});
 };
 // 基础信息

+ 3 - 5
src/views/todo/center/index.vue

@@ -343,11 +343,9 @@ const onSign = (row: any) => {
 const onOrderEdit = (row: any) => {
 	router.push({
 		name: 'orderAccept',
-		params: {
-			tagsViewName: '工单受理-' + row.no,
-			id: row.id,
-			callId: '0',
-		},
+		query:{
+      id: row.id,
+    }
 	});
 };
 // 交办单导出

+ 25 - 23
src/views/todo/seats/accept/index.vue

@@ -807,7 +807,7 @@ const selectMap = (location: any) => {
 // 将当前工单添加到重复性事件中
 const repeatableEventDetails = ref<EmptyArrayType>([]);
 const orderAddRepeat = (row: any) => {
-	if (route.params.id) {
+	if (route.query.id) {
 		//编辑
 		if (row.isDeleted) {
 			//如果是添加
@@ -1165,33 +1165,35 @@ const loadBaseData = async () => {
 	}
 };
 // 如果是修改加载表单内容
-const historyParams = history.state;
 const loadForm = async () => {
 	state.formLoading = true;
-	//  historyParams.createBy  createBy 代表来源  tel:来电弹单  letter:互联网来信 默认表示手动创建
-	if (historyParams.createBy) {
-		state.createBy = historyParams.createBy;
-		if (historyParams.createBy === 'tel') {
-			//通话
-			state.ruleForm.sourceChannel = '电话'; //电话
-			state.ruleForm.sourceChannelCode = 'RGDH'; //电话
-			state.ruleForm.fromPhone = historyParams.fromTel; // 来电号码
-			state.ruleForm.contact = historyParams.fromTel; // 联系电话
-			state.ruleForm.callId = historyParams.telGuid; // 通话id
-			state.ruleForm.transferPhone = historyParams.transfer; // 转接来源
-			state.ruleForm.callAddress = historyParams.telArea; // 来电归属地
-			state.ruleForm.channel = {
-				// 来源渠道
-				dicDataValue: state.ruleForm.sourceChannelCode,
-				dicDataName: state.ruleForm.sourceChannel,
-			};
-			state.ruleForm.identityType = historyParams.identityType ? parseInt(historyParams.identityType) : 1; // 按键接收(1:市民 2:企业 3:智能应答)
+	//  route.query.createBy  createBy 代表来源  tel:来电弹单  letter:互联网来信 默认表示手动创建
+	state.createBy = route.query.createBy;
+	if (route.query.createBy === 'tel') {
+		//通话
+		state.ruleForm.sourceChannel = '电话'; //电话
+		state.ruleForm.sourceChannelCode = 'RGDH'; //电话
+		state.ruleForm.fromPhone = route.query.fromTel; // 来电号码
+		state.ruleForm.contact = route.query.fromTel; // 联系电话
+		state.ruleForm.callId = route.query.callId; // 通话id
+		state.ruleForm.transferPhone = route.query.transfer; // 转接来源
+		state.ruleForm.channel = {
+			// 来源渠道
+			dicDataValue: state.ruleForm.sourceChannelCode,
+			dicDataName: state.ruleForm.sourceChannel,
+		};
+		const isNumberIdentityType = parseInt(<string>route.query.identityType);
+		if ([1, 2].includes(isNumberIdentityType)) {
+			// 按键接收(1:市民 2:企业 3:智能应答)
+			state.ruleForm.identityType = isNumberIdentityType;
+		} else {
+			state.ruleForm.identityType = 1;
 		}
 	}
-	if (route.params.id) {
+	if (route.query.id) {
 		// 如果 有id
-		state.orderId = route.params.id;
-		const response = await orderDetail(route.params.id);
+		state.orderId = route.query.id;
+		const response = await orderDetail(route.query.id);
 		// 如果获取到id 调用查询详情
 		state.ruleForm = response.result;
 		state.ruleForm.files = transformFile(response.result.files);

+ 4 - 10
src/views/todo/seats/index.vue

@@ -290,22 +290,16 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 // 新增工单
 const onAddOrder = () => {
 	router.push({
-		name: 'orderAccept',
-		params: {
-			tagsViewName: `工单受理`,
-			callId: new Date().getTime(),
-		},
+		name: 'orderAccept'
 	});
 };
 // 编辑工单
 const onOrderEdit = (row: any) => {
 	router.push({
 		name: 'orderAccept',
-		params: {
-			tagsViewName: '工单受理-' + row.no,
-			id: row.id,
-			callId: '0',
-		},
+    query:{
+      id: row.id,
+    }
 	});
 };
 // 签收工单