From b79034311b89ed754a8809a1580fca193be8dbfb Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Thu, 15 Oct 2026 17:42:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=AC=E5=8F=B8=E7=9B=96?= =?UTF-8?q?=E7=AB=A0=E4=B8=8E=E9=AA=91=E7=BC=9D=E7=AB=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modules/biz/onboarding.ts | 16 ++++ src/views/biz/onboarding/contract/index.vue | 87 +++++++++++++++++++-- src/views/biz/onboarding/task/index.vue | 5 ++ 3 files changed, 103 insertions(+), 5 deletions(-) diff --git a/src/api/modules/biz/onboarding.ts b/src/api/modules/biz/onboarding.ts index 9f00542..689ba68 100644 --- a/src/api/modules/biz/onboarding.ts +++ b/src/api/modules/biz/onboarding.ts @@ -115,6 +115,8 @@ export interface OnboardingElectronicSignDocument { originalDocxFileId?: number; signedPdfFileId?: number; employeeSignedPreviewed: boolean; + companySealEnabled: boolean; + acrossPageSealEnabled: boolean; } /** 员工已签、企业未盖章文件的契约锁只读预览。 */ @@ -245,6 +247,8 @@ export interface OnboardingContractVersion { effectiveDate?: string; expiryDate?: string; versionStatus: string; + companySealEnabled?: boolean | null; + acrossPageSealEnabled?: boolean | null; remark?: string; } @@ -782,6 +786,18 @@ export const onboardingTaskApi = { ); }, + setVersionSeals(params: { + id: number; + companySealEnabled?: boolean; + acrossPageSealEnabled?: boolean; + }) { + return moduleRequest("/biz/onboarding/contract-template/").post( + "version/set-seals", + params, + { loading: false } + ); + }, + deleteVersion(id: number) { return moduleRequest("/biz/onboarding/contract-template/").post( "version/delete", diff --git a/src/views/biz/onboarding/contract/index.vue b/src/views/biz/onboarding/contract/index.vue index 871384a..ec346f2 100644 --- a/src/views/biz/onboarding/contract/index.vue +++ b/src/views/biz/onboarding/contract/index.vue @@ -174,7 +174,7 @@
@@ -211,7 +211,7 @@ 上传新版本 DOCX - 支持多版本迭代。启用某个版本后,该版本的 DOCX 将用于生成新入职员工的签署材料。 + 支持多版本迭代。启用版本后用于生成新入职员工的签署材料;盖章开关的修改仅影响后续新建任务。
@@ -230,6 +230,31 @@ + + + + + + + @@ -315,6 +340,7 @@ v-model="versionVisible" title="上传新版本 DOCX" width="600px" + top="5vh" destroy-on-close append-to-body > @@ -370,6 +396,19 @@ /> + + + + + + + + @@ -563,7 +602,7 @@ import { isMessageBoxConfirmed } from "@/utils/messageBox"; import { useOnboardingPermission } from "@/utils/onboardingPermission"; import { copyToClipboard } from "@/utils"; -const { canManage, disabledReason } = useOnboardingPermission("onboardingContractManageAll"); +const { canManage, disabledReason, hasAction } = useOnboardingPermission("onboardingContractManageAll"); const templateTable = ref(); const selectedTemplate = ref(); @@ -655,6 +694,16 @@ async function onSearchDepartmentChange(departmentId?: number) { } const versions = ref([]); +type VersionSealField = "companySealEnabled" | "acrossPageSealEnabled"; +const sealUpdating = reactive>({}); +const canEditVersionSeals = computed(() => + canManage(selectedTemplate.value) && hasAction("onboardingContractEdit") +); +const versionSealDisabledReason = computed(() => + !hasAction("onboardingContractEdit") + ? "没有编辑签署材料模板的权限" + : disabledReason(selectedTemplate.value) +); const versionVisible = ref(false); const variablesVisible = ref(false); const variables = ref([]); @@ -690,11 +739,18 @@ const emptyTemplate = (): Partial => ({ description: "" }); -const emptyVersion = (): Partial => ({ +type OnboardingVersionForm = Partial & { + companySealEnabled: boolean; + acrossPageSealEnabled: boolean; +}; + +const emptyVersion = (): OnboardingVersionForm => ({ versionNo: "", sourceDocxFileId: undefined, effectiveDate: undefined, expiryDate: undefined, + companySealEnabled: true, + acrossPageSealEnabled: true, remark: "" }); @@ -712,7 +768,7 @@ const emptyVariable = (): Partial => ({ }); const templateForm = reactive>(emptyTemplate()); -const versionForm = reactive>(emptyVersion()); +const versionForm = reactive(emptyVersion()); const variableForm = reactive>(emptyVariable()); const templateColumns: ColumnProps[] = [ @@ -938,6 +994,27 @@ async function changeVersionStatus(row: OnboardingContractVersion, status: strin ElMessage.success(`版本状态已更新为:${versionText(status)}`); } +async function changeVersionSeal( + row: OnboardingContractVersion, + field: VersionSealField, + enabled: string | number | boolean +) { + if (typeof enabled !== "boolean" || !canEditVersionSeals.value || sealUpdating[row.id]) return; + + sealUpdating[row.id] = field; + try { + // 只提交当前开关;另一个开关和历史任务快照均保持不变。 + await onboardingTaskApi.setVersionSeals({ id: row.id, [field]: enabled }); + const currentRow = versions.value.find(item => item.id === row.id); + if (currentRow) currentRow[field] = enabled; + ElMessage.success(`${field === "companySealEnabled" ? "公司盖章" : "骑缝章"}已${enabled ? "开启" : "关闭"},仅对后续新建任务生效`); + } catch { + // 请求层统一显示错误;保存失败时保留原开关状态。 + } finally { + delete sealUpdating[row.id]; + } +} + async function removeVersion(row: OnboardingContractVersion) { const confirmed = await isMessageBoxConfirmed( ElMessageBox.confirm(`确认删除签署材料版本“${row.versionNo}”?此操作不可撤销。`, "删除确认", { type: "warning" }) diff --git a/src/views/biz/onboarding/task/index.vue b/src/views/biz/onboarding/task/index.vue index ff15891..7bce5b6 100644 --- a/src/views/biz/onboarding/task/index.vue +++ b/src/views/biz/onboarding/task/index.vue @@ -1310,6 +1310,11 @@
{{ documentItem.documentSort }}. {{ documentItem.documentName }}
+
+ 员工签字 + 公司盖章 + 骑缝章 +
{{ documentItem.providerDocumentId ? '已上传契约锁' : '发起时自动生成并上传' }}