# @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
标签页1内容
标签页2内容
```
#### 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
{{ row.status === 1 ? '启用' : '禁用' }}
```
---
## 八、常见问题
### 8.1 如何自定义 Grid 列渲染?
使用 `slots` 配置:
```vue
{{ row.name }} - {{ row.status }}
```
### 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 系统。