Pārlūkot izejas kodu

reactor: 部门满意度统计调整某些字段顺序;市州通用-部门满意度明细增加“回访方式”查询条件; 市州通用-部门满意度列表明细增加查询条件等; 市州通用-退回待审批增加字段和查询条件;

zhangchong 3 mēneši atpakaļ
vecāks
revīzija
b1dac3cc7f

+ 26 - 1
src/views/business/return/audit.vue

@@ -23,6 +23,20 @@
 						:default-time="defaultTimeStartEnd"
 					/>
 				</el-form-item>
+				<el-form-item label="期满时间" prop="qmTime">
+					<el-date-picker
+						v-model="state.queryParams.qmTime"
+						type="datetimerange"
+						unlink-panels
+						range-separator="至"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						:shortcuts="shortcuts"
+						@change="handleQuery"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:default-time="defaultTimeStartEnd"
+					/>
+				</el-form-item>
 				<el-form-item label="审批状态" prop="State" v-if="state.queryParams.AuditState === '2'">
 					<el-select v-model="state.queryParams.State" placeholder="请选择审批状态" @change="handleQuery">
 						<el-option value="1" label="审批通过" />
@@ -52,7 +66,7 @@
 						:loading="state.loading"
 						v-auth="'business:return:audit:multiple'"
 						v-if="state.queryParams.AuditState === '1'"
-						>批量审批<span v-if="checkTable.length">({{checkTable.length}})</span>
+						>批量审批<span v-if="checkTable.length">({{ checkTable.length }})</span>
 					</el-button>
 				</template>
 			</vxe-toolbar>
@@ -92,6 +106,11 @@
 						<vxe-column field="sendBackStepName" title="退回节点" width="140"></vxe-column>
 						<vxe-column field="sendBackTimeDifference" title="退回时差(小时)" width="140"></vxe-column>
 					</template>
+					<vxe-column field="order.expiredTime" title="期满时间" width="150">
+						<template #default="{ row }">
+							{{ formatDate(row.order.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}
+						</template>
+					</vxe-column>
 					<vxe-column field="order.acceptorName" title="受理人" width="120"></vxe-column>
 					<vxe-column field="order.orgLevelOneName" title="一级部门" width="140"></vxe-column>
 					<vxe-column field="order.content" title="受理内容" min-width="200"></vxe-column>
@@ -162,6 +181,9 @@ const state = reactive<any>({
 		crTime: [],
 		CreationTimeStart: null,
 		CreationTimeEnd: null,
+		qmTime: [],
+		ExpiredTimeStart: null,
+		ExpiredTimeEnd: null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -182,6 +204,9 @@ const queryList = () => {
 	requestParams.value.CreationTimeStart = state.queryParams.crTime === null ? null : state.queryParams.crTime[0]; // 生成时间
 	requestParams.value.CreationTimeEnd = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	Reflect.deleteProperty(requestParams.value, 'crTime'); // 删除无用的参数
+	requestParams.value.ExpiredTimeStart = state.queryParams.qmTime === null ? null : state.queryParams.qmTime[0]; // 期满时间
+	requestParams.value.ExpiredTimeEnd = state.queryParams.qmTime === null ? null : state.queryParams.qmTime[1];
+	Reflect.deleteProperty(requestParams.value, 'qmTime'); // 删除无用的参数
 	requestParams.value.AuditState === '2' ? state.queryParams.State : null;
 	returnAuditList(requestParams.value)
 		.then((res) => {

+ 10 - 2
src/views/business/visit/dpSatisfied.vue

@@ -122,7 +122,7 @@
 		<visit-detail-com ref="visitDetailRef" @updateList="handleQuery" />
 		<!--	更多查询	-->
 		<el-drawer v-model="drawer" title="更多查询" size="500px">
-			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
+			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px" :disabled="state.loading">
 				<el-form-item label="办件态度" prop="AttitudeType" v-if="['ZiGong'].includes(themeConfig.appScope)">
 					<el-select v-model="state.queryParams.AttitudeType" placeholder="办件态度" @change="handleQuery">
 						<el-option :value="item.key" v-for="item in state.attitudeType" :key="item.key" :label="item.value"></el-option>
@@ -146,10 +146,15 @@
 					<el-input v-model="state.queryParams.VisitUser" placeholder="回访人姓名" clearable @keyup.enter="handleQuery" />
 				</el-form-item>
 				<el-form-item label="办件结果" prop="OrgProcessingResults">
-					<el-select v-model="state.queryParams.OrgProcessingResults" placeholder="请选择办件结果" clearable class="w100" @change="handleQuery">
+					<el-select v-model="state.queryParams.OrgProcessingResults" placeholder="请选择办件结果" clearable class="w100" @change="handleQuery">
 						<el-option v-for="item in state.visitSatisfaction" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
 					</el-select>
 				</el-form-item>
+				<el-form-item label="回访方式" prop="VisitType">
+					<el-select v-model="state.queryParams.VisitType" placeholder="请选择回访方式" clearable class="w100" @change="handleQuery">
+						<el-option v-for="item in state.visitType" :value="item.key" :key="item.key" :label="item.value" />
+					</el-select>
+				</el-form-item>
 				<el-form-item label="热点分类" prop="Hotspot">
 					<el-input v-model="state.queryParams.Hotspot" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
 				</el-form-item>
@@ -241,11 +246,13 @@ const state = reactive<any>({
 		SortField: null,
 		SortRule: null,
 		LevelOneOrg: null,
+		VisitType: null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 	attitudeType: [],
+	visitType: [],
 });
 // 排序
 const sortChange = (val: any) => {
@@ -312,6 +319,7 @@ const getBaseData = async () => {
 			visitSatisfaction: 'visitSatisfaction',
 			orgsOptions: 'orgsOptions',
 			attitudeType: 'attitudeType',
+			visitType: 'visitType',
 		};
 		for (const key in mappings) {
 			state[key] = res.result?.[mappings[key]] ?? [];

+ 16 - 10
src/views/statistics/department/detailSatisfied.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="statistics-department-satisfaction-detail-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline :disabled="state.loading">
 				<el-form-item label="来电主体" prop="TypeCode">
 					<el-select v-model="state.queryParams.TypeCode" placeholder="请选择来电主体" @change="handleQuery">
 						<el-option :value="0" label="全部" />
@@ -14,6 +14,15 @@
 						<el-option v-for="item in state.visitType" :value="item.key" :key="item.key" :label="item.value" />
 					</el-select>
 				</el-form-item>
+        <el-form-item label="省/市工单" prop="IsProvinceOrder">
+          <el-select v-model="state.queryParams.IsProvinceOrder" placeholder="请选择省/市工单" clearable @change="handleQuery">
+            <el-option :value="true" label="省工单" />
+            <el-option :value="false" label="市工单" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="回访内容" prop="ContentRetrieval">
+          <el-input v-model="state.queryParams.ContentRetrieval" placeholder="回访内容" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
 				<!--        <el-form-item label="超期类型" prop="ExpiredType">
 					<el-select v-model="state.queryParams.ExpiredType" placeholder="请选择超期类型" clearable @change="handleQuery">
 						<el-option  value="1" label="系统中超期"></el-option>
@@ -141,6 +150,7 @@ import { formatDate } from '@/utils/formatTime';
 import { defaultDate } from '@/utils/constants';
 import { useRoute } from 'vue-router';
 import { exportAssignment } from '@/utils/tools';
+import Other from "@/utils/other";
 
 // 引入组件
 const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit/components/Visit-detail.vue')); // 回访
@@ -156,11 +166,12 @@ const state = reactive<any>({
 		PageSize: 20,
 		TypeId: '1', //
 		LineNum: null,
-		crTime: defaultDate, // 时间默认今天开始到今天结束
 		TypeCode: 0,
 		SortField: null,
 		SortRule: null,
 		visitType: null,
+    IsProvinceOrder: null,
+    ContentRetrieval:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -192,15 +203,10 @@ const queryList = () => {
 		TypeId: routeQueryParams.TypeId,
 		LineNum: routeQueryParams.LineNum,
 		OrgCode: routeQueryParams.OrgCode,
+    IsOnlyMy: routeQueryParams.IsOnlyMy,
 		DateValue: routeQueryParams.DateValue,
-		PageIndex: state.queryParams.PageIndex,
-		PageSize: state.queryParams.PageSize,
-		IsOnlyMy: routeQueryParams.IsOnlyMy,
-		TypeCode: state.queryParams.TypeCode,
-		SortField: state.queryParams.SortField,
-		SortRule: state.queryParams.SortRule,
-		VisitType: state.queryParams.VisitType,
-		PickOrgCode: routeQueryParams.PickOrgCode,
+    PickOrgCode: routeQueryParams.PickOrgCode,
+		...state.queryParams,
 	};
 	departmentSatisfactionDetail(requestParams.value)
 		.then((res: any) => {

+ 21 - 2
src/views/statistics/department/detailSatisfiedList.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="statistics-department-satisfaction-detail-list-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline :disabled="state.loading">
 				<el-form-item prop="hfTime">
 					<statistical-time v-model="state.queryParams.hfTime" @change="handleQuery" ref="statisticalTimeRef" :disabled="state.loading"/>
 				</el-form-item>
@@ -122,12 +122,17 @@
 		<visit-detail-com ref="visitDetailRef" @updateList="queryList" />
 		<!--	更多查询	-->
 		<el-drawer v-model="drawer" title="更多查询" size="500px">
-			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
+			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px" :disabled="state.loading">
 				<el-form-item label="办件态度" prop="AttitudeType" v-if="['ZiGong'].includes(themeConfig.appScope)">
 					<el-select v-model="state.queryParams.AttitudeType" placeholder="办件态度" @change="handleQuery">
 						<el-option :value="item.key" v-for="item in state.attitudeType" :key="item.key" :label="item.value"></el-option>
 					</el-select>
 				</el-form-item>
+        <el-form-item label="回访方式" prop="VisitType">
+          <el-select v-model="state.queryParams.VisitType" placeholder="请选择回访方式" clearable class="w100" @change="handleQuery">
+            <el-option v-for="item in state.visitType" :value="item.key" :key="item.key" :label="item.value" />
+          </el-select>
+        </el-form-item>
 				<el-form-item label="受理时间" prop="crTime">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
@@ -199,6 +204,15 @@
 						<el-option :value="2" label="企业" />
 					</el-select>
 				</el-form-item>
+        <el-form-item label="省/市工单" prop="IsProvinceOrder">
+          <el-select v-model="state.queryParams.IsProvinceOrder" placeholder="请选择省/市工单" clearable @change="handleQuery">
+            <el-option :value="true" label="省工单" />
+            <el-option :value="false" label="市工单" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="回访内容" prop="ContentRetrieval">
+          <el-input v-model="state.queryParams.ContentRetrieval" placeholder="回访内容" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
 			</el-form>
 			<template #footer>
 				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
@@ -249,11 +263,15 @@ const state = reactive<any>({
 		SortRule:null,
 		OrgVisitStatisticsType:null,
 		Channel:null,
+    VisitType:null,
+    IsProvinceOrder: null,
+    ContentRetrieval:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 	channelOptions:[],
+  visitType:[]
 });
 // 排序
 const sortChange = (val: any) => {
@@ -317,6 +335,7 @@ const getBaseData = async () => {
 			orgsOptions: 'orgsOptions',
 			attitudeType: 'attitudeType',
 			channelOptions:'channelOptions',
+      visitType:'visitType',
 		};
 		for (const key in mappings) {
 			state[key] = res.result?.[mappings[key]] ?? [];

+ 38 - 23
src/views/statistics/department/dpSatisfied.vue

@@ -1,9 +1,9 @@
 <template>
 	<div class="statistics-department-dp-satisfied-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline :disabled="state.loading">
 				<el-form-item prop="hfTime">
-					<statistical-time v-model="state.queryParams.hfTime" @change="handleQuery" ref="statisticalTimeRef" :disabled="state.loading"/>
+					<statistical-time v-model="state.queryParams.hfTime" @change="handleQuery" ref="statisticalTimeRef" :disabled="state.loading" />
 				</el-form-item>
 				<el-form-item label="工单标题" prop="Keyword">
 					<el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
@@ -27,11 +27,11 @@
 			>
 				<template #buttons>
 					<el-button type="primary" @click="onJbExport" :loading="state.loading" :disabled="isChecked"
-					><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出
+						><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出
 					</el-button>
 					<el-popover :width="500" trigger="click">
 						<template #reference>
-							<el-button type="primary"  title="口径说明"><SvgIcon name="ele-QuestionFilled" class="mr5" />口径说明</el-button>
+							<el-button type="primary" title="口径说明"><SvgIcon name="ele-QuestionFilled" class="mr5" />口径说明</el-button>
 						</template>
 						<el-descriptions title="" :column="1" border>
 							<el-descriptions-item label="工单编码">工单编号</el-descriptions-item>
@@ -84,7 +84,7 @@
 					</vxe-column>
 					<vxe-column field="title" title="工单标题" width="200">
 						<template #default="{ row }">
-							<order-detail :order="{...row,id:row.orderId}" @updateList="queryList">{{ row.title }}</order-detail>
+							<order-detail :order="{ ...row, id: row.orderId }" @updateList="queryList">{{ row.title }}</order-detail>
 						</template>
 					</vxe-column>
 					<vxe-column field="visitUser" title="回访人" width="120"></vxe-column>
@@ -122,7 +122,7 @@
 		<visit-detail-com ref="visitDetailRef" @updateList="queryList" />
 		<!--	更多查询	-->
 		<el-drawer v-model="drawer" title="更多查询" size="500px">
-			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
+			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px" :disabled="state.loading">
 				<el-form-item label="受理时间" prop="crTime">
 					<el-date-picker
 						v-model="state.queryParams.crTime"
@@ -158,15 +158,19 @@
 				</el-form-item>
 				<el-form-item label="办件结果" prop="OrgProcessingResults" v-if="state.queryParams.AttitudeType === 1">
 					<el-select v-model="state.queryParams.OrgProcessingResults" placeholder="请选择办件结果" multiple clearable>
-						<el-option  v-for="item in state.visitSatisfaction" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName"></el-option>
+						<el-option
+							v-for="item in state.visitSatisfaction"
+							:value="item.dicDataValue"
+							:key="item.dicDataValue"
+							:label="item.dicDataName"
+						></el-option>
 					</el-select>
 				</el-form-item>
 				<el-form-item label="办件态度" prop="OrgProcessingResults" v-if="state.queryParams.AttitudeType === 2">
 					<el-select v-model="state.queryParams.OrgProcessingResults" placeholder="请选择办件态度" multiple clearable>
-						<el-option  v-for="item in state.visitMananer" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName"></el-option>
+						<el-option v-for="item in state.visitMananer" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName"></el-option>
 					</el-select>
 				</el-form-item>
-
 				<el-form-item label="热点分类" prop="Hotspot">
 					<el-input v-model="state.queryParams.Hotspot" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
 				</el-form-item>
@@ -205,6 +209,15 @@
 						<el-option :value="2" label="企业" />
 					</el-select>
 				</el-form-item>
+				<el-form-item label="省/市工单" prop="IsProvinceOrder">
+					<el-select v-model="state.queryParams.IsProvinceOrder" placeholder="请选择省/市工单" clearable @change="handleQuery">
+						<el-option :value="true" label="省工单" />
+						<el-option :value="false" label="市工单" />
+					</el-select>
+				</el-form-item>
+        <el-form-item label="回访内容" prop="ContentRetrieval">
+          <el-input v-model="state.queryParams.ContentRetrieval" placeholder="回访内容" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
 			</el-form>
 			<template #footer>
 				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
@@ -220,7 +233,7 @@ import { departmentSatisfactionDetailBase, departmentSatisfactionList, departmen
 import { formatDate } from '@/utils/formatTime';
 import { defaultDate, defaultTimeStartEnd, shortcuts } from '@/utils/constants';
 import Other from '@/utils/other';
-import {  exportAssignment } from '@/utils/tools';
+import { exportAssignment } from '@/utils/tools';
 
 // 引入组件
 const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit/components/Visit-detail.vue')); // 回访
@@ -235,7 +248,7 @@ const state = reactive<any>({
 		PageIndex: 1,
 		PageSize: 20,
 		hfTime: defaultDate, // 回访事件
-		AttitudeType:1, // 默认办件结果
+		AttitudeType: 1, // 默认办件结果
 		VisitTimeStart: null,
 		VisitTimeEnd: null,
 		crTime: [],
@@ -248,18 +261,20 @@ const state = reactive<any>({
 		OrgProcessingResults: null,
 		OrgId: null,
 		TypeCode: 0,
-		SortField:null,
-		SortRule:null,
-		OrgVisitStatisticsType:null,
-		Channel:null,
+		SortField: null,
+		SortRule: null,
+		OrgVisitStatisticsType: null,
+		Channel: null,
+		IsProvinceOrder: null,
+    ContentRetrieval:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
-	attitudeType:[],
-	channelOptions:[],
-	visitSatisfaction:[], // 办件结果
-	visitMananer:[], // 办件态度
+	attitudeType: [],
+	channelOptions: [],
+	visitSatisfaction: [], // 办件结果
+	visitMananer: [], // 办件态度
 });
 // 排序
 const sortChange = (val: any) => {
@@ -269,9 +284,9 @@ const sortChange = (val: any) => {
 	queryList();
 };
 // 选择查询类型
-const selectType = ()=>{
+const selectType = () => {
 	drawerRuleFormRef.value.resetFields('OrgProcessingResults');
-}
+};
 /** 搜索按钮操作 */
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
@@ -326,8 +341,8 @@ const getBaseData = async () => {
 			visitSatisfaction: 'visitSatisfaction',
 			orgsOptions: 'orgsOptions',
 			attitudeType: 'attitudeType',
-			channelOptions:'channelOptions',
-			visitMananer:'visitMananer',
+			channelOptions: 'channelOptions',
+			visitMananer: 'visitMananer',
 		};
 		for (const key in mappings) {
 			state[key] = res.result?.[mappings[key]] ?? [];

+ 2 - 2
src/views/statistics/department/satisfied.vue

@@ -80,9 +80,9 @@
 							<span v-else>{{ scope.row.orgName }}</span>
 						</template>
 					</vxe-column>
+          <vxe-column field="orgTypeText" title="部门类别" min-width="100" fixed="left"> </vxe-column>
+          <vxe-column field="totalSumRateText" title="总满意率" min-width="120"> </vxe-column>
           <vxe-column field="totalSumCount" title="小计" min-width="90" fixed="left"> </vxe-column>
-					<vxe-column field="orgTypeText" title="部门类别" min-width="100" fixed="left"> </vxe-column>
-					<vxe-column field="totalSumRateText" title="总满意率" min-width="120"> </vxe-column>
 					<vxe-column field="verySatisfiedCount" title="非常满意"  min-width="100">
 						<template #default="scope">
 							<el-button type="primary" link @click="linkDetail(scope.row.verySatisfiedKey, scope.row)" v-if="!['市直合计', '区县合计'].includes(scope.row.orgName)">