@idooel/components 0.0.2-beta.3 → 0.0.2-beta.31

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.
Files changed (113) hide show
  1. package/README.md +98 -98
  2. package/dist/@idooel/components.esm.js +3599 -1574
  3. package/dist/@idooel/components.umd.js +3653 -1629
  4. package/jsconfig.json +7 -7
  5. package/package.json +64 -50
  6. package/packages/alert/index.js +4 -4
  7. package/packages/alert/src/index.vue +45 -45
  8. package/packages/batch-export/index.js +4 -4
  9. package/packages/batch-export/src/index.vue +104 -104
  10. package/packages/business-components/modal-fsm/index.js +4 -4
  11. package/packages/business-components/modal-fsm/src/index.vue +163 -163
  12. package/packages/business-components/modal-import/index.js +4 -4
  13. package/packages/business-components/modal-import/src/index.vue +222 -139
  14. package/packages/business-components/modal-timeline/index.js +4 -4
  15. package/packages/business-components/modal-timeline/src/index.vue +77 -77
  16. package/packages/business-components/tabs-sub-center/index.js +4 -4
  17. package/packages/business-components/tabs-sub-center/src/index.vue +116 -116
  18. package/packages/button/index.js +4 -4
  19. package/packages/button/src/index.vue +65 -65
  20. package/packages/checkbox/index.js +4 -4
  21. package/packages/checkbox/src/index.vue +52 -52
  22. package/packages/composite-components/button-group/index.js +4 -4
  23. package/packages/composite-components/button-group/src/index.vue +151 -151
  24. package/packages/composite-components/form-attachment/src/index.vue +14 -14
  25. package/packages/composite-components/form-img-crop/index.js +4 -4
  26. package/packages/composite-components/form-img-crop/src/index.vue +131 -131
  27. package/packages/composite-components/modal-confirm/index.js +4 -4
  28. package/packages/composite-components/modal-confirm/src/index.vue +103 -103
  29. package/packages/composite-components/modal-form/index.js +4 -4
  30. package/packages/composite-components/modal-form/src/index.vue +230 -230
  31. package/packages/composite-components/modal-img-crop/index.js +4 -4
  32. package/packages/composite-components/modal-img-crop/src/index.vue +298 -298
  33. package/packages/composite-components/modal-table/index.js +4 -4
  34. package/packages/composite-components/modal-table/src/index.vue +155 -155
  35. package/packages/composite-components/modal-tree/index.js +4 -4
  36. package/packages/composite-components/modal-tree/src/index.vue +75 -75
  37. package/packages/composite-components/search-area/index.js +4 -4
  38. package/packages/composite-components/search-area/src/index.vue +239 -237
  39. package/packages/composite-components/search-area/src/label.vue +35 -35
  40. package/packages/composite-components/select-entity-modal-table/index.js +4 -4
  41. package/packages/composite-components/select-entity-modal-table/src/index.vue +171 -171
  42. package/packages/date/index.js +4 -4
  43. package/packages/date/src/index.vue +112 -112
  44. package/packages/date-range/index.js +4 -4
  45. package/packages/date-range/src/index.vue +47 -47
  46. package/packages/form/index.js +4 -4
  47. package/packages/form/src/index.vue +393 -319
  48. package/packages/icon/index.js +4 -4
  49. package/packages/icon/src/index.vue +31 -31
  50. package/packages/index.js +159 -153
  51. package/packages/input/index.js +4 -4
  52. package/packages/input/src/index.vue +35 -35
  53. package/packages/input-number/index.js +4 -4
  54. package/packages/input-number/src/index.vue +23 -23
  55. package/packages/loading/index.js +4 -4
  56. package/packages/loading/src/index.vue +36 -36
  57. package/packages/meta/provider.js +4 -0
  58. package/packages/modal/index.js +4 -4
  59. package/packages/modal/src/index.vue +184 -184
  60. package/packages/models/form-group-model/index.js +4 -4
  61. package/packages/models/form-group-model/src/index.vue +271 -273
  62. package/packages/models/form-model/index.js +4 -4
  63. package/packages/models/form-model/src/index.vue +236 -232
  64. package/packages/models/step-model/index.js +4 -4
  65. package/packages/models/step-model/src/index.vue +224 -224
  66. package/packages/models/tree-table-model/README.md +0 -0
  67. package/packages/models/tree-table-model/index.js +4 -4
  68. package/packages/models/tree-table-model/src/index.vue +963 -689
  69. package/packages/pagination/index.js +5 -0
  70. package/packages/pagination/src/index.vue +372 -0
  71. package/packages/radio/index.js +4 -4
  72. package/packages/radio/src/index.vue +56 -56
  73. package/packages/select/index.js +4 -4
  74. package/packages/select/src/index.vue +113 -105
  75. package/packages/select-entity/index.js +4 -4
  76. package/packages/select-entity/src/index.vue +119 -119
  77. package/packages/table/index.js +4 -4
  78. package/packages/table/src/action.vue +176 -172
  79. package/packages/table/src/index.vue +605 -319
  80. package/packages/tabs/index.js +4 -4
  81. package/packages/tabs/src/index.vue +55 -55
  82. package/packages/text/index.js +4 -4
  83. package/packages/text/src/index.vue +47 -47
  84. package/packages/text-editor/index.js +4 -4
  85. package/packages/text-editor/src/index.vue +72 -72
  86. package/packages/textarea/index.js +4 -4
  87. package/packages/textarea/src/index.vue +57 -57
  88. package/packages/theme/form.scss +21 -21
  89. package/packages/theme/index.scss +43 -43
  90. package/packages/theme/overrid.scss +7 -7
  91. package/packages/theme/styleClass.scss +2 -2
  92. package/packages/theme/variables.scss +55 -55
  93. package/packages/timeline/index.js +4 -4
  94. package/packages/timeline/src/index.vue +257 -257
  95. package/packages/tpl/index.js +4 -4
  96. package/packages/tpl/src/index.vue +55 -55
  97. package/packages/tree/index.js +4 -4
  98. package/packages/tree/src/TreeNode.vue +29 -29
  99. package/packages/tree/src/index.vue +101 -101
  100. package/packages/tree-select/index.js +4 -4
  101. package/packages/tree-select/src/index.vue +142 -142
  102. package/packages/upload/index.js +4 -4
  103. package/packages/upload/src/index.vue +998 -494
  104. package/packages/utils/README.md +172 -0
  105. package/packages/utils/index.js +66 -62
  106. package/packages/utils/runtime-context/dataPoolAPI.js +501 -0
  107. package/packages/utils/runtime-context/globalDataPool.js +279 -0
  108. package/packages/utils/runtime-context/index.js +76 -0
  109. package/packages/utils/runtime-context/modelSchema.js +174 -0
  110. package/scripts/rollup.config.js +42 -42
  111. package/scripts/rollup.esm.config.js +11 -11
  112. package/scripts/rollup.umd.config.js +17 -14
  113. package/vitest.config.js +17 -0
@@ -0,0 +1,172 @@
1
+ # Utils 工具库目录结构
2
+
3
+ ## 📁 目录结构
4
+
5
+ ```
6
+ utils/
7
+ ├── README.md # 本说明文档
8
+ ├── index.js # 工具库主入口,导出所有工具和常量
9
+ └── runtime-context/ # Runtime Context 数据池模块
10
+ ├── index.js # 统一导出入口
11
+ ├── globalDataPool.js # 全局数据池核心架构
12
+ ├── dataPoolAPI.js # 统一的数据池 API 接口
13
+ └── modelSchema.js # 模型字段定义和类型验证
14
+ ```
15
+
16
+ ## 🚀 使用方式
17
+
18
+ ### 1. 传统工具(常量和函数)
19
+
20
+ ```javascript
21
+ import {
22
+ NAMESPACE,
23
+ CONTEXT,
24
+ BUILT_IN_EVENT_NAMES,
25
+ parseFieldMap
26
+ } from '@/utils'
27
+
28
+ // 使用常量和工具函数
29
+ const context = CONTEXT
30
+ const fieldMap = parseFieldMap(fieldMapConfig, dataSource)
31
+ ```
32
+
33
+ ### 2. Runtime Context 数据池
34
+
35
+ ```javascript
36
+ // 直接导入(推荐)
37
+ import { createTreeTableModel, createDataPoolAPI } from '@/utils/runtime-context'
38
+
39
+ // 使用示例
40
+ const model = createTreeTableModel('my-table')
41
+ const api = createDataPoolAPI()
42
+ ```
43
+
44
+ ### 3. TreeTable 模型(推荐用法)
45
+
46
+ ```javascript
47
+ import { createTreeTableModel } from '@/utils/runtime-context'
48
+
49
+ // 创建 TreeTable 模型实例
50
+ const model = createTreeTableModel('tree-table-instance')
51
+
52
+ // 使用模型方法
53
+ model.setCurrentRowData({ id: 1, name: '测试数据' })
54
+ const currentRow = model.getCurrentRowData()
55
+
56
+ // 订阅数据变化
57
+ model.subscribe('currentRowData', (event) => {
58
+ console.log('数据变化:', event.value)
59
+ })
60
+
61
+ // 设置共享数据(用于 modal table)
62
+ model.setSharedData({ parentData: '父级数据' })
63
+ ```
64
+
65
+ ### 4. 模型字段定义
66
+
67
+ ```javascript
68
+ import { TREE_TABLE_FIELDS, getSupportedFields, getFieldDefinition } from '@/utils/runtime-context'
69
+
70
+ // 查看支持的字段
71
+ console.log('支持的字段:', getSupportedFields()) // ['currentRowData']
72
+
73
+ // 查看字段定义
74
+ console.log('currentRowData 字段定义:', getFieldDefinition('currentRowData'))
75
+ // 输出: { type: 'object', default: {}, description: '当前表格选中的行数据' }
76
+
77
+ // 字段会在模型创建时自动初始化为默认值
78
+ const model = createTreeTableModel('my-table')
79
+ console.log(model.getCurrentRowData()) // {} (默认值)
80
+ ```
81
+
82
+ ## 📋 模块说明
83
+
84
+ ### Runtime Context 模块
85
+
86
+ 新一代的数据池管理系统,基于 `@idooel/runtime-context` 构建:
87
+
88
+ - **globalDataPool.js**: 核心架构,挂载到 `window.__idooel_data_pool__`
89
+ - **dataPoolAPI.js**: 统一的 API 接口,提供简洁易用的方法
90
+ - **modelSchema.js**: 模型字段定义和类型验证
91
+
92
+ ### 传统工具
93
+
94
+ 保持向后兼容的工具和常量:
95
+
96
+ - **index.js**: 常量定义和工具函数
97
+
98
+ ## 🔄 迁移指南
99
+
100
+ ### 从旧版数据池迁移
101
+
102
+ ```javascript
103
+ // 旧版 TreeTableDataPoolManager(已弃用)
104
+ import { createPoolManager, generateInstanceId } from '@/utils/treeTableDataPoolManager'
105
+
106
+ // 新版 runtime-context(推荐)
107
+ import { createTreeTableModel } from '@/utils/runtime-context'
108
+ const model = createTreeTableModel('instance-id')
109
+ ```
110
+
111
+ ### TreeTable 组件迁移
112
+
113
+ ✅ **已完成迁移** - 组件已从 TreeTableDataPoolManager 迁移到新的 runtime-context 架构:
114
+
115
+ ```javascript
116
+ // 新版用法(已实现)
117
+ import { createTreeTableModel } from '@/utils/runtime-context'
118
+
119
+ export default {
120
+ async created() {
121
+ // 确保全局数据池已初始化
122
+ if (!window.__idooel_data_pool__) {
123
+ console.error('Global data pool not initialized')
124
+ return
125
+ }
126
+
127
+ // 创建 TreeTable 模型实例
128
+ this.model = createTreeTableModel('treeTableModel')
129
+
130
+ // 使用模型方法
131
+ this.model.setCurrentRowData({ id: 1, name: '测试数据' })
132
+ const currentRow = this.model.getCurrentRowData()
133
+
134
+ // 订阅数据变化
135
+ this.unsubscribe = this.model.subscribe('currentRowData', (event) => {
136
+ this.currentRowData = event.value
137
+ this.$forceUpdate()
138
+ })
139
+ },
140
+
141
+ beforeDestroy() {
142
+ // 清理订阅
143
+ if (this.unsubscribe) this.unsubscribe()
144
+ if (this.model) this.model.cleanup()
145
+ }
146
+ }
147
+ ```
148
+
149
+ ## 🛠️ 开发建议
150
+
151
+ 1. **新项目**: 直接使用 `runtime-context` 模块
152
+ 2. **已迁移项目**: 使用新的 `createTreeTableModel` API
153
+ 3. **初始化检查**: 组件中检查 `window.__idooel_data_pool__` 确保数据池已初始化
154
+ 4. **错误处理**: 使用 try-catch 包裹模型创建,添加安全检查
155
+ 5. **共享数据**: 使用简单的 `setSharedData()` 和 `getSharedData()` 方法
156
+ 6. **调试**: 使用 `window.__idooel_data_pool__.manager.debug()` 查看状态
157
+ 7. **批量操作**: 使用 `setBatchModelData` 提高效率
158
+ 8. **数据管理**: 使用 `export/import` 方法进行数据备份和恢复
159
+ 9. **内存管理**: 在组件销毁时正确清理订阅和模型数据
160
+
161
+ ## ⚠️ 注意事项
162
+
163
+ - **初始化顺序**: 确保 `runtime-context` 模块在使用前已导入
164
+ - **错误处理**: 组件应处理模型创建失败的情况
165
+ - **清理工作**: 组件销毁时必须清理订阅和模型,避免内存泄漏
166
+ - **向后兼容**: 旧的 `TreeTableDataPoolManager` 已弃用,请使用新的 API
167
+
168
+ ## 📚 相关文档
169
+
170
+ - [API 接口文档](./runtime-context/dataPoolAPI.js)
171
+ - [全局数据池架构](./runtime-context/globalDataPool.js)
172
+ - [模型字段定义](./runtime-context/modelSchema.js)
@@ -1,63 +1,67 @@
1
- import { parse } from '@idooel/expression'
2
-
3
- export const NAMESPACE = '__idooel__ele__'
4
- export const CONTEXT = '__idooel__ele__context__'
5
- export const EXPOSED = 'exposed'
6
-
7
- export const AREA_NAMES = {
8
- BUTTON_GROUP: 'BUTTON_GROUP'
9
- }
10
-
11
- export const BUILT_IN_EVENT_NAMES = {
12
- SUBMIT: 'submit',
13
- CANCEL: 'cancel',
14
- INCREASE: 'increase',
15
- DELETE: 'delete',
16
- NEXT: 'next',
17
- PREVIOUS: 'previous',
18
- // create, edit, view are reserved for table cru in the current version
19
- CREATE: 'create',
20
- EDIT: 'edit',
21
- VIEW: 'view'
22
- }
23
- export const BUILT_IN_METHODS_NAMES = {
24
- CLOSE_MODAL: 'closeModal',
25
- SUBMIT_FORM: 'submitForm',
26
- //TODO: not use
27
- REFRESH_TABLE: 'refreshTable',
28
- CLEAN_EFFECT: 'cleanEffect'
29
- }
30
-
31
- export const BUILT_IN_TRIGGER = {
32
- // default it's not a trigger
33
- TEXT: 'text',
34
- //状态机触发器
35
- FSM: 'fsm',
36
- ELE_MODAL_FORM: 'ele-modal-form',
37
- ELE_MODAL_TABLE: 'ele-modal-table'
38
- }
39
- export const PAGE_STATUS = {
40
- CREATE: 'create',
41
- //TODO implement edit and view
42
- EDIT: 'edit',
43
- VIEW: 'view'
44
- }
45
- export const RESERVE_EVENT_NAMES = {
46
- //global event
47
- INIT: 'init',
48
- WATCH: 'watch',
49
- //form event
50
- WATCH_FORM_STATUS: 'watch-form-status',
51
- INIT_FORM: 'init-form',
52
- //table event
53
- SEARCH: 'search',
54
- TREE_CHANGE: 'tree-change'
55
- }
56
-
57
- export const parseFieldMap = (fieldMap = {}, dataSource = {}) => {
58
- let ret = {}
59
- Object.keys(fieldMap).forEach((key) => {
60
- ret[fieldMap[key]] = parse(key, dataSource)
61
- })
62
- return ret
1
+ import { parse } from '@idooel/expression'
2
+
3
+ // Runtime Context 数据池模块 - 确保初始化
4
+ import './runtime-context/index.js'
5
+ export * as RuntimeContext from './runtime-context/index.js'
6
+
7
+ export const NAMESPACE = '__idooel__ele__'
8
+ export const CONTEXT = '__idooel__ele__context__'
9
+ export const EXPOSED = 'exposed'
10
+
11
+ export const AREA_NAMES = {
12
+ BUTTON_GROUP: 'BUTTON_GROUP'
13
+ }
14
+
15
+ export const BUILT_IN_EVENT_NAMES = {
16
+ SUBMIT: 'submit',
17
+ CANCEL: 'cancel',
18
+ INCREASE: 'increase',
19
+ DELETE: 'delete',
20
+ NEXT: 'next',
21
+ PREVIOUS: 'previous',
22
+ // create, edit, view are reserved for table cru in the current version
23
+ CREATE: 'create',
24
+ EDIT: 'edit',
25
+ VIEW: 'view'
26
+ }
27
+ export const BUILT_IN_METHODS_NAMES = {
28
+ CLOSE_MODAL: 'closeModal',
29
+ SUBMIT_FORM: 'submitForm',
30
+ //TODO: not use
31
+ REFRESH_TABLE: 'refreshTable',
32
+ CLEAN_EFFECT: 'cleanEffect'
33
+ }
34
+
35
+ export const BUILT_IN_TRIGGER = {
36
+ // default it's not a trigger
37
+ TEXT: 'text',
38
+ //状态机触发器
39
+ FSM: 'fsm',
40
+ ELE_MODAL_FORM: 'ele-modal-form',
41
+ ELE_MODAL_TABLE: 'ele-modal-table'
42
+ }
43
+ export const PAGE_STATUS = {
44
+ CREATE: 'create',
45
+ //TODO implement edit and view
46
+ EDIT: 'edit',
47
+ VIEW: 'view'
48
+ }
49
+ export const RESERVE_EVENT_NAMES = {
50
+ //global event
51
+ INIT: 'init',
52
+ WATCH: 'watch',
53
+ //form event
54
+ WATCH_FORM_STATUS: 'watch-form-status',
55
+ INIT_FORM: 'init-form',
56
+ //table event
57
+ SEARCH: 'search',
58
+ TREE_CHANGE: 'tree-change'
59
+ }
60
+
61
+ export const parseFieldMap = (fieldMap = {}, dataSource = {}) => {
62
+ let ret = {}
63
+ Object.keys(fieldMap).forEach((key) => {
64
+ ret[fieldMap[key]] = parse(key, dataSource)
65
+ })
66
+ return ret
63
67
  }