Quellcode durchsuchen

reactor:宜宾工单办理流程调整;

zhangchong vor 4 Monaten
Ursprung
Commit
6e83f0d9f2

+ 149 - 60
src/components/ProcessAudit/YBProcess.vue

@@ -15,9 +15,18 @@
 		:modal="!isOrderAccept"
 	>
 		{{ seatTopaidan ? '话务部到派单组' : '' }}
-		{{ seatToOrg ? '话务部到部门' : '' }}
+		{{ seatToEnd ? '话务部到归档' : '' }}
+		{{ seatToBanzhang ? '话务部到班长审批' : '' }}
+		{{ seatToCenter ? '话务部到市中心综合办' : '' }}
 		{{ seatToOrgOne ? '话务部到一级部门' : '' }}
+		{{ paidanToEnd ? '派单组到归档' : '' }}
+		{{ paidanToBanzhang ? '派单组到班长审批' : '' }}
 		{{ paidanToOrgOne ? '派单组到一级部门' : '' }}
+		{{ orgToEnd ? '部门到归档' : '' }}
+		{{ orgToOrg ? '部门到部门' : '' }}
+		{{ orgToOrgLeader ? '部门到部门领导' : '' }}
+		{{ orgToOrgSummary ? '部门到部门汇总' : '' }}
+		{{ orgSummaryToEnd ? '部门汇总到归档' : '' }}
 		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef"  v-loading="state.loading">
 			<slot name="header"></slot>
 			<el-row :gutter="10">
@@ -29,6 +38,14 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
+				<!--  话务部到归档 -->
+				<template v-if="seatToEnd">
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item prop="isOnlineAnswer">
+							<el-checkbox v-model="state.ruleForm.isOnlineAnswer" label="在线解答" />
+						</el-form-item>
+					</el-col>
+				</template>
 					<!-- 非退回流程都需要选择并且如果选择了结束节点就不需要选择办理对象 -->
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="showHandlers">
 						<el-form-item
@@ -52,13 +69,36 @@
 							/>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="showMainHandler">
-						<el-form-item label="主办" prop="nextMainHandler" :rules="[{ required: false, message: '请选择主办', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.nextMainHandler" placeholder="请选择主办" class="w100" filterable>
-								<el-option v-for="item in state.handlerMainOptions" :key="item.key" :label="item.value" :value="item.key" />
-							</el-select>
-						</el-form-item>
+				<!-- 话务部到派单组 话务部到班长审批 话务部到是市中心综合办 -->
+				<template v-if="seatTopaidan || seatToBanzhang || seatToCenter">
+					<el-col>
+						<el-row :gutter="0">
+							<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-row>
 					</el-col>
+				</template>
 					<!-- 工单办理专有参数 -->
 					<template v-if="flowDirection">
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -103,9 +143,6 @@
 						</el-col>
 						<el-col :span="12" v-if="state.ruleForm.orderAssignMode === 0">
 									<el-form-item label="接办部门" prop="nextHandlers" :rules="[{ required: true, message: '请选择接办部门', trigger: 'change' }]">
-										<!--										<el-select v-model="state.ruleForm.paidanObj" placeholder="请选择接办部门" class="w100" filterable multiple>
-											<el-option v-for="item in state.paidanObjOptions" :key="item.key" :label="item.value" :value="item.key" />
-										</el-select>-->
 										<el-select-v2
 											v-model="state.ruleForm.nextHandlers"
 											:options="state.handlerOptions"
@@ -240,7 +277,7 @@
 						</el-col>
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 							<el-form-item label="经办人电话" prop="realHandlerPhone" :rules="[{ required: false, message: '请填写经办人电话', trigger: 'blur' }]">
-								<el-input v-model="state.ruleForm.realHandlerPhone" placeholder="请填写办理人电话" 请填写经办人电话> </el-input>
+								<el-input v-model="state.ruleForm.realHandlerPhone" placeholder="请填写办理人电话"> </el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -254,13 +291,26 @@
 							</el-form-item>
 						</el-col>
 					</template>
+				<!--  中国政府网工单 中国政府网工单(中国政府网为省编码包含ZGZFW),无论在哪个环节选择“归档”,均需要显示两个必填项:经办人、经办人电话-->
+				<template v-if="showZGZFWToEnd">
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="经办人" prop="realHandlerName" :rules="[{ required: true, message: '请填写经办人', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.realHandlerName" placeholder="请填写经办人" clearable> </el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="经办人电话" prop="realHandlerPhone" :rules="[{ required: true, message: '请填写经办人电话', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.realHandlerPhone" placeholder="请填写办理人电话"> </el-input>
+						</el-form-item>
+					</el-col>
+				</template>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="isSmsSelectShow">
 						<el-form-item label="" prop="isSms">
 							<el-checkbox v-model="state.ruleForm.isSms" label="短信通知" />
 						</el-form-item>
 					</el-col>
-					<!--  选择结束节点时并且是工单办理并且不是中心,显示部门处理结果 -->
-					<template v-if="showResult">
+					<!--  一级部门到归档 一级部门汇总到归档 -->
+					<template v-if="isShowResult">
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 							<el-form-item label="处理结果" prop="isResolved" :rules="[{ required: true, message: '请选择处理结果', trigger: 'change' }]">
 								<el-radio-group v-model="state.ruleForm.isResolved">
@@ -294,7 +344,7 @@
 								/>
 							</el-form-item>
 						</el-col>
-						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="showRemarkTextarea">
+						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 							<el-form-item label="备注信息" prop="remark" :rules="[{ required: false, message: `请填写备注信息`, trigger: 'blur' }]">
 								<el-input v-model="state.ruleForm.remark" :rows="2" type="textarea" placeholder="请填写备注信息" />
 							</el-form-item>
@@ -308,9 +358,9 @@
 		</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">温馨提示:临时保存只保存{{ 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>
+				<el-button type="primary" @click="handleTempSave" :loading="state.loading">临时保存</el-button>
 				<el-popconfirm
 					title="该工单属于超期状态,若符合延期要求,请延期通过后办结,是否继续办理?"
 					v-if="isOverdueTips"
@@ -362,12 +412,15 @@ const state = reactive<any>({
 		nextStepName: '', // 下一节点名称
 		backToCountersignEnd: false, // 是否回到会签结束节点
 		nextHandlers: [], // 下一节点办理对象
-		nextMainHandler: '', // 主办人
 		isSms: false, // 是否短信通知
 		isStartCountersign: false, // 是否发起会签
 		stepId: null, // 步骤id
-		// isTransferHandle:false, // 是否转办
 		orderAssignMode: 0, // 派单类型默认逐级派单
+		transpond: false, // 市州转办
+		transpondCityName: null, // 市州转办信息
+		transpondCityId: null, // 市州转办信息id
+		transpondCityValue: null, // 市州转办信息
+		isOnlineAnswer:false, // 在线解答
 	},
 	delayForm: {
 		//延期申请表单
@@ -394,7 +447,6 @@ const state = reactive<any>({
 	processType: 'next', // 流程状态
 	workflowId: '', // 流程id
 	handlerClassifies: [], //撤回办理对象
-	handlerMainOptions: [], // 主办人
 	handleId: '', // 流程处理ID
 	dialogTitle: '', // 弹窗标题
 	annexName: '', // 附件标题
@@ -406,10 +458,6 @@ const storesUserInfo = useUserInfo();
 const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
 const appConfigStore = useAppConfig();
 const { AppConfigInfo } = storeToRefs(appConfigStore); // 系统配置信息
-const showTempSave = computed(() => {
-	// 是否显示临时办理
-	return ['工单办理', '工单代办', '工单受理'].includes(state.processType);
-});
 const screenType = ref(null); // 甄别类型  自贡甄别特殊需求
 // 打开弹窗
 const openDialog = async (val: any) => {
@@ -486,18 +534,18 @@ const commonOpinionType = computed(() => {
 			return commonEnum.OrderCirculation;
 	}
 });
-const canReject = ref<boolean>(false); // 是否可以驳回
 const timeTypeOptions = ref<EmptyArrayType>([]); // 办理时限单位
 const canStartCountersign = ref<boolean>(false); // 是否可以发起会签
 const isMainHandlerShow = ref<boolean>(false); // 是否展示主办人
 const currentParams = ref<EmptyObjectType>({}); // 当前获取到的参数(当前节点信息)
+const transpondCity = ref<EmptyArrayType>([]); // 市州互转选择
 const handleResult = (res: any) => {
 	currentParams.value = res.result; // 当前获取到的参数(当前节点信息)
 	state.nextStepOptions = res.result.steps; //办理对象选择内容
-	canReject.value = res.result.canReject ?? false; // 是否可以驳回
 	timeTypeOptions.value = res.result.timeTypeOptions ?? []; // 办理时限申请单位
 	canStartCountersign.value = res.result.canStartCountersign ?? false; // 是否可以发起会签
 	isMainHandlerShow.value = res.result.isMainHandlerShow ?? false; // 是否展示主办人
+	transpondCity.value = res.result.transpondCity ?? []; // 市州互转
 
 	// 办理才有期满时间
 	state.ruleForm.expiredTime = res.result.expiredTime ?? null; // 期满时间
@@ -540,18 +588,54 @@ const isOverdueTips = computed(() => {
 const seatTopaidan = computed(() => {
 	return currentParams.value.currentStepBusinessType === 0 && selectNext.value.businessType === 1;
 });
-// 话务部到部门
-const seatToOrg = computed(() => {
-	return currentParams.value.currentStepBusinessType === 0 && selectNext.value.businessType === 2;
+// 话务部到归档
+const seatToEnd = computed(() => {
+	return currentParams.value.currentStepBusinessType === 0 && selectNext.value.key === 'end';
+});
+// 话务部到班长审批
+const seatToBanzhang = computed(() => {
+	return currentParams.value.currentStepBusinessType === 0 && selectNext.value.key === 'leader';
+});
+// 话务部到市中心综合办
+const seatToCenter = computed(() => {
+	return currentParams.value.currentStepBusinessType === 0 && selectNext.value.key === 'center';
 });
 // 话务部到一级部门
 const seatToOrgOne = computed(() => {
 	return currentParams.value.currentStepBusinessType === 0 && selectNext.value.businessType === 2 && selectNext.value.orgLevel === 1;
 });
+// 派单组到归档
+const paidanToEnd = computed(() => {
+	return currentParams.value.currentStepBusinessType === 1 && selectNext.value.key === 'end';
+});
+// 派单组到班长审批
+const paidanToBanzhang = computed(() => {
+	return currentParams.value.currentStepBusinessType === 1 && selectNext.value.key === 'leader';
+});
 // 派单组到一级部门
 const paidanToOrgOne = computed(() => {
 	return currentParams.value.currentStepBusinessType === 1 && selectNext.value.businessType === 2 && selectNext.value.orgLevel === 1;
 });
+// 部门到归档
+const orgToEnd = computed(() => {
+	return currentParams.value.currentStepBusinessType === 2 && selectNext.value.key === 'end';
+});
+// 部门到部门
+const orgToOrg = computed(() => {
+	return currentParams.value.currentStepBusinessType === 2 && selectNext.value.businessType === 2;
+});
+// 部门到部门领导
+const orgToOrgLeader = computed(() => {
+	return currentParams.value.currentStepBusinessType === 2 && selectNext.value.businessType === 3;
+});
+// 部门到部门汇总
+const orgToOrgSummary = computed(() => {
+	return currentParams.value.currentStepBusinessType === 2 && selectNext.value.stepType === 3;
+});
+// 部门汇总到归档
+const orgSummaryToEnd = computed(() => {
+	return currentParams.value.currentStepBusinessType === 3 && selectNext.value.key === 'end';
+});
 // 是否展示短信通知选择
 const isSmsSelectShow = ref(false);
 // 办理对象是否必填  0-角色 1-部门类型 2-部门类型 3-指定用户 4-指定部门
@@ -560,7 +644,6 @@ const nextHandlersRequired = ref<Boolean>(false);
 const selectNext = ref<EmptyObjectType>({}); // 选择的下一个节点
 const selectNextStep = (val: any) => {
 	ruleFormRef.value?.resetFields('nextHandlers');
-	ruleFormRef.value?.resetFields('nextMainHandler');
 	state.ruleForm.nextHandlers = [];
 	const next = state.nextStepOptions.find((item: any) => item.key === val);
 	selectNext.value = next;
@@ -589,8 +672,8 @@ const selectNextStep = (val: any) => {
 
 	// 以下是默认需要吧短信勾上的场景 话务部到一级部门 派单组到一级部门
 	state.ruleForm.isSms = seatToOrgOne.value || paidanToOrgOne.value;
-	// 是否展示短信通知 (取消坐席流转至“派单组”时的短信通知选项框  )
-	isSmsSelectShow.value = !seatTopaidan.value;
+	// 是否展示短信通知 (话务部到一级部门 派单组到一级部门 部门到部门 部门到部门领导)
+	isSmsSelectShow.value =  seatToOrgOne.value || paidanToOrgOne.value || orgToOrg.value || orgToOrgLeader.value;
 };
 
 //  会签是否可用 (配置可以会签 并且选择的是逐级派单,并且是普通节点 并且选择是部门)
@@ -621,22 +704,25 @@ const changeStartCountersign = (val: boolean) => {
 };
 
 // 是否展示办理对象 (结束节点不展示: next.stepType===2 表示为结束节点,下一环节为派单组时 next.businessType === 1,办理对象下拉框隐藏:AppConfigInfo.value.isAverageSendOrder= true 表示开启了平均派单 )
-const showHandlers = computed(() => {
+/*const showHandlers = computed(() => {
 	const next = state.nextStepOptions.find((item: any) => item.key === state.ruleForm.nextStepCode);
 	const isAverageSendOrder = AppConfigInfo.value.isAverageSendOrder && next?.businessType === 1; // 开启平均派单并且下一个环节是派单组  !isAverageSendOrder
 	if (!next) return true;
 	// 话务部到派单 派单组到一级部门 也不需要展示办理对象 如果下一环节是汇总节点与不需要展示办理
 	return next?.stepType !== 2 && !(seatToOrgOne.value || paidanToOrgOne.value) && selectNext.value.stepType !== 3;
-});
-// 是否展示部门处理结果 ( 选择结束节点时并且当前操作人不是中心时,显示部门处理结果 )
-const showResult = computed(() => {
-	const next = state.nextStepOptions.find((item: any) => item.key === state.ruleForm.nextStepCode);
-	return next?.stepType === 2 && !userInfos.value.isCenter;
+});*/
+// 是否展示办理对象下拉
+// 话务部到班长审批 派单组到班长审批 部门到部门 部门到部门领导
+const showHandlers = computed(()=>{
+	return seatToBanzhang.value || paidanToBanzhang.value || orgToOrg.value || orgToOrgLeader.value;
+})
+// 是否展示部门处理结果 (一级部门到归档 一级部门汇总到归档 )
+const isShowResult = computed(() => {
+	return orgToEnd || orgSummaryToEnd;
 });
 // 是否展示警情退回 (选择结束节点时并且工单来源是110时,显示警情退回)
 const showPoliceReturn = computed(() => {
-	const next = state.nextStepOptions.find((item: any) => item.key === state.ruleForm.nextStepCode);
-	return next?.stepType === 2 && state.orderDetail?.source === 200;
+	return selectNext.value.stepType === 2 && state.orderDetail?.source === 200;
 });
 // 是否是汇总节点(汇总需要填入其他参数)并且是工单办理
 const inputRealHandler = computed(() => {
@@ -646,14 +732,14 @@ const inputRealHandler = computed(() => {
 
 // 是否展示办理时限 flowDirection 并且是工单办理
 const flowDirection = computed(() => {
-	const next = state.nextStepOptions.find((item: any) => item.key === state.ruleForm.nextStepCode);
-	if (!next) return false;
-	return [0, 1].includes(next.flowDirection);
-});
-// 是否展示备注输入框
-const showRemarkTextarea = computed(() => {
-	return ['工单受理', '工单办理'].includes(state.processType);
+	return [0, 1].includes(selectNext.value.flowDirection);
 });
+
+// 中国政府网工单(中国政府网为省编码包含ZGZFW),无论在哪个环节选择“归档”,均需要显示两个必填项:经办人、经办人电话
+const showZGZFWToEnd = computed(()=>{
+	/*return state.orderDetail?.source === 200 && selectNext.value.stepType === 2;*/
+	return selectNext.value.stepType === 2
+})
 // 计算工单期满时间
 watch(
 	() => flowDirection.value,
@@ -669,15 +755,6 @@ watch(
 	}
 );
 
-// 是否展示主办
-const showMainHandler = computed(() => {
-	return state.ruleForm.nextHandlers.length > 1 && isMainHandlerShow.value;
-});
-// 主办从办理对象中选择
-state.handlerMainOptions = computed(() => {
-	return state.ruleForm.nextHandlers;
-});
-
 // 选择派单类型 需要清空选择的内容
 const selectDispatchType = () => {
 	ruleFormRef.value.resetFields('nextHandlers');
@@ -878,6 +955,23 @@ const afterSubmit = (emitType?: 'orderProcessSuccess' | 'orderProcessFailed', sh
 const close = () => {
 	restForm(ruleFormRef.value);
 };
+
+// 选择是否市州互转
+const changeTransPond = (val: any) => {
+	if (!val) {
+		state.ruleForm.transpondCityValue = null;
+		state.ruleForm.transpondCityName = null;
+		state.ruleForm.transpondCityId = null;
+		state.ruleForm.transpondCityObj = null;
+	}
+};
+// 选择市州互转
+const changeTranspondCity = (val: any) => {
+	state.ruleForm.transpondCityId = val?.id ?? null;
+	state.ruleForm.transpondCityValue = val?.dicDataValue ?? null;
+	state.ruleForm.transpondCityName = val?.dicDataName ?? null;
+};
+
 // 办理
 const handleFiles = ref<EmptyArrayType>([]); // 流程附件
 const onSubmit = (formEl: FormInstance | undefined) => {
@@ -887,11 +981,6 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 
 		state.loading = true;
 		let submitObj = other.deepClone(state.ruleForm);
-		if (submitObj.nextHandlers && submitObj.nextHandlers.length) {
-			if (submitObj.nextHandlers.length === 1) {
-				submitObj.nextMainHandler = submitObj.nextHandlers[0].key;
-			}
-		}
 		if (!flowDirection.value) {
 			// 需要填写办理时限
 			Reflect.deleteProperty(submitObj, 'timeLimit');

+ 3 - 0
src/components/ProcessAudit/ZGProcess.vue

@@ -15,6 +15,9 @@
 		:append-to-body="!isOrderAccept"
 		:modal="!isOrderAccept"
 	>
+<!--		<template  #header="{ close, titleId, titleClass }">
+			<h4 :id="titleId" :class="titleClass">{{state.dialogTitle}}<el-text tag="b" type="danger" size="large" class="ml10">随手拍</el-text></h4>
+		</template>-->
 		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" v-loading="state.loading">
 			<slot name="header"></slot>
 			<el-row :gutter="10">

+ 2 - 2
src/views/todo/seats/accept/ybAccept.vue

@@ -1070,8 +1070,8 @@ const processOrder = (orderDetail: any, isAgent: boolean) => {
 				},
 				orderDetail,
 			};
-			// processAuditRef.value.openDialog(params);
-			ybProcessRef.value.openDialog(params);
+			processAuditRef.value.openDialog(params);
+			// ybProcessRef.value.openDialog(params);
 		}
 	}
 };