flame-plus 1.5.0 → 1.5.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/flameDist/flame-plus.css +1 -1
- package/flameDist/flame-plus.es.js +18150 -17589
- package/flameDist/flame-plus.es.js.map +1 -1
- package/flameDist/flame-plus.umd.js +128 -128
- package/flameDist/flame-plus.umd.js.map +1 -1
- package/package.json +1 -1
- package/.claude/settings.json +0 -11
- package/.claude/settings.local.json +0 -42
- package/cursor_modelvalue_prop_type_check_issue.md +0 -102
- package/docs/current-page-full.png +0 -0
- package/docs/flame-plus-attrfields-onchange-support.md +0 -201
- package/docs/formslot-test.png +0 -0
- package/docs/framework-dynamic-form-value-retrieval.md +0 -153
- package/docs/framework-external-components.md +0 -182
- package/docs/page-structure.md +0 -165
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
# FlameFramework 外部组件接入指南
|
|
2
|
-
|
|
3
|
-
本文说明**外部系统**如何开发(或封装)Vue 组件,并通过 `componentList` 传入 `FlameFramework`(表单设计器),使设计结果在 **`flmDynamicForm` / `flmGridForm` 运行时**中正确渲染。
|
|
4
|
-
|
|
5
|
-
**运行时如何汇总表单值、为何自定义控件必须 `onChange`/`onInput`:** 见 [framework-dynamic-form-value-retrieval.md](./framework-dynamic-form-value-retrieval.md)。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. 整体流程
|
|
10
|
-
|
|
11
|
-
1. 在宿主应用中**全局注册**组件,**注册名**必须与表单项里的 `controlType` 字符串**完全一致**(例如 `flmSysUserSelect`)。
|
|
12
|
-
2. 通过 `app.use(FlamePlus, …, [YourComponent])` 或 `app.component(name, YourComponent)` 完成注册(见第 3 节)。
|
|
13
|
-
3. 将预设条目数组传给 `<FlameFramework :component-list="…" />`。
|
|
14
|
-
4. 设计器保存后,配置中的 `items[].controlType` 即为上述名称;运行时由 `flmGridForm` 使用 `resolveComponent(controlType)` 解析。
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 2. `componentList` 数据结构
|
|
19
|
-
|
|
20
|
-
`FlameFramework` 接收可选 prop:`componentList`。每一项在设计器左栏「**组件库**」中显示为可拖拽预设,拖入表单后会与内置默认配置合并。
|
|
21
|
-
|
|
22
|
-
| 字段 | 类型 | 必填 | 说明 |
|
|
23
|
-
|------|------|------|------|
|
|
24
|
-
| `key` | `string` | 是 | 列表唯一标识(如 `sys-user-select`),便于外部列表渲染与去重 |
|
|
25
|
-
| `label` | `string` | 是 | 左栏显示名称(如「人员单选」) |
|
|
26
|
-
| `type` | `string` | 是 | **控件类型名**,写入保存结果的 `controlType`,须与全局注册的组件名一致 |
|
|
27
|
-
| `icon` | `string` | 否 | 左栏图标,默认 `🧩` |
|
|
28
|
-
| `defaultConfig` | `Record<string, unknown>` | 否 | 与 `getDefaultConfig(type)` 结果**浅合并**,覆盖默认 `controlConfig` |
|
|
29
|
-
| `defaultFormItem` | 对象 | 否 | 覆盖默认表单项元数据(如 `label`、`required`、`rules`) |
|
|
30
|
-
|
|
31
|
-
`defaultFormItem` 常用字段与 `FormItemSettings` 对齐,例如:`label`、`required`、`rules`、`labelWidth` 等。
|
|
32
|
-
|
|
33
|
-
**注意**:源码中 `FrameworkComponentItem.type` 目前标注为 `BasicControlType`(仅内置基础控件)。传入 **`flmSearchSelect`、自定义 `flmXxx`** 等在运行时通常仍可用,但 TypeScript 可能需要 `as any` 或本地扩展类型声明,直至类型定义放宽。
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 3. 在宿主应用中注册组件
|
|
38
|
-
|
|
39
|
-
### 3.1 使用 Flame-Plus `install` 第三参数合并
|
|
40
|
-
|
|
41
|
-
`install` 会将自定义组件与内置表合并后统一 `app.component(name, component)`:
|
|
42
|
-
|
|
43
|
-
```ts
|
|
44
|
-
import { createApp } from 'vue'
|
|
45
|
-
import FlamePlus from 'flame-plus'
|
|
46
|
-
import FlmSysUserSelect from './components/FlmSysUserSelect.vue'
|
|
47
|
-
|
|
48
|
-
const app = createApp(App)
|
|
49
|
-
app.use(FlamePlus, undefined, { FlmSysUserSelect }) // 键名即全局组件名
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
对象形式下,**对象的 key** 为组件名(须与 `componentList[].type`、`controlType` 一致)。
|
|
53
|
-
|
|
54
|
-
### 3.2 单独注册
|
|
55
|
-
|
|
56
|
-
```ts
|
|
57
|
-
app.component('FlmSysUserSelect', FlmSysUserSelect)
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
未全局注册的 `controlType` 在运行时会解析失败或无法渲染。
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## 4. 传入 `FlameFramework`
|
|
65
|
-
|
|
66
|
-
```vue
|
|
67
|
-
<template>
|
|
68
|
-
<FlameFramework
|
|
69
|
-
:component-list="systemComponentPresets"
|
|
70
|
-
@save="onSave"
|
|
71
|
-
/>
|
|
72
|
-
</template>
|
|
73
|
-
|
|
74
|
-
<script setup lang="ts">
|
|
75
|
-
const systemComponentPresets = [
|
|
76
|
-
{
|
|
77
|
-
key: 'sys-user-single',
|
|
78
|
-
label: '人员(弹窗单选)',
|
|
79
|
-
icon: '👤',
|
|
80
|
-
type: 'flmSearchSelect',
|
|
81
|
-
defaultConfig: {
|
|
82
|
-
service_name: 'your-service',
|
|
83
|
-
fk_table_name: 'your_person_table',
|
|
84
|
-
placeholder: '请选择人员'
|
|
85
|
-
},
|
|
86
|
-
defaultFormItem: { label: '人员' }
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
key: 'sys-dept-tree',
|
|
90
|
-
label: '部门(下拉)',
|
|
91
|
-
type: 'flmSelect',
|
|
92
|
-
defaultConfig: {
|
|
93
|
-
placeholder: '请选择部门',
|
|
94
|
-
options: [],
|
|
95
|
-
clearable: true
|
|
96
|
-
},
|
|
97
|
-
defaultFormItem: { label: '部门' }
|
|
98
|
-
}
|
|
99
|
-
]
|
|
100
|
-
</script>
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
`defaultConfig` 的内容即落库后的 `controlConfig` 初始值(设计器内还可继续改)。
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## 5. 保存结果中的表单项形态
|
|
108
|
-
|
|
109
|
-
设计器 `save` 事件抛出配置,其中表单分组下的 `items` 与 `FormConfig['items']` 一致。每个控件对应一项,核心字段包括:
|
|
110
|
-
|
|
111
|
-
- `prop`:设计器生成的控件 id(字符串),**业务侧若需固定字段名,应在加载配置后做映射或在二次开发设计器中改生成规则**。
|
|
112
|
-
- `controlType`:与 `componentList[].type` / 全局组件名一致。
|
|
113
|
-
- `controlConfig`:控件配置快照(含 `model-value` 等)。
|
|
114
|
-
- `gridX` / `gridY` / `gridW` / `gridH`:栅格布局(默认 24 列)。
|
|
115
|
-
|
|
116
|
-
运行时由 `flmDynamicForm` → `flmGridForm` 根据 `controlType` 渲染。
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## 6. 自定义控件与 `flmGridForm` 的契约
|
|
121
|
-
|
|
122
|
-
`flmGridForm` 对**大部分**控件采用统一方式(非 `flmInput`、`flmSearchSelect`、`flmDatePicker`、`flmImage`、`FlmEditor` 等特殊分支):
|
|
123
|
-
|
|
124
|
-
- 渲染为:`<YourComponent config={mergedConfig} />`
|
|
125
|
-
- `mergedConfig` 在原有 `controlConfig` 基础上会注入:
|
|
126
|
-
- `modelValue`:来自 `controlConfig['model-value']`
|
|
127
|
-
- **`onChange`**:表单写入用(`flmInput` 类型使用 **`onInput`** 而非 `onChange`)
|
|
128
|
-
|
|
129
|
-
因此,**推荐**自定义控件与内置 `flmSelect` 等保持一致:
|
|
130
|
-
|
|
131
|
-
1. **Props**:声明 `config: Object`(或具体类型)。
|
|
132
|
-
2. **取值**:从 `config['model-value']` 或 `config.modelValue` 读取当前值(以你方 `filterConfig` 习惯为准)。
|
|
133
|
-
3. **改值**:用户操作后调用 **`config.onChange?.(newValue)`**(若为输入类且走 `flmInput` 分支则调用 **`config.onInput`**——自定义类型一般不会走 `flmInput` 分支,用 `onChange` 即可)。
|
|
134
|
-
|
|
135
|
-
若控件需要 `isSearch` 等额外 props,需在 `flmGridForm` 增加分支或复用现有特殊类型模式;**默认动态分支不会传递 `isSearch`**。
|
|
136
|
-
|
|
137
|
-
### 6.1 与 `flmSearchSelect` 对齐的特殊协议
|
|
138
|
-
|
|
139
|
-
若 `controlType` 为 `flmSearchSelect`,`flmGridForm` 会单独传 `onUpdate`、合并 `ref` 等,**不能**仅靠通用 `config` 协议实现,需直接使用或封装 `flmSearchSelect`。
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## 7. 表单设计器画布(设计态)限制
|
|
144
|
-
|
|
145
|
-
设计区内预览使用 `FormDesignArea` 内置的 `controlComponents` 映射:**仅内置基础控件有真实预览**。未在映射表中的 `type` 会**回退为 `flmInput` 占位**,不影响已保存 JSON 在 **`flmGridForm` 运行态**的解析,但设计时视觉与内置控件不一致。
|
|
146
|
-
|
|
147
|
-
可选改进方向(需改本库):
|
|
148
|
-
|
|
149
|
-
- 为 `flmSearchSelect` 等补充映射;或
|
|
150
|
-
- 为 `FormDesignArea` 增加可选 prop,合并外部传入的 `type → 组件` 表。
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## 8. 与 `flame-types` / `ControlTypes`
|
|
155
|
-
|
|
156
|
-
消费端若使用 TypeScript 维护表单配置,内置枚举见包内 `ControlTypes`。**自定义 `controlType` 不会出现在枚举中**,可:
|
|
157
|
-
|
|
158
|
-
- 使用 `string` 扩展类型;或
|
|
159
|
-
- 在业务侧声明:`type ControlType = ControlTypes | 'FlmSysUserSelect' | …`。
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## 9. 自检清单
|
|
164
|
-
|
|
165
|
-
- [ ] 全局注册名与 `componentList[].type`、`items[].controlType` 一致
|
|
166
|
-
- [ ] 自定义组件实现 `config` + `onChange`(或对齐 `flmSearchSelect` 等特殊协议)
|
|
167
|
-
- [ ] 宿主已安装 `flame-request`、`element-plus` 等依赖(若组件内部使用)
|
|
168
|
-
- [ ] 接受设计器画布对非内置 `type` 可能显示为输入框占位
|
|
169
|
-
- [ ] 保存后的 `prop` 为设计器 id,业务落库字段映射方案已明确
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 10. 相关源码位置(本仓库)
|
|
174
|
-
|
|
175
|
-
| 内容 | 路径 |
|
|
176
|
-
|------|------|
|
|
177
|
-
| `componentList` prop 与 `componentWidgetList` | `src/packages/components/framework/framework.vue` |
|
|
178
|
-
| 保存时 `controlType` / `controlConfig` 生成 | `buildFrameworkConfig`(同文件) |
|
|
179
|
-
| 左栏「组件库」 | `src/packages/components/framework/components/WidgetPanel.vue` |
|
|
180
|
-
| 设计区控件映射 | `src/packages/components/framework/components/FormDesignArea.vue` |
|
|
181
|
-
| 运行时解析与事件注入 | `src/packages/components/complex/flmGirdForm/flmGridForm.vue` |
|
|
182
|
-
| 全局注册合并 | `src/packages/index.ts` → `install` |
|
package/docs/page-structure.md
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
# Flame-Plus 开发页面结构分析
|
|
2
|
-
|
|
3
|
-
> 分析时间: 2026-04-06
|
|
4
|
-
> 页面 URL: http://localhost:5173/
|
|
5
|
-
> 页面标题: flame-plus
|
|
6
|
-
|
|
7
|
-
## 页面总览
|
|
8
|
-
|
|
9
|
-
页面分为两大区域:**背景层**(主页面内容)和**前景对话框**(全屏表单设计器)。
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 1. 背景层 - 主页面
|
|
14
|
-
|
|
15
|
-
### 1.1 顶部工具栏
|
|
16
|
-
|
|
17
|
-
| 元素 | 类型 | 说明 |
|
|
18
|
-
|------|------|------|
|
|
19
|
-
| 从缓存回显 | button | 从 localStorage 恢复表单设计器状态 |
|
|
20
|
-
| 清空缓存 | button | 清除 localStorage 中的缓存数据 |
|
|
21
|
-
| 关闭全屏设计器 | button | 关闭当前对话框 |
|
|
22
|
-
| 提示文本 | static text | "保存时会写入 localStorage,刷新后自动回显" |
|
|
23
|
-
|
|
24
|
-
### 1.2 flmCascader 测试区域
|
|
25
|
-
|
|
26
|
-
- **标题**: "flmCascader 选项直传"
|
|
27
|
-
- **级联选择器**: 只读文本框,placeholder="请选择(直传 options 测试)"
|
|
28
|
-
- **选中值显示**: "选中值:(空)"
|
|
29
|
-
|
|
30
|
-
### 1.3 flmDynamicForm 回显测试区域
|
|
31
|
-
|
|
32
|
-
- **标题**: "flmDynamicForm 回显测试"
|
|
33
|
-
|
|
34
|
-
#### 折叠面板 1: 基本信息(已展开)
|
|
35
|
-
|
|
36
|
-
| 字段 | 值 |
|
|
37
|
-
|------|------|
|
|
38
|
-
| 姓名 | 张三 |
|
|
39
|
-
| 性别 | 1 |
|
|
40
|
-
|
|
41
|
-
#### 折叠面板 2: 家庭信息(已展开)
|
|
42
|
-
|
|
43
|
-
**家庭信息 1:**
|
|
44
|
-
|
|
45
|
-
| 字段 | 值 |
|
|
46
|
-
|------|------|
|
|
47
|
-
| 姓名 | 李四 |
|
|
48
|
-
| 性别 | 选项2 |
|
|
49
|
-
|
|
50
|
-
**家庭信息 2:**
|
|
51
|
-
|
|
52
|
-
| 字段 | 值 |
|
|
53
|
-
|------|------|
|
|
54
|
-
| 姓名 | 王五 |
|
|
55
|
-
| 性别 | 选项1 |
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 2. 前景对话框 - 全屏表单设计器(核心区域)
|
|
60
|
-
|
|
61
|
-
对话框为模态(modal)状态,占据整个视口,是页面的核心交互区域。
|
|
62
|
-
|
|
63
|
-
### 2.1 对话框头部
|
|
64
|
-
|
|
65
|
-
| 元素 | 类型 | 说明 |
|
|
66
|
-
|------|------|------|
|
|
67
|
-
| Close this dialog | button | 关闭设计器对话框 |
|
|
68
|
-
|
|
69
|
-
### 2.2 左侧面板 - 控件列表
|
|
70
|
-
|
|
71
|
-
分为以下 Tab 分组:
|
|
72
|
-
|
|
73
|
-
#### Tab: 预设
|
|
74
|
-
- 密码
|
|
75
|
-
|
|
76
|
-
#### Tab: 业务组件
|
|
77
|
-
- 示例业务块
|
|
78
|
-
|
|
79
|
-
#### Tab: 基础控件
|
|
80
|
-
- 输入框
|
|
81
|
-
- 选择器
|
|
82
|
-
- 数字输入框
|
|
83
|
-
- 日期选择器
|
|
84
|
-
- 时间选择器
|
|
85
|
-
- 时间选择
|
|
86
|
-
- 级联选择器
|
|
87
|
-
- 多选框
|
|
88
|
-
- 取色器
|
|
89
|
-
- 单选框
|
|
90
|
-
- 评分
|
|
91
|
-
- 查看
|
|
92
|
-
- 滑块
|
|
93
|
-
- 开关
|
|
94
|
-
- 穿梭框
|
|
95
|
-
|
|
96
|
-
#### Tab: 表单插槽
|
|
97
|
-
(当前选中状态)
|
|
98
|
-
|
|
99
|
-
### 2.3 中间区域 - 表单设计区
|
|
100
|
-
|
|
101
|
-
#### 操作按钮行
|
|
102
|
-
|
|
103
|
-
| 按钮 | 说明 |
|
|
104
|
-
|------|------|
|
|
105
|
-
| 预览 | 预览当前设计结果 |
|
|
106
|
-
| 保存 | 保存设计到缓存 |
|
|
107
|
-
| 重置 | 重置设计区 |
|
|
108
|
-
| 新增分组 | 添加新的表单分组 |
|
|
109
|
-
|
|
110
|
-
#### 功能按钮区
|
|
111
|
-
|
|
112
|
-
- 提交
|
|
113
|
-
- 取消
|
|
114
|
-
- 重置
|
|
115
|
-
|
|
116
|
-
### 2.4 右侧面板 - 属性编辑区
|
|
117
|
-
|
|
118
|
-
- **标题**: "属性"
|
|
119
|
-
- **提示**: "点击设计区中的控件以编辑属性"
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## 3. 页面结构树形图
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
RootWebArea "flame-plus"
|
|
127
|
-
├── [工具栏]
|
|
128
|
-
│ ├── button "从缓存回显"
|
|
129
|
-
│ ├── button "清空缓存"
|
|
130
|
-
│ └── button "关闭全屏设计器"
|
|
131
|
-
├── [提示信息]
|
|
132
|
-
├── [flmCascader 测试]
|
|
133
|
-
│ ├── textbox (readonly)
|
|
134
|
-
│ └── 选中值文本
|
|
135
|
-
├── [flmDynamicForm 测试]
|
|
136
|
-
│ ├── 折叠面板: 基本信息
|
|
137
|
-
│ │ └── form (姓名, 性别)
|
|
138
|
-
│ └── 折叠面板: 家庭信息
|
|
139
|
-
│ ├── form 1 (姓名, 性别)
|
|
140
|
-
│ └── form 2 (姓名, 性别)
|
|
141
|
-
└── dialog (modal, 全屏设计器)
|
|
142
|
-
├── header (关闭按钮)
|
|
143
|
-
├── [左侧控件面板]
|
|
144
|
-
│ ├── tab: 预设 → 密码
|
|
145
|
-
│ ├── tab: 业务组件 → 示例业务块
|
|
146
|
-
│ ├── tab: 基础控件 → 15个基础控件
|
|
147
|
-
│ └── tab: 表单插槽
|
|
148
|
-
├── [中间设计区]
|
|
149
|
-
│ ├── 操作按钮 (预览/保存/重置/新增分组)
|
|
150
|
-
│ └── 功能按钮 (提交/取消/重置)
|
|
151
|
-
└── [右侧属性面板]
|
|
152
|
-
└── 属性编辑区
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## 4. 组件映射关系
|
|
156
|
-
|
|
157
|
-
| 页面区域 | 对应组件 | 类型 |
|
|
158
|
-
|----------|----------|------|
|
|
159
|
-
| 级联选择器测试 | flmCascader | 基础组件 (base) |
|
|
160
|
-
| 动态表单测试 | flmDynamicForm | 复合组件 (complex) |
|
|
161
|
-
| 折叠面板 | el-collapse (Element-Plus) | 基础组件 |
|
|
162
|
-
| 全屏设计器 | 自定义对话框 | 页面组件 |
|
|
163
|
-
| 控件列表面板 | 拖拽控件面板 | 设计器内部组件 |
|
|
164
|
-
| 表单设计区 | 设计画布 | 设计器内部组件 |
|
|
165
|
-
| 属性编辑区 | 属性面板 | 设计器内部组件 |
|