This commit is contained in:
fuenmao
2026-08-28 17:32:47 +08:00
parent 14515ccdd6
commit e2697b4bdb
9 changed files with 249 additions and 174 deletions
+23 -23
View File
@@ -64,7 +64,7 @@
icon="Setting"
@click="openContractVariables(scope.row)"
>
合同参数
签署材料参数
</el-button>
<el-button
@@ -214,12 +214,12 @@
<!-- 2. 合同人事参数卡片 -->
<div v-if="form.contractVariables.length" class="form-card-section">
<div class="section-title">
<span class="title-text">合同人事参数预设</span>
<span class="title-tip">以下参数将自动替换进 DOCX 合同中,请在向员工发送链接前核对填写</span>
<span class="title-text">签署材料人事参数预设</span>
<span class="title-tip">以下参数将自动替换进 DOCX 签署材料中,请在向员工发送链接前核对填写</span>
</div>
<el-alert
title="提示:此处填写的内容将作为合同正式条款,如薪资、合同起止日期、试用期等,请谨慎填写。"
title="提示:此处填写的内容将作为签署材料正式条款,如薪资、协议起止日期、试用期等,请谨慎填写。"
type="warning"
:closable="false"
show-icon
@@ -292,7 +292,7 @@
<!-- 任务创建成功与分享弹窗 -->
<el-dialog v-model="shareVisible" title="入职任务已创建" width="560px" destroy-on-close>
<el-result icon="success" title="任务创建成功!" sub-title="请先确认合同人事参数,再将专属链接发送给候选人">
<el-result icon="success" title="任务创建成功!" sub-title="请先确认签署材料人事参数,再将专属链接发送给候选人">
<template #extra>
<div class="share-box">
<div class="share-item">
@@ -510,8 +510,8 @@
<el-card v-if="detailCustomVars.length" shadow="never" class="mb-3 border-card">
<template #header>
<div class="card-header-flex">
<span class="font-bold card-title-text">合同专属补充信息</span>
<el-tag size="small" type="warning">合同专有项</el-tag>
<span class="font-bold card-title-text">签署材料专属补充信息</span>
<el-tag size="small" type="warning">签署材料专有项</el-tag>
</div>
</template>
<el-descriptions :column="2" border size="default">
@@ -611,8 +611,8 @@
</el-tab-pane>
<!-- 3. 合同管理与归档 -->
<el-tab-pane label="入职合同列表" name="contracts">
<el-empty v-if="!detail.contracts || !detail.contracts.length" description="暂无关联合同" />
<el-tab-pane label="入职签署材料列表" name="contracts">
<el-empty v-if="!detail.contracts || !detail.contracts.length" description="暂无关联签署材料" />
<div v-else class="contracts-panel">
<div v-for="item in detail.contracts" :key="item.id" class="contract-card-item">
<div class="contract-left">
@@ -634,7 +634,7 @@
icon="DocumentChecked"
@click="generate(item.id)"
>
生成DOCX合同
生成DOCX签署材料
</el-button>
<el-button
v-else
@@ -728,24 +728,24 @@
@close="closeImageViewer"
/>
<!-- 合同参数录入弹窗 -->
<!-- 签署材料参数录入弹窗 -->
<el-dialog
v-model="contractVariablesVisible"
:title="`${contractVariableTask?.taskNo || ''} · 合同参数录入`"
:title="`${contractVariableTask?.taskNo || ''} · 签署材料参数录入`"
width="1180px"
top="4vh"
destroy-on-close
>
<div class="contract-vars-dialog-body">
<el-alert
title="说明:此处展示本次入职任务关联的所有合同变量。带有【人事变量】标签的项为本次需要 HR 填写的核心条款(如薪资、试用期、合同起止日等);员工变量与公司变量将在流程中自动带入。"
title="说明:此处展示本次入职任务关联的所有签署材料变量。带有【人事变量】标签的项为本次需要 HR 填写的核心条款(如薪资、试用期、协议起止日等);员工变量与公司变量将在流程中自动带入。"
type="info"
show-icon
:closable="false"
style="margin-bottom: 16px;"
/>
<el-empty v-if="!contractVariableGroups.length" description="当前任务合同无需配置人事变量" />
<el-empty v-if="!contractVariableGroups.length" description="当前任务签署材料无需配置人事变量" />
<div v-else>
<!-- 顶部合同分组切换 Tab -->
@@ -862,7 +862,7 @@
<div class="dialog-footer-flex">
<el-button @click="contractVariablesVisible = false">关闭</el-button>
<el-button type="primary" icon="Check" :loading="savingAllVars" @click="saveAllContractVariables">
一键保存全部合同参数
一键保存全部签署材料参数
</el-button>
</div>
</template>
@@ -1112,7 +1112,7 @@ const variableTypeText = (type: string) => {
const map: Record<string, string> = {
employee: "员工变量",
company: "公司变量",
contract: "合同人事参数",
contract: "人事预设参数",
system: "系统变量"
};
return map[type] || type;
@@ -1359,7 +1359,7 @@ async function createTask() {
item => item.required && isBlankContractVariableValue(item.variableValue)
);
if (missingVariable) {
return ElMessage.warning(`请填写合同人事参数“${missingVariable.variableName}”`);
return ElMessage.warning(`请填写签署材料人事参数“${missingVariable.variableName}”`);
}
creating.value = true;
@@ -1403,7 +1403,7 @@ function copyText(text?: string, successMsg = "复制成功") {
function copyInviteMessage() {
if (!createdTaskInfo.value) return;
const msg = `【入职邀请】您好!欢迎加入${createdTaskInfo.value.companyName},担任${createdTaskInfo.value.positionName}一职。请点击以下链接完成您的入职登记与合同确认:${createdTaskInfo.value.linkUrl} (链接有效期至:${createdTaskInfo.value.expiresAt})`;
const msg = `【入职邀请】您好!欢迎加入${createdTaskInfo.value.companyName},担任${createdTaskInfo.value.positionName}一职。请点击以下链接完成您的入职登记与签署材料确认:${createdTaskInfo.value.linkUrl} (链接有效期至:${createdTaskInfo.value.expiresAt})`;
copyText(msg, "邀请文案已复制至剪贴板");
}
@@ -1457,7 +1457,7 @@ async function saveContractVariables(group: OnboardingTaskContractVariableGroup)
);
if (requiredBlank) {
return ElMessage.warning("请填写所有必填合同人事参数");
return ElMessage.warning("请填写所有必填签署材料人事参数");
}
await onboardingTaskApi.saveTaskContractVariables({
@@ -1489,7 +1489,7 @@ async function saveAllContractVariables() {
values: buildContractVariableSaveValues(group)
});
}
ElMessage.success("全部合同参数已保存成功!");
ElMessage.success("全部签署材料参数已保存成功!");
contractVariablesVisible.value = false;
} finally {
savingAllVars.value = false;
@@ -1520,7 +1520,7 @@ function buildContractVariableSaveValues(group: OnboardingTaskContractVariableGr
async function approve(row: OnboardingTask) {
await ElMessageBox.confirm(
"确认审核通过?系统将自动创建正式员工档案并锁定合同快照。",
"确认审核通过?系统将自动创建正式员工档案并锁定签署材料快照。",
"审核通过确认",
{ type: "success", confirmButtonText: "审核通过", cancelButtonText: "取消" }
);
@@ -1546,7 +1546,7 @@ async function reject(row: OnboardingTask) {
async function generate(taskContractId: number) {
await onboardingTaskApi.generateContract(taskContractId);
ElMessage.success("DOCX合同文件已生成");
ElMessage.success("DOCX签署材料文件已生成");
if (detail.value?.task?.id) {
await showDetail(detail.value.task, true);
}
@@ -2163,7 +2163,7 @@ onMounted(loadCompanies);
color: #2563eb;
}
/* 合同参数录入弹窗优化 */
/* 签署材料参数录入弹窗优化 */
.contract-vars-dialog-body {
max-height: 68vh;
overflow-y: auto;