# FormDesigner 表单设计器
可视化拖拽表单构建器,支持通过拖拽组件到画布来快速生成表单。
## 使用方式
```vue
```
## Props
| 属性 | 类型 | 说明 |
|------|------|------|
| `modelValue` | Array | 表单字段 Schema 数组(v-model) |
| `initialSchema` | Array | 初始 Schema(用于加载已有表单) |
## Events
| 事件 | 参数 | 说明 |
|------|------|------|
| `update:modelValue` | `(schema: Array)` | Schema 变更 |
| `save` | `(schema: Array)` | 保存表单 |
| `cancel` | - | 取消编辑 |
## 暴露方法
| 方法 | 返回值 | 说明 |
|------|--------|------|
| `getFormSchema()` | `Array` | 获取当前表单 Schema |
| `setFormSchema(schema)` | - | 设置表单 Schema |
## 支持的组件类型
### 基础组件(10 个)
| 组件 | 类型值 | 说明 |
|------|--------|------|
| 输入框 | `input` | 文本输入 |
| 多行文本 | `textarea` | 多行文本输入 |
| 数字 | `number` | 数字输入 |
| 下拉选择 | `select` | 下拉选项 |
| 单选框 | `radio` | 单选按钮组 |
| 复选框 | `checkbox` | 多选按钮组 |
| 日期选择 | `date` | 日期选择器 |
| 时间选择 | `time` | 时间选择器 |
| 开关 | `switch` | 开关组件 |
| 滑块 | `slider` | 滑块组件 |
### 高级组件(6 个)
| 组件 | 类型值 | 说明 |
|------|--------|------|
| 上传 | `upload` | 文件上传 |
| 富文本 | `richText` | 富文本编辑器 |
| 级联选择 | `cascader` | 级联选择器 |
| 树选择 | `treeSelect` | 树形选择器 |
| 颜色选择 | `colorPicker` | 颜色选择器 |
| 评分 | `rate` | 评分组件 |
### 布局组件(3 个)
| 组件 | 类型值 | 说明 |
|------|--------|------|
| 分割线 | `divider` | 分割线 |
| 标题 | `title` | 标题 |
| 描述 | `description` | 描述文本 |
## 布局结构
三面板布局:
1. **左侧** — 组件面板(基础/高级/布局组件分类)
2. **中间** — 设计画布(支持拖拽排序,使用 `vuedraggable`)
3. **右侧** — 属性编辑器(编辑选中组件的属性)
## FormItemRender — 字段渲染器
负责根据 Schema 渲染单个表单字段。
```vue
```
### Props
| 属性 | 类型 | 说明 |
|------|------|------|
| `item` | Object | 字段 Schema(必填) |
| `modelValue` | any | 字段值 |
| `disabled` | Boolean | 是否禁用 |
| `preview` | Boolean | 预览模式 |
### Events
| 事件 | 参数 | 说明 |
|------|------|------|
| `update:modelValue` | `(value)` | 值变更 |
| `change` | `(value)` | 值变更 |
## FormPreview — 表单预览
从 Schema 渲染完整表单,支持验证和提交。
```vue
```
### Props
| 属性 | 类型 | 说明 |
|------|------|------|
| `formItems` | Array | 表单 Schema |
| `schema` | Array | 备用 Schema |
### Events
| 事件 | 参数 | 说明 |
|------|------|------|
| `submit` | `(formData)` | 表单提交 |
| `change` | `(formData)` | 表单数据变更 |
### 暴露方法
| 方法 | 说明 |
|------|------|
| `getFormData()` | 获取表单数据 |
| `setFormData(data)` | 设置表单数据 |
| `validate()` | 表单验证 |
| `reset()` | 重置表单 |
## 依赖
- `vuedraggable`
- `naive-ui`
- `FormItemRender.vue`
- `FormPreview.vue`