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