# @vtj/ui 组件库 — AI 使用指南 > 本文档帮助 AI 理解 `@vtj/ui` 组件库的构成、导入方式和在 Vue 组件中的使用规范。 --- ## 一、组件库概览 `@vtj/ui` 是 VTJ 平台的企业级 UI 组件库,基于 Vue 3 + TypeScript 构建,底层依赖 Element Plus 和 VXE Table。提供以下核心模块: | 模块 | 功能说明 | 导入方式 | | ------------ | -------------------------------------------- | ----------------------------------------------------- | | **组件** | 30+ 业务组件(Grid、Form、Dialog、Field 等) | `import { XGrid, XForm } from '@vtj/ui'` | | **Hooks** | 可复用的 Composition API 钩子 | `import { useIcon, useLoader } from '@vtj/ui'` | | **指令** | 拖拽、缩放等自定义指令 | `import { vDraggable, vResizable } from '@vtj/ui'` | | **Adapter** | 适配器系统(上传、字段编辑器、VXE 配置等) | `import { useAdapter, AdapterPlugin } from '@vtj/ui'` | | **工具方法** | 通用工具函数 | `import { parseSize } from '@vtj/ui/utils'` | | **常量** | 全局常量定义 | `import { ... } from '@vtj/ui/constants'` | ### 1.1 技术栈依赖 ```json { "dependencies": { "@vtj/icons": "latest", "@vtj/utils": "latest", "@vueuse/core": "~14.1.0", "element-plus": "~2.13.0", "sortablejs": "~1.15.6", "vxe-table": "~4.6.17", "vxe-table-plugin-menus": "~4.0.3" } } ``` ### 1.2 组件命名规范 - 所有组件均以 `X` 前缀命名,如 `XGrid`、`XForm`、`XDialog` - 组件类型定义以 `Props`、`Emits`、`Instance` 结尾,如 `GridProps`、`GridEmits`、`GridInstance` --- ## 二、安装与注册 ### 2.1 安装依赖 ```json { "dependencies": { "@vtj/ui": "latest" } } ``` ### 2.2 全局注册 ```typescript import { createApp } from 'vue'; import { AdapterPlugin } from '@vtj/ui'; import '@vtj/ui/dist/style.css'; const app = createApp(App); // 注册适配器插件(会自动注册 Element Plus 的消息组件) app.use(AdapterPlugin, { uploader: async (file: File) => { // 自定义上传逻辑 return { url: '...', name: file.name }; }, fieldEditors: { // 自定义字段编辑器 } }); ``` --- ## 三、核心组件使用 ### 3.1 XGrid 数据表格 `XGrid` 是基于 VXE Table 封装的高级数据表格组件,支持数据加载、排序、过滤、行/列拖拽排序、单元格编辑等功能。 #### 基本用法 ```vue ``` #### 列渲染器 ```vue ``` #### 高级特性 ```vue ``` --- ### 3.2 XForm 表单 `XForm` 是基于 Element Plus Form 封装的表单组件,支持 inline 模式、自动提交/重置、sticky 底部按钮等特性。 #### 基本用法 ```vue ``` #### Inline 模式 ```vue ``` --- ### 3.3 XField 字段组件 `XField` 是统一的表单字段组件,支持多种编辑器类型、动态选项加载、级联刷新、可见性控制等。 #### 内置编辑器 | 编辑器类型 | 说明 | 适用场景 | | ---------- | ---------- | ------------ | | `text` | 文本输入框 | 单行文本 | | `textarea` | 多行文本框 | 多行文本 | | `number` | 数字输入框 | 数值输入 | | `select` | 下拉选择 | 单选/多选 | | `radio` | 单选框 | 少量选项单选 | | `checkbox` | 复选框 | 少量选项多选 | | `date` | 日期选择 | 日期/时间 | | `switch` | 开关 | 布尔值 | #### 基本用法 ```vue ``` --- ### 3.4 XDialog 对话框 `XDialog` 是增强型对话框组件,支持拖拽、缩放、最大化/最小化、多实例管理等。 #### 基本用法 ```vue --- ### 3.5 XActionBar 操作栏 `XActionBar` 用于统一的操作按钮区域,支持按钮、文本、图标模式,下拉菜单等。 ```vue ``` --- ### 3.6 XQueryForm 查询表单 `XQueryForm` 是专门用于数据查询的表单组件,支持折叠展开、自动布局等。 ```vue ``` --- ### 3.7 XContainer 布局容器 `XContainer` 是基于 Flex 布局的容器组件,提供丰富的布局控制属性。 ```vue ``` --- ### 3.8 其他常用组件 #### XAction 操作按钮 ```vue ``` #### XIcon 图标组件 ```vue ``` #### XTabs 标签页 ```vue ``` #### XAttachment 附件上传 ```vue ``` #### XHeader 页头 ```vue ``` #### XMask 遮罩布局 ```vue ``` --- ## 四、Hooks 工具 ### 4.1 useIcon 图标钩子 ```typescript import { useIcon } from '@vtj/ui'; const { IconComponent } = useIcon('Add'); ``` ### 4.2 useLoader 加载器钩子 ```typescript import { useLoader } from '@vtj/ui'; const { data, loading, error, reload } = useLoader(async () => { return await request({ url: '/api/data' }); }); ``` ### 4.3 useDisabled 禁用状态钩子 ```typescript import { useDisabled } from '@vtj/ui'; const disabled = useDisabled(props.disabled, actionItem); ``` ### 4.4 useDefer 延迟渲染钩子 ```typescript import { useDefer } from '@vtj/ui'; const defer = useDefer(100); // 延迟 100ms ``` --- ## 五、Adapter 适配器系统 ### 5.1 使用适配器 ```vue ``` ### 5.2 配置适配器 ```typescript import { AdapterPlugin } from '@vtj/ui'; app.use(AdapterPlugin, { // 自定义上传 uploader: async (file) => { const formData = new FormData(); formData.append('file', file); const res = await request({ url: '/api/upload', method: 'post', data: formData }); return { url: res.url, name: file.name }; }, // 自定义字段编辑器 fieldEditors: { customEditor: { component: CustomEditorComponent, defaultValue: '' } }, // VXE Table 配置 vxeConfig: { // ... }, // Grid 自定义配置持久化 getCustom: async (id) => { return await request({ url: `/api/grid-config/${id}` }); }, saveCustom: async (info) => { await request({ url: '/api/grid-config', method: 'post', data: info }); } }); ``` --- ## 六、VTJ 代码规范 ### 6.1 Composition API 强制规范 所有组件必须使用 ` ``` ### 6.2 组件导入规范 从 `@vtj/ui` 按需导入组件,不要全局导入: ```vue ``` ### 6.3 变量命名规范 - 使用 `ref` 或 `reactive` 声明响应式变量 - 变量名使用 camelCase - 组件 ref 使用 `xxRef` 命名 ```vue ``` ### 6.4 类型定义规范 使用 TypeScript 类型定义: ```vue ``` ### 6.5 事件处理规范 事件处理函数使用 `on` 前缀: ```vue ``` --- ## 七、完整示例 ### 7.1 标准 CRUD 页面 ```vue ``` --- ## 八、常见问题 ### 8.1 如何自定义 Grid 列渲染? 使用 `slots` 配置: ```vue ``` ### 8.2 如何在 Field 中使用自定义编辑器? 通过 Adapter 注册: ```typescript app.use(AdapterPlugin, { fieldEditors: { customEditor: { component: CustomEditor, defaultValue: '' } } }); ``` ```vue ``` ### 8.3 Dialog 如何获取内部组件实例? 通过 `componentInstance` 属性: ```vue ``` --- ## 九、总结 `@vtj/ui` 提供了一套完整的企业级业务组件库,核心特点: 1. **组件前缀统一**:所有组件以 `X` 开头,避免命名冲突 2. **基于成熟生态**:底层使用 Element Plus 和 VXE Table 3. **TypeScript 友好**:完整的类型定义支持 4. **适配器模式**:灵活的扩展机制 5. **Composition API**:全面支持 Vue 3 组合式 API 在编写代码时,请遵循 VTJ 代码规范,使用 Composition API 模式,按需导入组件,合理使用 Hooks 和 Adapter 系统。