From 123ad0e605e9ccd4c6c8535c979edf697f37554c Mon Sep 17 00:00:00 2001 From: zhouxiaofeng <2946471396@qq.com> Date: Tue, 23 Jun 2026 16:08:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=9D=83=E9=99=90=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/manifest.js | 8 +++ .../ContractTemplateManageModal.vue | 60 ++++++++++++++----- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/src/api/manifest.js b/src/api/manifest.js index 3abf8e4..6c8b715 100644 --- a/src/api/manifest.js +++ b/src/api/manifest.js @@ -71,3 +71,11 @@ export function downloadTemplateFile(fileName) { responseType: "arraybuffer", }); } + +/** 获取组织树(用于发布范围选择) */ +export function getOrgTree() { + return request({ + url: "/admin/org/getOrgTree", + method: "get", + }).then((res) => (isSuccessResponse(res) ? getResult(res) || [] : [])); +} diff --git a/src/views/contract/manifest/components/ContractTemplateManageModal.vue b/src/views/contract/manifest/components/ContractTemplateManageModal.vue index 4fd5f81..bf572b4 100644 --- a/src/views/contract/manifest/components/ContractTemplateManageModal.vue +++ b/src/views/contract/manifest/components/ContractTemplateManageModal.vue @@ -69,13 +69,15 @@ - @@ -323,7 +325,7 @@ import PizZip from 'pizzip' import { renderAsync } from 'docx-preview' import { downloadTemplateFile, - queryManifestOrgOptions, + getOrgTree, uploadTemplateFile, } from '@/api/manifest.js' import { contractTypeTreeOptions } from '../contractTypeOptions.js' @@ -367,7 +369,8 @@ const templateArrayBuffer = ref(null) const templateUploadList = ref([]) const variableMappings = ref([]) const detectedVariableKeys = ref([]) -const orgOptions = ref([]) +const orgTreeData = ref([]) +const SHOW_PARENT = 'SHOW_PARENT' const templateFieldList = ref([]) let previewTimer = null @@ -761,7 +764,7 @@ async function renderPreview() { function buildRecord(status) { const now = dayjs().format('YYYY-MM-DD HH:mm:ss') - const orgNameMap = new Map(orgOptions.value.map((item) => [item.value, item.label])) + const orgNameMap = buildOrgNameMap(orgTreeData.value) const publishOrgNames = (formState.publishOrgIds || []) .map((item) => orgNameMap.get(item)) .filter(Boolean) @@ -933,16 +936,43 @@ async function handleDownloadCurrentTemplate() { } } +/** + * 将后端组织树节点转为 a-tree-select 需要的格式 + */ +function convertOrgTreeToTreeSelect(node) { + const treeNode = { + value: String(node.id), + label: (node.orgName || '').trim(), + } + if (node.children && node.children.length > 0) { + treeNode.children = node.children.map(convertOrgTreeToTreeSelect) + } + return treeNode +} + +/** + * 从树数据构建 orgId → orgName 的映射(递归遍历) + */ +function buildOrgNameMap(treeData) { + const map = new Map() + function walk(list) { + if (!list) return + for (const item of list) { + map.set(item.value, item.label) + walk(item.children) + } + } + walk(treeData) + return map +} + async function showModal(record = {}, mode = 'create') { resetState() modalMode.value = mode || 'create' await ensureTemplateFieldListLoaded() - if (!orgOptions.value.length) { - const orgList = await queryManifestOrgOptions() - orgOptions.value = (orgList || []).map((item) => ({ - label: item.orgName, - value: item.orgId, - })) + if (!orgTreeData.value.length) { + const tree = await getOrgTree() + orgTreeData.value = (tree || []).map(convertOrgTreeToTreeSelect) } const defaultState = createDefaultFormState()