import type { IObject } from '@newgrand/udp-core'; import type { TreeSelectProps } from 'antd'; import { CSSProperties, ReactNode } from 'react'; import type { IAsyncTreeProps } from '../../functionalComponent'; import { defaultParams, ProjectTreeNodeType } from './constVar'; export type ProjectTreeType = Omit & IPT; export type ProjectTreeParamType = Omit, 'treeType'> & { /** * @description 组织树类型:proj|项目组织树、fin|财务组织树、innerProj|项目内部申报组织树、budget|项目预算组织树、settle|结算组织树、hr|人力资源树、outerProj|纳税申报组织树 * @default proj */ treeType?: 'proj' | 'fin' | 'innerProj' | 'budget' | 'settle' | 'hr' | 'outerProj'; }; export type ProjectTreeApi = { /** * @description 获取当前选中的数据行(此方法需要调用服务端api,需要返回Promise)。forceIncludeSub 是否强制包含下级,单选有效;useCodeTable是否启用码表 */ getSelectedTreeNode(params: { forceIncludeSub?: boolean; useCodeTable?: boolean; }): Promise; }; export type TreeType = 'proj' | 'fin' | 'innerProj' | 'budget' | 'settle' | 'hr' | 'outerProj'; export interface IProjectTreeSelect extends TreeSelectProps, IPT { icon?: ((nodeProps: any) => React.ReactNode) | React.ReactNode; /** * @description 节点key * @default id */ nodeKey?: string; /** * @description 数据加载完成回调 */ onLoad?: (state: { treeData: IObject[]; keyRef: IObject; }) => void; } export interface IPT { /** * @description 过滤区域复选框状态变化时 */ onRegionChange?: (params: { id: any; checked: any; otherValue: any; }) => void; /** * @description 可选节点类型 * @default ALL */ selectedType?: ProjectTreeNodeType[] | 'ALL'; /** * @description 对节点数据进行转换 注意:key与title必须分别为id和text */ convertNode?: (o: Record) => Record; /** * @description 树请求参数 */ params?: ProjectTreeParamType; /** * @description 默认选中第一行 * @default true */ defaultSelectedFirstNode?: boolean; /** * @description 过滤条件区域 * @default all */ filterRegion?: 'all' | Array<'outEasyProj' | 'simpleName' | 'showAllSubProj' | 'isOnlyOrg' | 'curLoginOrg' | 'includeSub' | 'projPropFilter' | 'statProj'>; /** * @description 扩展过滤条件区域 */ extendFilterRegion?: Array<{ node: () => ReactNode; position?: 'first' | 'last'; }>; /** * @description 默认是否显示过滤条件区域 * @default false */ defaultShowRegion?: boolean; /** * @description 业务点类型,用于记忆项目组织树的相关参数 */ busKey?: string; /** * @description 是否启用系统码表功能 * @default false */ isSaveCodeTable?: boolean; /** * @description 码表的阈值,超过这个值才会保存至系统码表,否则使用in数据 * @default 100 */ codeTableThreshold?: number; /** * @description 业务点自定义码表的表名 */ saveTableName?: string; /** * @description 支持切换的树类型 * @default [{ value: 'proj', label: '项目组织树' }, { value: 'fin', label: '财务组织树' }] */ includeTreeType?: Array<{ value: TreeType; label: string; } | TreeType>; /** * @description 不自动勾选所有子都被勾选的父节点(仅启用复选框且开启包含下级时) * @default false */ onlyIncludeChildren?: boolean; /** * @description 弹出框样式 * @default { zIndex: 1001 } */ popoverOverlayStyle?: CSSProperties; }