Эх сурвалжийг харах

reactor:112 市州通用-延期列表增加查询条件;111 工单详情中,某些信息需对部门用户隐藏;110 市州通用-【待回访】增加查询条件;103 回访重办需取消话务部节点等优化;

zhangchong 5 сар өмнө
parent
commit
4cd769bde6

+ 80 - 46
src/components/ProcessAudit/ZGProcess.vue

@@ -18,7 +18,7 @@
 		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" v-loading="state.loading">
 			<slot name="header"></slot>
 			<el-row :gutter="10">
-<!--								<el-col>
+				<!--								<el-col>
 					<el-form-item label="当前选择的流程">
 						{{ seatTopaidan ? '话务部到派单组' : '' }}
 						{{ seatToOrgOne ? '话务部到一级部门' : '' }}
@@ -337,29 +337,29 @@
 					</template>
 					<!-- 派单组流转到归档  派单组到一级部门 -->
 					<template v-if="paidanToOrgOne || paidanToEnd">
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="市州转办" prop="transpond" :rules="[{ required: false, message: '请选择市州转办', trigger: 'change' }]">
-									<el-select v-model="state.ruleForm.transpond" placeholder="请选择市州转办" class="w100" @change="changeTransPond">
-										<el-option :key="true" label="是" :value="true" />
-										<el-option :key="false" label="否" :value="false" />
-									</el-select>
-								</el-form-item>
-							</el-col>
-							<!-- 必填,若“是否市州互转”为“是”,则展示选择市州选择框 -->
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.transpond">
-								<el-form-item prop="transpondCityObj" label-width="10px" :rules="[{ required: true, message: '请选择转办市州', trigger: 'change' }]">
-									<el-select
-										v-model="state.ruleForm.transpondCityObj"
-										placeholder="请选择转办市州"
-										class="w100"
-										value-key="dicDataValue"
-										@change="changeTranspondCity"
-										clearable
-									>
-										<el-option v-for="item in transpondCity" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
-									</el-select>
-								</el-form-item>
-							</el-col>
+						<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+							<el-form-item label="市州转办" prop="transpond" :rules="[{ required: false, message: '请选择市州转办', trigger: 'change' }]">
+								<el-select v-model="state.ruleForm.transpond" placeholder="请选择市州转办" class="w100" @change="changeTransPond">
+									<el-option :key="true" label="是" :value="true" />
+									<el-option :key="false" label="否" :value="false" />
+								</el-select>
+							</el-form-item>
+						</el-col>
+						<!-- 必填,若“是否市州互转”为“是”,则展示选择市州选择框 -->
+						<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.transpond">
+							<el-form-item prop="transpondCityObj" label-width="10px" :rules="[{ required: true, message: '请选择转办市州', trigger: 'change' }]">
+								<el-select
+									v-model="state.ruleForm.transpondCityObj"
+									placeholder="请选择转办市州"
+									class="w100"
+									value-key="dicDataValue"
+									@change="changeTranspondCity"
+									clearable
+								>
+									<el-option v-for="item in transpondCity" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
+								</el-select>
+							</el-form-item>
+						</el-col>
 					</template>
 					<!-- 派单组到一级部门  -->
 					<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="paidanToOrgOne">
@@ -370,7 +370,7 @@
 						</el-form-item>
 					</el-col>
 					<!--  一级部门流转到归档 或者 部门流转至部门汇总  并且不能是会签-->
-					<template v-if="(orgOneToEnd || orgToOrgSummary) && !isCountersign">
+					<template v-if="(orgOneToEnd || orgToOrgSummary) && !isCountersign && ['ZiGong'].includes(themeConfig.appScope)">
 						<el-col :span="24">
 							<el-form-item prop="checkedCities" :rules="[{ required: true, message: '至少选择一项', trigger: 'change' }]">
 								<el-checkbox-group v-model="state.ruleForm.checkedCities" @change="changeCheckBox">
@@ -465,9 +465,7 @@
 		</el-form>
 		<template #footer>
 			<span class="dialog-footer">
-				<el-text type="danger" class="mr15" tag="b" v-if="showTempSave"
-					>温馨提示:临时保存只保存{{ state.inputPlaceholder }}</el-text
-				>
+				<el-text type="danger" class="mr15" tag="b" v-if="showTempSave">温馨提示:临时保存只保存{{ state.inputPlaceholder }}</el-text>
 				<el-button @click="closeDialog" class="default-button">取消</el-button>
 				<el-button type="primary" @click="handleTempSave" :loading="state.loading" v-if="showTempSave">临时保存</el-button>
 				<template v-if="seatTopaidan || seatToOrgOne">
@@ -514,6 +512,7 @@ import {
 } from '@/api/business/order';
 import { orderPrevious, workflowNextSteps, workflowNextStepsByOrder, workflowNextStepsByOrderInstead } from '@/api/system/workflow';
 import { useAppConfig } from '@/stores/appConfig';
+import { useThemeConfig } from '@/stores/themeConfig';
 
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
@@ -566,13 +565,16 @@ const state = reactive<any>({
 	orderDetail: {}, // 工单详情
 });
 const ruleFormRef = ref<RefType>(); //表单组件
-const handelArr = ['工单办理','工单代办','工单受理']; // 处于办理状态的流程
+const handelArr = ['工单办理', '工单代办', '工单受理']; // 处于办理状态的流程
 const returnArr = ['工单退回']; // 退回流程 (退回流程不需要展示其他 只需要填写意见和附件即可)
 const appConfigStore = useAppConfig();
 const { AppConfigInfo } = storeToRefs(appConfigStore); // 系统配置信息
-const showTempSave = computed(()=>{ // 是否显示临时办理
-	return ['工单办理','工单代办','工单受理'].includes(state.processType)
-})
+const showTempSave = computed(() => {
+	// 是否显示临时办理
+	return ['工单办理', '工单代办', '工单受理'].includes(state.processType);
+});
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 // 打开弹窗
 const openDialog = async (val: any) => {
 	console.log(val);
@@ -592,7 +594,7 @@ const openDialog = async (val: any) => {
 		state.orderDetail = orderDetail ?? {}; // 工单详情
 		state.ruleForm.isStepUrgent = orderDetail.isStepUrgent; // 是否紧急
 		state.ruleForm.isEvasive = orderDetail.isEvasive; // 是否推诿
-		state.ruleForm.isInactively = orderDetail.isInactively;// 是否不积极
+		state.ruleForm.isInactively = orderDetail.isInactively; // 是否不积极
 		const { dialogTitle, inputPlaceholder, annexName, classify } = extra ?? {};
 		state.dialogTitle = dialogTitle ?? '提交流程'; // 流程标题
 		state.annexName = annexName ?? '办理附件'; // 附件标题
@@ -687,7 +689,8 @@ const handleResult = (res: any) => {
 		state.ruleForm.nextStepCode = '';
 		state.ruleForm.nextStepName = '';
 	}
-	if (res.result.opinion) {// 如果有汇总意见没有临时保存 取汇总意见 临时保存会覆盖汇总意见
+	if (res.result.opinion) {
+		// 如果有汇总意见没有临时保存 取汇总意见 临时保存会覆盖汇总意见
 		setTimeout(() => {
 			state.ruleForm.opinion = res.result.opinion;
 		}, 100);
@@ -721,7 +724,12 @@ const paidanToEnd = computed(() => {
 });
 // 一级部门到归档
 const orgOneToEnd = computed(() => {
-	return currentParams.value.currentStepBusinessType === 2 && currentParams.value.currentStepType !== 3 && currentParams.value.currentOrgLevel === 1 && selectNext.value.key === 'end';
+	return (
+		currentParams.value.currentStepBusinessType === 2 &&
+		currentParams.value.currentStepType !== 3 &&
+		currentParams.value.currentOrgLevel === 1 &&
+		selectNext.value.key === 'end'
+	);
 });
 // 部门流转到部门
 const orgToOrg = computed(() => {
@@ -729,7 +737,12 @@ const orgToOrg = computed(() => {
 });
 // 部门到部门汇总
 const orgToOrgSummary = computed(() => {
-	return currentParams.value.currentStepBusinessType === 2 && currentParams.value.currentStepType !== 3 && selectNext.value.businessType === 2 && selectNext.value.stepType === 3;
+	return (
+		currentParams.value.currentStepBusinessType === 2 &&
+		currentParams.value.currentStepType !== 3 &&
+		selectNext.value.businessType === 2 &&
+		selectNext.value.stepType === 3
+	);
 });
 // 部门流转到部门领导
 const orgToOrgLeader = computed(() => {
@@ -741,11 +754,21 @@ const orgReturnOrg = computed(() => {
 });
 // 部门汇总到部门汇总
 const orgSummaryToOrgSummary = computed(() => {
-	return currentParams.value.currentStepBusinessType === 2 && currentParams.value.currentStepType === 3 && selectNext.value.businessType === 2 && selectNext.value.stepType === 3;
+	return (
+		currentParams.value.currentStepBusinessType === 2 &&
+		currentParams.value.currentStepType === 3 &&
+		selectNext.value.businessType === 2 &&
+		selectNext.value.stepType === 3
+	);
 });
 // 部门汇总到归档
 const orgSummaryToEnd = computed(() => {
-	return currentParams.value.currentStepBusinessType === 2 && currentParams.value.currentStepType === 3 && currentParams.value.currentOrgLevel === 1 && selectNext.value.key === 'end';
+	return (
+		currentParams.value.currentStepBusinessType === 2 &&
+		currentParams.value.currentStepType === 3 &&
+		currentParams.value.currentOrgLevel === 1 &&
+		selectNext.value.key === 'end'
+	);
 });
 // 判断当前节点是否在会签中 0中心会签 1部门会签
 const isCountersign = computed(() => {
@@ -763,7 +786,7 @@ const isNotShowNextHandlers = ref(false);
 const restFormData = () => {
 	state.ruleForm.nextHandlers = [];
 	state.ruleForm.nextHandler = {};
-/*	state.ruleForm.isStepUrgent = null;
+	/*	state.ruleForm.isStepUrgent = null;
 	state.ruleForm.isEvasive = null;
 	state.ruleForm.isInactively = null;*/
 	state.ruleForm.leaderSMSKey = null;
@@ -791,6 +814,8 @@ const restFormData = () => {
 	levelThreeStepOptions.value = [];
 	levelThreeHandleOptions.value = [];
 };
+// 办理对象是否必填
+const nextHandlersRequired = ref<Boolean>(false);
 // 流程选择下一环节
 const selectNext = ref<EmptyObjectType>({}); // 选择的下一个节点
 const selectNextStep = (val: any) => {
@@ -819,6 +844,8 @@ const selectNextStep = (val: any) => {
 		// 如果办理对象只有一个默认选中
 		state.ruleForm.nextHandlers = [items[0]];
 	}
+	// 如果是泸州话务部到派单组需要必填办理对象
+	nextHandlersRequired.value = ['LuZhou'].includes(themeConfig.value.appScope) && seatTopaidan.value;
 
 	// 以下是默认需要吧短信勾上的场景 话务到部门、派单到一级部门、部门到部门、部门到汇总、部门到部门领导  部门退回到部门
 	state.ruleForm.isSms =
@@ -828,7 +855,13 @@ const selectNextStep = (val: any) => {
 		seatToOrgOne.value || paidanToOrgOne.value || orgToOrg.value || orgToOrgSummary.value || orgToOrgLeader.value || orgReturnOrg.value;
 	// 是否不展示办理对象  (话务部到一级部门 派单组到一级部门 派单到归档 一级部门到归档 部门到部门 部门到汇总)
 	isNotShowNextHandlers.value =
-		seatToOrgOne.value || paidanToOrgOne.value || paidanToEnd.value || orgOneToEnd.value || orgToOrg.value || orgToOrgSummary.value || orgSummaryToEnd.value;
+		seatToOrgOne.value ||
+		paidanToOrgOne.value ||
+		paidanToEnd.value ||
+		orgOneToEnd.value ||
+		orgToOrg.value ||
+		orgToOrgSummary.value ||
+		orgSummaryToEnd.value;
 };
 
 //  会签是否可用 (多个办理对象,并且配置可以会签)
@@ -1100,8 +1133,7 @@ const selectOrgLevelThree = (val: any) => {
 	}
 };
 const selectOrgLevelThreeHandler = () => {};
-// 办理对象是否必填
-const nextHandlersRequired = ref<Boolean>(false);
+
 /*watch(
 	() => state.ruleForm.nextStepCode,
 	(val) => {
@@ -1114,12 +1146,14 @@ const nextHandlersRequired = ref<Boolean>(false);
 /*	<el-checkbox v-model="state.ruleForm.realIsContacted" label="已与市民电话联系,确认办理结果" />
 								<el-checkbox v-model="state.ruleForm.realContactLocale" label="已赴现场处置,将处理结果告知市民" />
 								<el-checkbox v-model="state.ruleForm.isOther" label="其他" />*/
-const changeCheckBox = (val:any)=>{
+const changeCheckBox = (val: any) => {
 	state.ruleForm.realIsContacted = val.includes('0');
 	state.ruleForm.realContactLocale = val.includes('1');
 	state.ruleForm.isOther = val.includes('2');
-	console.log(`是否已与市民电话联系,确认办理结果:${val.includes('0')},是否已赴现场处置,将处理结果告知市民${val.includes('1')},是否其他${val.includes('2')}`)
-}
+	console.log(
+		`是否已与市民电话联系,确认办理结果:${val.includes('0')},是否已赴现场处置,将处理结果告知市民${val.includes('1')},是否其他${val.includes('2')}`
+	);
+};
 // 设置抽屉
 const dialogRef = ref<RefType>();
 const mouseup = () => {
@@ -1263,7 +1297,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 					});
 				break;
 			case '工单退回':
-				const requestReturn = { ...submitObj, files: handleFiles.value }
+				const requestReturn = { ...submitObj, files: handleFiles.value };
 				orderPrevious(requestReturn)
 					.then(() => {
 						afterSubmit('orderProcessSuccess', true, '退回申请成功');

+ 55 - 9
src/views/business/delay/index.vue

@@ -72,9 +72,7 @@
 						</el-form-item>
 						<el-form-item>
 							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-							<el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading">
-								<SvgIcon name="ele-Refresh" class="mr5" />重置
-							</el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
 						</el-form-item>
 					</el-form>
 				</template>
@@ -154,9 +152,7 @@
 						</el-form-item>
 						<el-form-item>
 							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-							<el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading">
-								<SvgIcon name="ele-Refresh" class="mr5" />重置
-							</el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
 						</el-form-item>
 					</el-form>
 				</template>
@@ -176,6 +172,40 @@
 		<delay-detail-com ref="delayDetailRef" @updateList="queryList" />
 		<!--  延期修改  -->
 		<delay-edit ref="delayEditRef" @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-item label="当前节点" prop="CurrentStepName">
+					<el-select v-model="state.queryParams.CurrentStepName" placeholder="当前节点" @change="handleQuery" clearable>
+						<el-option v-for="item in state.visitTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
+					</el-select>
+				</el-form-item>
+				<el-form-item label="审批人" prop="ActualHandlerName">
+					<el-input v-model.trim="state.queryParams.ActualHandlerName" placeholder="审批人" clearable @keyup.enter="handleQuery" />
+				</el-form-item>
+				<el-form-item label="一级部门" prop="OrgLevelOneName">
+					<el-input v-model="state.queryParams.OrgLevelOneName" placeholder="一级部门" clearable @keyup.enter="handleQuery" />
+				</el-form-item>
+				<el-form-item label="延期申请时间" prop="sqTime">
+					<el-date-picker
+						v-model="state.queryParams.sqTime"
+						type="datetimerange"
+						unlink-panels
+						range-separator="至"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						:shortcuts="shortcuts"
+						@change="handleQuery"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:default-time="defaultTimeStartEnd"
+					/>
+				</el-form-item>
+			</el-form>
+			<template #footer>
+				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+				<el-button @click="resetQuery(drawerRuleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
+			</template>
+		</el-drawer>
 	</div>
 </template>
 <script setup lang="tsx" name="orderDelay">
@@ -185,6 +215,8 @@ import { formatDate } from '@/utils/formatTime';
 import { delayBaseData, delayDetail, delayList } from '@/api/business/delay';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { storeToRefs } from 'pinia';
+import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+import Other from '@/utils/other';
 // 引入组件
 const DelayDetailCom = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-detail.vue')); // 延期详情
 const DelayEdit = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-edit.vue')); // 延期修改
@@ -316,7 +348,7 @@ const columns1 = ref<any[]>([
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 90, align: 'center' },
 ]);
 // 定义变量内容
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
@@ -325,13 +357,18 @@ const state = reactive({
 		DelayState: null,
 		DataScope: 1, // 默认我的
 		QueryDelayState: 0, // 快捷查询
+		CurrentStepName: null, // 当前节点
+		ActualHandlerName: null, // 审批人
+		OrgLevelOneName: null, // 一级部门
+		sqTime: [], // 延期申请时间
+		StartCreationTime: null,
+		EndCreationTime: null,
 	},
 	tableData: [], //表格
 	loading: false, // 加载
 	total: 0, // 总数
 	currentRow: {}, // 当前行
 });
-const ruleFormRef = ref<RefType>(); // 表单ref
 // 获取查询条件基础信息
 const delayStateOptions = ref<EmptyArrayType>([]); // 延期状态
 const getBaseData = async () => {
@@ -344,9 +381,14 @@ const handleQuery = () => {
 	queryList();
 };
 /** 获取列表 */
+const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {
 	state.loading = true;
-	delayList(state.queryParams)
+	requestParams.value = Other.deepClone(state.queryParams);
+	requestParams.value.StartCreationTime = state.queryParams.sqTime === null ? null : state.queryParams.sqTime[0];
+	requestParams.value.EndCreationTime = state.queryParams.sqTime === null ? null : state.queryParams.sqTime[1];
+	Reflect.deleteProperty(requestParams.value, 'sqTime');
+	delayList(requestParams.value)
 		.then((res: any) => {
 			state.tableData = res.result?.items ?? [];
 			state.total = res.result?.total ?? 0;
@@ -358,9 +400,13 @@ const queryList = () => {
 };
 
 /** 重置按钮操作 */
+const drawerRuleFormRef = ref();
+const drawer = ref(false);
+const ruleFormRef = ref<RefType>(); // 表单ref
 const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
+	ruleFormRef.value?.resetFields();
 	queryList();
 };
 const delayDetailRef = ref<RefType>();

+ 13 - 7
src/views/business/visit/components/Visit-redo.vue

@@ -1,6 +1,6 @@
 <template>
 	<el-dialog v-model="state.dialogVisible" draggable :title="dialogTitle" width="50%" append-to-body destroy-on-close @close="close">
-		<div class="collapse-container">
+		<div class="collapse-container" v-loading="state.loading">
 			<el-form ref="ruleFormRef" :model="state.ruleForm">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -64,7 +64,7 @@
 	</el-dialog>
 </template>
 <script setup lang="ts" name="SpecialDialog">
-import { reactive, ref, defineAsyncComponent } from 'vue';
+import { reactive, ref, defineAsyncComponent, nextTick } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { publishReturnBaseData, publishReturn } from '@/api/business/publish';
 import { commonEnum } from '@/utils/constants';
@@ -112,6 +112,12 @@ const openDialog = async (val: any, title?: string) => {
 		timeType.value = baseRes.result?.specialTimeType ?? [];
 		steps.value = baseRes.result?.step?.steps ?? [];
 		specialReason.value = baseRes.result?.specialReason ?? [];
+		if (baseRes.result.defaultStepKey) {
+			await nextTick(() => {
+				// 如果有默认值需要默认选中
+				state.ruleForm.nextStepCode = baseRes.result.defaultStepKey;
+			});
+		}
 		if (title) dialogTitle.value = title;
 	} catch (e) {
 		console.log(e);
@@ -140,7 +146,7 @@ const selectNextCode = (val: any) => {
 	state.ruleForm.flowDirection = next.flowDirection;
 	state.ruleForm.handlerType = next.handlerType;
 	state.ruleForm.stepType = next.stepType;
-	if(['ZiGong'].includes(themeConfig.value.appScope)){
+	if (['ZiGong'].includes(themeConfig.value.appScope)) {
 		orgId.value = next.handler.orgId;
 		orgName.value = next.handler.orgName;
 	}
@@ -151,7 +157,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 	formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		state.loading = true;
-		let reTransactError:any;
+		let reTransactError: any;
 		if (['ZiGong'].includes(themeConfig.value.appScope)) {
 			reTransactError = [
 				{
@@ -159,8 +165,8 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 					orgName: orgName.value,
 					errorId: state.ruleForm.error.dicDataValue,
 					errorName: state.ruleForm.error.dicDataName,
-				}
-			]
+				},
+			];
 		}
 		const request = {
 			workflowId: state.orderDetail.workflowId,
@@ -176,7 +182,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 			handlerType: state.ruleForm.handlerType,
 			stepType: state.ruleForm.stepType,
 			reTransactError,
-			specialType:2, // 1特提 2重办 3退回
+			specialType: 2, // 1特提 2重办 3退回
 		};
 		publishReturn(request)
 			.then(() => {

+ 41 - 7
src/views/business/visit/todo.vue

@@ -76,24 +76,30 @@
 						@click="messageVisit"
 						:disabled="!scope.isSelected"
 						v-auth="'business:visit:todo:message'"
-						v-if="['ZiGong'].includes(themeConfig.appScope)"
+						v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)"
 					>
-						<SvgIcon name="ele-Message" class="mr5" />短信回访<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span></el-button
+						<SvgIcon name="ele-Message" class="mr5" />短信回访<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
+						></el-button
 					>
 					<el-button
 						type="primary"
 						@click="batchVisit"
 						:disabled="!scope.isSelected"
 						v-auth="'business:visit:todo:batch'"
-						v-if="['ZiGong'].includes(themeConfig.appScope)"
+						v-if="['ZiGong', 'LuZhou'].includes(themeConfig.appScope)"
 					>
-						<SvgIcon name="ele-DocumentCopy" class="mr5" />批量回访<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span></el-button
+						<SvgIcon name="ele-DocumentCopy" class="mr5" />批量回访<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
+						></el-button
 					>
-<!--					<el-button type="primary" @click="multiplePeople" :disabled="!scope.isSelected" v-auth="'business:visit:todo:multiplePeople'">
+					<!--					<el-button type="primary" @click="multiplePeople" :disabled="!scope.isSelected" v-auth="'business:visit:todo:multiplePeople'">
 						<SvgIcon name="ele-User" class="mr5" />分配回访人</el-button
 					>-->
 					<el-button type="primary" @click="onMigration" v-auth="'business:visit:todo:migration'" :disabled="!scope.isSelected">
-						<SvgIcon name="ele-Rank" class="mr5" />平级移动<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
+						<SvgIcon name="ele-Rank" class="mr5" />平级移动<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
+						>
 					</el-button>
 				</template>
 				<template #title="{ row }">
@@ -123,6 +129,9 @@
 				<el-form-item label="回访人" prop="EmployeeName">
 					<el-input v-model="state.queryParams.EmployeeName" placeholder="回访人" clearable @keyup.enter="handleQuery" />
 				</el-form-item>
+				<el-form-item label="接办部门" prop="ActualHandleOrgName">
+					<el-input v-model="state.queryParams.ActualHandleOrgName" placeholder="接办部门" clearable @keyup.enter="handleQuery" />
+				</el-form-item>
 				<el-form-item label="归档类型" prop="FiledType">
 					<el-select v-model="state.queryParams.FiledType" placeholder="请选择归档类型" @change="handleQuery" clearable>
 						<el-option label="中心归档" value="10" />
@@ -135,6 +144,20 @@
 						<el-option label="否" value="false" />
 					</el-select>
 				</el-form-item>
+				<el-form-item label="发布时间" prop="fbTime">
+					<el-date-picker
+						v-model="state.queryParams.fbTime"
+						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="VisitType">
 					<el-select v-model="state.queryParams.VisitType" placeholder="请选择回访方式" @change="handleQuery" clearable>
 						<el-option v-for="item in state.visitTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
@@ -176,6 +199,8 @@ import { visitList } from '@/api/todo/visit';
 import { visitSearchBaseData, visitSendSms } from '@/api/business/visit';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { storeToRefs } from 'pinia';
+import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
+import Other from '@/utils/other';
 // 引入组件
 const VisitDetail = defineAsyncComponent(() => import('/src/views/business/visit/components/Visit-detail.vue')); // 回访
 const AssignReturnVisitors = defineAsyncComponent(() => import('@/views/business/visit/components/Assign-return-visitors.vue')); // 分配回访人
@@ -272,6 +297,10 @@ const state = reactive<any>({
 		IsProvince: null, // 是否省工单
 		FromPhone: null, //来电号码
 		Contact: null, //联系电话
+		ActualHandleOrgName:null, // 接办部门
+		fbTime:[], // 发布时间
+		StartPublishTime:null,
+		EndPublishTime:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -294,9 +323,14 @@ const handleQuery = () => {
 	queryList();
 };
 /** 获取列表 */
+const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {
 	state.loading = true;
-	visitList(state.queryParams)
+	requestParams.value = Other.deepClone(state.queryParams);
+	requestParams.value.StartPublishTime = state.queryParams.fbTime === null ? null : state.queryParams.fbTime[0];
+	requestParams.value.EndPublishTime = state.queryParams.fbTime === null ? null : state.queryParams.fbTime[1];
+	Reflect.deleteProperty(requestParams.value, 'fbTime');
+	visitList(requestParams.value)
 		.then((res: any) => {
 			state.tableData = res.result?.items ?? [];
 			state.total = res.result?.total ?? 0;

+ 1 - 1
src/views/todo/seats/index.vue

@@ -107,7 +107,7 @@
 				</vxe-table>
 			</div>
 			<div class="flex-end" style="align-items: center">
-				<span v-loading="totalLoading" class="mr10">共 {{ totalCount }} 条</span>
+				<el-text class="mr10" v-loading="state.loading">共 {{ totalCount }} 条</el-text>
 				<el-pagination
 					layout="prev, pager, next"
 					:total="state.total"