代码优化
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
<el-table-column prop="templateCode" label="模板编码" min-width="150" />
|
||||
<el-table-column prop="templateName" label="模板名称" min-width="180" />
|
||||
<el-table-column prop="companyName" label="所属公司" min-width="160" />
|
||||
<el-table-column prop="departmentName" label="所属部门" min-width="150" />
|
||||
<el-table-column label="适用岗位" min-width="220">
|
||||
<template #default="scope">
|
||||
<el-space wrap>
|
||||
@@ -86,7 +87,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="10">
|
||||
<el-col :xs="24" :sm="8">
|
||||
<el-form-item label="所属公司" required>
|
||||
<el-select v-model="form.companyId" filterable class="full-width" placeholder="请选择公司"
|
||||
@change="onCompanyChange">
|
||||
@@ -94,10 +95,20 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="14">
|
||||
<el-col :xs="24" :sm="8">
|
||||
<el-form-item label="所属部门" required>
|
||||
<el-select v-model="form.departmentId" filterable class="full-width" placeholder="请先选择公司"
|
||||
:disabled="!form.companyId" @change="onDepartmentChange">
|
||||
<el-option v-for="item in departments" :key="item.id" :label="item.departmentName"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="8">
|
||||
<el-form-item label="适用岗位" required>
|
||||
<el-select v-model="form.positionIds" multiple filterable collapse-tags collapse-tags-tooltip
|
||||
class="full-width" :disabled="!form.companyId" placeholder="请选择适用的岗位(可多选)">
|
||||
class="full-width" :disabled="!form.departmentId" placeholder="请选择适用的岗位(可多选)"
|
||||
@change="onPositionSelectionChange">
|
||||
<el-option v-for="item in positions" :key="item.id" :label="item.positionName" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -118,7 +129,8 @@
|
||||
<span class="block-title">关联合同文件</span>
|
||||
<span class="block-subtitle">选择该岗位入职时需要员工确认与签署的合同模板及版本</span>
|
||||
</div>
|
||||
<el-button type="primary" plain icon="Plus" size="small" @click="addContract">
|
||||
<el-button type="primary" plain icon="Plus" size="small" :disabled="!form.positionIds.length"
|
||||
@click="addContract">
|
||||
添加合同文件
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -220,6 +232,7 @@ import {
|
||||
OnboardingCompany,
|
||||
OnboardingContractTemplate,
|
||||
OnboardingContractVersion,
|
||||
OnboardingDepartmentOption,
|
||||
OnboardingMaterialType,
|
||||
OnboardingPosition,
|
||||
OnboardingTemplate,
|
||||
@@ -233,6 +246,7 @@ const rows = ref<OnboardingTemplate[]>([]);
|
||||
const total = ref(0);
|
||||
|
||||
const companies = ref<OnboardingCompany[]>([]);
|
||||
const departments = ref<OnboardingDepartmentOption[]>([]);
|
||||
const positions = ref<OnboardingPosition[]>([]);
|
||||
const contractTemplates = ref<OnboardingContractTemplate[]>([]);
|
||||
const materialTypes = ref<OnboardingMaterialType[]>([]);
|
||||
@@ -250,6 +264,7 @@ const form = reactive<OnboardingTemplate>({
|
||||
templateCode: "",
|
||||
templateName: "",
|
||||
companyId: 0,
|
||||
departmentId: 0,
|
||||
description: "",
|
||||
status: "enable",
|
||||
positionIds: [],
|
||||
@@ -259,13 +274,11 @@ const form = reactive<OnboardingTemplate>({
|
||||
});
|
||||
|
||||
async function loadBaseData() {
|
||||
const [companyRes, templateRes, materialRes] = await Promise.all([
|
||||
const [companyRes, materialRes] = await Promise.all([
|
||||
onboardingTaskApi.companyPage({ pageNum: 1, pageSize: 100, status: "enable" }).catch(() => ({ data: { list: [] } })),
|
||||
onboardingTaskApi.templatePage({ pageNum: 1, pageSize: 100, status: "enable" }).catch(() => ({ data: { list: [] } })),
|
||||
onboardingTaskApi.listMaterialTypes().catch(() => ({ data: [] }))
|
||||
]);
|
||||
companies.value = companyRes.data?.list || [];
|
||||
contractTemplates.value = templateRes.data?.list || [];
|
||||
materialTypes.value = materialRes.data || [];
|
||||
}
|
||||
|
||||
@@ -288,13 +301,49 @@ function resetQuery() {
|
||||
}
|
||||
|
||||
async function onCompanyChange(companyId: number) {
|
||||
form.departmentId = undefined as any;
|
||||
form.positionIds = [];
|
||||
form.contracts = [];
|
||||
departments.value = [];
|
||||
contractTemplates.value = [];
|
||||
positions.value = [];
|
||||
if (!companyId) {
|
||||
positions.value = [];
|
||||
return;
|
||||
}
|
||||
const res = await onboardingTaskApi.positionPage({ companyId, pageNum: 1, pageSize: 100, status: "enable" });
|
||||
positions.value = res.data?.list || [];
|
||||
const res = await onboardingTaskApi.listDepartments(companyId);
|
||||
departments.value = res.data || [];
|
||||
}
|
||||
|
||||
async function onDepartmentChange(departmentId: number) {
|
||||
form.positionIds = [];
|
||||
form.contracts = [];
|
||||
positions.value = [];
|
||||
contractTemplates.value = [];
|
||||
if (!departmentId) return;
|
||||
|
||||
const res = await onboardingTaskApi.listPositionsByDepartment(departmentId);
|
||||
positions.value = res.data || [];
|
||||
}
|
||||
|
||||
async function onPositionSelectionChange() {
|
||||
await loadAvailableContractTemplates();
|
||||
}
|
||||
|
||||
async function loadAvailableContractTemplates() {
|
||||
if (!form.companyId || !form.departmentId || !form.positionIds.length) {
|
||||
contractTemplates.value = [];
|
||||
form.contracts = [];
|
||||
return;
|
||||
}
|
||||
|
||||
const res = await onboardingTaskApi.listAvailableContractTemplates({
|
||||
companyId: form.companyId,
|
||||
departmentId: form.departmentId,
|
||||
positionIds: form.positionIds
|
||||
});
|
||||
contractTemplates.value = res.data || [];
|
||||
const availableIds = new Set(contractTemplates.value.map(item => item.id));
|
||||
form.contracts = form.contracts.filter(item => availableIds.has(item.contractTemplateId));
|
||||
}
|
||||
|
||||
async function onContractTemplateChange(row: any) {
|
||||
@@ -310,6 +359,15 @@ async function loadContractVersions(templateId: number) {
|
||||
}
|
||||
|
||||
function addContract() {
|
||||
if (!form.positionIds.length) {
|
||||
ElMessage.warning("请先选择适用岗位");
|
||||
return;
|
||||
}
|
||||
if (!contractTemplates.value.length) {
|
||||
ElMessage.warning("当前公司、部门和岗位没有可用的合同模板");
|
||||
return;
|
||||
}
|
||||
|
||||
form.contracts.push({
|
||||
contractTemplateId: undefined as any,
|
||||
contractTemplateVersionId: undefined as any,
|
||||
@@ -344,6 +402,7 @@ async function openCreate() {
|
||||
templateCode: "",
|
||||
templateName: "",
|
||||
companyId: undefined as any,
|
||||
departmentId: undefined as any,
|
||||
description: "",
|
||||
status: "enable",
|
||||
positionIds: [],
|
||||
@@ -351,7 +410,9 @@ async function openCreate() {
|
||||
formFields: [],
|
||||
materials: []
|
||||
});
|
||||
departments.value = [];
|
||||
positions.value = [];
|
||||
contractTemplates.value = [];
|
||||
visible.value = true;
|
||||
}
|
||||
|
||||
@@ -364,6 +425,7 @@ async function openEdit(row: OnboardingTemplate) {
|
||||
templateCode: detail.templateCode,
|
||||
templateName: detail.templateName,
|
||||
companyId: detail.companyId,
|
||||
departmentId: detail.departmentId,
|
||||
description: detail.description,
|
||||
status: detail.status,
|
||||
positionIds: detail.positionIds || [],
|
||||
@@ -383,9 +445,14 @@ async function openEdit(row: OnboardingTemplate) {
|
||||
});
|
||||
|
||||
if (form.companyId) {
|
||||
const posRes = await onboardingTaskApi.positionPage({ companyId: form.companyId, pageNum: 1, pageSize: 100, status: "enable" });
|
||||
positions.value = posRes.data?.list || [];
|
||||
const departmentRes = await onboardingTaskApi.listDepartments(form.companyId);
|
||||
departments.value = departmentRes.data || [];
|
||||
}
|
||||
if (form.departmentId) {
|
||||
const positionRes = await onboardingTaskApi.listPositionsByDepartment(form.departmentId);
|
||||
positions.value = positionRes.data || [];
|
||||
}
|
||||
await loadAvailableContractTemplates();
|
||||
for (const contract of form.contracts) {
|
||||
if (contract.contractTemplateId) {
|
||||
await loadContractVersions(contract.contractTemplateId);
|
||||
@@ -395,8 +462,14 @@ async function openEdit(row: OnboardingTemplate) {
|
||||
}
|
||||
|
||||
async function save() {
|
||||
if (!form.templateCode || !form.templateName || !form.companyId || !form.positionIds.length) {
|
||||
return ElMessage.warning("请完整填写模板编码、名称、公司及适用岗位");
|
||||
if (
|
||||
!form.templateCode
|
||||
|| !form.templateName
|
||||
|| !form.companyId
|
||||
|| !form.departmentId
|
||||
|| !form.positionIds.length
|
||||
) {
|
||||
return ElMessage.warning("请完整填写模板编码、名称、公司、部门及适用岗位");
|
||||
}
|
||||
if (!form.contracts.length || form.contracts.some(item => !item.contractTemplateId || !item.contractTemplateVersionId)) {
|
||||
return ElMessage.warning("请完整选择至少一份合同模板及版本");
|
||||
|
||||
Reference in New Issue
Block a user