Przeglądaj źródła

reactor:327 【综合查询】优化;323 根据热点或来源需自动匹配【推送分类】;319 【延期功能】优化;324 关于【甄别】的优化;328 【发布待办】页面新增查询条件;

zhangchong 7 miesięcy temu
rodzic
commit
9ad96bc08d

+ 11 - 1
src/api/business/discern.ts

@@ -78,11 +78,21 @@ export const discernApproveParams = (workflowId:string) => {
  * @description 甄别修改
  * @param {object} data
  */
-
 export const discernUpdate = (data: object) => {
 	return request({
 		url: `/api/v1/Order/screen/initial_nextFlow`,
 		method: 'post',
 		data,
 	});
+}
+/**
+ * @description 甄别修改提起时限
+ * @param {object} data
+ */
+export const discernUpdateTime = (data: object) => {
+	return request({
+		url: `/api/v1/Order/order_screen_endtime`,
+		method: 'put',
+		data,
+	});
 }

+ 28 - 7
src/components/ProcessAudit/index.vue

@@ -42,7 +42,18 @@
 							<el-form-item label="当前期满时间"> {{ formatDate(state.orderDetail.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 						</el-col>
 						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" v-loading="state.loading">
-							<el-form-item label="延期申请数量" prop="timeLimitCount" :rules="[{ required: true, message: '请填写延期申请数量', trigger: 'blur' }]">
+							<el-form-item prop="timeLimitCount" :rules="[{ required: true, message: '请填写延期申请数量', trigger: 'blur' }]" label-width="130px">
+								<template #label>
+									<div style="height: 34px; display: flex; align-items: center">
+										延期申请数量
+										<el-tooltip placement="top-start">
+											<SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
+											<template #content>
+												延期申请数量为1-{{ AppConfigInfo.applyDelayTime }}
+											</template>
+										</el-tooltip>
+									</div>
+								</template>
 								<el-row :gutter="10" class="w100">
 									<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 										<el-input-number
@@ -51,7 +62,7 @@
 											controls-position="right"
 											@input="computeTime"
 											:min="1"
-											:max="99"
+											:max="AppConfigInfo.applyDelayTime"
 											class="w100"
 										></el-input-number>
 									</el-col>
@@ -464,16 +475,26 @@
 							<el-form-item label="当前期满时间"> {{ formatDate(state.orderDetail.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 						</el-col>
 						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" v-loading="state.loading">
-							<el-form-item label="延期申请数量" prop="timeLimitCount" :rules="[{ required: true, message: '请填写延期申请数量', trigger: 'blur' }]">
+							<el-form-item prop="timeLimitCount" :rules="[{ required: true, message: '请填写延期申请数量', trigger: 'blur' }]" label-width="130px">
+								<template #label>
+									<div style="height: 34px; display: flex; align-items: center">
+										延期申请数量
+										<el-tooltip placement="top-start">
+											<SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
+											<template #content>
+												延期申请数量为1-{{ AppConfigInfo.applyDelayTime }}
+											</template>
+										</el-tooltip>
+									</div>
+								</template>
 								<el-row :gutter="10" class="w100">
 									<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 										<el-input-number
 											placeholder="延期申请数量"
 											v-model="state.delayForm.timeLimitCount"
 											controls-position="right"
-											@input="computeTime"
 											:min="1"
-											:max="99"
+											:max="AppConfigInfo.applyDelayTime"
 											class="w100"
 										></el-input-number>
 									</el-col>
@@ -484,7 +505,7 @@
 											prop="timeLimitUnit"
 											:rules="[{ required: true, message: '请选择延期申请单位', trigger: 'change' }]"
 										>
-											<el-select disabled v-model="state.delayForm.timeLimitUnit" placeholder="延期申请单位" @change="computeTime">
+											<el-select disabled v-model="state.delayForm.timeLimitUnit" placeholder="延期申请单位">
 												<el-option v-for="item in timeType" :value="item.key" :key="item.key" :label="item.value" />
 											</el-select>
 										</el-form-item>
@@ -887,7 +908,7 @@
 				<el-button class="default-button" @click="onNext" :loading="state.loading" v-if="activeStep === 0 && showStepsArr.includes(state.processType)"
 				>下一步</el-button
 				>
-						<el-button type="primary" @click="handleTempSave" :loading="state.loading" v-if="activeStep === 1">临时保存</el-button>
+<!--						<el-button type="primary" @click="handleTempSave" :loading="state.loading" v-if="activeStep === 1">临时保存</el-button>-->
 				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading" v-if="activeStep === 1">办理</el-button>
 				</template>
 			</span>

+ 0 - 1
src/layout/navBars/breadcrumb/zgTel.vue

@@ -307,7 +307,6 @@ import { useTimeoutFn } from '@vueuse/shared/index';
 import { useGlobalState } from '@/utils/callCenter';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { getDataByCode } from '@/api/system/dict';
-import signalR from '@/utils/signalR';
 
 const globalState = useGlobalState(); // 全局变量
 const state = reactive({

+ 3 - 1
src/router/backEnd.ts

@@ -62,11 +62,13 @@ const getAppConfigFn = async () => {
 			isAverageSendOrder: result.isAverageSendOrder ?? false, //是否开启平均派单
 			noSignOrgCode: result.noSignOrgCode ?? [], //不参与会签的机构编码
 			isOpenRepeatedWorkOrders: result.isOpenRepeatedWorkOrders ?? false, //是否开启重复工单
+			applyDelayTime: result.applyDelayTime ?? 99, // 延期最大数量
 		});
 		console.log(
 			`是否开启小休审批${result.isRestApproval},自动话后整理时间${result.talkingDealTime}秒,
 			分机签入是否需要选择号码${result.isNeedTelNo},分机签入是否需要填写密码${result.isTelNeedVerify},
-			是否开启自定义事件${result.isCustomEvent},是否开启市州互转${result.isTranspondCity},是否开启平均派单${result.isAverageSendOrder},,不参与会签的机构编码${result.noSignOrgCode},是否开启重复工单${result.isOpenRepeatedWorkOrders}`
+			是否开启自定义事件${result.isCustomEvent},是否开启市州互转${result.isTranspondCity},是否开启平均派单${result.isAverageSendOrder},,不参与会签的机构编码${result.noSignOrgCode},
+			是否开启重复工单${result.isOpenRepeatedWorkOrders},延期最大数量${result.applyDelayTime}`
 		);
 	} catch (e) {
 		console.log(e);

+ 1 - 0
src/stores/appConfig.ts

@@ -16,6 +16,7 @@ export const useAppConfig = defineStore('AppConfig', {
 			isAverageSendOrder: false, // 是否开启平均派单
 			isOpenRepeatedWorkOrders: false, // 是否开启重复工单
 			noSignOrgCode: [], // 不参与会签的机构code
+			applyDelayTime: 99, // 延期限制最大时间
 		},
 	}),
 	actions: {

+ 1 - 0
src/types/pinia.d.ts

@@ -127,6 +127,7 @@ declare interface AppConfigState {
 		isAverageSendOrder: boolean; // 是否开启平均派单
 		noSignOrgCode:Array<string>; // 不需要会签的机构
 		isOpenRepeatedWorkOrders: boolean; // 是否开启重复工单
+		applyDelayTime: number | string; // 延期最大限制
 		[x: string]: any
 	}
 }

+ 5 - 1
src/views/auxiliary/advice/component/Advice-add.vue

@@ -1,5 +1,5 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" width="800px" draggable title="新增常用意见">
+	<el-dialog v-model="state.dialogVisible" width="800px" draggable title="新增常用意见"  @close="close">
 		<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 			<el-row :gutter="10">
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -69,6 +69,10 @@ const openDialog = async () => {
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.resetFields();
+};
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;

+ 5 - 1
src/views/auxiliary/advice/component/Advice-edit.vue

@@ -1,5 +1,5 @@
 <template>
-	<el-dialog v-model="state.dialogVisible" width="50%" draggable title="修改常用意见">
+	<el-dialog v-model="state.dialogVisible" width="50%" draggable title="修改常用意见" @close="close">
 		<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
 			<el-row :gutter="10">
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -71,6 +71,10 @@ const openDialog = async (row: any) => {
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.resetFields();
+};
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;

+ 18 - 24
src/views/business/delay/components/Delay-edit.vue

@@ -38,7 +38,18 @@
 						<el-form-item label="当前期满时间"> {{ formatDate(state.orderDetail.beforeDelay, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" v-loading="state.loading">
-						<el-form-item label="延期申请数量" prop="timeLimitCount" :rules="[{ required: true, message: '请填写延期申请数量', trigger: 'blur' }]">
+						<el-form-item prop="timeLimitCount" :rules="[{ required: true, message: '请填写延期申请数量', trigger: 'blur' }]" label-width="130px">
+							<template #label>
+								<div style="height: 34px; display: flex; align-items: center">
+									延期申请数量
+									<el-tooltip placement="top-start">
+										<SvgIcon name="ele-QuestionFilled" size="18px" class="ml3" />
+										<template #content>
+											延期申请数量为1-{{ AppConfigInfo.applyDelayTime }}
+										</template>
+									</el-tooltip>
+								</div>
+							</template>
 							<el-row :gutter="10" class="w100">
 								<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 									<el-input-number
@@ -46,9 +57,8 @@
 										v-model="state.delayForm.timeLimitCount"
 										controls-position="right"
 										class="w100"
-										@input="computeTime"
 										:min="1"
-										:max="99"
+										:max="AppConfigInfo.applyDelayTime"
 									></el-input-number>
 								</el-col>
 								<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-loading="state.loading">
@@ -58,7 +68,7 @@
 										prop="timeLimitUnit"
 										:rules="[{ required: true, message: '请选择延期申请单位', trigger: 'change' }]"
 									>
-										<el-select disabled v-model="state.delayForm.timeLimitUnit" placeholder="延期申请单位" @change="computeTime">
+										<el-select disabled v-model="state.delayForm.timeLimitUnit" placeholder="延期申请单位">
 											<el-option v-for="item in timeType" :value="item.key" :key="item.key" :label="item.value" />
 										</el-select>
 									</el-form-item>
@@ -168,6 +178,8 @@ import { debounce, transformFile } from '@/utils/tools';
 import dayjs from 'dayjs';
 import { formatDate } from '@/utils/formatTime';
 import { delayApproveParams, delayBaseData, delayCalcEndTime, delayDetail, delayModify, workflowDelayParams } from '@/api/business/delay';
+import { useAppConfig } from '@/stores/appConfig';
+import { storeToRefs } from 'pinia';
 
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
@@ -211,7 +223,8 @@ const state = reactive<any>({
 });
 const ruleFormRef = ref<RefType>(); //表单组件
 const timeType = ref<EmptyArrayType>([]); // 延期申请单位
-
+const appConfigStore = useAppConfig();
+const { AppConfigInfo } = storeToRefs(appConfigStore); // 系统配置信息
 // 打开弹窗
 const openDialog = async (val: any) => {
 	state.loading = true;
@@ -389,25 +402,6 @@ const restForm = (formEl: FormInstance | undefined) => {
 const chooseAdviceDelay = (item: any) => {
 	state.delayForm.content += item.content;
 };
-// 计算期满时间
-const computeTime = debounce(() => {
-	if (!state.delayForm.timeLimitCount || !state.delayForm.timeLimitUnit) return;
-	let request = {
-		delayNum: state.delayForm.timeLimitCount,
-		delayUnit: state.delayForm.timeLimitUnit,
-		beginTime: state.orderDetail.order?.expiredTime,
-	};
-	state.loading = true;
-	delayCalcEndTime(request)
-		.then((res: any) => {
-			state.delayForm.endTime = dayjs(res.result.endTime).format('YYYY-MM-DD HH:mm:ss');
-			state.loading = false;
-		})
-		.catch(() => {
-			state.delayForm.endTime = '';
-			state.loading = false;
-		});
-}, 300);
 const afterSubmit = (emitType?: 'updateList' | 'orderProcessFailed', showMessage?: boolean) => {
 	state.loading = false;
 	closeDialog();

+ 3 - 3
src/views/business/delay/index.vue

@@ -10,7 +10,7 @@
 				:total="state.total"
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
-				v-if="['YiBin'].includes(themeConfig.appScope)"
+				v-if="['YiBin','LuZhou'].includes(themeConfig.appScope)"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -50,7 +50,7 @@
 				:total="state.total"
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
-				v-else-if="['ZiGong'].includes(themeConfig.appScope)"
+				v-if="['ZiGong'].includes(themeConfig.appScope)"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -169,9 +169,9 @@ const columns1 = ref<any[]>([
 	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', width: 80 },
 	{ prop: 'no', label: '工单编码', minWidth: 140 },
 	{ prop: 'order.isProvinceText', label: '省/市工单', minWidth: 90 },
-	// { prop: 'title', label: '自动延期次数', minWidth: 110 },
 	{ prop: 'title', label: '工单标题', minWidth: 200 },
 	{ prop: 'currentStepName', label: '当前节点', minWidth: 100 },
+	{ prop: 'automaticDelayNum', label: '自动延期次数', minWidth: 110 },
 	{ prop: 'actualHandlerName', label: '审批人', minWidth: 120 },
 	{ prop: 'delayStateText', label: '延期申请状态', minWidth: 110 },
 	{

+ 141 - 42
src/views/business/discern/apply.vue

@@ -11,29 +11,28 @@
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
 				@sort-change="sortChange"
+				v-if="['YiBin', 'LuZhou'].includes(themeConfig.appScope)"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
-								<el-form-item label="甄别退回" prop="ScreenSendBack">
-									<el-select v-model="state.queryParams.ScreenSendBack" placeholder="请选择甄别退回" @change="handleQuery">
-										<el-option :value="0" label="全部" />
-										<el-option :value="1" label="是" />
-										<el-option :value="2" label="否" />
-									</el-select>
-								</el-form-item>
-								<el-form-item label="工单编码" prop="No">
-									<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input"/>
-								</el-form-item>
-								<el-form-item label="工单标题" prop="Title">
-									<el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input"/>
-								</el-form-item>
+						<el-form-item label="甄别退回" prop="ScreenSendBack">
+							<el-select v-model="state.queryParams.ScreenSendBack" placeholder="请选择甄别退回" @change="handleQuery">
+								<el-option :value="0" label="全部" />
+								<el-option :value="1" label="是" />
+								<el-option :value="2" label="否" />
+							</el-select>
+						</el-form-item>
+						<el-form-item label="工单编码" prop="No">
+							<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="工单标题" prop="Title">
+							<el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
 
-								<el-form-item>
-										<el-button type="primary" @click="handleQuery" :loading="state.loading">
-											<SvgIcon name="ele-Search" class="mr5" />查询
-										</el-button>
-									<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
-								</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
+						</el-form-item>
 					</el-form>
 				</template>
 				<template #title="{ row }">
@@ -48,6 +47,55 @@
 					<el-button link type="primary" @click="visitDetail(row)" title="查看回访明细"> 回访明细 </el-button>
 				</template>
 			</ProTable>
+			<ProTable
+				ref="proTableRef"
+				:columns="columns1"
+				:data="state.tableData"
+				@updateTable="queryList"
+				:loading="state.loading"
+				:total="state.total"
+				v-model:page-index="state.queryParams.PageIndex"
+				v-model:page-size="state.queryParams.PageSize"
+				@sort-change="sortChange"
+				v-if="['ZiGong'].includes(themeConfig.appScope)"
+			>
+				<template #table-search>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item label="甄别退回" prop="ScreenSendBack">
+							<el-select v-model="state.queryParams.ScreenSendBack" placeholder="请选择甄别退回" @change="handleQuery">
+								<el-option :value="0" label="全部" />
+								<el-option :value="1" label="是" />
+								<el-option :value="2" label="否" />
+							</el-select>
+						</el-form-item>
+						<el-form-item label="工单编码" prop="No">
+							<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="工单标题" prop="Title">
+							<el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+				<template #title="{ row }">
+					<order-detail :order="row.order" @updateList="queryList">{{ row.order?.title }}</order-detail>
+				</template>
+				<!-- 表格操作 -->
+				<template #operation="{ row }">
+					<el-button link type="primary" @click="submitDiscern(row)" title="发起甄别申请" v-auth="'business:discern:apply:submit'">
+						发起甄别
+					</el-button>
+					<el-button link type="primary" @click="onEditApplyTime(row)" title="修改甄别提起时限" v-auth="'business:discern:apply:editApplyTime'">
+						修改提起时限
+					</el-button>
+					<el-button link type="primary" @click="onDetail(row)" title="查看甄别详情" v-if="row.screenSendBack"> 甄别详情 </el-button>
+					<el-button link type="primary" @click="visitDetail(row)" title="查看回访明细"> 回访明细 </el-button>
+				</template>
+			</ProTable>
 		</div>
 		<!-- 流程审批 -->
 		<process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
@@ -57,6 +105,8 @@
 		<discern-detail ref="discernDetailRef" @updateList="queryList" />
 		<!-- 甄别修改 -->
 		<discern-edit ref="discernEditRef" @updateList="queryList" />
+		<!-- 修改甄别提起时限 -->
+		<discern-edit-apply-time ref="discernEditApplyTimeRef" @updateList="queryList" />
 		<!--	更多查询	-->
 		<el-drawer v-model="drawer" title="更多查询" size="500px">
 			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
@@ -67,26 +117,16 @@
 					</el-select>
 				</el-form-item>
 				<el-form-item label="受理类型" prop="AcceptType">
-					<el-select v-model="state.queryParams.AcceptType" placeholder="请选择受理类型" clearable  @change="handleQuery">
-						<el-option
-							v-for="item in state.acceptTypeOptions"
-							:value="item.dicDataValue"
-							:key="item.dicDataValue"
-							:label="item.dicDataName"
-						/>
+					<el-select v-model="state.queryParams.AcceptType" placeholder="请选择受理类型" clearable @change="handleQuery">
+						<el-option v-for="item in state.acceptTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
 					</el-select>
 				</el-form-item>
 				<el-form-item label="热点分类" prop="HotspotSpliceName">
 					<el-input v-model="state.queryParams.HotspotSpliceName" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
 				</el-form-item>
 				<el-form-item label="来源渠道" prop="SourceChannel">
-					<el-select v-model="state.queryParams.SourceChannel" placeholder="请选择来源渠道" clearable  @change="handleQuery">
-						<el-option
-							v-for="item in state.sourceChannelOptions"
-							:value="item.dicDataValue"
-							:key="item.dicDataValue"
-							:label="item.dicDataName"
-						/>
+					<el-select v-model="state.queryParams.SourceChannel" placeholder="请选择来源渠道" clearable @change="handleQuery">
+						<el-option v-for="item in state.sourceChannelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
 					</el-select>
 				</el-form-item>
 				<el-form-item label="一级部门" prop="OrgLevelOneName">
@@ -169,14 +209,19 @@ import { formatDate } from '@/utils/formatTime';
 import { screenApplyList, screenBaseData } from '@/api/business/discern';
 import { commonEnum, defaultTimeStartEnd, shortcuts } from '@/utils/constants';
 import Other from '@/utils/other';
+import { useThemeConfig } from '@/stores/themeConfig';
+import { storeToRefs } from 'pinia';
 // 引入组件
 const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit/component/Visit-detail.vue')); // 回访
 const DiscernDetail = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-detail.vue')); // 甄别详情
 const DiscernEdit = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-edit.vue')); // 甄别修改
+const DiscernEditApplyTime = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-edit-apply-time.vue')); // 修改甄别提起时限
 // 定义变量内容
 const proTableRef = ref<RefType>(); // 表格ref
+const storesThemeConfig = useThemeConfig();
+const { themeConfig } = storeToRefs(storesThemeConfig);
 // 表格配置项
 const columns = ref<any[]>([
 	{ prop: 'screenSendBackText', label: '甄别退回' },
@@ -226,6 +271,62 @@ const columns = ref<any[]>([
 	},
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 240, align: 'center' },
 ]);
+const columns1 = ref<any[]>([
+	{
+		prop: 'screenByEndTime',
+		label: '截止申请日期',
+		minWidth: 160,
+		render: (scope) => {
+			return <span>{formatDate(scope.row.screenByEndTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+		},
+	},
+	{ prop: 'screenSendBackText', label: '甄别退回' },
+	{ prop: 'order.no', label: '工单编码', minWidth: 140 },
+	{ prop: 'order.isProvinceText', label: '省/市工单', minWidth: 90 },
+	{ prop: 'order.title', label: '工单标题', minWidth: 200 },
+	{ prop: 'order.acceptType', label: '受理类型', minWidth: 100 },
+	{ prop: 'order.sourceChannel', label: '来源渠道', minWidth: 100 },
+	{ prop: 'order.orgLevelOneName', label: '一级部门', minWidth: 140 },
+	{ prop: 'order.actualHandleOrgName', label: '接办部门', minWidth: 140 },
+	{ prop: 'visitOrgName', label: '被回访部门', minWidth: 140 },
+	{
+		prop: 'order.startTime',
+		label: '受理时间',
+		minWidth: 160,
+		sortable: 'custom',
+		render: (scope) => {
+			return <span>{formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+		},
+	},
+	{
+		prop: 'order.actualHandleTime',
+		label: '接办时间',
+		minWidth: 160,
+		sortable: 'custom',
+		render: (scope) => {
+			return <span>{formatDate(scope.row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+		},
+	},
+	{
+		prop: 'order.filedTime',
+		label: '办结时间',
+		minWidth: 160,
+		sortable: 'custom',
+		render: (scope) => {
+			return <span>{formatDate(scope.row.order?.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+		},
+	},
+	{
+		prop: 'orderVisit.visitTime',
+		label: '回访时间',
+		minWidth: 160,
+		sortable: 'custom',
+		render: (scope) => {
+			return <span>{formatDate(scope.row.orderVisit?.visitTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+		},
+	},
+	{ prop: 'operation', label: '操作', fixed: 'right', width: 280, align: 'center' },
+]);
 const state = reactive<any>({
 	queryParams: {
 		// 查询条件
@@ -336,8 +437,8 @@ const processAuditRef = ref<RefType>(); // 流程审批ref
 const discernEditRef = ref<RefType>(); // 甄别修改ref
 const submitDiscern = (row: any) => {
 	if (row.screenSendBack) {
-		if(row.orderScreens.length){
-			const editRow = {...row.orderScreens[0]}
+		if (row.orderScreens.length) {
+			const editRow = { ...row.orderScreens[0] };
 			// 修改甄别
 			// 退回到了开始 需要重新打开编辑页面在发起流程
 			discernEditRef.value.openDialog(editRow);
@@ -377,14 +478,12 @@ const visitDetailRef = ref<RefType>();
 const visitDetail = (row: any) => {
 	visitDetailRef.value.openDialog(row.orderVisit, '回访明细');
 };
-const historyParams = history.state;
+// 修改甄别提起时限
+const discernEditApplyTimeRef = ref<RefType>();
+const onEditApplyTime = (row: any) => {
+	discernEditApplyTimeRef.value.openDialog(row);
+};
 onMounted(async () => {
-	if (historyParams.IsHomePage) {
-		// 会签待办 IsHomePage 表示从首页进入
-		// 先重置其他查询条件
-		ruleFormRef.value.resetFields();
-		state.queryParams = { ...state.queryParams, IsHomePage: historyParams.IsHomePage };
-	}
 	await getBaseData();
 	queryList();
 });

+ 88 - 0
src/views/business/discern/components/Discern-edit-apply-time.vue

@@ -0,0 +1,88 @@
+<template>
+	<el-dialog v-model="state.dialogVisible" width="500px" draggable title="修改甄别提起时限" @close="close">
+		<el-form :model="state.ruleForm" ref="ruleFormRef">
+			<el-form-item label="甄别提起时限" prop="screenByEndTime" :rules="[{ required: true, message: '请选择甄别提起时限', trigger: 'change' }]">
+				<el-date-picker
+					v-model="state.ruleForm.screenByEndTime"
+					type="datetime"
+					placeholder="请选择甄别提起时限"
+					value-format="YYYY-MM-DD[T]HH:mm:ss"
+					class="w100"
+					:disabled-date="disabledDate"
+				/>
+			</el-form-item>
+		</el-form>
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="loading">确 定</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue';
+import { ElMessage, FormInstance } from 'element-plus';
+import { throttle } from '@/utils/tools';
+import { discernUpdateTime } from '@/api/business/discern';
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList']);
+// 定义变量内容
+const state = reactive<any>({
+	dialogVisible: false,
+	ruleForm: {
+		screenByEndTime: null, // 时间
+		id: null,
+	},
+});
+
+const disabledDate = (time: Date) => {
+	return time.getTime() <= Date.now() - 8.64e7;
+};
+let loading = ref<boolean>(false); // 加载状态
+// 打开弹窗
+const ruleFormRef = ref<RefType>();
+const openDialog = (val: any) => {
+	state.ruleForm.id = val.id ?? '';
+	state.dialogVisible = true;
+	loading.value = false;
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.resetFields();
+};
+// 新增
+const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	await formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		loading.value = true;
+		discernUpdateTime(state.ruleForm)
+			.then(() => {
+				ElMessage({
+					message: '操作成功',
+					type: 'success',
+				});
+				emit('updateList');
+				closeDialog();
+				loading.value = false;
+			})
+			.catch((error) => {
+				console.log(error);
+				loading.value = false;
+				closeDialog();
+			});
+	});
+}, 300);
+// 暴露变量
+defineExpose({
+	openDialog,
+	closeDialog,
+});
+</script>

+ 1 - 1
src/views/business/discern/components/Discern-edit.vue

@@ -138,7 +138,7 @@
 	</el-dialog>
 </template>
 
-<script setup lang="ts" name="processApproval">
+<script setup lang="ts">
 import { computed, defineAsyncComponent, nextTick, reactive, ref, watch } from 'vue';
 import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import other from '@/utils/other';

+ 68 - 14
src/views/business/order/index.vue

@@ -75,13 +75,13 @@
 							<SvgIcon name="ele-Plus" class="mr5" />创建重复性事件
 						</el-button>
 						<el-button type="primary" @click="onObserve" v-auth="'business:order:observe'" :disabled="!scope.isSelected" :loading="state.loading"
-						>设置观察件
+							>设置观察件
 						</el-button>
 						<el-button type="primary" @click="onEnd" v-auth="'business:order:end'" :disabled="!scope.isSelected" :loading="state.loading"
-						>设置终结件
+							>设置终结件
 						</el-button>
 						<el-button type="primary" @click="onJbExport" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'business:order:jbdExport'"
-						><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出
+							><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出
 						</el-button>
 					</template>
 					<template #expiredStatusText="{ row }">
@@ -149,6 +149,9 @@
 											<el-checkbox value="IsSensitiveWord" border>敏感类工单</el-checkbox>
 										</el-checkbox-group>
 									</el-form-item>
+									<el-form-item>
+										<el-button @click="contentRetrieval"><SvgIcon name="ele-DocumentCopy" class="mr5" />内容检索</el-button>
+									</el-form-item>
 								</el-col>
 							</el-row>
 							<el-form-item label="工单标题" prop="Keyword">
@@ -182,13 +185,13 @@
 							<SvgIcon name="ele-Plus" class="mr5" />创建重复性事件
 						</el-button>
 						<el-button type="primary" @click="onObserve" v-auth="'business:order:observe'" :disabled="!scope.isSelected" :loading="state.loading"
-						>设置观察件
+							>设置观察件
 						</el-button>
 						<el-button type="primary" @click="onEnd" v-auth="'business:order:end'" :disabled="!scope.isSelected" :loading="state.loading"
-						>设置终结件
+							>设置终结件
 						</el-button>
 						<el-button type="primary" @click="onJbExport" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'business:order:jbdExport'"
-						><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出
+							><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出
 						</el-button>
 					</template>
 					<template #expiredStatusText="{ row }">
@@ -209,11 +212,11 @@
 						>
 							退回</el-button
 						>
-						<order-detail :order="row" @updateList="queryList(true)"/>
+						<order-detail :order="row" @updateList="queryList(true)" />
 					</template>
 				</ProTable>
 				<div class="flex-end mt20">
-<!--					<el-button class="default-button" @click="onChangeTotal">展示总数</el-button>-->
+					<!--					<el-button class="default-button" @click="onChangeTotal">展示总数</el-button>-->
 					<el-pagination
 						layout="prev, pager, next"
 						:total="state.total"
@@ -313,6 +316,12 @@
 						<el-option v-for="item in state.pushTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
 					</el-select>
 				</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" />
+						<el-option label="部门归档" value="20" />
+					</el-select>
+				</el-form-item>
 				<el-form-item label="期满时间" prop="exTime">
 					<el-date-picker
 						v-model="state.queryParams.exTime"
@@ -372,16 +381,40 @@
 				<el-button @click="resetQuery(drawerRuleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
 			</template>
 		</el-drawer>
+		<el-dialog
+			v-model="state.dialogVisible"
+			draggable
+			destroy-on-close
+			:close-on-click-modal="false"
+			modal-class="modal_class"
+			class="dialog_class"
+			append-to-body
+			:modal="false"
+			title="内容检索"
+			width="500px"
+		>
+			<el-form :model="state.ruleForm" ref="ruleFormContentRef" label-width="90px" class="show-info-form" @submit.native.prevent>
+				<el-form-item label="受理内容">
+					<el-input v-model="state.ruleForm.content" placeholder="请填写受理内容" :autosize="{ minRows: 4, maxRows: 10 }" type="textarea"></el-input>
+				</el-form-item>
+				<el-form-item label="检索提示">检索条件为词组检索,如“热线中心”</el-form-item>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="state.dialogVisible = false" class="default-button">取 消</el-button>
+					<el-button type="primary" @click="onSearch(ruleFormContentRef)">查 询</el-button>
+				</span>
+			</template>
+		</el-dialog>
 	</div>
 </template>
 <script setup lang="tsx" name="order">
 import { defineAsyncComponent, onMounted, reactive, ref, onActivated, onBeforeUnmount } from 'vue';
 import type { FormInstance } from 'element-plus';
-import { ElMessage, ElMessageBox, ElNotification } from 'element-plus';
+import { ElMessage, ElMessageBox } from 'element-plus';
 import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
-import { useRoute, useRouter } from 'vue-router';
 import { formatDate } from '@/utils/formatTime';
-import { exportJbOrder, exportOrder, listBaseData, orderList, orderListFixed, provinceReturn } from '@/api/business/order';
+import { exportJbOrder, exportOrder, listBaseData, orderList, orderListFixed } from '@/api/business/order';
 import { addObserve } from '@/api/query/observe';
 import { addEnd } from '@/api/query/end';
 import { treeArea } from '@/api/auxiliary/area';
@@ -415,8 +448,8 @@ const state = reactive<any>({
 		Channels: null, // 渠道
 		Hotspot: null, //  热点分类名称
 		OrgId: null, // 接办部门
-		ActualHandleOrgName:null, // 接办部门
-		OrgLevelOneName:null, // 一级部门
+		ActualHandleOrgName: null, // 接办部门
+		OrgLevelOneName: null, // 一级部门
 		NameOrNo: null, // 受理坐席
 		crTime: [], // 生成时间
 		CreationTimeStart: null, // 创建时间 开始
@@ -435,6 +468,7 @@ const state = reactive<any>({
 		IsSensitiveWord: null, // 是否敏感词工单
 		SensitiveWord: null, // 敏感词
 		IsUrgent: null, // 是否加急
+		ContentRetrieval:null, // 内容检索
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -448,6 +482,10 @@ const state = reactive<any>({
 	pushTypeOptions: [], //推送分类
 	orgData: [], // 机构数据
 	areaOptions: [], // 省市区数据
+	dialogVisible: false,
+	ruleForm: {
+		content: null,
+	},
 });
 const fastSearch = ref('all'); // tab位置
 const fastSearchChange = (val: string) => {
@@ -599,6 +637,7 @@ const queryList = (isQuery: boolean = false) => {
 		requestParams.value.ActualHandleTimeStart = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[0]; // 办结时间
 		requestParams.value.ActualHandleTimeEnd = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
 		Reflect.deleteProperty(requestParams.value, 'doneTime'); // 删除无用的参数
+		requestParams.value.ContentRetrieval = state.ruleForm.content;
 		state.loading = true;
 		orderList(requestParams.value)
 			.then((response: any) => {
@@ -621,6 +660,7 @@ const queryList = (isQuery: boolean = false) => {
 		requestParams.value.ActualHandleTimeEnd = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
 		Reflect.deleteProperty(requestParams.value, 'doneTime'); // 删除无用的参数
 		requestParams.value.QueryIndex = queryIndex.value; // 数据批次
+		requestParams.value.ContentRetrieval = state.ruleForm.content;
 		state.loading = true;
 		orderListFixed(requestParams.value)
 			.then((response: any) => {
@@ -737,6 +777,20 @@ const onJbExport = () => {
 		})
 		.catch(() => {});
 };
+// 打开内容检索
+const contentRetrieval = () => {
+	state.dialogVisible = !state.dialogVisible;
+};
+const ruleFormContentRef = ref<RefType>();
+// 内容检索
+const onSearch = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		queryList(true);
+		state.dialogVisible = false;
+	});
+};
 onMounted(() => {
 	getBaseData();
 	queryList();
@@ -744,7 +798,7 @@ onMounted(() => {
 onActivated(() => {
 	mittBus.on('clearCachePage', () => {
 		//清除缓存
-		queryList();
+		queryList(true);
 	});
 });
 onBeforeUnmount(() => {

+ 63 - 24
src/views/business/publish/todo.vue

@@ -1,6 +1,6 @@
 <template>
 	<div class="business-publish-todo-container layout-padding">
-    <div class="layout-padding-auto layout-padding-view pd20">
+		<div class="layout-padding-auto layout-padding-view pd20">
 			<ProTable
 				ref="proTableRef"
 				:columns="columns"
@@ -11,30 +11,50 @@
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
 			>
-        <template #table-search>
-          <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
-                <el-form-item label="数据范围" prop="QuerySelf" v-auth="'business:publish:todo:querySelf'">
-                  <el-segmented
-                      :options="[
+				<template #table-search>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-form-item label="数据范围" prop="QuerySelf" v-auth="'business:publish:todo:querySelf'">
+							<el-segmented
+								:options="[
 									{ label: '我的', value: 'true' },
 									{ label: '全部', value: 'false' },
 								]"
-                      v-model="state.queryParams.QuerySelf"
-                      @change="handleQuery"
-                  />
-                </el-form-item>
-                <el-form-item label="工单标题" prop="Keyword">
-                  <el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input"/>
-                </el-form-item>
-                <el-form-item label="工单编码" prop="No">
-                  <el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input"/>
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-									<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
-                </el-form-item>
-          </el-form>
-        </template>
+								v-model="state.queryParams.QuerySelf"
+								@change="handleQuery"
+							/>
+						</el-form-item>
+						<el-form-item label="省市工单" prop="fastSearch">
+							<el-segmented
+								:options="[
+									{
+										value: 'all',
+										label: '全部',
+									},
+									{
+										value: 'city',
+										label: '市工单',
+									},
+									{
+										value: 'province',
+										label: '省工单',
+									},
+								]"
+								v-model="fastSearch"
+								@change="fastSearchChange"
+							/>
+						</el-form-item>
+						<el-form-item label="工单标题" prop="Keyword">
+							<el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="工单编码" prop="No">
+							<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
 				<template #tableHeader="scope">
 					<el-button type="primary" @click="publishMultiple" v-auth="'business:publish:todo:multiple'" :disabled="!scope.isSelected">
 						<SvgIcon name="iconfont icon-tianjiawenjian" class="mr5" />批量发布
@@ -89,7 +109,7 @@ const OrderPublish = defineAsyncComponent(() => import('@/views/business/publish
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 const OrderMigration = defineAsyncComponent(() => import('@/views/todo/center/Order-migration.vue')); // 工单平移
 // 定义变量内容
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
@@ -100,11 +120,28 @@ const state = reactive({
 		IsCountersign: null, // 是否会签
 		Keyword: null, // 标题
 		QuerySelf: 'true', // 是否只查询自己的待发布工单
+		IsProvince:null, // 是否省工单
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 });
+const fastSearch = ref('all'); // tab位置
+const fastSearchChange = (val: string) => {
+	fastSearch.value = val;
+	switch (val) {
+		case 'all':
+			state.queryParams.IsProvince = null;
+			break;
+		case 'city':
+			state.queryParams.IsProvince = false;
+			break;
+		case 'province':
+			state.queryParams.IsProvince = true;
+			break;
+	}
+	handleQuery();
+};
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
 const columns = ref<any[]>([
@@ -171,6 +208,8 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	formEl.resetFields();
 	state.queryParams.QuerySelf = 'true';
 	ruleFormRef.value?.resetFields();
+	state.queryParams.IsProvince = null;
+	fastSearch.value = 'all';
 	queryList();
 };
 // 批量发布
@@ -206,4 +245,4 @@ const onMigration = () => {
 onMounted(() => {
 	queryList();
 });
-</script>
+</script>