feat(oa/crm): 增加业务方向字段并优化出差申请流程

- 安装调试自动带出项目经理审批,默认抄送人员于洋、米兰、张兰艳、部门经理
- 市场交流按照业务方向审批,默认抄送人员张东辉、米兰、张兰艳、陈海军。
- 出差申请会议/展会按照业务方向审批,默认抄送人员张东辉、米兰、张兰艳、陈海军
dev
Yangk 2 days ago
parent 924402a16a
commit 583580b0f5

@ -145,6 +145,13 @@
<el-input v-model="form.meetingName" placeholder="请输入" :disabled="isFormDisabled" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="业务方向" prop="businessDirection">
<el-select v-model="form.businessDirection" placeholder="选择业务方向" :disabled="isFormDisabled">
<el-option v-for="dict in business_direction" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</template>
<!-- 动态字段其他 (Type 4)以及Type 1的部分复用字段 -->
@ -216,20 +223,20 @@
</el-form-item>
</el-col>
<!-- <el-col :span="24">-->
<!-- <el-form-item label="出差申请附件">-->
<!-- <file-upload-->
<!-- v-model="form.ossId"-->
<!-- :limit="5"-->
<!-- :fileSize="20"-->
<!-- :fileType="['rar', 'zip', 'doc', 'docx', 'pdf', 'jpg', 'jpeg', 'png']"-->
<!-- :isShowTip="true"-->
<!-- :disabled="isFormDisabled"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="出差申请附件">-->
<!-- <file-upload-->
<!-- v-model="form.ossId"-->
<!-- :limit="5"-->
<!-- :fileSize="20"-->
<!-- :fileType="['rar', 'zip', 'doc', 'docx', 'pdf', 'jpg', 'jpeg', 'png']"-->
<!-- :isShowTip="true"-->
<!-- :disabled="isFormDisabled"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12" v-if="!isFormDisabled">
<el-col :span="12" v-if="!isFormDisabled && form.tripType !== '1' && form.tripType !== '2' && form.tripType !== '3'">
<el-form-item label="下一步审批人" prop="variables.approverId">
<el-select
v-model="form.variables.approverId"
@ -307,9 +314,6 @@ const userList = ref<any[]>([]); // 用户列表
const deptInfoList = ref<any[]>([]); //
const customerList = ref<any[]>([]); //
//
const defaultCopyUserNames = ['米兰', '于洋', '张兰艳', '张东辉', '冯俊杰'];
//
const submitFormData = ref<StartProcessBo>({
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 = {

Loading…
Cancel
Save