From 93b8ceac34e2fbd5c57fe5ab4f5bac32c85408aa Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 22 五月 2026 15:37:09 +0800
Subject: [PATCH] fix(hr): 修正岗位字段映射
---
src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js | 71 ++++++++++++-----------------------
1 files changed, 25 insertions(+), 46 deletions(-)
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js b/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
index 3e27afb..61aa6c0 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-template/useApproveTemplate.js
@@ -3,17 +3,18 @@
deleteApprovalTemplate,
getApprovalTemplateDetail,
listApprovalTemplatePage,
- TEMPLATE_TYPE_CUSTOM,
+ TEMPLATE_TYPE_BUILTIN,
updateApprovalTemplate,
} from "@/api/officeProcessAutomation/approvalTemplate.js";
-import { getTypeEnums } from "@/api/basicData/enum.js";
import { Search } from "@element-plus/icons-vue";
import { ElMessage, ElMessageBox } from "element-plus";
-import { reactive, ref } from "vue";
+import { computed, reactive, ref } from "vue";
import {
buildApprovalTemplateListParams,
createEmptyTemplateForm,
+ fetchBusinessTypeOptions,
flowNodesSummary,
+ isBuiltinTemplate,
mapTemplateFromApi,
mapTemplateToApi,
nodeSignModeLabel,
@@ -23,38 +24,10 @@
} from "./approveTemplateConstants.js";
import { parseFormConfigToData } from "./formConfigUtils.js";
-const LEGACY_STORAGE_KEY = "oa_approve_template_custom_v1";
-
const FALLBACK_TEMPLATE_TYPE_OPTIONS = [
{ value: 0, label: "绯荤粺鍐呯疆" },
{ value: 1, label: "鑷畾涔�" },
];
-
-function unwrapEnumList(data) {
- if (Array.isArray(data)) return data;
- if (!data || typeof data !== "object") return [];
- if (Array.isArray(data.TypeEnums)) return data.TypeEnums;
- if (Array.isArray(data.typeEnums)) return data.typeEnums;
- const nested = Object.values(data).find((v) => Array.isArray(v));
- return nested || [];
-}
-
-function normalizeTypeEnumOptions(data) {
- return unwrapEnumList(data)
- .map((item) => {
- const rawValue = item?.value ?? item?.code ?? item?.businessType ?? item?.dictValue ?? item?.key;
- if (rawValue == null || rawValue === "") return null;
- const num = Number(rawValue);
- const value =
- typeof rawValue === "number" || (Number.isFinite(num) && String(rawValue).trim() !== "")
- ? num
- : rawValue;
- const label =
- item?.label ?? item?.name ?? item?.desc ?? item?.dictLabel ?? item?.text ?? String(value);
- return { label, value };
- })
- .filter(Boolean);
-}
function matchTemplateTypeValue(options, type) {
if (type == null || type === "") return false;
@@ -63,17 +36,7 @@
);
}
-function clearLegacyStorage() {
- try {
- localStorage.removeItem(LEGACY_STORAGE_KEY);
- } catch {
- /* ignore */
- }
-}
-
export function useApproveTemplate() {
- clearLegacyStorage();
-
const templateTypeOptions = ref([...FALLBACK_TEMPLATE_TYPE_OPTIONS]);
function templateTypeLabel(type) {
@@ -97,10 +60,13 @@
const form = reactive(createEmptyTemplateForm());
const formRef = ref();
+ const isEditingBuiltin = computed(
+ () => formDialog.mode === "edit" && Number(form.templateType) === TEMPLATE_TYPE_BUILTIN
+ );
+
async function loadTemplateTypeOptions() {
try {
- const res = await getTypeEnums();
- const list = normalizeTypeEnumOptions(res?.data);
+ const list = await fetchBusinessTypeOptions();
templateTypeOptions.value = list.length ? list : [...FALLBACK_TEMPLATE_TYPE_OPTIONS];
} catch {
templateTypeOptions.value = [...FALLBACK_TEMPLATE_TYPE_OPTIONS];
@@ -179,6 +145,7 @@
name: "鍒犻櫎",
type: "danger",
link: true,
+ disabled: (row) => isBuiltinTemplate(row),
clickFun: (row) => removeTemplate(row),
},
],
@@ -225,18 +192,25 @@
Object.assign(form, base);
return;
}
+ const formConfigData = JSON.parse(
+ JSON.stringify(row.formConfigData || parseFormConfigToData(row.formConfig))
+ );
+ const builtin = isBuiltinTemplate(row);
Object.assign(form, {
...base,
id: row.id,
templateName: row.templateName || "",
description: row.description || "",
+ templateType: row.templateType != null ? Number(row.templateType) : base.templateType,
businessType: row.businessType ?? "",
formConfig: row.formConfig || "",
- formConfigData: JSON.parse(
- JSON.stringify(row.formConfigData || parseFormConfigToData(row.formConfig))
- ),
+ formConfigData,
+ lockedFormFieldUids: builtin
+ ? (formConfigData.fields || []).map((f) => f._uid).filter(Boolean)
+ : [],
enabled: row.enabled !== false,
flowNodes: JSON.parse(JSON.stringify(row.flowNodes || [base.flowNodes[0]])),
+ storageBlobDTOs: JSON.parse(JSON.stringify(row.storageBlobDTOs || [])),
});
}
@@ -296,6 +270,10 @@
}
async function removeTemplate(row) {
+ if (isBuiltinTemplate(row)) {
+ ElMessage.warning("绯荤粺鍐呯疆妯℃澘涓嶅厑璁稿垹闄�");
+ return;
+ }
if (row?.id == null || row.id === "") {
ElMessage.warning("鏃犳硶鍒犻櫎锛氱己灏戞ā鏉� ID");
return;
@@ -342,6 +320,7 @@
form,
formRef,
formRules,
+ isEditingBuiltin,
detailDialog,
detailRow,
detailLoading,
--
Gitblit v1.9.3