diff --git a/src/views/oa/erp/tempTask/edit.vue b/src/views/oa/erp/tempTask/edit.vue index e1455d6..be9fce9 100644 --- a/src/views/oa/erp/tempTask/edit.vue +++ b/src/views/oa/erp/tempTask/edit.vue @@ -12,7 +12,7 @@ :mode="false" > - - - + + + + + + + @@ -119,7 +132,7 @@ - + + + + + + + - - + + + + @@ -351,7 +376,7 @@ - + @@ -386,17 +411,18 @@ import type { import type { ProjectInfoVO } from '@/api/oa/erp/projectInfo/types'; import type { DeptVO } from '@/api/system/dept/types'; import { allListDept } from '@/api/system/dept'; +import { getUserList } from '@/api/system/user'; import { getTask } from '@/api/workflow/task'; import { FlowCodeEnum } from '@/enums/OAEnum'; import ApprovalButton from '@/components/Process/approvalButton.vue'; import SubmitVerify from '@/components/Process/submitVerify.vue'; import ApprovalRecord from '@/components/Process/approvalRecord.vue'; import ProjectSelect from '@/components/ProjectSelect/index.vue'; -import UserSelect from '@/components/UserSelect/index.vue'; +// import UserSelect from '@/components/UserSelect/index.vue'; import FileUpload from '@/components/FileUpload/index.vue'; import OssFilePreview from '@/components/OssFilePreview/index.vue'; -type UserSelectMode = 'assignee' | 'realRequester' | 'member' | 'cc'; +// type UserSelectMode = 'assignee' | 'realRequester' | 'member' | 'cc'; const { proxy } = getCurrentInstance() as any; const route = useRoute(); @@ -416,9 +442,11 @@ const scoreFormRef = ref(); const submitVerifyRef = ref>(); const approvalRecordRef = ref>(); const projectSelectRef = ref>(); -const userSelectRef = ref>(); -const userSelectMode = ref('assignee'); +// const userSelectRef = ref>(); +// const userSelectMode = ref('assignee'); +const userList = ref>>([]); + const taskVariables = ref>({}); const currentNodeCode = ref(''); const deptList = ref([]); @@ -469,7 +497,7 @@ const rules: ElFormRules = { taskTitle: [{ required: true, message: '任务标题不能为空', trigger: 'blur' }], taskDesc: [{ required: true, message: '任务描述不能为空', trigger: 'blur' }], taskType: [{ required: true, message: '任务类型不能为空', trigger: 'change' }], - realRequesterName: [{ required: true, message: '实际需求人不能为空', trigger: 'change' }], + realRequesterId: [{ required: true, message: '实际需求人不能为空', trigger: 'change' }], planStartTime: [{ required: true, message: '计划开始时间不能为空', trigger: 'change' }], planEndTime: [{ required: true, message: '计划完成时间不能为空', trigger: 'change' }], realRequestDeptId: [{ required: true, message: '实际需求部门不能为空', trigger: 'change' }], @@ -502,7 +530,7 @@ const rules: ElFormRules = { const memberDialog = reactive({ visible: false }); const memberForm = ref({}); const memberRules: ElFormRules = { - userName: [{ required: true, message: '协作人不能为空', trigger: 'change' }] + userId: [{ required: true, message: '协作人不能为空', trigger: 'change' }] }; const worklogDialog = reactive({ visible: false }); @@ -538,9 +566,10 @@ const scoreForm = ref({ // leader_review/assignee_review 节点审批人可修正业务数据; // execute 工作流节点同样保持可编辑。 const isFormReadOnly = computed( - () => pageType.value === 'view' - || pageType.value === 'execute' - || (pageType.value === 'approval' && !['leader_review', 'assignee_review', 'execute'].includes(currentNodeCode.value)) + () => + pageType.value === 'view' || + pageType.value === 'execute' || + (pageType.value === 'approval' && !['leader_review', 'assignee_review', 'execute'].includes(currentNodeCode.value)) ); /** * 是否允许管理协作人(新增/移除)。 @@ -624,10 +653,20 @@ const getDeptList = async () => { deptList.value = res.data || []; }; +/** 查询用户列表,用于下拉选人 */ +const getUserSelectList = async () => { + const res = await getUserList({} as any); + userList.value = res.data || []; +}; + const findDept = (deptId?: string | number) => { return deptList.value.find((dept) => dept.deptId === deptId); }; +const findUser = (userId?: string | number) => { + return userList.value.find((user) => String(user.userId) === String(userId)); +}; + const handleTaskDeptChange = (deptId?: string | number) => { form.value.deptName = findDept(deptId)?.deptName; }; @@ -636,6 +675,29 @@ const handleRealDeptChange = (deptId?: string | number) => { form.value.realRequestDeptName = findDept(deptId)?.deptName; }; +/** 实际需求人下拉变更:回填姓名和部门 */ +const handleRealRequesterChange = (userId?: string | number) => { + const user = findUser(userId); + form.value.realRequesterName = user?.nickName; + if (user?.deptId) { + form.value.realRequestDeptId = user.deptId; + form.value.realRequestDeptName = user.deptName; + } +}; + +/** 主执行人下拉变更:回填姓名 */ +const handleAssigneeChange = (userId?: string | number) => { + const user = findUser(userId); + form.value.assigneeName = user?.nickName; +}; + +/** 协作人下拉变更:回填姓名和部门 */ +const handleMemberUserChange = (userId?: string | number) => { + const user = findUser(userId); + memberForm.value.userName = user?.nickName; + memberForm.value.memberDeptId = user?.deptId; +}; + /** * 监听 taskType 切换,联动清除不适用的表单字段。 * - 切换到非项目类型(taskType !== '3'):清除项目相关字段,避免脏数据带入提交 @@ -674,15 +736,15 @@ const handleProjectSelect = (data: ProjectInfoVO[]) => { form.value.projectName = project.projectName; }; -const openUserSelect = (mode: UserSelectMode) => { - if (isFormReadOnly.value && mode !== 'member') { - return; - } - userSelectMode.value = mode; - userSelectRef.value?.open(); -}; +// const openUserSelect = (mode: UserSelectMode) => { +// if (isFormReadOnly.value && mode !== 'member') { +// return; +// } +// userSelectMode.value = mode; +// userSelectRef.value?.open(); +// }; -const handleUserSelect = (users: Array>) => { +/*const handleUserSelect = (users: Array>) => { const selected = users?.[0]; if (!selected) { return; @@ -706,7 +768,7 @@ const handleUserSelect = (users: Array>) => { } else { form.value.ccUserIds = users.map((item) => item.userId).join(','); } -}; +};*/ /** * 从专用子表端点加载参与人/工时/评分列表(AD-13/AD-16)。 @@ -1135,6 +1197,7 @@ onMounted(async () => { try { pageType.value = (route.query.type as string) || 'add'; await getDeptList(); + await getUserSelectList(); await loadCurrentWorkflowTask(); const id = route.query.id as string | number | undefined; const taskId = route.query.taskId as string | number | undefined; diff --git a/src/views/oa/erp/tempTask/index.vue b/src/views/oa/erp/tempTask/index.vue index 385453c..4479bab 100644 --- a/src/views/oa/erp/tempTask/index.vue +++ b/src/views/oa/erp/tempTask/index.vue @@ -7,9 +7,9 @@ - +