逻辑调整
This commit is contained in:
@@ -111,7 +111,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 发起任务弹窗 -->
|
||||
<el-dialog v-model="createVisible" title="发起入职任务" width="520px" destroy-on-close>
|
||||
<el-dialog v-model="createVisible" title="发起入职任务" width="760px" destroy-on-close>
|
||||
<el-form :model="form" label-width="90px">
|
||||
<el-form-item label="所属公司" required>
|
||||
<el-select
|
||||
@@ -132,11 +132,55 @@
|
||||
placeholder="请选择岗位"
|
||||
class="full-width"
|
||||
:disabled="!form.companyId"
|
||||
@change="onPositionChange"
|
||||
>
|
||||
<el-option v-for="item in positions" :key="item.id" :label="item.positionName" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="入职模板" required>
|
||||
<el-select
|
||||
v-model="form.onboardingTemplateId"
|
||||
filterable
|
||||
placeholder="请选择入职模板"
|
||||
class="full-width"
|
||||
:disabled="!form.positionId"
|
||||
@change="onOnboardingTemplateChange"
|
||||
>
|
||||
<el-option v-for="item in onboardingTemplates" :key="item.id" :label="item.templateName" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<template v-if="form.contractVariables.length">
|
||||
<el-divider content-position="left">合同人事参数</el-divider>
|
||||
<el-alert
|
||||
title="以下内容会在候选人查看合同时自动替换到 DOCX 中,请在发送链接前确认。"
|
||||
type="warning"
|
||||
:closable="false"
|
||||
class="contract-variable-tip"
|
||||
/>
|
||||
<el-form-item
|
||||
v-for="item in form.contractVariables"
|
||||
:key="`${item.contractTemplateVersionId}-${item.variableCode}`"
|
||||
:label="item.variableName"
|
||||
:required="item.required"
|
||||
>
|
||||
<el-date-picker
|
||||
v-if="item.dataType === 'date'"
|
||||
v-model="item.variableValue"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择日期"
|
||||
class="full-width"
|
||||
/>
|
||||
<el-input
|
||||
v-else
|
||||
v-model="item.variableValue"
|
||||
:placeholder="`${item.contractName} · ${item.variableCode}`"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<el-form-item label="人事备注">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="填写该候选人入职的相关备注(选填)" />
|
||||
</el-form-item>
|
||||
@@ -548,6 +592,8 @@ import {
|
||||
onboardingTaskApi,
|
||||
type OnboardingCompanyOption,
|
||||
type OnboardingPositionOption,
|
||||
type OnboardingTemplate,
|
||||
type OnboardingContractTemplate,
|
||||
type OnboardingTask,
|
||||
type OnboardingTaskContractVariableGroup
|
||||
} from "@/api/modules/biz/onboarding";
|
||||
@@ -557,6 +603,8 @@ const proTable = ref<ProTableInstance>();
|
||||
|
||||
const companies = ref<OnboardingCompanyOption[]>([]);
|
||||
const positions = ref<OnboardingPositionOption[]>([]);
|
||||
const onboardingTemplates = ref<OnboardingTemplate[]>([]);
|
||||
const contractTemplates = ref<OnboardingContractTemplate[]>([]);
|
||||
|
||||
const createVisible = ref(false);
|
||||
const creating = ref(false);
|
||||
@@ -582,6 +630,16 @@ const statusCounts = reactive({
|
||||
const form = reactive({
|
||||
companyId: undefined as number | undefined,
|
||||
positionId: undefined as number | undefined,
|
||||
onboardingTemplateId: undefined as number | undefined,
|
||||
contractVariables: [] as Array<{
|
||||
contractTemplateVersionId: number;
|
||||
variableCode: string;
|
||||
variableName: string;
|
||||
variableValue?: string;
|
||||
dataType: string;
|
||||
required: boolean;
|
||||
contractName: string;
|
||||
}>,
|
||||
remark: ""
|
||||
});
|
||||
|
||||
@@ -724,25 +782,88 @@ async function getTableData(params: any) {
|
||||
}
|
||||
|
||||
async function loadCompanies() {
|
||||
const { data } = await onboardingTaskApi.listCompanies();
|
||||
companies.value = data;
|
||||
try {
|
||||
const [companyResult, contractResult] = await Promise.all([
|
||||
onboardingTaskApi.listCompanies().catch(() => ({ data: [] })),
|
||||
onboardingTaskApi.templatePage({ pageNum: 1, pageSize: 100, status: "enable" }).catch(() => ({ data: { list: [] } }))
|
||||
]);
|
||||
companies.value = companyResult.data || [];
|
||||
contractTemplates.value = contractResult.data?.list || [];
|
||||
} catch (e) {
|
||||
console.error("加载公司与合同数据失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
async function onCompanyChange(companyId: number) {
|
||||
form.positionId = undefined;
|
||||
form.onboardingTemplateId = undefined;
|
||||
form.contractVariables = [];
|
||||
onboardingTemplates.value = [];
|
||||
const { data } = await onboardingTaskApi.listPositions(companyId);
|
||||
positions.value = data;
|
||||
positions.value = data || [];
|
||||
}
|
||||
|
||||
async function onPositionChange(positionId: number) {
|
||||
form.onboardingTemplateId = undefined;
|
||||
form.contractVariables = [];
|
||||
onboardingTemplates.value = [];
|
||||
if (!form.companyId || !positionId) return;
|
||||
const { data } = await onboardingTaskApi.listEnabledOnboardingTemplates(form.companyId, positionId);
|
||||
onboardingTemplates.value = data || [];
|
||||
if (onboardingTemplates.value.length === 1) {
|
||||
form.onboardingTemplateId = onboardingTemplates.value[0].id;
|
||||
await onOnboardingTemplateChange(form.onboardingTemplateId!);
|
||||
}
|
||||
}
|
||||
|
||||
async function onOnboardingTemplateChange(templateId: number) {
|
||||
form.contractVariables = [];
|
||||
if (!templateId) return;
|
||||
const { data: template } = await onboardingTaskApi.onboardingTemplateDetail({ id: templateId });
|
||||
const variableResults = await Promise.all(
|
||||
template.contracts.map(contract => onboardingTaskApi.variablePage({
|
||||
templateVersionId: contract.contractTemplateVersionId,
|
||||
pageNum: 1,
|
||||
pageSize: 100
|
||||
}))
|
||||
);
|
||||
|
||||
form.contractVariables = template.contracts.flatMap((contract, index) => {
|
||||
const contractName = contractTemplates.value.find(item => item.id === contract.contractTemplateId)?.templateName || "合同";
|
||||
return (variableResults[index].data?.list || [])
|
||||
.filter(variable => variable.hrEditable && ["contract", "company"].includes(variable.variableType))
|
||||
.map(variable => ({
|
||||
contractTemplateVersionId: contract.contractTemplateVersionId,
|
||||
variableCode: variable.variableCode,
|
||||
variableName: variable.variableName,
|
||||
variableValue: variable.defaultValue,
|
||||
dataType: variable.dataType,
|
||||
required: variable.required,
|
||||
contractName
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
function openCreate() {
|
||||
Object.assign(form, { companyId: undefined, positionId: undefined, remark: "" });
|
||||
Object.assign(form, {
|
||||
companyId: undefined,
|
||||
positionId: undefined,
|
||||
onboardingTemplateId: undefined,
|
||||
contractVariables: [],
|
||||
remark: ""
|
||||
});
|
||||
positions.value = [];
|
||||
onboardingTemplates.value = [];
|
||||
createVisible.value = true;
|
||||
}
|
||||
|
||||
async function createTask() {
|
||||
if (!form.companyId || !form.positionId) {
|
||||
return ElMessage.warning("请选择所属公司和入职岗位");
|
||||
if (!form.companyId || !form.positionId || !form.onboardingTemplateId) {
|
||||
return ElMessage.warning("请选择所属公司、入职岗位和入职模板");
|
||||
}
|
||||
const missingVariable = form.contractVariables.find(item => item.required && !String(item.variableValue || "").trim());
|
||||
if (missingVariable) {
|
||||
return ElMessage.warning(`请填写合同人事参数“${missingVariable.variableName}”`);
|
||||
}
|
||||
|
||||
creating.value = true;
|
||||
|
||||
Reference in New Issue
Block a user