فهرست منبع

reactor:宜宾新增跨级派单;

zhangchong 4 ماه پیش
والد
کامیت
ff5ba80bc8
1فایلهای تغییر یافته به همراه372 افزوده شده و 43 حذف شده
  1. 372 43
      src/components/ProcessAudit/index.vue

+ 372 - 43
src/components/ProcessAudit/index.vue

@@ -18,9 +18,9 @@
 			<el-step title="业务表单" />
 			<el-step title="流程表单" />
 		</el-steps>
-		{{ seatTopaidan ? '话务部到派单组' : '' }}
+<!--		{{ seatTopaidan ? '话务部到派单组' : '' }}
 		{{ seatToOrgOne ? '话务部到一级部门' : '' }}
-		{{ paidanToOrgOne ? '派单组到一级部门' : '' }}
+		{{ paidanToOrgOne ? '派单组到一级部门' : '' }}-->
 		<div v-show="activeStep === 0" v-loading="state.loading">
 			<el-form :model="state.delayForm" label-width="110px" ref="delayFormRef" v-if="state.processType === '延期申请'">
 				<el-row :gutter="10">
@@ -201,9 +201,9 @@
 								<el-select v-model="state.ruleForm.nextStepCode" placeholder="请选择下一环节" class="w100" @change="selectNextStep">
 									<el-option v-for="item in state.nextStepOptions" :key="item.key" :label="item.value" :value="item.key" />
 								</el-select>
-								<p class="flex-center-align color-danger" v-if="showFastSendOrder">
+<!--								<p class="flex-center-align color-danger" v-if="showFastSendOrder">
 									当前推荐派单办理对象:{{ fastStepName }} <el-button type="primary" link class="ml4" @click="fastSendOrder">快捷派单</el-button>
-								</p>
+								</p>-->
 							</el-form-item>
 						</el-col>
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!returnArr.includes(state.processType) && showHandlers">
@@ -284,9 +284,9 @@
 							<el-select v-model="state.ruleForm.nextStepCode" placeholder="请选择下一环节" class="w100" @change="selectNextStep">
 								<el-option v-for="item in state.nextStepOptions" :key="item.key" :label="item.value" :value="item.key" />
 							</el-select>
-							<p class="flex-center-align color-danger" v-if="showFastSendOrder">
+<!--							<p class="flex-center-align color-danger" v-if="showFastSendOrder">
 								当前推荐派单办理对象:{{ fastStepName }} <el-button type="primary" link class="ml4" @click="fastSendOrder">快捷派单</el-button>
-							</p>
+							</p>-->
 						</el-form-item>
 					</el-col>
 					<!-- 非退回流程都需要选择并且如果选择了结束节点就不需要选择办理对象 -->
@@ -351,6 +351,134 @@
 							</el-form-item>
 						</el-col>
 					</template>
+					<!-- 话务部到一级部门  派单组到一级部门	-->
+					<template v-if="seatToOrgOne || paidanToOrgOne">
+						<el-col :span="24">
+							<el-form-item label="派单类型" prop="orderAssignMode" :rules="[{ required: true, message: '请选择派单类型', trigger: 'change' }]">
+								<el-radio-group v-model="state.ruleForm.orderAssignMode" @change="selectDispatchType">
+									<el-radio :value="0">逐级派单</el-radio>
+									<el-radio :value="1">跨级派单</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</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"
+											placeholder="请选择接办部门"
+											class="w100"
+											multiple
+											clearable
+											collapse-tags
+											collapse-tags-tooltip
+											filterable
+											value-key="key"
+											@change="selectHandlers"
+											:multiple-limit="multipleLimit"
+										/>
+									</el-form-item>
+						</el-col>
+						<el-col :span="24" v-if="state.ruleForm.orderAssignMode === 1">
+							<el-row class="w100" :gutter="10">
+								<el-col>
+									<el-form-item label="接办部门" prop="nextHandler" :rules="[{ required: true, message: '请选择接办部门', trigger: 'change' }]">
+										<el-select-v2
+											v-model="state.ruleForm.nextHandler"
+											:options="state.handlerOptions"
+											placeholder="请选择接办部门"
+											class="w100"
+											clearable
+											filterable
+											value-key="key"
+											@change="selectHandlers"
+										/>
+									</el-form-item>
+								</el-col>
+								<!-- 二级部门 -->
+								<template v-if="showOrgLevelTwo">
+									<el-col :span="12">
+										<el-form-item label="下一环节" prop="levelTwoStep" :rules="[{ required: false, message: '请选择下一环节', trigger: 'change' }]">
+											<el-select-v2
+												v-model="state.ruleForm.levelTwoStep"
+												:options="levelTwoStepOptions"
+												placeholder="请选择下一环节"
+												class="w100"
+												filterable
+												value-key="key"
+												clearable
+												@change="selectOrgLevelTwo"
+											/>
+										</el-form-item>
+									</el-col>
+									<el-col :span="12">
+										<el-form-item
+											label="办理对象"
+											prop="levelTwoHandlers"
+											:rules="[{ required: false, message: '请选择办理对象', trigger: 'change' }]"
+										>
+											<el-select-v2
+												v-model="state.ruleForm.levelTwoHandlers"
+												:options="levelTwoHandleOptions"
+												placeholder="请选择办理对象"
+												class="w100"
+												clearable
+												filterable
+												value-key="key"
+												multiple
+												collapse-tags
+												collapse-tags-tooltip
+												:max-collapse-tags="1"
+												@change="selectOrgLevelTwoHandler"
+											/>
+										</el-form-item>
+									</el-col>
+								</template>
+								<!-- 三级部门 -->
+								<template v-if="showOrgLevelThree">
+									<el-col :span="12">
+										<el-form-item label="下一环节" prop="levelThreeStep" :rules="[{ required: false, message: '请选择下一环节', trigger: 'change' }]">
+											<el-select-v2
+												v-model="state.ruleForm.levelThreeStep"
+												:options="levelThreeStepOptions"
+												placeholder="请选择下一环节"
+												class="w100"
+												filterable
+												value-key="key"
+												clearable
+												@change="selectOrgLevelThree"
+											/>
+										</el-form-item>
+									</el-col>
+									<el-col :span="12">
+										<el-form-item
+											label="办理对象"
+											prop="levelTwoHandlers"
+											:rules="[{ required: false, message: '请选择办理对象', trigger: 'change' }]"
+										>
+											<el-select-v2
+												v-model="state.ruleForm.levelThreeHandlers"
+												:options="levelThreeHandleOptions"
+												placeholder="请选择办理对象"
+												class="w100"
+												clearable
+												filterable
+												value-key="key"
+												multiple
+												collapse-tags
+												collapse-tags-tooltip
+												:max-collapse-tags="1"
+												@change="selectOrgLevelThreeHandler"
+											/>
+										</el-form-item>
+									</el-col>
+								</template>
+							</el-row>
+						</el-col>
+					</template>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="countersignAble">
 						<el-form-item label="发起会签" prop="isStartCountersign" :rules="[{ required: false, message: '请选择发起会签', trigger: 'change' }]">
 							<el-switch
@@ -481,7 +609,7 @@ import other from '@/utils/other';
 import { useUserInfo } from '@/stores/userInfo';
 import { storeToRefs } from 'pinia';
 import { commonEnum } from '@/utils/constants';
-import { orderFlowParams, orderHandle, orderProcessTempSave, orderStartFlow, orderTimeConfig } from '@/api/business/order';
+import { orderAssignParams, orderFlowParams, orderHandle, orderProcessTempSave, orderStartFlow, orderTimeConfig } from '@/api/business/order';
 import {
 	orderPrevious,
 	workflowNext,
@@ -531,6 +659,7 @@ const state = reactive<any>({
 		isStartCountersign: false, // 是否发起会签
 		stepId: null, // 步骤id
 		// isTransferHandle:false, // 是否转办
+		orderAssignMode: 0, // 派单类型默认逐级派单
 	},
 	delayForm: {
 		//延期申请表单
@@ -859,7 +988,7 @@ const selectNextStep = (val: any) => {
 
 //  会签是否可用 (多个办理对象,并且配置可以会签)
 const countersignAble = computed(() => {
-	return canStartCountersign.value;
+	return canStartCountersign.value && state.ruleForm.orderAssignMode === 0 && selectNext.value.stepType !== 2;
 });
 // 办理对象是否能够选择多个(可以发起会签可以选择多个,不能发起会签只能选择一个)
 const multipleLimit = computed(() => {
@@ -889,7 +1018,8 @@ 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;
+	// 话务部到派单 派单组到一级部门 也不需要展示办理对象
+	return next?.stepType !== 2 && !(seatToOrgOne.value || paidanToOrgOne.value);
 });
 // 是否展示部门处理结果 ( 选择结束节点时并且当前操作人不是中心时,显示部门处理结果 )
 const showResult = computed(() => {
@@ -941,37 +1071,45 @@ watch(
 			orderTimeConfig({ flowDirection: next.flowDirection, acceptTypeCode: state.orderDetail.acceptTypeCode }).then((res: any) => {
 				state.ruleForm.timeLimit = res.result.count ?? null; // 办理时限
 				state.ruleForm.timeLimitUnit = res.result.timeType ?? ''; // 办理时限单位
-				computeTimeNext();
 			});
 		}
 	}
 );
-// 办理计算工单期满时间
-const computeTimeNext = debounce(() => {
-	if (!state.ruleForm.timeLimit || !state.ruleForm.timeLimitUnit) return;
-	let request = {
-		delayNum: state.ruleForm.timeLimit,
-		delayUnit: state.ruleForm.timeLimitUnit,
-		beginTime: state.ruleForm.expiredTime,
-	};
-	state.loading = true;
-	delayCalcEndTime(request)
-		.then((res: any) => {
-			state.ruleForm.endTime = formatDate(res.result.endTime,'YYYY-mm-dd HH:MM:SS');
-			state.loading = false;
-		})
-		.catch(() => {
-			state.delayForm.endTime = '';
-			state.loading = false;
-		});
-}, 300);
+
+// 是否展示主办
+const showMainHandler = computed(() => {
+	return state.ruleForm.nextHandlers.length > 1 && isMainHandlerShow.value;
+});
+// 主办从办理对象中选择
+state.handlerMainOptions = computed(() => {
+	return state.ruleForm.nextHandlers;
+});
+
+// 选择派单类型 需要清空选择的内容
+const selectDispatchType = () => {
+	ruleFormRef.value.resetFields('nextHandlers');
+	ruleFormRef.value.resetFields('nextHandler');
+	state.ruleForm.nextHandlers = [];
+	state.ruleForm.nextHandler = null;
+	state.ruleForm.isStartCountersign = false;
+	showOrgLevelTwo.value = false;
+	state.ruleForm.levelTwoStep = null;
+	levelTwoStepOptions.value = [];
+	levelTwoHandleOptions.value = [];
+	state.ruleForm.levelTwoHandlers = [];
+	showOrgLevelThree.value = false;
+	state.ruleForm.levelThreeStep = null;
+	state.ruleForm.levelThreeHandlers = [];
+	levelThreeStepOptions.value = [];
+	levelThreeHandleOptions.value = [];
+};
 
 // 选择办理对象
+const showOrgLevelTwo = ref(false); // 是否展示二级部门选择
+const levelTwoStepOptions = ref<EmptyArrayType>([]); // 二级部门节点
+const levelTwoHandleOptions = ref<EmptyArrayType>([]); // 二级部门办理参数
 const selectHandlers = () => {
-	ruleFormRef.value?.resetFields('nextMainHandler');
 	if (state.ruleForm.nextHandlers.length > 1) {
-		// 多个办理对象 主办
-		state.ruleForm.nextMainHandler = state.ruleForm.nextHandlers[0].key;
 		// AppConfigInfo.value.noSignOrgCode  对应的办理对象不能参与会签
 		const isProvince12345 = state.ruleForm.nextHandlers.find((item: any) => AppConfigInfo.value.noSignOrgCode.includes(item.key));
 		if (isProvince12345) {
@@ -987,15 +1125,161 @@ const selectHandlers = () => {
 		// 如果只有一个办理对象就不需要发起会签
 		state.ruleForm.isStartCountersign = false;
 	}
+	if ((seatToOrgOne.value || paidanToOrgOne.value) && state.ruleForm.orderAssignMode === 1) {
+		showOrgLevelTwo.value = false;
+		state.ruleForm.levelTwoStep = null;
+		levelTwoStepOptions.value = [];
+		levelTwoHandleOptions.value = [];
+		state.ruleForm.levelTwoHandlers = [];
+		showOrgLevelThree.value = false;
+		state.ruleForm.levelThreeStep = null;
+		state.ruleForm.levelThreeHandlers = [];
+		levelThreeStepOptions.value = [];
+		levelThreeHandleOptions.value = [];
+		state.ruleForm.nextHandlers = [state.ruleForm.nextHandler];
+		// 话务部到一级部门 派单组到一级部门 并且是跨级派单 需要查询下一级部门
+		const request = {
+			WorkflowId: state.ruleForm.workflowId,
+			StepCode: selectNext.value.key,
+			StepType: selectNext.value.stepType,
+			BusinessType: selectNext.value.businessType,
+			HandlerType: selectNext.value.handlerType,
+			OrgIds: state.ruleForm.nextHandler ? [state.ruleForm.nextHandler.key] : [],
+		};
+		orderAssignParams(request).then((res: any) => {
+			showOrgLevelTwo.value = true;
+			levelTwoStepOptions.value = res.result.steps.map((item: any) => {
+				return {
+					value: {
+						...item,
+					},
+					label: item.value,
+				};
+			});
+			if (res.result.steps.length === 1) {
+				state.ruleForm.levelTwoStep = res.result.steps[0];
+				levelTwoHandleOptions.value = state.ruleForm.levelTwoStep.items.map((item: any) => {
+					return {
+						value: {
+							...item,
+						},
+						label: item.value,
+					};
+				});
+			}
+		});
+	} else {
+		showOrgLevelTwo.value = false;
+	}
 };
-// 是否展示主办
-const showMainHandler = computed(() => {
-	return state.ruleForm.nextHandlers.length > 1 && isMainHandlerShow.value;
-});
-// 主办从办理对象中选择
-state.handlerMainOptions = computed(() => {
-	return state.ruleForm.nextHandlers;
-});
+// 选择二级部门节点
+const selectOrgLevelTwo = (val: any) => {
+	if (val) {
+		levelTwoHandleOptions.value = state.ruleForm.levelTwoStep.items.map((item: any) => {
+			return {
+				value: {
+					...item,
+				},
+				label: item.value,
+			};
+		});
+	} else {
+		levelTwoHandleOptions.value = [];
+		state.ruleForm.levelTwoHandlers = [];
+		state.ruleForm.levelThreeHandlers = [];
+		levelThreeStepOptions.value = [];
+		levelThreeHandleOptions.value = [];
+		showOrgLevelThree.value = false;
+	}
+};
+const showOrgLevelThree = ref(false);
+const levelThreeStepOptions = ref<EmptyArrayType>([]); // 三级部门节点
+const levelThreeHandleOptions = ref<EmptyArrayType>([]); // 三级部门办理参数
+// 选择二级部门办理对象 展示三级办理对象和节点
+const selectOrgLevelTwoHandler = (val: any) => {
+	const ids = val.map((item: any) => item.key);
+	if (val && val.length) {
+		const request = {
+			WorkflowId: state.ruleForm.workflowId,
+			StepCode: state.ruleForm.levelTwoStep.key,
+			StepType: state.ruleForm.levelTwoStep.stepType,
+			BusinessType: state.ruleForm.levelTwoStep.businessType,
+			HandlerType: state.ruleForm.levelTwoStep.handlerType,
+			OrgIds: ids,
+		};
+		orderAssignParams(request).then((res: any) => {
+			showOrgLevelThree.value = true;
+			levelThreeStepOptions.value = res.result.steps.map((item: any) => {
+				return {
+					value: {
+						...item,
+					},
+					label: item.value,
+				};
+			});
+			if (res.result.steps.length === 1) {
+				state.ruleForm.levelThreeStep = res.result.steps[0];
+				levelThreeHandleOptions.value = state.ruleForm.levelThreeStep.items.map((item: any) => {
+					return {
+						value: {
+							...item,
+						},
+						label: item.value,
+					};
+				});
+			}
+		});
+	} else {
+		state.ruleForm.levelThreeHandlers = [];
+		levelThreeStepOptions.value = [];
+		levelThreeHandleOptions.value = [];
+		showOrgLevelThree.value = false;
+	}
+	/*const request = {
+		WorkflowId: state.ruleForm.workflowId,
+		StepCode: val.key,
+		StepType: val.stepType,
+		BusinessType: val.businessType,
+		HandlerType: val.handlerType,
+		OrgIds: state.ruleForm.nextHandler ? [state.ruleForm.nextHandler.key] : [],
+	};
+	console.log(request, selectNext.value);
+	orderAssignParams(request).then((res: any) => {
+		console.log(res);
+		showOrgLevelTwo.value = true;
+		levelTwoStepOptions.value = res.result.steps.map((item: any) => {
+			return {
+				value: {
+					...item,
+				},
+				label: item.value,
+			};
+		});
+		if(res.result.steps.length === 1){
+			state.ruleForm.levelTwoSteps = [res.result.steps[0]];
+		}
+	});*/
+};
+// 选择三级部门节点
+const selectOrgLevelThree = (val: any) => {
+	if (val) {
+		levelThreeHandleOptions.value = state.ruleForm.levelThreeStep.items.map((item: any) => {
+			return {
+				value: {
+					...item,
+				},
+				label: item.value,
+			};
+		});
+	} else {
+		state.ruleForm.levelThreeHandlers = [];
+		levelThreeHandleOptions.value = [];
+	}
+};
+const selectOrgLevelThreeHandler = () => {};
+
+
+
 // 设置抽屉
 const dialogRef = ref<RefType>();
 const mouseup = () => {
@@ -1076,11 +1360,56 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 			isPoliceReturn: state.ruleForm.isPoliceReturn,
 			isResolved: state.ruleForm.isResolved,
 		};
+
+		let crossSteps: EmptyArrayType = [];
+		if (state.ruleForm.orderAssignMode === 1) {
+			// 如果选中了跨级派单
+			const levelOneParams = {
+				// 一级部门
+				nextStepCode: state.ruleForm.nextStepCode,
+				nextStepName: state.ruleForm.nextStepName,
+				flowDirection: state.ruleForm.flowDirection,
+				handlerType: state.ruleForm.handlerType,
+				stepType: state.ruleForm.stepType,
+				businessType: state.ruleForm.businessType,
+				nextHandlers: state.ruleForm.nextHandlers,
+				sort: 1,
+			};
+			crossSteps.push(levelOneParams);
+			if (state.ruleForm.levelTwoHandlers && state.ruleForm.levelTwoHandlers.length) {
+				// 二级部门
+				const levelTwoParams = {
+					nextStepCode: state.ruleForm.levelTwoStep.key,
+					nextStepName: state.ruleForm.levelTwoStep.value,
+					flowDirection: state.ruleForm.levelTwoStep.flowDirection,
+					handlerType: state.ruleForm.levelTwoStep.handlerType,
+					stepType: state.ruleForm.levelTwoStep.stepType,
+					businessType: state.ruleForm.levelTwoStep.businessType,
+					nextHandlers: state.ruleForm.levelTwoHandlers,
+					sort: 2,
+				};
+				crossSteps.push(levelTwoParams);
+			}
+			if (state.ruleForm.levelThreeHandlers && state.ruleForm.levelThreeHandlers.length) {
+				// 三级部门
+				const levelThreeParams = {
+					nextStepCode: state.ruleForm.levelThreeStep.key,
+					nextStepName: state.ruleForm.levelThreeStep.value,
+					flowDirection: state.ruleForm.levelThreeStep.flowDirection,
+					handlerType: state.ruleForm.levelThreeStep.handlerType,
+					stepType: state.ruleForm.levelThreeStep.stepType,
+					businessType: state.ruleForm.levelThreeStep.businessType,
+					nextHandlers: state.ruleForm.levelThreeHandlers,
+					sort: 3,
+				};
+				crossSteps.push(levelThreeParams);
+			}
+		}
 		// submitObj.stepExpiredTime = submitObj.expiredTime; //节点过期时间
 		switch (state.processType) {
 			case '工单受理':
 				const request = {
-					data: { orderId: state.orderDetail.id, ...submitObj },
+					data: { orderId: state.orderDetail.id, ...submitObj,crossSteps },
 					workflow: { ...submitObj, files: handleFiles.value },
 				};
 				orderStartFlow(request)
@@ -1284,7 +1613,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 			case '工单办理': // 工单办理流程
 			case '工单代办': // 工单代办流程
 				const requestHandle = {
-					data: { orderId: state.orderDetail.id, ...submitObj },
+					data: { orderId: state.orderDetail.id, ...submitObj, crossSteps },
 					workflow: { ...submitObj, files: handleFiles.value },
 				};
 				orderHandle(requestHandle)
@@ -1389,7 +1718,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 				break;
 			default: // 默认工单办理
 				const requestDefault = {
-					data: { orderId: state.orderDetail.id, ...submitObj },
+					data: { orderId: state.orderDetail.id, ...submitObj, crossSteps },
 					workflow: { ...submitObj, files: handleFiles.value },
 				};
 				orderHandle(requestDefault)