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 = {