逻辑调整

This commit is contained in:
fuenmao
2026-08-25 10:20:59 +08:00
parent 542cc635e3
commit 49a1a3ee6a
5 changed files with 700 additions and 729 deletions
+18 -332
View File
@@ -82,103 +82,9 @@
</div>
</el-tab-pane>
<el-tab-pane label="公司岗位要求" name="requirements">
<el-tab-pane label="入职模板" name="templates">
<div class="tab-card-wrapper">
<el-alert title="请先选择公司,再为全公司或某个岗位分别配置员工必填信息和上传资料。" type="info" :closable="false" class="hint" />
<el-select v-model="selectedCompanyId" placeholder="请选择公司" filterable @change="loadRequirements">
<el-option v-for="company in companies" :key="company.id" :label="company.companyName" :value="company.id" />
</el-select>
<template v-if="selectedCompanyId">
<el-divider />
<el-tabs v-model="requirementTab">
<el-tab-pane label="填写字段要求" name="form">
<div class="toolbar">
<el-button type="primary" @click="openRequirementCreate('form')">
新增填写要求
</el-button>
</div>
<el-table :data="formRequirements" border>
<el-table-column label="字段">
<template #default="scope">
{{ fieldName(scope.row.fieldId) }}
</template>
</el-table-column>
<el-table-column label="岗位">
<template #default="scope">
{{ positionName(scope.row.positionId) }}
</template>
</el-table-column>
<el-table-column label="必填">
<template #default="scope">
{{ scope.row.required ? "是" : "否" }}
</template>
</el-table-column>
<el-table-column prop="sortCode" label="排序" />
<el-table-column label="操作" width="140">
<template #default="scope">
<el-button link type="primary" @click="openRequirementEdit('form', scope.row)">
编辑
</el-button>
<el-button link type="danger" @click="removeRequirement('form', scope.row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="上传资料要求" name="material">
<div class="toolbar">
<el-button type="primary" @click="openRequirementCreate('material')">
新增资料要求
</el-button>
</div>
<el-table :data="materialRequirements" border>
<el-table-column label="资料类型">
<template #default="scope">
{{ materialName(scope.row.materialTypeId) }}
</template>
</el-table-column>
<el-table-column label="岗位">
<template #default="scope">
{{ positionName(scope.row.positionId) }}
</template>
</el-table-column>
<el-table-column label="必传">
<template #default="scope">
{{ scope.row.required ? "是" : "否" }}
</template>
</el-table-column>
<el-table-column prop="sortCode" label="排序" />
<el-table-column label="操作" width="140">
<template #default="scope">
<el-button link type="primary" @click="openRequirementEdit('material', scope.row)">
编辑
</el-button>
<el-button link type="danger" @click="removeRequirement('material', scope.row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</template>
<OnboardingTemplatePanel />
</div>
</el-tab-pane>
</el-tabs>
@@ -275,133 +181,32 @@
</el-button>
</template>
</el-dialog>
<el-dialog v-model="requirementVisible" :title="requirementKind === 'form' ? '填写字段要求' : '上传资料要求'" width="560px"
destroy-on-close>
<el-form :model="requirementForm" label-width="110px">
<el-form-item label="所属公司">
<el-select v-model="requirementForm.companyId" disabled>
<el-option v-for="company in companies" :key="company.id" :label="company.companyName"
:value="company.id" />
</el-select>
</el-form-item>
<el-form-item label="适用岗位">
<el-select v-model="requirementForm.positionId" clearable placeholder="不选表示全公司">
<el-option v-for="position in positions" :key="position.id" :label="position.positionName"
:value="position.id" />
</el-select>
</el-form-item>
<el-form-item v-if="requirementKind === 'form'" label="填写字段" required>
<el-select v-model="requirementForm.fieldId">
<el-option v-for="field in enabledFields" :key="field.id" :label="field.fieldName" :value="field.id" />
</el-select>
</el-form-item>
<el-form-item v-else label="资料类型" required>
<el-select v-model="requirementForm.materialTypeId">
<el-option v-for="material in enabledMaterials" :key="material.id" :label="material.materialName"
:value="material.id" />
</el-select>
</el-form-item>
<el-form-item label="是否必填/必传">
<el-switch v-model="requirementForm.required" />
</el-form-item>
<el-form-item label="排序">
<el-input-number v-model="requirementForm.sortCode" :min="0" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="requirementVisible = false">
取消
</el-button>
<el-button type="primary" @click="saveRequirement">
保存
</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="onboardingEntryConfig">
import {
onboardingTaskApi,
type OnboardingCompanyOption,
type OnboardingFormField,
type OnboardingFormRequirement,
type OnboardingMaterialRequirement,
type OnboardingMaterialType,
type OnboardingPositionOption
type OnboardingMaterialType
} from "@/api/modules/biz/onboarding";
import OnboardingTemplatePanel from "./components/OnboardingTemplatePanel.vue";
const activeTab = ref("fields");
const requirementTab = ref("form");
const fields = ref<OnboardingFormField[]>([]);
const materialTypes = ref<OnboardingMaterialType[]>([]);
const companies = ref<OnboardingCompanyOption[]>([]);
const positions = ref<OnboardingPositionOption[]>([]);
const formRequirements = ref<OnboardingFormRequirement[]>([]);
const materialRequirements = ref<OnboardingMaterialRequirement[]>([]);
const selectedCompanyId = ref<number>();
const fieldVisible = ref(false);
const materialVisible = ref(false);
const requirementVisible = ref(false);
const requirementKind = ref<"form" | "material">("form");
const fieldForm = reactive<Partial<OnboardingFormField>>({});
const materialForm = reactive<Partial<OnboardingMaterialType>>({});
const requirementForm = reactive<any>({});
const enabledFields = computed(() =>
fields.value.filter(item => item.status === "enable")
);
const enabledMaterials = computed(() =>
materialTypes.value.filter(item => item.status === "enable")
);
async function loadBase() {
const [
fieldResult,
materialResult,
companyResult
] = await Promise.all([
const [fieldResult, materialResult] = await Promise.all([
onboardingTaskApi.listFormFields(),
onboardingTaskApi.listMaterialTypes(),
onboardingTaskApi.listCompanies()
onboardingTaskApi.listMaterialTypes()
]);
fields.value = fieldResult.data;
materialTypes.value = materialResult.data;
companies.value = companyResult.data;
}
async function loadRequirements() {
if (!selectedCompanyId.value) return;
const [
formResult,
materialResult,
positionResult
] = await Promise.all([
onboardingTaskApi.listFormRequirements(selectedCompanyId.value),
onboardingTaskApi.listMaterialRequirements(selectedCompanyId.value),
onboardingTaskApi.listPositions(selectedCompanyId.value)
]);
formRequirements.value = formResult.data;
materialRequirements.value = materialResult.data;
positions.value = positionResult.data;
fields.value = fieldResult.data || [];
materialTypes.value = materialResult.data || [];
}
function resetField() {
@@ -440,20 +245,12 @@ function openFieldEdit(row: OnboardingFormField) {
}
async function saveField() {
if (
!fieldForm.fieldCode ||
!fieldForm.fieldName ||
!fieldForm.dataType
) {
return ElMessage.warning(
"请填写字段编码、名称和数据类型"
);
if (!fieldForm.fieldCode || !fieldForm.fieldName || !fieldForm.dataType) {
return ElMessage.warning("请填写字段编码、名称和数据类型");
}
await onboardingTaskApi.saveFormField(fieldForm);
fieldVisible.value = false;
ElMessage.success("保存成功");
await loadBase();
}
@@ -468,140 +265,29 @@ function openMaterialEdit(row: OnboardingMaterialType) {
}
async function saveMaterial() {
if (
!materialForm.materialCode ||
!materialForm.materialName
) {
return ElMessage.warning(
"请填写资料编码和名称"
);
if (!materialForm.materialCode || !materialForm.materialName) {
return ElMessage.warning("请填写资料编码和名称");
}
await onboardingTaskApi.saveMaterialType(materialForm);
materialVisible.value = false;
ElMessage.success("保存成功");
await loadBase();
}
async function removeField(row: OnboardingFormField) {
await ElMessageBox.confirm(
`确认删除字段“${row.fieldName}”?`,
"删除确认"
);
await ElMessageBox.confirm(`确认删除字段“${row.fieldName}”?`, "删除确认");
await onboardingTaskApi.deleteFormFields([row.id]);
ElMessage.success("删除成功");
await loadBase();
}
async function removeMaterial(row: OnboardingMaterialType) {
await ElMessageBox.confirm(
`确认删除资料类型“${row.materialName}”?`,
"删除确认"
);
await ElMessageBox.confirm(`确认删除资料类型“${row.materialName}”?`, "删除确认");
await onboardingTaskApi.deleteMaterialTypes([row.id]);
ElMessage.success("删除成功");
await loadBase();
}
function resetRequirement() {
Object.assign(requirementForm, {
id: undefined,
companyId: selectedCompanyId.value,
positionId: undefined,
fieldId: undefined,
materialTypeId: undefined,
required: true,
sortCode: 0
});
}
function openRequirementCreate(
kind: "form" | "material"
) {
requirementKind.value = kind;
resetRequirement();
requirementVisible.value = true;
}
function openRequirementEdit(
kind: "form" | "material",
row: any
) {
requirementKind.value = kind;
Object.assign(requirementForm, row);
requirementVisible.value = true;
}
async function saveRequirement() {
if (
requirementKind.value === "form" &&
!requirementForm.fieldId
) {
return ElMessage.warning("请选择填写字段");
}
if (
requirementKind.value === "material" &&
!requirementForm.materialTypeId
) {
return ElMessage.warning("请选择资料类型");
}
if (requirementKind.value === "form") {
await onboardingTaskApi.saveFormRequirement(
requirementForm
);
} else {
await onboardingTaskApi.saveMaterialRequirement(
requirementForm
);
}
requirementVisible.value = false;
await loadRequirements();
}
async function removeRequirement(
kind: "form" | "material",
row: any
) {
await ElMessageBox.confirm(
"确认删除该要求?",
"删除确认"
);
if (kind === "form") {
await onboardingTaskApi.deleteFormRequirements([
row.id
]);
} else {
await onboardingTaskApi.deleteMaterialRequirements([
row.id
]);
}
await loadRequirements();
}
const fieldName = (id: number) =>
fields.value.find(item => item.id === id)?.fieldName || id;
const materialName = (id: number) =>
materialTypes.value.find(item => item.id === id)?.materialName || id;
const positionName = (id?: number) =>
!id
? "全公司"
: positions.value.find(item => item.id === id)?.positionName || id;
onMounted(loadBase);
</script>