!31 fix(xispeak): 修复流程发起后下拉菜单显示状态不正确

* fix(xispeak): 修复流程发起后下拉菜单显示状态不正确
* refactor(xispeak): 抽取督办领导选择为DeptRoleSelectUser组件
* fix(xispeak): 修复BPM表单输入被刷掉和新增表单带入旧数据
* docs(xispeak): 更新BPM节点权限配置
This commit is contained in:
new_new_new
2026-06-11 07:51:35 +00:00
parent ace3bc4c19
commit 6f111c5933
7 changed files with 126 additions and 163 deletions
@@ -59,7 +59,7 @@
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="是否需要督办领导" v-bind="validateInfos.needSdwApproval" id="BgXiSpeakForm-needSdwApproval" name="needSdwApproval">
<a-form-item label="是否需要所党委领导督办" v-bind="validateInfos.needSdwApproval" id="BgXiSpeakForm-needSdwApproval" name="needSdwApproval">
<a-radio-group v-model:value="formData.needSdwApproval">
<a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio>
@@ -67,26 +67,11 @@
</a-form-item>
</a-col>
<a-col v-if="formData.needSdwApproval === 1" :span="12">
<a-form-item label="督办领导列表" id="BgXiSpeakForm-sdwLeaderList" name="sdwLeaderList">
<a-input
v-model:value="sdwLeaderNames"
placeholder="请选择督办领导"
readonly
allow-clear
@click="openSdwLeaderModal"
@clear="handleClearSdwLeader"
>
<template #suffix>
<SearchOutlined @click="openSdwLeaderModal" />
</template>
</a-input>
<SzUserSelectByDeptRoleSecurityModal
v-model:open="sdwLeaderModalOpen"
title="请选择所党委领导"
:deptId="sdwLeaderDeptId"
:roleId="sdwLeaderRoleId"
:securityValue="sdwLeaderSecurityValue"
@confirm="handleSdwLeaderConfirm"
<a-form-item label="所党委领导列表" id="BgXiSpeakForm-sdwLeaderList" name="sdwLeaderList">
<DeptRoleSelectUser
v-model:value="formData.sdwLeaderList"
deptId="2044677562460508161"
roleId="2044676455280570370"
/>
</a-form-item>
</a-col>
@@ -144,9 +129,7 @@
import JSelectUser from '/@/components/Form/src/jeecg/components/JSelectUser.vue';
import JTreeSelect from '/@/components/Form/src/jeecg/components/JTreeSelect.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import SzUserSelectByDeptRoleSecurityModal from '/src/components/semri/userComponent/modal/SzUserSelectByDeptRoleSecurityModal.vue';
import { SearchOutlined } from '@ant-design/icons-vue';
import { getUserList } from '/@/api/common/api';
import DeptRoleSelectUser from './DeptRoleSelectUser.vue';
import { getValueType } from '/@/utils';
import { loadTreeData, saveOrUpdateDict } from '../BgXiSpeak.api';
import { Form } from 'ant-design-vue';
@@ -161,77 +144,45 @@
const emit = defineEmits(['register', 'ok']);
let model: Nullable<Recordable> = null;
const formData = reactive<Record<string, any>>({
id: '',
pid: '',
speakStatus: '',
time: '',
elmComment: '经单位主要负责同时签批同意,由xx部做好贯彻落实',
status: 'x月x日召开xxxx年第x次党委会议',
secretLevel: '',
responsiblePerson: '',
needSdwApproval: 0,
sdwLeaderList: '',
implPlan: '',
implMeasures: '',
numberOfResolutions: undefined,
implStatus: '',
implCount: undefined,
closedCount: undefined,
reportFeedbackStatus: '',
isCompletionRisk: undefined,
delayRiskMitigation: '',
completionStatus: undefined,
deadline: '',
implDept: '',
treeDepth: undefined,
sortOrder: undefined,
delFlag: undefined,
bpmStatus: undefined,
supervisionCount: undefined,
});
function getDefaultFormData(): Record<string, any> {
return {
id: '',
pid: '',
speakStatus: '',
time: '',
elmComment: '经单位主要负责同时签批同意,由xx部做好贯彻落实',
status: 'x月x日召开xxxx年第x次党委会议',
secretLevel: '',
responsiblePerson: '',
needSdwApproval: 0,
sdwLeaderList: '',
implPlan: '',
implMeasures: '',
numberOfResolutions: undefined,
implStatus: '',
implCount: undefined,
closedCount: undefined,
reportFeedbackStatus: '',
isCompletionRisk: undefined,
delayRiskMitigation: '',
completionStatus: undefined,
deadline: '',
implDept: '',
treeDepth: undefined,
sortOrder: undefined,
delFlag: undefined,
bpmStatus: undefined,
supervisionCount: undefined,
};
}
const formData = reactive<Record<string, any>>(getDefaultFormData());
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 6 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 18 } });
const confirmLoading = ref<boolean>(false);
// 督办领导选人弹窗
const sdwLeaderModalOpen = ref(false);
const sdwLeaderNames = ref('');
const sdwLeaderDeptId = ref('2044677562460508161');
const sdwLeaderRoleId = ref('2044676455280570370');
const sdwLeaderSecurityValue = ref(5);
function openSdwLeaderModal() {
sdwLeaderModalOpen.value = true;
}
function handleClearSdwLeader() {
formData.sdwLeaderList = '';
sdwLeaderNames.value = '';
}
function handleSdwLeaderConfirm(rows: Array<{ id: string; realname: string }>) {
if (rows && rows.length > 0) {
formData.sdwLeaderList = rows.map((r) => r.username).join(',');
sdwLeaderNames.value = rows.map((r) => r.realname).join(',');
} else {
formData.sdwLeaderList = '';
sdwLeaderNames.value = '';
}
}
async function resolveSdwLeaderNames(ids: string) {
try {
const res = await getUserList({ username: ids, pageSize: 999 });
const records = res?.records || res?.result?.records || [];
sdwLeaderNames.value = records.map((u: any) => u.realname).join(',');
} catch {
sdwLeaderNames.value = '';
}
}
const validatorRules = reactive({
speakStatus: [{ required: true, message: '请输入重要讲话指示批示情况' }],
time: [{ required: true, message: '请选择时间' }],
@@ -289,13 +240,23 @@
}
function edit(record) {
// 新增:同步重置,不带入任何旧数据
if (!record.id) {
const defaults = getDefaultFormData();
for (const key of Object.keys(formData)) {
formData[key] = defaults[key];
}
model = {};
return;
}
// 编辑/详情
nextTick(async () => {
resetFields();
expandedRowKeys.value = [];
// 非BPM模式且有ID时,从API查询完整数据,避免列表行数据不完整导致字段不显示
let data = record;
if (record.id && !props.formBpm) {
if (!props.formBpm) {
try {
const res = await defHttp.get({ url: queryByIdUrl, params: { id: record.id } });
data = res || record;
@@ -312,10 +273,6 @@
});
Object.assign(formData, tmpData);
sdwLeaderNames.value = data.sdwLeaderList_dictText || '';
if (!sdwLeaderNames.value && formData.sdwLeaderList) {
resolveSdwLeaderNames(formData.sdwLeaderList);
}
model = { ...tmpData };
});
}