import { request } from '@/core/request' export type OrganizationNode = { /** 机构编号,用于节点标识和选中态判断。 */ code: string /** 机构名称,头寸查询接口使用该字段。 */ name: string /** 仅有子机构时保留,减小本地缓存体积。 */ children?: OrganizationNode[] } type RawOrganizationNode = { id?: string | number text?: string children?: RawOrganizationNode[] attributes?: { orgId?: string | number orgNo?: string | number orgName?: string } } const ORGANIZATION_TREE_URL = '/uaa/org/tree' /** * 获取并精简机构树。 * * 原始数据中 checked、hasChildren、hasParent、state 等属性只用于 * 后端树组件,与当前查询无关;此处只返回编号、名称和子节点。 */ export async function getOrganizationTreeApi(): Promise { const response = await request({ url: ORGANIZATION_TREE_URL, method: 'GET', }) const root = response.data const rawRoots = String(root?.id ?? '') === '-1' ? root.children || [] : root ? [root] : [] return rawRoots .map(normalizeOrganizationNode) .filter((node): node is OrganizationNode => Boolean(node)) } function normalizeOrganizationNode(rawNode: RawOrganizationNode): OrganizationNode | null { const code = String( rawNode.attributes?.orgNo ?? rawNode.attributes?.orgId ?? rawNode.id ?? '', ).trim() const name = String(rawNode.attributes?.orgName ?? rawNode.text ?? '').trim() if (!code || !name) return null const children = (rawNode.children || []) .map(normalizeOrganizationNode) .filter((node): node is OrganizationNode => Boolean(node)) return children.length ? { code, name, children } : { code, name } }