UNPKG

@vue-ui-kit/ant

Version:

Vue3 UI Kit based on Ant Design

139 lines (127 loc) 4.12 kB
import { PFormProps, PGridProps } from '#/antProxy'; import type { AutoViewportBoxOffsetInput } from '@/utils/autoViewportBox'; import { ConfigType } from 'e-virt-table'; import { clone } from 'xe-utils'; import type { VNode } from 'vue'; // 全局配置接口 export interface UIKitConfig { form?: { labelCol?: any; wrapperCol?: any; }; grid?: { align?: 'left' | 'right' | 'center'; lazyReset?: boolean; fitHeight?: number; fitCanvasHeight?: number; striped?: boolean; /** `PGrid` / `PCanvasGrid` 分页是否显示「跳至」;`pageConfig.showQuickJumper` 优先 */ showQuickJumper?: boolean; /** `PGrid` 开启 `autoBoxSize` 且未传 `autoBoxSizeOffset` 时的视口边距,与 props 类型一致 */ autoBoxSizeOffset?: AutoViewportBoxOffsetInput; }; canvasTable?: ConfigType; /** * 自定义 tooltip 渲染函数,替换全局所有 a-tooltip。 * @param defaultSlot 原 tooltip 触发元素(图标等) * @param content tooltip 内容,字符串或返回 VNode 的函数 */ renderTooltip?: (defaultSlot: () => VNode, content: string | (() => VNode)) => VNode; /** * 自定义图标:按 `icon` 名字渲染;返回值为真时优先于 `@ant-design/icons-vue` 同名组件。 */ icon?: { render?: (name: string) => unknown; /** * CollapseCard / PFormGroup 折叠箭头: * - `string`:单图标,靠旋转区分(默认收起 0° / 展开 -90°) * - `[collapsed, expanded]`:双图标切换,不旋转 */ collapseExpandIcon?: string | [collapsed: string, expanded: string]; }; } // 默认配置 const defaultConfig: UIKitConfig = { form: { labelCol: { span: 6 }, wrapperCol: { span: 16 }, }, grid: { align: 'left', lazyReset: false, fitHeight: 30, striped: false, showQuickJumper: true, }, canvasTable: { DISABLED: true, ENABLE_FINDER: true, AUTO_ROW_HEIGHT: true, BORDER_RADIUS: 4, }, icon: {}, }; // 当前配置(可被修改) let currentConfig: UIKitConfig = clone(defaultConfig, true); // 设置配置 export function setUIKitConfig(config: Partial<UIKitConfig>): void { currentConfig = { form: { ...currentConfig.form, ...config.form, }, grid: { ...currentConfig.grid, ...config.grid, }, canvasTable: { ...currentConfig.canvasTable, ...config.canvasTable, }, renderTooltip: config.renderTooltip ?? currentConfig.renderTooltip, icon: { ...currentConfig.icon, ...config.icon, }, }; } // 获取自定义 tooltip 渲染函数 export function getTooltipRenderer(): UIKitConfig['renderTooltip'] { return currentConfig.renderTooltip; } // 获取配置 export function getUIKitConfig(): UIKitConfig { return currentConfig; } // 获取表单默认配置 export function getFormDefaults(): Partial<PFormProps> { return { labelCol: currentConfig.form?.labelCol, wrapperCol: currentConfig.form?.wrapperCol, }; } // 获取Grid默认配置 export function getGridDefaults(): Partial<PGridProps> { return { align: currentConfig.grid?.align, lazyReset: currentConfig.grid?.lazyReset, fitHeight: currentConfig.grid?.fitHeight, striped: currentConfig.grid?.striped, autoBoxSizeOffset: currentConfig.grid?.autoBoxSizeOffset, }; } /** 分页「跳至」:局部 pageConfig 优先,否则读全局 grid.showQuickJumper,默认 true */ export function resolveShowQuickJumper(pageConfig?: { showQuickJumper?: boolean }): boolean { if (pageConfig?.showQuickJumper !== undefined) { return pageConfig.showQuickJumper; } return currentConfig.grid?.showQuickJumper ?? true; } // 获取CanvasTable默认配置 export function getCanvasTableDefaults(): ConfigType { return currentConfig.canvasTable || ({} as ConfigType); } // 重置为默认配置 export function resetUIKitConfig(): void { currentConfig = JSON.parse(JSON.stringify(defaultConfig)); }