!37 feat(inspect): DqInspectTaskForm添加必填字段校验规则

* feat(inspect): DqInspectTaskForm添加必填字段校验规则
* refactor(form): 是否需要审批字段统一替换为j-switch组件
* feat(form): 部门经办人替换为sz-dept-user-modal组件
* feat(form): 新增部门角色用户选择组件,替换各处j-select-user
This commit is contained in:
new_new_new
2026-06-15 02:47:24 +00:00
parent f649986f4a
commit c1028224c1
8 changed files with 226 additions and 79 deletions
@@ -50,7 +50,7 @@
</a-form-item>
<a-form-item label="所办领导">
<DeptRoleSelectUser
<DeptRoleUserSelectRadioGroup
v-model:value="formData.supDeptleaderid"
deptId="2044677604785229826"
roleId="2044680793306591234"
@@ -98,7 +98,7 @@
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 DeptRoleSelectUser from '/@/views/bg/xispeak/components/DeptRoleSelectUser.vue';
import DeptRoleUserSelectRadioGroup from '/@/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue';
import { useMessage } from '/src/hooks/web/useMessage';
interface ModalPayload {
@@ -0,0 +1,78 @@
<template>
<a-select
:value="modelValue || undefined"
@change="onChange"
:mode="multiple ? 'multiple' : undefined"
:disabled="disabled"
:placeholder="placeholder"
allowClear
:getPopupContainer="(node) => node.parentNode"
>
<a-select-option v-for="user in userList" :key="user.username" :value="user.username">
{{ user.realname }}
</a-select-option>
</a-select>
</template>
<script lang="ts" setup>
import { ref, onMounted, watch } from 'vue';
import { defHttp } from '/@/utils/http/axios';
const props = withDefaults(
defineProps<{
deptId: string;
roleId: string;
multiple?: boolean;
disabled?: boolean;
placeholder?: string;
}>(),
{
multiple: false,
disabled: false,
placeholder: '请选择',
},
);
const modelValue = defineModel<string>('value', { default: '' });
const userList = ref<Array<{ username: string; realname: string }>>([]);
async function fetchUserList() {
if (!props.deptId) {
userList.value = [];
return;
}
try {
const params = {
departId: props.deptId,
roleId: props.roleId,
searchSecurityLevel: 5,
pageNo: 1,
pageSize: 999,
};
const res = await defHttp.get({ url: '/sys/user/queryUserRoleComponentData', params });
const records = res?.records || res?.result?.records || [];
userList.value = records;
} catch {
userList.value = [];
}
}
onMounted(fetchUserList);
watch(
() => [props.deptId, props.roleId],
() => {
modelValue.value = '';
fetchUserList();
},
);
function onChange(value: string | string[]) {
if (props.multiple) {
modelValue.value = Array.isArray(value) ? value.join(',') : '';
} else {
modelValue.value = (value as string) || '';
}
}
</script>
@@ -0,0 +1,39 @@
<template>
<a-radio-group v-model:value="modelValue" :disabled="disabled">
<a-radio v-for="user in userList" :key="user.username" :value="user.username">
{{ user.realname }}
</a-radio>
</a-radio-group>
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
const props = defineProps<{
deptId: string;
roleId: string;
disabled?: boolean;
}>();
const modelValue = defineModel<string>('value', { default: '' });
const userList = ref<Array<{ username: string; realname: string }>>([]);
onMounted(async () => {
try {
const params = {
departId: props.deptId,
roleId: props.roleId,
searchSecurityLevel: 5,
pageNo: 1,
pageSize: 999,
};
const res = await defHttp.get({ url: '/sys/user/queryUserRoleComponentData', params });
const records = res?.records || res?.result?.records || [];
userList.value = records;
} catch {
userList.value = [];
}
});
</script>