# jsonSchema
**Repository Path**: osvue/json-schema
## Basic Information
- **Project Name**: jsonSchema
- **Description**: No description available
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-18
- **Last Updated**: 2025-06-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Vue3 动态表单系统
一个基于 Vue3 + Element Plus 的复杂动态表单解决方案,支持多种字段类型、表单验证、编辑和查看模式。
## 功能特性
### 🎯 核心功能
- **动态表单渲染**:根据配置动态生成表单字段
- **多种字段类型**:支持输入框、选择器、多选框、日期选择器等
- **表单验证**:内置验证规则,支持自定义验证
- **编辑/查看模式**:同一组件支持编辑和只读查看
- **响应式设计**:适配移动端和桌面端
### 🔧 支持的字段类型
- `input` - 文本输入框
- `number` - 数字输入框
- `select` - 下拉选择器
- `checkbox` - 多选框
- `radio` - 单选框
- `textarea` - 文本域
- `date` - 日期选择器
- `time` - 时间选择器
- `switch` - 开关
- `slider` - 滑块
- `upload` - 文件上传
### 🛠️ 技术栈
- **Vue 3** - 使用 Composition API 和 Setup 语法
- **Element Plus** - UI 组件库
- **Pinia** - 状态管理
- **Vue Router** - 路由管理
- **Vite** - 构建工具
## 项目结构
```
src/
├── components/
│ ├── DynamicForm.vue # 动态表单主组件
│ ├── DynamicFormField.vue # 动态表单字段组件
│ └── FormBuilder.vue # 表单构建器组件
├── stores/
│ └── formStore.js # 表单状态管理
├── utils/
│ └── formUtils.js # 表单工具函数
├── views/
│ ├── DynamicForm.vue # 动态表单页面
│ └── FormViewer.vue # 表单查看页面
├── router/
│ └── index.js # 路由配置
├── App.vue # 主应用组件
└── main.js # 应用入口
```
## 快速开始
### 安装依赖
```bash
npm install
```
### 启动开发服务器
```bash
npm run dev
```
### 构建生产版本
```bash
npm run build
```
## 使用指南
### 1. 基本使用
```vue
```
### 2. 配置表单字段
```javascript
const formConfig = {
title: '用户信息表单',
fields: [
{
id: 'name',
label: '姓名',
type: 'input',
required: true,
placeholder: '请输入姓名',
rules: [{ required: true, message: '请输入姓名', trigger: 'blur' }]
},
{
id: 'gender',
label: '性别',
type: 'select',
required: true,
options: [
{ label: '男', value: 'male' },
{ label: '女', value: 'female' }
]
}
]
}
```
### 3. 状态管理
```javascript
import { useFormStore } from './stores/formStore'
const formStore = useFormStore()
// 设置表单数据
formStore.setFormData(data)
// 切换模式
formStore.setFormMode('view') // 或 'edit'
// 保存数据
const result = await formStore.saveFormData(formData)
```
### 4. 自定义字段组件
```javascript
// 在 DynamicFormField.vue 中添加自定义组件支持
{
id: 'custom',
label: '自定义字段',
type: 'custom',
component: 'CustomComponent',
props: {
// 自定义属性
}
}
```
## 高级功能
### 1. 表单构建器
使用 `FormBuilder` 组件可以可视化地构建表单:
```vue
```
### 2. 表单验证
支持多种验证规则:
```javascript
{
rules: [
{ required: true, message: '必填项' },
{ type: 'email', message: '邮箱格式错误' },
{ type: 'phone', message: '手机号格式错误' },
{ min: 2, max: 10, message: '长度在2-10个字符' },
{ pattern: /^\d+$/, message: '只能输入数字' }
]
}
```
### 3. 数据导入导出
```javascript
import { exportFormData, importFormData } from './utils/formUtils'
// 导出数据
const jsonData = exportFormData(formData, fields, 'json')
const csvData = exportFormData(formData, fields, 'csv')
// 导入数据
const processedData = importFormData(rawData, fields)
```
### 4. 表单模板
使用预定义的模板快速创建表单:
```javascript
import { generateFormTemplate } from './utils/formUtils'
const userForm = generateFormTemplate('userInfo')
const productForm = generateFormTemplate('productInfo')
```
## 最佳实践
### 1. 性能优化
- 使用 `v-memo` 优化大列表渲染
- 合理使用计算属性缓存
- 避免在模板中使用复杂表达式
### 2. 代码组织
- 将复杂的表单逻辑拆分为独立的组件
- 使用工具函数处理通用逻辑
- 保持组件的单一职责
### 3. 用户体验
- 提供清晰的错误提示
- 支持键盘导航
- 添加加载状态和反馈
### 4. 可维护性
- 使用 TypeScript 定义类型(推荐)
- 编写单元测试
- 添加详细的注释和文档
## 扩展功能
### 1. 添加新的字段类型
在 `DynamicFormField.vue` 中添加新的字段类型支持:
```vue
```
### 2. 自定义验证规则
在 `formUtils.js` 中添加自定义验证逻辑:
```javascript
// 自定义验证规则
const customRules = {
customRule: (value, rule) => {
// 自定义验证逻辑
return isValid ? true : rule.message
}
}
```
### 3. 集成第三方组件
```javascript
// 注册自定义组件
import CustomComponent from './CustomComponent.vue'
// 在字段配置中使用
{
id: 'custom',
label: '自定义组件',
type: 'custom',
component: CustomComponent,
props: {
// 组件属性
}
}
```
## 常见问题
### Q: 如何处理复杂的表单验证?
A: 可以使用自定义验证函数,或者在 `formUtils.js` 中添加复杂的验证逻辑。
### Q: 如何支持动态字段显示/隐藏?
A: 在字段配置中添加 `show` 属性,使用计算属性控制字段的显示状态。
### Q: 如何实现字段间的联动?
A: 使用 `watch` 监听字段值变化,动态更新其他字段的配置或值。
### Q: 如何优化大数据量表单的性能?
A: 使用虚拟滚动、分页加载、懒加载等技术优化性能。
## 贡献指南
1. Fork 项目
2. 创建功能分支
3. 提交更改
4. 推送到分支
5. 创建 Pull Request
## 许可证
MIT License
## 联系方式
如有问题或建议,请提交 Issue 或联系开发者。