!15 feat(xispeak): 督办领导列表统一改用SzUserSelectByDeptRoleSecurityModal弹窗选人,存储use…
* feat(xispeak): 督办领导列表统一改用SzUserSelectByDeptRoleSecurityModal弹窗选人,存储use… * feat(xispeak): 督办领导列表改用SzUserSelectByDeptRoleSecurityModal弹窗选人 * chore(xispeak): 更新 BPM_NODE_PERMISSIONS 节点权限配置 * feat(xispeak): 新增 showSelnextUser 权限控制,默认隐藏指定下一步操作人 * fix(xispeak): 修复是否报送上级报告字段显示0/1而非字典标签 * feat(xispeak): 新增 nonJiJianFieldsReadonly 权限控制,支持除纪检字段外全部只读 * fix(xispeak): 修复反馈表单标签对齐和网格布局问题 * fix(xispeak): 指定落实措施条数、措施已闭环数量、督办次数设为不可编辑
This commit is contained in:
@@ -36,7 +36,27 @@
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="所党委领导">
|
||||
<j-select-user v-model:value="formData.supDeptleaderid" :disabled="String(formData.isNeedAppro) !== '1'" allow-clear />
|
||||
<a-input
|
||||
v-model:value="supDeptleaderName"
|
||||
placeholder="请选择所党委领导"
|
||||
:disabled="String(formData.isNeedAppro) !== '1'"
|
||||
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>
|
||||
</template>
|
||||
|
||||
@@ -79,7 +99,9 @@
|
||||
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 JSelectUser from '/src/components/Form/src/jeecg/components/JSelectUser.vue';
|
||||
import SzUserSelectByDeptRoleSecurityModal from '/src/components/semri/userComponent/modal/SzUserSelectByDeptRoleSecurityModal.vue';
|
||||
import { SearchOutlined } from '@ant-design/icons-vue';
|
||||
import { getUserList } from '/src/api/common/api';
|
||||
import { useMessage } from '/src/hooks/web/useMessage';
|
||||
|
||||
interface ModalPayload {
|
||||
@@ -89,6 +111,7 @@
|
||||
showSuoleaderFields?: boolean;
|
||||
isNeedAppro?: string | number;
|
||||
supDeptleaderid?: string | string[];
|
||||
supDeptleaderName?: string;
|
||||
showDeadlineField?: boolean;
|
||||
deadline?: string | Date;
|
||||
}
|
||||
@@ -107,6 +130,44 @@
|
||||
const deptOptions = ref<DeptOption[]>([]);
|
||||
const showSuoleaderFields = ref(false);
|
||||
const showDeadlineField = ref(false);
|
||||
|
||||
// 所党委领导选人弹窗
|
||||
const sdwLeaderModalOpen = ref(false);
|
||||
const supDeptleaderName = ref('');
|
||||
const sdwLeaderDeptId = ref('2044677562460508161');
|
||||
const sdwLeaderRoleId = ref('2044676455280570370');
|
||||
const sdwLeaderSecurityValue = ref(5);
|
||||
|
||||
function openSdwLeaderModal() {
|
||||
if (String(formData.isNeedAppro) !== '1') return;
|
||||
sdwLeaderModalOpen.value = true;
|
||||
}
|
||||
|
||||
function handleClearSdwLeader() {
|
||||
formData.supDeptleaderid = '';
|
||||
supDeptleaderName.value = '';
|
||||
}
|
||||
|
||||
function handleSdwLeaderConfirm(rows: Array<{ id: string; realname: string }>) {
|
||||
if (rows && rows.length > 0) {
|
||||
formData.supDeptleaderid = rows.map((r) => r.username).join(',');
|
||||
supDeptleaderName.value = rows.map((r) => r.realname).join(',');
|
||||
} else {
|
||||
formData.supDeptleaderid = '';
|
||||
supDeptleaderName.value = '';
|
||||
}
|
||||
}
|
||||
|
||||
async function resolveSdwLeaderNames(ids: string) {
|
||||
try {
|
||||
const res = await getUserList({ username: ids, pageSize: 999 });
|
||||
const records = res?.records || res?.result?.records || [];
|
||||
supDeptleaderName.value = records.map((u: any) => u.realname).join(',');
|
||||
} catch {
|
||||
supDeptleaderName.value = '';
|
||||
}
|
||||
}
|
||||
|
||||
const formData = reactive({
|
||||
triggerMode: 'immediate',
|
||||
intervalType: undefined as number | string | undefined,
|
||||
@@ -126,6 +187,7 @@
|
||||
formData.deptIds = [];
|
||||
formData.isNeedAppro = '0';
|
||||
formData.supDeptleaderid = '';
|
||||
supDeptleaderName.value = '';
|
||||
formData.deadline = undefined;
|
||||
deptOptions.value = [];
|
||||
showSuoleaderFields.value = false;
|
||||
@@ -169,6 +231,10 @@
|
||||
showSuoleaderFields.value = !!data.showSuoleaderFields;
|
||||
formData.isNeedAppro = String(data.isNeedAppro ?? '0');
|
||||
formData.supDeptleaderid = data.supDeptleaderid || '';
|
||||
supDeptleaderName.value = data.supDeptleaderName || '';
|
||||
if (!supDeptleaderName.value && formData.supDeptleaderid) {
|
||||
resolveSdwLeaderNames(formData.supDeptleaderid as string);
|
||||
}
|
||||
showDeadlineField.value = !!data.showDeadlineField;
|
||||
formData.deadline = normalizeDeadlineValue(data.deadline);
|
||||
if (String(formData.isNeedAppro) !== '1') {
|
||||
@@ -228,6 +294,7 @@
|
||||
(value) => {
|
||||
if (String(value) !== '1') {
|
||||
formData.supDeptleaderid = '';
|
||||
supDeptleaderName.value = '';
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<a-modal :open="open" title="选择用户(部门+角色+密级)" :width="1000" :mask-closable="false" @cancel="handleCancel" @ok="handleOk" destroyOnClose>
|
||||
<BasicForm @register="registerForm" />
|
||||
<a-modal :open="open" :title="title" :width="1000" :mask-closable="false" @cancel="handleCancel" @ok="handleOk" destroyOnClose>
|
||||
<BasicForm v-if="!hasFixedParams" @register="registerForm" />
|
||||
|
||||
<a-table
|
||||
ref="tableRef"
|
||||
@@ -18,7 +18,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, watch, nextTick } from 'vue';
|
||||
import { ref, reactive, computed, watch, nextTick } from 'vue';
|
||||
import { BasicForm, useForm } from '@/components/Form/index';
|
||||
import { queryDepartRoleUserPageList } from '../api/user';
|
||||
|
||||
@@ -29,10 +29,13 @@
|
||||
deptId: { type: String, default: null },
|
||||
roleId: { type: String, default: null },
|
||||
securityValue: { type: Number, default: null },
|
||||
title: { type: String, default: '选择用户(部门+角色+密级)' },
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:open', 'confirm']);
|
||||
|
||||
const hasFixedParams = computed(() => !!(props.deptId && props.roleId && props.securityValue));
|
||||
|
||||
// --- 状态定义 ---
|
||||
const loading = ref(false);
|
||||
const userList = ref([]);
|
||||
@@ -99,8 +102,8 @@
|
||||
});
|
||||
|
||||
const columns = [
|
||||
{ title: '用户名', dataIndex: 'username', key: 'username', width: 120 },
|
||||
{ title: '真实姓名', dataIndex: 'realname', key: 'realname', width: 120 },
|
||||
{ title: '工号', dataIndex: 'username', key: 'username', width: 120 },
|
||||
{ title: '姓名', dataIndex: 'realname', key: 'realname', width: 120 },
|
||||
{ title: '部门', dataIndex: 'orgCodeTxt', key: 'orgCodeTxt', width: 200 },
|
||||
{ title: '密级', dataIndex: 'userSecurityLevel_dictText', key: 'userSecurityLevel', width: 100 },
|
||||
];
|
||||
@@ -109,12 +112,19 @@
|
||||
async function loadData() {
|
||||
loading.value = true;
|
||||
try {
|
||||
const values = getFieldsValue() || {};
|
||||
const params = {
|
||||
...values,
|
||||
pageNo: pagination.current,
|
||||
pageSize: pagination.pageSize,
|
||||
};
|
||||
let params;
|
||||
if (hasFixedParams.value) {
|
||||
params = {
|
||||
departId: props.deptId,
|
||||
roleId: props.roleId,
|
||||
searchSecurityLevel: props.securityValue,
|
||||
pageNo: pagination.current,
|
||||
pageSize: pagination.pageSize,
|
||||
};
|
||||
} else {
|
||||
const values = getFieldsValue() || {};
|
||||
params = { ...values, pageNo: pagination.current, pageSize: pagination.pageSize };
|
||||
}
|
||||
|
||||
const res = await queryDepartRoleUserPageList(params);
|
||||
|
||||
@@ -174,12 +184,13 @@
|
||||
() => props.open,
|
||||
async (val) => {
|
||||
if (val) {
|
||||
// 必须在 nextTick 后执行,确保 BasicForm 实例已挂载,getFieldsValue 可用
|
||||
await nextTick();
|
||||
loadData();
|
||||
await loadData();
|
||||
} else {
|
||||
// 弹窗关闭时建议重置表单和选中项
|
||||
resetFields();
|
||||
if (!hasFixedParams.value) {
|
||||
resetFields();
|
||||
}
|
||||
selectedRowKeys.value = [];
|
||||
selectedRows.value = [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user