Преглед изворни кода

reactor:延期退回开始节点修改;

zhangchong пре 1 година
родитељ
комит
78b744cb0e

+ 12 - 1
src/api/business/delay.ts

@@ -64,4 +64,15 @@ export const workflowDelayParams= () => {
         url: `/api/v1/Order/delay/startflow`,
         method: 'get'
     });
-};
+};
+/**
+ * @description 延期修改
+ * @param {object} data
+ */
+export const delayModify = (data: object) => {
+    return request({
+        url: `/api/v1/Order/delay/initial_nextFlow`,
+        method: 'post',
+        data
+    });
+}

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

@@ -66,6 +66,7 @@ export const workflowDiscernParams = () => {
 };
 /**
  * @description 甄别修改
+ * @param {object} data
  */
 
 export const discernUpdate = (data: object) => {

+ 10 - 13
src/views/business/delay/components/Delay-detail.vue

@@ -81,21 +81,18 @@ const state = reactive<any>({
  * @param row 工单详情
  * @description 打开弹窗
  * */
-const openDialog = (row: any) => {
+const openDialog = async (row: any) => {
 	state.loading = true;
 	state.currentId = row.id;
-	getDetail();
-	state.dialogVisible = true;
-};
-const getDetail = async () => {
-	try {
-		const res = await delayDetail(state.currentId);
-		state.ruleForm = res.result ?? {};
-		state.ruleForm.files = transformFile(state.ruleForm.files);
-		state.loading = false;
-	} catch (e) {
-		state.loading = false;
-	}
+  try {
+    const res = await delayDetail(state.currentId);
+    state.ruleForm = res.result ?? {};
+    state.ruleForm.files = transformFile(state.ruleForm.files);
+    state.loading = false;
+    state.dialogVisible = true;
+  } catch (e) {
+    state.loading = false;
+  }
 };
 // 关闭弹窗
 const closeDialog = () => {

+ 91 - 75
src/views/business/delay/components/Delay-edit.vue

@@ -34,36 +34,57 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 						<el-form-item label="申请时间"> {{ dayjs(state.orderDetail.creationTime).format('YYYY-MM-DD HH:mm:ss') }} </el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="申请类型" prop="type" :rules="[{ required: true, message: '请选择申请类型', trigger: 'change' }]">
-							<el-select v-model="state.discernForm.type" placeholder="请选择申请类型" class="w100" value-key="dicDataValue">
-								<el-option v-for="item in screenTypeOptions" :value="item" :key="item.dicDataValue" :label="item.dicDataName" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="申请理由" prop="content" :rules="[{ required: true, message: '请填写甄别申请理由', trigger: 'blur' }]">
-							<common-advice
-								@chooseAdvice="chooseAdviceDiscern"
-								v-model="state.discernForm.content"
-								placeholder="请填写甄别申请理由"
-								:loading="state.loading"
-								:commonEnum="commonEnum.Discriminate"
-							/>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="附件">
-							<annex-list
-								name="甄别附件"
-								ref="discernAnnexListRef"
-								v-model:format="handleFilesDiscern"
-								:businessId="state.orderDetail.orderId"
-								v-model="state.ruleForm.files"
-								classify="甄别上传"
-							/>
-						</el-form-item>
-					</el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <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-row :gutter="10">
+                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+                  <el-input-number
+                    placeholder="延期申请数量"
+                    v-model="state.delayForm.timeLimitCount"
+                    controls-position="right"
+                    class="w100"
+                    @input="computeTime"
+                    :min="1"
+                    :max="99"
+                  ></el-input-number>
+                </el-col>
+                <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-loading="state.loading">
+                  <el-form-item
+                    label=""
+                    label-width="0"
+                    prop="timeLimitUnit"
+                    :rules="[{ required: true, message: '请选择延期申请单位', trigger: 'change' }]"
+                  >
+                    <el-select v-model="state.delayForm.timeLimitUnit" placeholder="延期申请单位" @change="computeTime">
+                      <el-option v-for="item in timeType" :value="item.key" :key="item.key" :label="item.value" />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="延期后期满时间"> {{ state.delayForm.applyDelayTime }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="申请理由" prop="content" :rules="[{ required: true, message: '请填写延期申请理由', trigger: 'blur' }]">
+              <common-advice
+                @chooseAdvice="chooseAdviceDelay"
+                v-model="state.delayForm.content"
+                placeholder="请填写延期申请理由"
+                :loading="state.loading"
+                :commonEnum="commonEnum.Delay"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="附件">
+              <annex-list name="延期附件" v-model:format="handleFilesDelay" :businessId="state.orderDetail.id" classify="延期上传" />
+            </el-form-item>
+          </el-col>
 				</el-row>
 			</el-form>
 		</div>
@@ -142,12 +163,11 @@
 import { computed, defineAsyncComponent, nextTick, reactive, ref, watch } from 'vue';
 import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import other from '@/utils/other';
-import { useUserInfo } from '@/stores/userInfo';
-import { storeToRefs } from 'pinia';
 import { commonEnum } from '@/utils/constants';
-import { discernUpdate, screenBaseData, screenDetail, workflowDiscernParams } from '@/api/business/discern';
-import { transformFile } from '@/utils/tools';
+import { debounce, transformFile } from "@/utils/tools";
 import dayjs from 'dayjs';
+import { formatDate } from "@/utils/formatTime";
+import { delayBaseData, delayCalcEndTime, delayDetail, delayModify, workflowDelayParams } from "@/api/business/delay";
 
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
@@ -175,14 +195,6 @@ const state = reactive<any>({
 		content: '', // 延期申请理由
 		timeLimitUnit: 2, // 延期申请单位 默认工作日
 	},
-	discernForm: {
-		// 甄别表单
-		content: '', // 甄别理由
-	},
-	redoForm: {
-		// 重办表单
-		content: '', // 重办理由
-	},
 	nextStepOptions: [], // 下一节点
 	handlerOptions: [], // 办理对象
 	transform: 'translate(0px, 0px)', // 滚动条位置
@@ -197,55 +209,40 @@ const state = reactive<any>({
 	orderDetail: {}, // 工单详情
 });
 const ruleFormRef = ref<RefType>(); //表单组件
-const storesUserInfo = useUserInfo();
-const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
-const showStepsArr = ['延期申请', '甄别申请', '工单重办']; // 显示步骤条的流程
-const handelArr = ['工单办理']; // 处于办理状态的流程 (如果是汇总节点 需要填写办理对象等  办理流程才有期满时间)
-const returnArr = ['工单退回', '甄别退回', '延期退回']; // 退回流程 (退回流程不需要展示其他 只需要填写意见和附件即可)
-const auditArr = ['甄别审批', '延期审批']; // 审批流程
-
 const timeType = ref<EmptyArrayType>([]); // 延期申请单位
-const orderRedoReasonOptions = ref<EmptyArrayType>([]); // 重办理由
-const screenTypeOptions = ref<EmptyArrayType>([]); // 甄别类型
 
 // 打开弹窗
 const openDialog = async (val: any) => {
 	console.log(val);
 	state.loading = true;
-	state.dialogVisible = true;
+
 	try {
-		state.dialogTitle = '甄别申请'; // 流程标题
+		state.dialogTitle = '延期编辑'; // 流程标题
 		activeStep.value = 0;
+    const [workflowDelayResponse, responseDelay] = await Promise.all([workflowDelayParams(), delayBaseData()]); //获取开启流程参数
+    timeType.value = responseDelay.result?.timeType ?? []; // 延期时间单位
+    handleResult(workflowDelayResponse);
 
-		const [workflowDiscernResponse, responseDiscern] = await Promise.all([workflowDiscernParams(), screenBaseData()]); //获取开启流程参数
-		screenTypeOptions.value = responseDiscern.result?.screenType ?? []; // 甄别理由
-		handleResult(workflowDiscernResponse);
-
-		const { result } = await screenDetail(val.id);
-		state.discernForm.content = result.content ?? {};
-		state.discernForm.type = {
-			dicDataValue: result.typeDicId,
-			dicDataName: result.typeDicName,
-		};
+		const { result } = await delayDetail(val.id);
+    console.log(result);
+		state.delayForm.content = result.delayReason ?? {};
+    state.delayForm.timeLimitCount = result.delayNum ?? null;
+    state.delayForm.timeLimitUnit = result.delayUnit ?? 2;
 		state.orderDetail = result;
 		state.ruleForm.files = transformFile(result.files);
-		console.log(result);
 
 		await nextTick(() => {
 			restForm(ruleFormRef.value);
 		});
+    state.dialogVisible = true;
 	} finally {
 		state.loading = false;
 	}
 };
-const canReject = ref<boolean>(false); // 是否可以驳回
-const timeTypeOptions = ref<EmptyArrayType>([]); // 办理时限单位
 const canStartCountersign = ref<boolean>(false); // 是否可以发起会签
 const isMainHandlerShow = ref<boolean>(false); // 是否展示主办人
 const handleResult = (res: any) => {
 	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; // 是否展示主办人
 	if (state.nextStepOptions.length === 1) {
@@ -381,10 +378,29 @@ const restForm = (formEl: FormInstance | undefined) => {
 	formEl.resetFields();
 	formEl.clearValidate();
 };
-// 选择常用意见 填入填写框 甄别
-const chooseAdviceDiscern = (item: any) => {
-	state.discernForm.content += item.content;
+// 选择常用意见 填入填写框 延期
+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.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();
@@ -396,7 +412,7 @@ const close = () => {
 	restForm(discernFormRef.value);
 };
 // 提交
-const handleFilesDiscern = ref<EmptyArrayType>([]); // 甄别附件
+const handleFilesDelay = ref<EmptyArrayType>([]); // 延期附件
 const onSubmit = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
@@ -427,11 +443,11 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 						typeDicId: state.discernForm.type.dicDataValue,
 						typeDicName: state.discernForm.type.dicDataName,
 						content: state.discernForm.content,
-						files: handleFilesDiscern.value,
+						files: handleFilesDelay.value,
 					},
-					nextWorkflow: { ...submitObj, files: handleFilesDiscern.value, opinion: state.discernForm.content },
+					nextWorkflow: { ...submitObj, files: handleFilesDelay.value, opinion: state.discernForm.content },
 				};
-				discernUpdate(requestDiscern)
+        delayModify(requestDiscern)
 					.then(() => {
 						afterSubmit('updateList', true);
 					})

+ 17 - 26
src/views/business/delay/index.vue

@@ -85,7 +85,6 @@
 				<el-table-column label="操作" width="170" fixed="right" align="center">
 					<template #default="{ row }">
 						<el-button link type="primary" @click="onDetail(row)" title="查看延期详情"> 延期详情 </el-button>
-						<!--						<el-button link type="primary" @click="revocation(row)" title="撤销延期申请" v-auth="'business:delay:revoke'"> 撤销 </el-button>-->
 						<order-detail :order="row.order" @updateList="queryList" />
 					</template>
 				</el-table-column>
@@ -102,7 +101,7 @@
 			/>
 		</el-card>
 		<!--  延期详情  -->
-		<delay-detail ref="delayDetailRef" @updateList="queryList" />
+		<delay-detail-com ref="delayDetailRef" @updateList="queryList" />
     <!--  延期修改  -->
     <delay-edit ref="delayEditRef" @updateList="queryList" />
 	</div>
@@ -113,10 +112,11 @@ import { ElButton, ElMessageBox, FormInstance } from 'element-plus';
 import { throttle } from '@/utils/tools';
 import { formatDate } from '@/utils/formatTime';
 import { useRouter } from 'vue-router';
-import { delayBaseData, delayList } from '@/api/business/delay';
+import { delayBaseData, delayDetail, delayList } from "@/api/business/delay";
+import { screenDetail } from "@/api/business/discern";
 // 引入组件
-const DelayDetail = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-detail.vue')); // 延期详情
-const DelayEdit = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-detail.vue')); // 延期修改
+const DelayDetailCom = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-detail.vue')); // 延期详情
+const DelayEdit = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-edit.vue')); // 延期修改
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 
 // 定义变量内容
@@ -167,27 +167,18 @@ const onExport = () => {
 };
 const delayDetailRef = ref<RefType>();
 const delayEditRef = ref<RefType>();
-// 工单详情
-const onDetail = (row: any) => {
-	delayDetailRef.value.openDialog(row);
-};
-// 撤销
-const revocation = (row: any) => {
-	ElMessageBox.confirm(`确认撤销【${row.no}】?`, '提示', {
-		confirmButtonText: '确认',
-		cancelButtonText: '取消',
-		type: 'warning',
-		draggable: true,
-		cancelButtonClass: 'default-button',
-		autofocus: false,
-	})
-		.then(() => {
-			// orderDelete(row.id).then(() => {
-			//   ElMessage.success('操作成功');
-			//   queryList();
-			// });
-		})
-		.catch(() => {});
+// 延期详情
+const onDetail = async (row: any) => {
+  try {
+    const {result} = await delayDetail(row.id);
+    if(result.handle) { // 退回到了开始 需要重新打开编辑页面在发起流程
+      delayEditRef.value.openDialog(row);
+    } else {
+      delayDetailRef.value.openDialog(row);
+    }
+  } catch (e) {
+    console.log(e);
+  }
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();

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

@@ -169,20 +169,10 @@ const state = reactive<any>({
 		isSms: false, // 是否短信通知
 		isStartCountersign: false, // 是否发起会签
 	},
-	delayForm: {
-		//延期申请表单
-		timeLimitCount: null, // 延期申请数量
-		content: '', // 延期申请理由
-		timeLimitUnit: 2, // 延期申请单位 默认工作日
-	},
 	discernForm: {
 		// 甄别表单
 		content: '', // 甄别理由
 	},
-	redoForm: {
-		// 重办表单
-		content: '', // 重办理由
-	},
 	nextStepOptions: [], // 下一节点
 	handlerOptions: [], // 办理对象
 	transform: 'translate(0px, 0px)', // 滚动条位置
@@ -199,20 +189,12 @@ const state = reactive<any>({
 const ruleFormRef = ref<RefType>(); //表单组件
 const storesUserInfo = useUserInfo();
 const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
-const showStepsArr = ['延期申请', '甄别申请', '工单重办']; // 显示步骤条的流程
-const handelArr = ['工单办理']; // 处于办理状态的流程 (如果是汇总节点 需要填写办理对象等  办理流程才有期满时间)
-const returnArr = ['工单退回', '甄别退回', '延期退回']; // 退回流程 (退回流程不需要展示其他 只需要填写意见和附件即可)
-const auditArr = ['甄别审批', '延期审批']; // 审批流程
-
-const timeType = ref<EmptyArrayType>([]); // 延期申请单位
-const orderRedoReasonOptions = ref<EmptyArrayType>([]); // 重办理由
 const screenTypeOptions = ref<EmptyArrayType>([]); // 甄别类型
 
 // 打开弹窗
 const openDialog = async (val: any) => {
 	console.log(val);
 	state.loading = true;
-	state.dialogVisible = true;
 	try {
 		state.dialogTitle = '甄别申请'; // 流程标题
 		activeStep.value = 0;
@@ -234,18 +216,15 @@ const openDialog = async (val: any) => {
 		await nextTick(() => {
 			restForm(ruleFormRef.value);
 		});
+    state.dialogVisible = true;
 	} finally {
 		state.loading = false;
 	}
 };
-const canReject = ref<boolean>(false); // 是否可以驳回
-const timeTypeOptions = ref<EmptyArrayType>([]); // 办理时限单位
 const canStartCountersign = ref<boolean>(false); // 是否可以发起会签
 const isMainHandlerShow = ref<boolean>(false); // 是否展示主办人
 const handleResult = (res: any) => {
 	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; // 是否展示主办人
 	if (state.nextStepOptions.length === 1) {

+ 0 - 1
src/views/business/discern/index.vue

@@ -218,7 +218,6 @@ const discernEditRef = ref<RefType>(); // 甄别修改ref
 const onDetail = async (row: any) => {
   try {
     const {result} = await screenDetail(row.id);
-    console.log(result)
     if(result.handle) { // 退回到了开始 需要重新打开编辑页面在发起流程
       discernEditRef.value.openDialog(row);
     } else {

+ 18 - 4
src/views/todo/delay/index.vue

@@ -156,7 +156,9 @@
 			/>
 		</el-card>
 		<!--  延期详情  -->
-		<delay-detail ref="delayDetailRef" @updateList="queryList" />
+		<delay-detail-com ref="delayDetailRef" @updateList="queryList" />
+    <!--  延期修改  -->
+    <delay-edit ref="delayEditRef" @updateList="queryList" />
 	</div>
 </template>
 <script setup lang="ts" name="todoDelay">
@@ -166,8 +168,10 @@ import { throttle } from '@/utils/tools';
 import { formatDate } from '@/utils/formatTime';
 import { useRouter } from 'vue-router';
 import { delayList } from '@/api/todo/delay';
+import { delayDetail } from "@/api/business/delay";
 // 引入组件
-const DelayDetail = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-detail.vue')); // 延期详情
+const DelayDetailCom = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-detail.vue')); // 延期详情
+const DelayEdit = defineAsyncComponent(() => import('@/views/business/delay/components/Delay-edit.vue')); // 延期修改
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 
 // 定义变量内容
@@ -210,8 +214,18 @@ const resetQuery = throttle((formEl: FormInstance | undefined) => {
 }, 300);
 // 延期详情
 const delayDetailRef = ref<RefType>();
-const onDetail = (row: any) => {
-	delayDetailRef.value.openDialog(row);
+const delayEditRef = ref<RefType>();
+const onDetail = async (row: any) => {
+  try {
+    const {result} = await delayDetail(row.id);
+    if(result.handle) { // 退回到了开始 需要重新打开编辑页面在发起流程
+      delayEditRef.value.openDialog(row);
+    } else {
+      delayDetailRef.value.openDialog(row);
+    }
+  } catch (e) {
+    console.log(e);
+  }
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();