@coding-form/form-engine 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +218 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,23 +1,233 @@
|
|
|
1
|
-
|
|
1
|
+
[](https://www.npmjs.com/package/@coding-form/form-engine)
|
|
2
|
+
# Form Engine
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
一个基于 React 的动态表单引擎,支持表单动态渲染、字段验证、事件处理和布局控制。
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
## 项目结构
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
coding-form/
|
|
10
|
+
├── packages/
|
|
11
|
+
│ └── form-engine/ # 核心表单视图库
|
|
12
|
+
│ ├── src/
|
|
13
|
+
│ │ ├── form/ # 表单组件
|
|
14
|
+
│ │ ├── factory/ # 表单项工厂
|
|
15
|
+
│ │ ├── register/ # 组件注册中心
|
|
16
|
+
│ │ ├── store/ # Redux 状态管理
|
|
17
|
+
│ │ ├── context/ # React Context
|
|
18
|
+
│ │ ├── instance/ # 表单实例控制
|
|
19
|
+
│ │ ├── presenters/ # 表单展示层
|
|
20
|
+
│ │ ├── validate/ # 表单验证
|
|
21
|
+
│ │ ├── event/ # 事件处理
|
|
22
|
+
│ │ ├── layout/ # 布局系统
|
|
23
|
+
│ │ ├── hooks/ # 自定义 Hooks
|
|
24
|
+
│ │ └── types/ # TypeScript 类型定义
|
|
25
|
+
│ └── dist/ # 构建输出
|
|
26
|
+
├── apps/ # 示例应用
|
|
27
|
+
│ ├── app-pc/ # PC 端示例
|
|
28
|
+
│ └── app-mobile/ # 移动端示例
|
|
29
|
+
└── package.json # 工作区配置
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 核心功能
|
|
33
|
+
|
|
34
|
+
### 1. 动态表单渲染
|
|
35
|
+
|
|
36
|
+
通过元数据(Meta)动态生成表单,支持:
|
|
37
|
+
- 多种数据类型:`STRING`, `INTEGER`, `LONG`, `DOUBLE`, `BOOLEAN`
|
|
38
|
+
- 字段属性:名称、编码、类型、默认值、提示等
|
|
39
|
+
- 嵌套子表单(subForms)
|
|
40
|
+
|
|
41
|
+
### 2. 表单验证
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
interface FormFieldValidator {
|
|
45
|
+
target: FieldKey; // 校验目标字段
|
|
46
|
+
validator: (instance: FormInstance, value: any) => boolean | string;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- 支持自定义验证规则
|
|
51
|
+
- 异步验证支持
|
|
52
|
+
- 隐藏字段自动跳过验证
|
|
53
|
+
|
|
54
|
+
### 3. 事件系统
|
|
55
|
+
|
|
56
|
+
支持表单事件绑定和处理:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
interface FormEvent {
|
|
60
|
+
type: 'load' | 'change' | 'blur'; // 事件类型
|
|
61
|
+
target: FieldKey; // 事件目标
|
|
62
|
+
event: (formInstance: FormInstance, value: any) => void;
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- `load`: 表单加载时触发
|
|
67
|
+
- `change`: 字段值变化时触发
|
|
68
|
+
- `blur`: 字段失去焦点时触发
|
|
69
|
+
|
|
70
|
+
### 4. 布局控制
|
|
71
|
+
|
|
72
|
+
支持卡片布局和默认布局:
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
interface FormLayout {
|
|
76
|
+
formCode: string;
|
|
77
|
+
type: 'card';
|
|
78
|
+
props: CardLayout
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
interface CardLayout {
|
|
82
|
+
title: string;
|
|
83
|
+
layout: 'horizontal' | 'vertical';
|
|
84
|
+
fields: FieldLayout[];
|
|
85
|
+
mainFields: string[];
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 5. 刷新组件
|
|
90
|
+
|
|
91
|
+
通过增加字段 `version` 版本号来触发组件的重新渲染:
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
interface StateField {
|
|
95
|
+
version?: number; // 版本号,每次刷新时递增
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
- `refreshFields`: 刷新指定字段,触发组件重新渲染
|
|
100
|
+
- 支持单个字段或字段数组
|
|
101
|
+
- 支持主表单和子表单
|
|
102
|
+
- 通过递增 `version` 值实现强制刷新
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
// 刷新单个字段
|
|
106
|
+
form.refreshFields('field_code');
|
|
107
|
+
|
|
108
|
+
// 刷新多个字段
|
|
109
|
+
form.refreshFields(['field1', 'field2']);
|
|
110
|
+
|
|
111
|
+
// 刷转子表单字段
|
|
112
|
+
form.refreshFields(['field1'], 'sub_form_code');
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 6. 表单实例控制
|
|
116
|
+
|
|
117
|
+
提供丰富的表单操作方法:
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// 获取/设置字段值
|
|
121
|
+
getFieldValue(name: string, formCode?: string)
|
|
122
|
+
getFieldsValue(formCode?: string)
|
|
123
|
+
setFieldValue(name: string, value: any, formCode?: string)
|
|
124
|
+
setFieldsValue(values: any, formCode?: string)
|
|
125
|
+
|
|
126
|
+
// 表单操作
|
|
127
|
+
resetFields(nameList?: string[], formCode?: string)
|
|
128
|
+
validateFields(nameList?: string[], formCode?: string)
|
|
129
|
+
submit(formCode?: string)
|
|
130
|
+
|
|
131
|
+
// 动态控制
|
|
132
|
+
hiddenFields(hidden: boolean, nameList: string[]|string, formCode?: string)
|
|
133
|
+
requiredFields(required: boolean, nameList: string[]|string, formCode?: string)
|
|
134
|
+
refreshFields(nameList: string[]|string, formCode?: string) // 刷新字段,触发重新渲染
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 快速开始
|
|
138
|
+
|
|
139
|
+
### 1. 安装依赖
|
|
6
140
|
|
|
7
141
|
```bash
|
|
8
142
|
pnpm install
|
|
9
143
|
```
|
|
10
144
|
|
|
11
|
-
|
|
145
|
+
### 2. 注册表单组件
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
import { FormRegistry } from '@coding-form/form-engine';
|
|
149
|
+
import YourFormComponent from './YourFormComponent';
|
|
150
|
+
import formInstanceFactory from './formInstanceFactory';
|
|
151
|
+
|
|
152
|
+
FormRegistry.getInstance().register(YourFormComponent, formInstanceFactory);
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 3. 使用表单视图
|
|
156
|
+
|
|
157
|
+
```tsx
|
|
158
|
+
import { FormView } from '@coding-form/form-engine';
|
|
12
159
|
|
|
13
|
-
|
|
160
|
+
const meta = {
|
|
161
|
+
name: '用户信息',
|
|
162
|
+
code: 'user_form',
|
|
163
|
+
fields: [
|
|
164
|
+
{
|
|
165
|
+
id: '1',
|
|
166
|
+
name: '姓名',
|
|
167
|
+
code: 'name',
|
|
168
|
+
type: 'text_input',
|
|
169
|
+
dataType: 'STRING',
|
|
170
|
+
hidden: false,
|
|
171
|
+
required: true,
|
|
172
|
+
placeholder: '请输入姓名'
|
|
173
|
+
}
|
|
174
|
+
]
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
<FormView meta={meta} />;
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 4. 开发模式
|
|
14
181
|
|
|
15
182
|
```bash
|
|
16
|
-
|
|
183
|
+
# 监听构建 form-view
|
|
184
|
+
pnpm watch:form-view
|
|
185
|
+
|
|
186
|
+
# 运行 PC 示例应用
|
|
187
|
+
pnpm dev:app-pc
|
|
188
|
+
|
|
189
|
+
# 运行移动端示例应用
|
|
190
|
+
pnpm dev:app-mobile
|
|
17
191
|
```
|
|
18
192
|
|
|
19
|
-
|
|
193
|
+
### 5. 构建
|
|
20
194
|
|
|
21
195
|
```bash
|
|
22
|
-
pnpm
|
|
196
|
+
pnpm build
|
|
23
197
|
```
|
|
198
|
+
|
|
199
|
+
## 技术栈
|
|
200
|
+
|
|
201
|
+
- **React 18** - UI 框架
|
|
202
|
+
- **TypeScript** - 类型系统
|
|
203
|
+
- **Redux Toolkit** - 状态管理
|
|
204
|
+
- **React Redux** - React 绑定
|
|
205
|
+
- **Rslib** - 构建工具
|
|
206
|
+
|
|
207
|
+
## API 参考
|
|
208
|
+
|
|
209
|
+
### FormView 组件属性
|
|
210
|
+
|
|
211
|
+
| 属性 | 类型 | 说明 |
|
|
212
|
+
|------|------|------|
|
|
213
|
+
| meta | FormMeta | 表单元数据定义 |
|
|
214
|
+
| form | FormInstance | 表单实例 |
|
|
215
|
+
| onValuesChange | (values: any) => void | 值变化回调 |
|
|
216
|
+
| review | boolean | 是否预览模式 |
|
|
217
|
+
| validators | FormFieldValidator[] | 验证规则数组 |
|
|
218
|
+
| events | FormEvent[] | 事件定义数组 |
|
|
219
|
+
| layouts | FormLayout[] | 布局定义数组 |
|
|
220
|
+
|
|
221
|
+
### 数据类型
|
|
222
|
+
|
|
223
|
+
| 类型 | 说明 |
|
|
224
|
+
|------|------|
|
|
225
|
+
| STRING | 字符串 |
|
|
226
|
+
| INTEGER | 整数 |
|
|
227
|
+
| LONG | 长整数 |
|
|
228
|
+
| DOUBLE | 小数 |
|
|
229
|
+
| BOOLEAN | 布尔值 |
|
|
230
|
+
|
|
231
|
+
## 许可证
|
|
232
|
+
|
|
233
|
+
[LICENSE](./LICENSE)
|