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
+21 -21
View File
@@ -2,13 +2,13 @@
<div class="table-box">
<ProTable
ref="templateTable"
title="合同模板列表"
title="签署材料模板列表"
:columns="templateColumns"
:request-api="onboardingTaskApi.templatePage"
>
<template #tableHeader>
<el-button type="primary" icon="Plus" @click="openTemplateCreate">
新增合同模板
新增签署材料模板
</el-button>
</template>
@@ -60,10 +60,10 @@
</template>
</ProTable>
<!-- 新增 / 编辑合同模板基础信息弹窗 -->
<!-- 新增 / 编辑签署材料模板基础信息弹窗 -->
<el-dialog
v-model="templateVisible"
:title="templateEditing ? '编辑合同模板' : '新增合同模板'"
:title="templateEditing ? '编辑签署材料模板' : '新增签署材料模板'"
width="720px"
destroy-on-close
append-to-body
@@ -112,7 +112,7 @@
collapse-tags
collapse-tags-tooltip
class="w-full"
placeholder="请选择该合同可适用的岗位"
placeholder="请选择该签署材料可适用的岗位"
:disabled="!templateForm.departmentId"
>
<el-option
@@ -132,7 +132,7 @@
<el-input v-model="templateForm.templateName" placeholder="如:标准全职劳动合同" />
</el-form-item>
<el-form-item label="合同类型" required>
<el-form-item label="材料类型" required>
<el-input v-model="templateForm.contractType" placeholder="如:劳动合同、保密协议、竞业协议" />
</el-form-item>
@@ -144,7 +144,7 @@
</el-form-item>
<el-form-item label="模板说明">
<el-input v-model="templateForm.description" type="textarea" :rows="3" placeholder="合同模板适用说明或签署注意事项" />
<el-input v-model="templateForm.description" type="textarea" :rows="3" placeholder="签署材料模板适用说明或签署注意事项" />
</el-form-item>
</el-form>
@@ -154,10 +154,10 @@
</template>
</el-dialog>
<!-- 一站式合同版本与配置大抽屉 -->
<!-- 一站式签署材料版本与配置大抽屉 -->
<el-drawer
v-model="drawerVisible"
:title="`合同模板管理 · ${selectedTemplate?.templateName || ''}`"
:title="`签署材料模板管理 · ${selectedTemplate?.templateName || ''}`"
size="1150px"
destroy-on-close
>
@@ -188,7 +188,7 @@
上传新版本 DOCX
</el-button>
<span class="pane-tip-text">
支持多版本迭代。启用某个版本后,该版本的 DOCX 将用于生成新入职员工的合同。
支持多版本迭代。启用某个版本后,该版本的 DOCX 将用于生成新入职员工的签署材料。
</span>
</div>
@@ -274,7 +274,7 @@
</template>
</el-drawer>
<!-- 上传合同 DOCX 版本弹窗 -->
<!-- 上传签署材料 DOCX 版本弹窗 -->
<el-dialog
v-model="versionVisible"
title="上传新版本 DOCX"
@@ -334,7 +334,7 @@
<!-- 变量配置弹窗 -->
<el-dialog
v-model="variablesVisible"
:title="`合同变量配置 · 版本 ${selectedVersion?.versionNo || ''}`"
:title="`签署材料变量配置 · 版本 ${selectedVersion?.versionNo || ''}`"
width="1220px"
top="4vh"
destroy-on-close
@@ -353,7 +353,7 @@
<el-tabs v-model="variableTab" type="card" class="variable-filter-tabs">
<el-tab-pane :label="`全部变量 (${variableCounts.all})`" name="all" />
<el-tab-pane :label="`员工填写 (${variableCounts.employee})`" name="employee" />
<el-tab-pane :label="`人事合同参数 (${variableCounts.hr})`" name="hr" />
<el-tab-pane :label="`人事预设参数 (${variableCounts.hr})`" name="hr" />
<el-tab-pane :label="`公司信息 (${variableCounts.company})`" name="company" />
<el-tab-pane :label="`系统预置 (${variableCounts.system})`" name="system" />
</el-tabs>
@@ -439,7 +439,7 @@
<el-select v-model="variableForm.variableType" class="w-full">
<el-option label="员工填写(从新员工基本信息/动态字段读取)" value="employee" />
<el-option label="公司信息(从公司档案自动读取)" value="company" />
<el-option label="合同/人事填写(人事发起时录入)" value="contract" />
<el-option label="人事预设填写(人事发起时录入)" value="contract" />
<el-option label="系统生成(签署日期等)" value="system" />
</el-select>
</el-form-item>
@@ -630,7 +630,7 @@ const templateColumns: ColumnProps<OnboardingContractTemplate>[] = [
},
{ prop: "templateCode", label: "模板编码", minWidth: 160, search: { el: "input" } },
{ prop: "templateName", label: "模板名称", minWidth: 200, search: { el: "input" } },
{ prop: "contractType", label: "合同类型", width: 140, search: { el: "input" } },
{ prop: "contractType", label: "材料类型", width: 140, search: { el: "input" } },
{
prop: "status",
label: "状态",
@@ -738,7 +738,7 @@ async function saveTemplate() {
|| !templateForm.templateName
|| !templateForm.contractType
) {
return ElMessage.warning("请完整填写公司、部门、适用岗位及合同模板基本信息");
return ElMessage.warning("请完整填写公司、部门、适用岗位及签署材料模板基本信息");
}
await onboardingTaskApi.saveTemplate(templateForm, templateEditing.value);
templateVisible.value = false;
@@ -747,7 +747,7 @@ async function saveTemplate() {
}
async function removeTemplate(row: OnboardingContractTemplate) {
await ElMessageBox.confirm(`确认删除合同模板“${row.templateName}”?`, "删除确认", { type: "warning" });
await ElMessageBox.confirm(`确认删除签署材料模板“${row.templateName}”?`, "删除确认", { type: "warning" });
await onboardingTaskApi.deleteTemplate([row.id]);
templateTable.value?.refresh();
ElMessage.success("删除成功");
@@ -760,7 +760,7 @@ function openVersionCreate() {
function beforeDocxUpload(file: File) {
if (!file.name.toLowerCase().endsWith(".docx")) {
ElMessage.error("合同模板仅支持 DOCX 文件");
ElMessage.error("签署材料模板仅支持 DOCX 文件");
return false;
}
return true;
@@ -796,7 +796,7 @@ async function changeVersionStatus(row: OnboardingContractVersion, status: strin
}
async function removeVersion(row: OnboardingContractVersion) {
await ElMessageBox.confirm(`确认删除合同版本“${row.versionNo}”?此操作不可撤销。`, "删除确认", { type: "warning" });
await ElMessageBox.confirm(`确认删除签署材料版本“${row.versionNo}”?此操作不可撤销。`, "删除确认", { type: "warning" });
await onboardingTaskApi.deleteVersion(row.id);
await loadVersions();
ElMessage.success("版本删除成功");
@@ -819,7 +819,7 @@ async function downloadDocx(fileId?: number) {
const encodedName =
disposition.match(/filename\*=UTF-8\'\'([^;]+)/i)?.[1] ||
disposition.match(/filename="?([^";]+)"?/i)?.[1];
let fileName = "合同模板.docx";
let fileName = "签署材料模板.docx";
if (encodedName) {
try {
fileName = decodeURIComponent(encodedName.replace(/\+/g, "%20"));
@@ -870,7 +870,7 @@ function variableTypeText(type: string) {
const map: Record<string, string> = {
employee: "员工填写",
company: "公司信息",
contract: "人事合同参数",
contract: "人事预设参数",
system: "系统自动",
unresolved: "待确认"
};