!155 feat(dq): 编辑已发起流程的记录时提示修改可能变更审批人
* feat(dq): 编辑已发起流程的记录时提示修改可能变更审批人 * feat(dq): 发起整改流程弹窗支持修改措施责任部门及负责人并回写台账 * fix(dq): 措施责任部门改为单选 * feat(user): 角色用户下拉切换按角色查询接口并加载全量
This commit is contained in:
@@ -40,11 +40,10 @@ async function fetchUserList() {
|
||||
try {
|
||||
const params = {
|
||||
roleId: props.roleId,
|
||||
searchSecurityLevel: 5,
|
||||
pageNo: 1,
|
||||
pageSize: 999,
|
||||
pageSize: -1,
|
||||
};
|
||||
const res = await defHttp.get({ url: '/sys/user/queryUserRoleComponentData', params });
|
||||
const res = await defHttp.get({ url: '/sys/user/queryUserByRoleId', params });
|
||||
const records = res?.records || res?.result?.records || [];
|
||||
userList.value = records.sort((a, b) => (a.sortno ?? Infinity) - (b.sortno ?? Infinity));
|
||||
} catch {
|
||||
|
||||
@@ -462,6 +462,7 @@
|
||||
title: '发起整改任务流程',
|
||||
payload: { record },
|
||||
deptOptions: getDeptOptions(record),
|
||||
measureResLeader: record.measureResLeader,
|
||||
showSuoleaderFields: true,
|
||||
isNeedAppro: record.isNeedAppro,
|
||||
supDeptleaderid: record.supDeptleaderid,
|
||||
@@ -478,6 +479,7 @@
|
||||
title: '发起销号流程',
|
||||
payload: { record },
|
||||
deptOptions: getDeptOptions(record),
|
||||
measureResLeader: record.measureResLeader,
|
||||
showSuoleaderFields: true,
|
||||
isNeedAppro: record.isNeedAppro,
|
||||
supDeptleaderid: record.supDeptleaderid,
|
||||
@@ -495,6 +497,17 @@
|
||||
const flowName = isDeleteFlow ? DELETE_FLOW_NAME : FLOW_NAME;
|
||||
const formUrl = isDeleteFlow ? DELETE_FORM_URL : FORM_URL;
|
||||
|
||||
const selectedDeadline = options.deadline || record.deadline || undefined;
|
||||
// 弹窗可修改字段覆盖进流程变量,保证流程表单展示与弹窗选择一致
|
||||
const flowJsonData = {
|
||||
...record,
|
||||
measureResDept: options.deptId || record.measureResDept || '',
|
||||
measureResLeader: options.measureResLeader ?? record.measureResLeader ?? '',
|
||||
isNeedAppro: options.isNeedAppro ?? record.isNeedAppro ?? '',
|
||||
supDeptleaderid: options.supDeptleaderid ?? record.supDeptleaderid ?? '',
|
||||
deadline: selectedDeadline,
|
||||
};
|
||||
|
||||
const params = {
|
||||
intervalType: options.intervalType,
|
||||
startCount: options.startCount,
|
||||
@@ -504,21 +517,35 @@
|
||||
flowCode,
|
||||
formUrl,
|
||||
flowName,
|
||||
jsonData: { ...record },
|
||||
jsonData: flowJsonData,
|
||||
businessTablename: BUSINESS_TABLE_NAME,
|
||||
businessId: record.id,
|
||||
title: record.improveMeasure || '',
|
||||
content: record.improveMeasure || '',
|
||||
deptId: options.deptId || record.measureResDept || '',
|
||||
deptLeaderId: record.measureResLeader || '',
|
||||
requireFinishDate: record.deadline || undefined,
|
||||
deadline: record.deadline || undefined,
|
||||
deptLeaderId: options.measureResLeader ?? record.measureResLeader ?? '',
|
||||
requireFinishDate: selectedDeadline,
|
||||
deadline: selectedDeadline,
|
||||
},
|
||||
};
|
||||
|
||||
await startProcessSchedules(params);
|
||||
const nextStage = (record.completedStage || 0) + 1;
|
||||
await saveOrUpdate({ id: record.id, problemId: record.problemId, bpmStatus: '2', completedStage: nextStage }, true);
|
||||
// 后端审批人匹配从数据库读取台账字段,弹窗修改需回写台账才能生效
|
||||
await saveOrUpdate(
|
||||
{
|
||||
id: record.id,
|
||||
problemId: record.problemId,
|
||||
bpmStatus: '2',
|
||||
completedStage: nextStage,
|
||||
measureResDept: options.deptId || record.measureResDept || '',
|
||||
measureResLeader: options.measureResLeader ?? record.measureResLeader ?? '',
|
||||
deadline: selectedDeadline,
|
||||
isNeedAppro: options.isNeedAppro ?? record.isNeedAppro ?? '',
|
||||
supDeptleaderid: options.supDeptleaderid ?? record.supDeptleaderid ?? '',
|
||||
},
|
||||
true
|
||||
);
|
||||
createMessage.success('发起成功');
|
||||
handleSuccess();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
<template>
|
||||
<j-modal :title="title" :width="720" :visible="visible" @ok="handleOk" @cancel="handleCancel" cancelText="取消">
|
||||
<a-form :model="formData" :label-col="{ style: { width: '120px' } }" :wrapper-col="{ span: 16 }">
|
||||
<a-form :model="formData" :label-col="{ style: { width: '160px' } }" :wrapper-col="{ span: 16 }">
|
||||
<a-alert
|
||||
type="warning"
|
||||
show-icon
|
||||
message="提示:在此窗口修改的信息(措施责任部门、措施责任部门负责人、截止时间、党群领导等)将同步更新到台账记录,并影响后续审批人匹配"
|
||||
style="margin-bottom: 12px"
|
||||
/>
|
||||
<a-form-item label="发起类型">
|
||||
<a-radio-group v-model:value="formData.triggerMode">
|
||||
<a-radio value="immediate">立即发起</a-radio>
|
||||
@@ -9,18 +15,28 @@
|
||||
<div style="color: #999; font-size: 12px; line-height: 1.6; margin-top: 4px">立即发起:仅发起一次;重复发起:按周期重复发起</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item v-if="deptOptions.length" label="牵头部门">
|
||||
<a-form-item v-if="deptOptions.length" label="措施责任部门">
|
||||
<a-select
|
||||
v-model:value="formData.deptIds"
|
||||
mode="multiple"
|
||||
:options="deptOptions"
|
||||
placeholder="请选择牵头部门"
|
||||
placeholder="请选择措施责任部门"
|
||||
allow-clear
|
||||
style="width: 100%"
|
||||
:getPopupContainer="(node) => node?.parentNode"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item v-if="deptOptions.length" label="措施责任部门负责人">
|
||||
<DeptRoleUserSelectDropDown
|
||||
v-model:value="formData.measureResLeader"
|
||||
:deptId="measureResDeptId"
|
||||
:roleId="MEASURE_RES_LEADER_ROLE_ID"
|
||||
:disabled="!measureResDeptId"
|
||||
placeholder="请选择措施责任部门负责人"
|
||||
/>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item v-if="showDeadlineField" label="事项截止时间">
|
||||
<a-date-picker
|
||||
v-model:value="formData.deadline"
|
||||
@@ -33,7 +49,10 @@
|
||||
|
||||
<template v-if="showSuoleaderFields">
|
||||
<a-form-item label="党群领导是否审批">
|
||||
<j-switch v-model:value="formData.isNeedAppro" />
|
||||
<a-radio-group v-model:value="formData.isNeedAppro">
|
||||
<a-radio value="1">是</a-radio>
|
||||
<a-radio value="0">否</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item v-show="formData.isNeedAppro === '1'" label="党群领导">
|
||||
@@ -80,11 +99,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref } from 'vue';
|
||||
import { reactive, ref, computed } from 'vue';
|
||||
import JModal from '/src/components/Modal/src/JModal/JModal.vue';
|
||||
import JDictSelectTag from '/src/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||
import JSwitch from '/src/components/Form/src/jeecg/components/JSwitch.vue';
|
||||
import DeptRoleUserSelectRadioGroup from '/@/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue';
|
||||
import DeptRoleUserSelectDropDown from '/@/components/semri/userComponent/DeptRoleUserSelectDropDown.vue';
|
||||
import { useMessage } from '/src/hooks/web/useMessage';
|
||||
import { PARTY_MASSES_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/supervision';
|
||||
|
||||
@@ -98,6 +117,7 @@ import { PARTY_MASSES_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/su
|
||||
supDeptleaderName?: string;
|
||||
showDeadlineField?: boolean;
|
||||
deadline?: string | Date;
|
||||
measureResLeader?: string;
|
||||
}
|
||||
|
||||
interface DeptOption {
|
||||
@@ -121,17 +141,21 @@ import { PARTY_MASSES_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/su
|
||||
startCount: undefined as number | undefined,
|
||||
intervalStartTime: undefined as string | undefined,
|
||||
deptIds: [] as string[],
|
||||
measureResLeader: '' as string,
|
||||
isNeedAppro: '0',
|
||||
supDeptleaderid: '' as string | string[],
|
||||
deadline: undefined as string | undefined,
|
||||
});
|
||||
|
||||
const measureResDeptId = computed(() => String(formData.deptIds?.[0] || ''));
|
||||
|
||||
function resetForm() {
|
||||
formData.triggerMode = 'immediate';
|
||||
formData.intervalType = undefined;
|
||||
formData.startCount = undefined;
|
||||
formData.intervalStartTime = undefined;
|
||||
formData.deptIds = [];
|
||||
formData.measureResLeader = '';
|
||||
formData.isNeedAppro = '0';
|
||||
formData.supDeptleaderid = '';
|
||||
formData.deadline = undefined;
|
||||
@@ -174,6 +198,7 @@ import { PARTY_MASSES_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/su
|
||||
contextData.value = data.payload || {};
|
||||
deptOptions.value = normalizeDeptOptions(data.deptOptions || []);
|
||||
formData.deptIds = deptOptions.value.map((item) => item.value);
|
||||
formData.measureResLeader = data.measureResLeader || '';
|
||||
showSuoleaderFields.value = !!data.showSuoleaderFields;
|
||||
formData.isNeedAppro = String(data.isNeedAppro ?? '0');
|
||||
formData.supDeptleaderid = data.supDeptleaderid || '';
|
||||
@@ -202,7 +227,11 @@ import { PARTY_MASSES_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/su
|
||||
}
|
||||
}
|
||||
if (deptOptions.value.length && !formData.deptIds.length) {
|
||||
createMessage.warning('请选择责任部门');
|
||||
createMessage.warning('请选择措施责任部门');
|
||||
return;
|
||||
}
|
||||
if (deptOptions.value.length && !formData.measureResLeader) {
|
||||
createMessage.warning('请选择措施责任部门负责人');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -222,6 +251,7 @@ import { PARTY_MASSES_DEPT_ID, MEASURE_RES_LEADER_ROLE_ID } from '/@/constant/su
|
||||
deptIds: [...formData.deptIds],
|
||||
isNeedAppro: showSuoleaderFields.value ? formData.isNeedAppro : undefined,
|
||||
supDeptleaderid: showSuoleaderFields.value ? (String(formData.isNeedAppro) === '1' ? formData.supDeptleaderid : '') : undefined,
|
||||
measureResLeader: formData.measureResLeader,
|
||||
deadline: showDeadlineField.value ? formData.deadline : undefined,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
<JFormContainer :disabled="disabled">
|
||||
<template #detail>
|
||||
<a-form ref="formRef" class="antd-modal-form" labelAlign="left" :labelCol="labelCol" :wrapperCol="wrapperCol" name="DqInspectTaskForm">
|
||||
<a-alert
|
||||
v-if="showFlowEditWarning"
|
||||
type="warning"
|
||||
show-icon
|
||||
message="注意:该事项已发起流程,修改表单内容可能变更流程审批人,请谨慎操作"
|
||||
description="例如:修改“需党群负责人审批”及党群领导会改变审批流程走向;"
|
||||
style="margin-bottom: 12px"
|
||||
/>
|
||||
<!-- 基本信息 -->
|
||||
<a-divider orientation="left" plain>基本信息</a-divider>
|
||||
<a-row :gutter="[16, 0]">
|
||||
@@ -80,7 +88,7 @@
|
||||
<a-row :gutter="[16, 0]">
|
||||
<a-col :span="12">
|
||||
<a-form-item label="措施责任部门" v-bind="validateInfos.measureResDept" id="DqInspectTaskForm-measureResDept" name="measureResDept">
|
||||
<SzSelectDept v-model:value="formData.measureResDept" :multiple="true" checkStrictly allow-clear />
|
||||
<SzSelectDept v-model:value="formData.measureResDept" :multiple="false" checkStrictly allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
@@ -281,6 +289,9 @@
|
||||
return props.formDisabled;
|
||||
});
|
||||
|
||||
// 已发起流程的记录编辑时提示修改可能变更审批人
|
||||
const showFlowEditWarning = computed(() => !!formData.id && String(formData.bpmStatus) === '2');
|
||||
|
||||
onMounted(() => {
|
||||
loadSpecificProblemOptions();
|
||||
initFormData();
|
||||
@@ -434,6 +445,7 @@
|
||||
labelCol,
|
||||
wrapperCol,
|
||||
disabled,
|
||||
showFlowEditWarning,
|
||||
showFlowSubmitButton,
|
||||
CHARGE_LEADER_DEPT_ID,
|
||||
CHARGE_LEADER_ROLE_ID,
|
||||
|
||||
Reference in New Issue
Block a user