diff --git a/src/views/oa/crm/businessTripApply/edit.vue b/src/views/oa/crm/businessTripApply/edit.vue index 0ee480b..cf391c7 100644 --- a/src/views/oa/crm/businessTripApply/edit.vue +++ b/src/views/oa/crm/businessTripApply/edit.vue @@ -145,6 +145,13 @@ + + + + + + + @@ -216,20 +223,20 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + ([]); // 用户列表 const deptInfoList = ref([]); // 部门列表 const customerList = ref([]); // 客户列表 -// 默认抄送人员的昵称列表 -const defaultCopyUserNames = ['米兰', '于洋', '张兰艳', '张东辉', '冯俊杰']; - // 流程相关数据 const submitFormData = ref({ businessId: '', @@ -366,7 +370,19 @@ const data = reactive({ exchangeProcess: [{ required: true, message: '交流过程简述不能为空', trigger: 'blur' }], feedback: [{ required: true, message: '结果反馈不能为空', trigger: 'blur' }], meetingName: [{ required: true, message: '会议/展会名称不能为空', trigger: 'blur' }], - 'variables.approverId': [{ required: true, message: '请选择下一步审批人', trigger: 'change' }] + 'variables.approverId': [ + { + required: true, + validator: (rule: any, value: any, callback: any) => { + if ((form.value.tripType === '1' || form.value.tripType === '4') && !value) { + callback(new Error('请选择下一步审批人')); + } else { + callback(); + } + }, + trigger: 'change' + } + ] } }); @@ -385,6 +401,43 @@ const computedRules = computed(() => { return baseRules; }); +// 设置默认抄送人员逻辑 +const setDefaultCopyUsers = () => { + let targetNames: string[] = []; + let includeDeptLeader = false; + + if (form.value.tripType === '1') { + // 安装调试:于洋、米兰、张兰艳、部门经理 + targetNames = ['于洋', '米兰', '张兰艳']; + includeDeptLeader = true; + } else if (form.value.tripType === '2' || form.value.tripType === '3') { + // 市场交流 / 展会/会议:张东辉、米兰、张兰艳、陈海军 + targetNames = ['张东辉', '米兰', '张兰艳', '陈海军']; + } else { + // 其他类型:默认名单 + 部门负责人/副总 + targetNames = ['米兰', '于洋', '张兰艳', '张东辉', '冯俊杰']; + includeDeptLeader = true; + } + + // 根据名字查找ID + const copyIds = userList.value + .filter((u: any) => targetNames.includes(u.nickName)) + .map((u: any) => String(u.userId)); + + // 如果包含部门经理 + if (includeDeptLeader) { + const deptInfo = deptInfoList.value.find((d: any) => d.deptId === form.value.deptId); + if (deptInfo) { + if (deptInfo.leader) copyIds.push(String(deptInfo.leader)); + if (form.value.tripType !== '1' && deptInfo.vicePresident) { + copyIds.push(String(deptInfo.vicePresident)); + } + } + } + + form.value.copyUserIds = [...new Set(copyIds)]; +}; + onMounted(async () => { nextTick(async () => { routeParams.value = route.query; @@ -411,23 +464,6 @@ onMounted(async () => { form.value.applicantName = infoRes.data.user.nickName; form.value.deptId = infoRes.data.user.deptId; form.value.deptName = infoRes.data.user.deptName; - - // 根据部门ID获取部门负责人和分管副总 - const deptInfo = deptInfoList.value.find((d: any) => d.deptId === infoRes.data.user.deptId); - if (deptInfo) { - const deptLeaderId = deptInfo.leader; - const vicePresidentId = deptInfo.vicePresident; - // 将部门负责人和分管副总加入默认抄送人员 - const deptCopyIds: string[] = []; - if (deptLeaderId) deptCopyIds.push(String(deptLeaderId)); - if (vicePresidentId) deptCopyIds.push(String(vicePresidentId)); - - // 根据昵称匹配默认抄送人员 - const defaultCopyIds = userList.value.filter((u: any) => defaultCopyUserNames.includes(u.nickName)).map((u: any) => String(u.userId)); - - // 合并默认抄送人员和部门负责人/分管副总(去重) - form.value.copyUserIds = [...new Set([...defaultCopyIds, ...deptCopyIds])]; - } } } catch (e) { console.error('获取用户信息失败', e); @@ -436,6 +472,8 @@ onMounted(async () => { if (routeParams.value.tripType) { form.value.tripType = routeParams.value.tripType; } + // 必须在 tripType 赋值后,再计算默认抄送人 + setDefaultCopyUsers(); } if (id && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) { @@ -448,22 +486,7 @@ onMounted(async () => { // 编辑模式下,如果抄送人员为空,重新设置默认抄送人员 if (routeParams.value.type === 'update' && (!form.value.copyUserIds || form.value.copyUserIds.length === 0)) { - // 根据部门ID获取部门负责人和分管副总 - const deptInfo = deptInfoList.value.find((d: any) => d.deptId === form.value.deptId); - if (deptInfo) { - const deptLeaderId = deptInfo.leader; - const vicePresidentId = deptInfo.vicePresident; - // 将部门负责人和分管副总加入默认抄送人员 - const deptCopyIds: string[] = []; - if (deptLeaderId) deptCopyIds.push(String(deptLeaderId)); - if (vicePresidentId) deptCopyIds.push(String(vicePresidentId)); - - // 根据昵称匹配默认抄送人员 - const defaultCopyIds = userList.value.filter((u: any) => defaultCopyUserNames.includes(u.nickName)).map((u: any) => String(u.userId)); - - // 合并默认抄送人员和部门负责人/分管副总(去重) - form.value.copyUserIds = [...new Set([...defaultCopyIds, ...deptCopyIds])]; - } + setDefaultCopyUsers(); } // 确保 variables 对象存在 @@ -500,9 +523,20 @@ const openProjectSelect = () => { // 项目选择回调 const projectInfoSelectCallBack = (data: ProjectInfoVO[]) => { if (data && data.length > 0) { - form.value.projectId = data[0].projectId; - form.value.projectName = data[0].projectName; - form.value.projectCode = data[0].projectCode; + const selectedProject = data[0]; + form.value.projectId = selectedProject.projectId; + form.value.projectName = selectedProject.projectName; + form.value.projectCode = selectedProject.projectCode; + + // 安装调试的出差申请时,自动带入项目经理作为下一步审批人 + if (form.value.tripType === '1' && selectedProject.managerId) { + if (!form.value.variables) { + form.value.variables = {}; + } + form.value.variables.approverId = String(selectedProject.managerId); + handleApproverSelectChange(String(selectedProject.managerId)); + proxy?.$modal.msgSuccess('已关联项目经理作为下一步审批人'); + } } }; @@ -547,6 +581,7 @@ const executeSubmit = async (status: string, mode: boolean) => { form.value.variables = { ...form.value.variables, tripType: form.value.tripType, + businessDirection: Number(form.value.businessDirection), businessTripCopyUsers: copyUserIdsStr }; form.value.bizExt = {