vue-super-crud 1.7.1 → 1.7.4

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 (273) hide show
  1. package/README.md +42 -10
  2. package/lib/index.css +1 -1
  3. package/lib/super-crud.min.js +2 -2
  4. package/package.json +21 -16
  5. package/src/config/common.js +2 -1
  6. package/src/config/crud.js +3 -3
  7. package/src/index.js +4 -0
  8. package/src/template/formatData.js +75 -87
  9. package/.browserslistrc +0 -3
  10. package/.versionrc.json +0 -36
  11. package/CHANGELOG.md +0 -232
  12. package/babel.config.js +0 -12
  13. package/build/alias.js +0 -10
  14. package/build/build.js +0 -52
  15. package/build/config.js +0 -70
  16. package/deploy.bat +0 -14
  17. package/docs/.vuepress/components/button/base.vue +0 -88
  18. package/docs/.vuepress/components/common/code-format.vue +0 -331
  19. package/docs/.vuepress/components/commonConfig/presetCodeTemplate/base.vue +0 -68
  20. package/docs/.vuepress/components/commonConfig/presetCodeTemplate/customParams.vue +0 -73
  21. package/docs/.vuepress/components/commonConfig/renderType/component.vue +0 -160
  22. package/docs/.vuepress/components/commonConfig/renderType/formatter.vue +0 -49
  23. package/docs/.vuepress/components/commonConfig/renderType/render.vue +0 -91
  24. package/docs/.vuepress/components/commonConfig/renderType/slot.vue +0 -63
  25. package/docs/.vuepress/components/crud/baseUse/baseUse.vue +0 -98
  26. package/docs/.vuepress/components/crud/baseUse/columnAction.vue +0 -72
  27. package/docs/.vuepress/components/crud/baseUse/columnWidth.vue +0 -107
  28. package/docs/.vuepress/components/crud/baseUse/handleRow.vue +0 -65
  29. package/docs/.vuepress/components/crud/baseUse/height.vue +0 -82
  30. package/docs/.vuepress/components/crud/baseUse/index.vue +0 -54
  31. package/docs/.vuepress/components/crud/baseUse/loading.vue +0 -70
  32. package/docs/.vuepress/components/crud/baseUse/pagination.vue +0 -108
  33. package/docs/.vuepress/components/crud/baseUse/selection.vue +0 -114
  34. package/docs/.vuepress/components/crud/baseUse/summaryMethod.vue +0 -118
  35. package/docs/.vuepress/components/crud/baseUse/title.vue +0 -54
  36. package/docs/.vuepress/components/crud/baseUse/toolbar.vue +0 -69
  37. package/docs/.vuepress/components/crud/buttons/common.vue +0 -115
  38. package/docs/.vuepress/components/crud/buttons/fast.vue +0 -82
  39. package/docs/.vuepress/components/crud/contextMenu/base.vue +0 -72
  40. package/docs/.vuepress/components/crud/copy.vue +0 -52
  41. package/docs/.vuepress/components/crud/crudEvents/api.vue +0 -157
  42. package/docs/.vuepress/components/crud/crudEvents/deleteTip.vue +0 -93
  43. package/docs/.vuepress/components/crud/crudEvents/events.vue +0 -188
  44. package/docs/.vuepress/components/crud/dataSort/base.vue +0 -142
  45. package/docs/.vuepress/components/crud/genDynamicColumns/base.vue +0 -53
  46. package/docs/.vuepress/components/crud/genDynamicColumns/dynamicAndFixed.vue +0 -111
  47. package/docs/.vuepress/components/crud/genDynamicColumns/treeDynamic.vue +0 -68
  48. package/docs/.vuepress/components/crud/handleBar/handleRow.vue +0 -65
  49. package/docs/.vuepress/components/crud/handleBar/toolbar.vue +0 -69
  50. package/docs/.vuepress/components/crud/renderType/1.vue +0 -57
  51. package/docs/.vuepress/components/crud/renderType/2.vue +0 -63
  52. package/docs/.vuepress/components/crud/renderType/3.vue +0 -105
  53. package/docs/.vuepress/components/crud/renderType/5.vue +0 -91
  54. package/docs/.vuepress/components/crud/search/1.vue +0 -90
  55. package/docs/.vuepress/components/crud/search/2.vue +0 -78
  56. package/docs/.vuepress/components/crud/search/3.vue +0 -107
  57. package/docs/.vuepress/components/crud/search/base.vue +0 -123
  58. package/docs/.vuepress/components/crud/search/localSearch.vue +0 -124
  59. package/docs/.vuepress/components/crud/search/special.vue +0 -148
  60. package/docs/.vuepress/components/crud/selection/events.vue +0 -47
  61. package/docs/.vuepress/components/crud/selection/pagination.vue +0 -94
  62. package/docs/.vuepress/components/crud/selection/singleSelection.vue +0 -64
  63. package/docs/.vuepress/components/crud/span/base.vue +0 -69
  64. package/docs/.vuepress/components/crud/span/special.vue +0 -75
  65. package/docs/.vuepress/components/crud/summary/base.vue +0 -99
  66. package/docs/.vuepress/components/crud/tableEdit/addDeleteBtn.vue +0 -174
  67. package/docs/.vuepress/components/crud/tableEdit/cellEdit.vue +0 -194
  68. package/docs/.vuepress/components/crud/tableEdit/controlEdit.vue +0 -219
  69. package/docs/.vuepress/components/crud/tableEdit/dialog.vue +0 -172
  70. package/docs/.vuepress/components/crud/tableEdit/free.vue +0 -88
  71. package/docs/.vuepress/components/crud/tableEdit/freeColumn.vue +0 -82
  72. package/docs/.vuepress/components/crud/tableEdit/methods.vue +0 -154
  73. package/docs/.vuepress/components/crud/tableEdit/rowAction.vue +0 -107
  74. package/docs/.vuepress/components/crud/tableEdit/rowBatch.vue +0 -116
  75. package/docs/.vuepress/components/crud/tableEdit/rowClick.vue +0 -98
  76. package/docs/.vuepress/components/crud/validate/base.vue +0 -122
  77. package/docs/.vuepress/components/crud/validate/custom.vue +0 -82
  78. package/docs/.vuepress/components/crud/validate/regulars.vue +0 -88
  79. package/docs/.vuepress/components/crud/validate/relation.vue +0 -91
  80. package/docs/.vuepress/components/crud/validate/tree.vue +0 -82
  81. package/docs/.vuepress/components/dialog/baseUse/base.vue +0 -92
  82. package/docs/.vuepress/components/dialog/baseUse/beforeConfirm.vue +0 -78
  83. package/docs/.vuepress/components/dialog/baseUse/control.vue +0 -79
  84. package/docs/.vuepress/components/dialog/baseUse/drawer.vue +0 -59
  85. package/docs/.vuepress/components/dialog/baseUse/footer.vue +0 -87
  86. package/docs/.vuepress/components/dialog/baseUse/insertSlot.vue +0 -79
  87. package/docs/.vuepress/components/dict/DictLinkage.vue +0 -91
  88. package/docs/.vuepress/components/dict/baseUse.vue +0 -72
  89. package/docs/.vuepress/components/dict/component.vue +0 -82
  90. package/docs/.vuepress/components/dict/localDict.vue +0 -68
  91. package/docs/.vuepress/components/form/baseUse/base.vue +0 -48
  92. package/docs/.vuepress/components/form/baseUse/dataFormat.vue +0 -92
  93. package/docs/.vuepress/components/form/baseUse/deep.vue +0 -57
  94. package/docs/.vuepress/components/form/baseUse/gridLayout.vue +0 -47
  95. package/docs/.vuepress/components/form/baseUse/group.vue +0 -66
  96. package/docs/.vuepress/components/form/baseUse/hidden.vue +0 -40
  97. package/docs/.vuepress/components/form/baseUse/inlineLayout.vue +0 -48
  98. package/docs/.vuepress/components/form/baseUse/label.vue +0 -51
  99. package/docs/.vuepress/components/form/baseUse/tooltip.vue +0 -40
  100. package/docs/.vuepress/components/form/baseUse/validate.vue +0 -52
  101. package/docs/.vuepress/components/form/detail/base.vue +0 -78
  102. package/docs/.vuepress/components/form/detail/border.vue +0 -90
  103. package/docs/.vuepress/components/form/detail/singleDetail.vue +0 -72
  104. package/docs/.vuepress/components/formatData/baseUse.vue +0 -131
  105. package/docs/.vuepress/components/mock/index.js +0 -347
  106. package/docs/.vuepress/components/mockData/custom.vue +0 -69
  107. package/docs/.vuepress/components/mockData/example.vue +0 -290
  108. package/docs/.vuepress/components/positionSlot/base.vue +0 -24
  109. package/docs/.vuepress/components/positionSlot/form.vue +0 -71
  110. package/docs/.vuepress/components/positionSlot/table.vue +0 -85
  111. package/docs/.vuepress/components/tabs/base.vue +0 -57
  112. package/docs/.vuepress/components/temp.js +0 -195
  113. package/docs/.vuepress/config.js +0 -146
  114. package/docs/.vuepress/enhanceApp.js +0 -142
  115. package/docs/.vuepress/public/favicon.ico +0 -0
  116. package/docs/.vuepress/public/super.png +0 -0
  117. package/docs/.vuepress/styles/index.styl +0 -25
  118. package/docs/.vuepress/styles/palette.styl +0 -6
  119. package/docs/README.md +0 -14
  120. package/docs/guide/button/base.md +0 -31
  121. package/docs/guide/commonConfig/jsx.md +0 -166
  122. package/docs/guide/commonConfig/presetCodeTemplate.md +0 -68
  123. package/docs/guide/commonConfig/renderType.md +0 -181
  124. package/docs/guide/crud/baseUse.md +0 -120
  125. package/docs/guide/crud/buttons.md +0 -18
  126. package/docs/guide/crud/config.md +0 -217
  127. package/docs/guide/crud/contextMenu.md +0 -18
  128. package/docs/guide/crud/dataSort.md +0 -66
  129. package/docs/guide/crud/genDynamicColumns.md +0 -145
  130. package/docs/guide/crud/handleBar.md +0 -26
  131. package/docs/guide/crud/renderType.md +0 -4
  132. package/docs/guide/crud/search.md +0 -150
  133. package/docs/guide/crud/selection.md +0 -73
  134. package/docs/guide/crud/span.md +0 -98
  135. package/docs/guide/crud/summary.md +0 -167
  136. package/docs/guide/crud/tableEdit.md +0 -377
  137. package/docs/guide/crud/validate.md +0 -158
  138. package/docs/guide/dialog/baseUse.md +0 -81
  139. package/docs/guide/dict/baseUse.md +0 -174
  140. package/docs/guide/dict/component.md +0 -88
  141. package/docs/guide/dict/config.md +0 -44
  142. package/docs/guide/form/baseUse.md +0 -142
  143. package/docs/guide/form/detail.md +0 -38
  144. package/docs/guide/formatData/baseUse.md +0 -98
  145. package/docs/guide/formatData/config.md +0 -142
  146. package/docs/guide/mockData/base.md +0 -26
  147. package/docs/guide/positionSlot/base.md +0 -41
  148. package/docs/guide/question/base.md +0 -44
  149. package/docs/guide/start/base.md +0 -30
  150. package/docs/guide/tabs/base.md +0 -63
  151. package/examples/App.vue +0 -52
  152. package/examples/Layout/components/AppMain.vue +0 -40
  153. package/examples/Layout/components/Item.vue +0 -29
  154. package/examples/Layout/components/Link.vue +0 -44
  155. package/examples/Layout/components/SidebarItem.vue +0 -93
  156. package/examples/Layout/index.vue +0 -69
  157. package/examples/assets/logo.png +0 -0
  158. package/examples/favicon.ico +0 -0
  159. package/examples/index.html +0 -18
  160. package/examples/main.js +0 -54
  161. package/examples/router/index.js +0 -140
  162. package/examples/store/index.js +0 -0
  163. package/examples/styles/index.scss +0 -63
  164. package/examples/styles/sidebar.scss +0 -226
  165. package/examples/styles/transition.scss +0 -48
  166. package/examples/styles/variables.scss +0 -25
  167. package/examples/views/crud/base.vue +0 -68
  168. package/examples/views/crud/handleRow.vue +0 -84
  169. package/examples/views/crud/search.vue +0 -116
  170. package/examples/views/dashboard/index.vue +0 -244
  171. package/examples/views/dashboard/index1.vue +0 -234
  172. package/examples/views/dashboard/test.vue +0 -9
  173. package/examples/views/formTest/index.vue +0 -168
  174. package/examples/views/nested/menu1/index.vue +0 -7
  175. package/examples/views/nested/menu1/menu1-1/index.vue +0 -7
  176. package/examples/views/nested/menu1/menu1-2/index.vue +0 -7
  177. package/examples/views/nested/menu1/menu1-2/menu1-2-1/index.vue +0 -5
  178. package/examples/views/nested/menu1/menu1-2/menu1-2-2/index.vue +0 -5
  179. package/examples/views/nested/menu1/menu1-3/index.vue +0 -5
  180. package/examples/views/nested/menu2/index.vue +0 -5
  181. package/gulpfile.js +0 -84
  182. package/packages/button/index.vue +0 -189
  183. package/packages/core/components/comp.vue +0 -223
  184. package/packages/core/components/position.vue +0 -135
  185. package/packages/core/components/render.vue +0 -460
  186. package/packages/core/configManager.js +0 -302
  187. package/packages/core/create.js +0 -8
  188. package/packages/core/defaultRender.js +0 -64
  189. package/packages/core/dict/global.js +0 -10
  190. package/packages/core/dict/index.js +0 -432
  191. package/packages/core/dict/mixin.js +0 -94
  192. package/packages/core/event.js +0 -60
  193. package/packages/core/index.js +0 -6
  194. package/packages/core/init.js +0 -122
  195. package/packages/core/mock/genConfig.js +0 -228
  196. package/packages/core/mock/genData.js +0 -422
  197. package/packages/core/mock/index.js +0 -4
  198. package/packages/core/rules.js +0 -111
  199. package/packages/crud/column.vue +0 -205
  200. package/packages/crud/columnAction.vue +0 -207
  201. package/packages/crud/columnCell.vue +0 -146
  202. package/packages/crud/defaultColumn.vue +0 -130
  203. package/packages/crud/drawerColumn.vue +0 -225
  204. package/packages/crud/form.vue +0 -69
  205. package/packages/crud/index.vue +0 -564
  206. package/packages/crud/menuBar.vue +0 -298
  207. package/packages/crud/mixins/cacheHandler.js +0 -36
  208. package/packages/crud/mixins/calcColumnWidth.js +0 -79
  209. package/packages/crud/mixins/calcHeight.js +0 -105
  210. package/packages/crud/mixins/columnHandler.js +0 -128
  211. package/packages/crud/mixins/contextMenu.js +0 -98
  212. package/packages/crud/mixins/dataProcessor.js +0 -202
  213. package/packages/crud/mixins/dialog.js +0 -109
  214. package/packages/crud/mixins/excelHandler.js +0 -150
  215. package/packages/crud/mixins/exposeMethods.js +0 -107
  216. package/packages/crud/mixins/generateDynamicColumns.js +0 -250
  217. package/packages/crud/mixins/props.js +0 -38
  218. package/packages/crud/mixins/searchHandler.js +0 -151
  219. package/packages/crud/mixins/select.js +0 -359
  220. package/packages/crud/mixins/spanMethod.js +0 -288
  221. package/packages/crud/mixins/summary.js +0 -177
  222. package/packages/crud/mixins/tableEdit.js +0 -547
  223. package/packages/crud/mixins/validate.js +0 -219
  224. package/packages/crud/pagination.vue +0 -110
  225. package/packages/crud/search.vue +0 -119
  226. package/packages/crud/searchHeader.vue +0 -231
  227. package/packages/crud/selectBanner.vue +0 -138
  228. package/packages/crud/utils/EditState.js +0 -319
  229. package/packages/crud/utils/excelExport.js +0 -112
  230. package/packages/crud/utils/excelImport.js +0 -112
  231. package/packages/crud/utils/index.js +0 -98
  232. package/packages/dialog/dialog.js +0 -233
  233. package/packages/dialog/dialog.vue +0 -15
  234. package/packages/dialog/index.js +0 -22
  235. package/packages/dict/cascadeFormat.vue +0 -179
  236. package/packages/dict/dateFormat.vue +0 -40
  237. package/packages/dict/form/cascade.vue +0 -61
  238. package/packages/dict/form/checkbox.vue +0 -90
  239. package/packages/dict/form/extendMethod.js +0 -22
  240. package/packages/dict/form/input-base.js +0 -31
  241. package/packages/dict/form/input.js +0 -20
  242. package/packages/dict/form/radio.vue +0 -69
  243. package/packages/dict/form/select.vue +0 -118
  244. package/packages/dict/form/switch.vue +0 -75
  245. package/packages/dict/valueFormat.vue +0 -188
  246. package/packages/directive/dialog/drag.js +0 -86
  247. package/packages/directive/dialog/dragSize.js +0 -42
  248. package/packages/directive/index.js +0 -9
  249. package/packages/directive/insertSlot.js +0 -10
  250. package/packages/form/contextMenu.js +0 -192
  251. package/packages/form/draftDrawer.vue +0 -391
  252. package/packages/form/formAction.vue +0 -97
  253. package/packages/form/formItem.vue +0 -259
  254. package/packages/form/index.vue +0 -451
  255. package/packages/form/props.js +0 -15
  256. package/packages/grid/cell.vue +0 -65
  257. package/packages/grid/index.vue +0 -130
  258. package/packages/group/index.vue +0 -96
  259. package/packages/tabs/index.vue +0 -290
  260. package/packages/tooltip/index.js +0 -9
  261. package/packages/tooltip/tooltip.vue +0 -32
  262. package/packages/tooltip/tooltipComponent.js +0 -38
  263. package/packages/verifyInput/index.vue +0 -131
  264. package/styles/button.scss +0 -3
  265. package/styles/crud.scss +0 -425
  266. package/styles/dialog.scss +0 -95
  267. package/styles/form.scss +0 -532
  268. package/styles/group.scss +0 -78
  269. package/styles/index.scss +0 -94
  270. package/styles/tabs.scss +0 -139
  271. package/styles/verifyInput.scss +0 -56
  272. package/vue-jsx-sync.js +0 -90
  273. package/vue.config.js +0 -54
@@ -1,302 +0,0 @@
1
- import {
2
- cloneDeep,
3
- merge,
4
- get,
5
- set,
6
- isPlainObject,
7
- isFunction,
8
- } from "lodash-es";
9
- import { mergeTemp, getObjectType } from "utils";
10
-
11
- /**
12
- * 配置管理器
13
- */
14
- class ConfigManager {
15
- constructor(defaultConfigs = {}, globalConfigs = {}, options = {}) {
16
- this.excludeKeys = options.excludeKeys || [];
17
- this.defaultConfigs = defaultConfigs;
18
- this.globalConfigs = globalConfigs;
19
- }
20
- /**
21
- * 获取预设配置
22
- */
23
- getPresetConfig(userConfig) {
24
- const presetName = userConfig.presetType;
25
- return presetName
26
- ? mergeTemp("options", presetName, userConfig)
27
- : userConfig;
28
- }
29
-
30
- getDefaultConfig(key) {
31
- return cloneDeep(this.defaultConfigs[key]) || {};
32
- }
33
-
34
- getGlobalConfig(key) {
35
- return (
36
- cloneDeep({
37
- size: this.globalConfigs.size,
38
- checkPermission:
39
- this.globalConfigs.checkPermission ||
40
- (() => {
41
- return true;
42
- }),
43
- ...this.globalConfigs[key],
44
- }) || {}
45
- );
46
- }
47
-
48
- /**
49
- * 转换配置对象
50
- */
51
- transformConfig(config, transforms) {
52
- const result = cloneDeep(config);
53
- if (this.excludeKeys.length > 0) {
54
- this.excludeKeys.forEach((key) => {
55
- delete result[key];
56
- });
57
- }
58
- if (!transforms) return result;
59
- const handleTransform = (source, key) => {
60
- for (const transform of transforms) {
61
- transform(source, key, source[key]);
62
- }
63
- // 如果值是对象,递归处理
64
- const value = source[key];
65
- if (isPlainObject(value)) {
66
- Object.keys(value).forEach((key) => {
67
- handleTransform(value, key, value[key]);
68
- });
69
- }
70
- };
71
-
72
- // 处理每个顶级属性
73
- Object.keys(result).forEach((key) => {
74
- handleTransform(result, key);
75
- });
76
- return result;
77
- }
78
- /**
79
- * 合并配置
80
- */
81
- mergeConfig(userConfig = {}, options = {}) {
82
- const { type = "", config = {} } = options;
83
-
84
- const defaultConfig = this.getDefaultConfig(type) || config;
85
- const globalConfig = this.getGlobalConfig(type) || {};
86
-
87
- userConfig = this.getPresetConfig(userConfig);
88
-
89
- const transformConfig = this.transformConfig(
90
- merge({}, globalConfig, userConfig),
91
- defaultConfig.transforms
92
- );
93
- const resultConfig = this.applyDefaults(
94
- transformConfig,
95
- defaultConfig.schema
96
- );
97
- // 验证配置
98
- this.validateConfig(resultConfig, {
99
- schema: defaultConfig.schema,
100
- strict: defaultConfig.strict,
101
- ignoreKeys: defaultConfig.ignoreKeys,
102
- type,
103
- });
104
-
105
- return resultConfig;
106
- }
107
-
108
- /**
109
- * 验证配置
110
- */
111
- validateConfig(config, options = {}) {
112
- const { schema, strict, ignoreKeys, type } = options;
113
- // 对schema对象进行严格校验
114
- if (strict) {
115
- const extraKeys = Object.keys(config).filter(
116
- (key) => !schema[key] && !(ignoreKeys || []).includes(key)
117
- );
118
- if (extraKeys.length > 0) {
119
- console.warn(
120
- `配置对象 ${type} 包含不存在的属性: ${extraKeys.join(", ")}`
121
- );
122
- }
123
- }
124
- const validate = (config, schema, path = "") => {
125
- for (const [key, definition] of Object.entries(schema)) {
126
- const value = get(config, key);
127
- const fullPath = path ? `${path}.${key}` : key;
128
- let def = definition;
129
- if (!isPlainObject(def)) {
130
- def = {
131
- type: def,
132
- };
133
- }
134
- if (value === undefined || value === null) {
135
- if (def.required) console.warn(`缺少必填配置项: "${fullPath}"`);
136
- } else {
137
- // 类型检查
138
- if (def.type) {
139
- const types = Array.isArray(def.type) ? def.type : [def.type];
140
-
141
- const valid = types.some((type) => {
142
- if (type === Boolean) return typeof value === "boolean";
143
- if (type === Function) return typeof value === "function";
144
- if (type === Object) return isPlainObject(value);
145
- if (type === Array) return Array.isArray(value);
146
- if (type === String) return typeof value === "string";
147
- if (type === Number) return typeof value === "number";
148
- if (type === Promise) return value instanceof Promise;
149
- if (type === RegExp) return value instanceof RegExp;
150
- if (type === Date) return value instanceof Date;
151
- return false;
152
- });
153
-
154
- if (!valid) {
155
- console.warn(
156
- `配置项 "${fullPath.replace(
157
- /\.arrayOf/g,
158
- ""
159
- )}" 类型错误: 期望类型为 ${types
160
- .map((t) => t.name)
161
- .join("|")}, 实际类型为 ${getObjectType(
162
- value
163
- )}, 值为 ${value}`
164
- );
165
- }
166
- }
167
-
168
- // 数组类型校验
169
- if (def.arrayOf && Array.isArray(value)) {
170
- value.forEach((item, index) => {
171
- const itemPath = `${fullPath}[${index}]`;
172
-
173
- if (isPlainObject(def.arrayOf)) {
174
- validate({ arrayOf: item }, { arrayOf: def.arrayOf }, itemPath);
175
- }
176
-
177
- if (isFunction(def.arrayOf.validate)) {
178
- try {
179
- def.arrayOf.validate(item);
180
- } catch (error) {
181
- console.warn(
182
- `数组项 "${itemPath}" 验证失败: ${error.message}, 值为 ${value}`
183
- );
184
- }
185
- }
186
- });
187
- }
188
-
189
- // 枚举值校验
190
- if (
191
- def.enum &&
192
- typeof value === "string" &&
193
- !def.enum.includes(value)
194
- ) {
195
- console.warn(
196
- `配置项 "${fullPath}" 的值无效: 必须是 ${def.enum.join(
197
- ", "
198
- )}, 当前值为 ${value}`
199
- );
200
- }
201
-
202
- // 自定义验证
203
- if (def.validator && !def.validator(value)) {
204
- console.warn(`配置项 "${fullPath}" 验证失败, 值为 ${value}`);
205
- }
206
-
207
- // 嵌套对象验证
208
- if (def.properties && isPlainObject(value)) {
209
- // 对象严格校验
210
- if (def.strict) {
211
- const extraKeys = Object.keys(value).filter(
212
- (k) => !def.properties[k] && !(def.ignoreKeys || []).includes(k)
213
- );
214
- if (extraKeys.length > 0) {
215
- console.warn(
216
- `配置项 "${fullPath}" 包含不存在的属性: ${extraKeys.join(
217
- ", "
218
- )}}`
219
- );
220
- }
221
- }
222
- validate(value, def.properties, fullPath);
223
- }
224
- }
225
- }
226
- };
227
- validate(config, schema);
228
- }
229
-
230
- /**
231
- * 应用默认值
232
- */
233
- applyDefaults(config, schema) {
234
- const result = cloneDeep(config);
235
-
236
- const applyDefaultsRecursive = (config, schema, basePath = "") => {
237
- for (const [key, definition] of Object.entries(schema)) {
238
- const fullPath = basePath ? `${basePath}.${key}` : key;
239
- const value = get(config, key);
240
-
241
- let def = definition;
242
- if (!isPlainObject(def)) {
243
- def = {
244
- type: def,
245
- };
246
- }
247
-
248
- if (def.default) {
249
- if (value === undefined) {
250
- const defaultValue = isFunction(definition.default)
251
- ? definition.default()
252
- : definition.default;
253
- defaultValue && set(result, fullPath, defaultValue);
254
- } else if (isPlainObject(value)) {
255
- // 值为对象类型与默认值合并
256
- const defaultValue = isFunction(definition.default)
257
- ? definition.default()
258
- : definition.default;
259
- if (isPlainObject(defaultValue)) {
260
- defaultValue &&
261
- set(result, fullPath, merge({}, defaultValue, value));
262
- }
263
- }
264
- }
265
-
266
- // 空字符串转换为 true
267
- if (def.type) {
268
- const types = Array.isArray(def.type) ? def.type : [def.type];
269
- if (types.includes(Boolean) && value === "") {
270
- set(result, fullPath, true);
271
- }
272
- }
273
-
274
- // 处理嵌套对象的属性
275
- if (def.properties) {
276
- const currentValue = get(result, fullPath) || {};
277
- if (isPlainObject(currentValue)) {
278
- applyDefaultsRecursive(currentValue, def.properties, fullPath);
279
- }
280
- }
281
- }
282
- };
283
-
284
- applyDefaultsRecursive(config, schema);
285
- return result;
286
- }
287
- }
288
-
289
- let instance = null;
290
-
291
- export default {
292
- create: (conf, gloConf) => {
293
- if (!instance) {
294
- instance = new ConfigManager(conf, gloConf);
295
- return instance;
296
- }
297
- return instance;
298
- },
299
- getInstance: () => instance,
300
- };
301
-
302
- export { ConfigManager };
@@ -1,8 +0,0 @@
1
- import bem from "utils/bem";
2
- export default function (sfc) {
3
- sfc.name = "sc-" + (sfc.name || "");
4
- sfc.mixins = sfc.mixins || [];
5
- sfc.mixins.push(bem);
6
- sfc.inheritAttrs = false;
7
- return sfc;
8
- }
@@ -1,64 +0,0 @@
1
- import tooltip from "../tooltip";
2
- export default {
3
- input: (h, { item, $value }) => {
4
- return h("el-input", {
5
- class: "sc-default-input",
6
- props: {
7
- value: $value.get,
8
- clearable: true,
9
- },
10
- attrs: {
11
- placeholder: `请输入${item.label}`,
12
- },
13
- on: {
14
- input: (v) => {
15
- $value.set(v);
16
- },
17
- },
18
- });
19
- },
20
- formatter: (h, { row, column, $index, item, $value }) => {
21
- let value = item.formatter
22
- ? typeof item.formatter === "function"
23
- ? item.formatter(row, column, $value.get, $index)
24
- : item.formatter
25
- : $value.get;
26
- let vm;
27
- const tooltipEvents = {
28
- mouseenter: (e) => {
29
- vm = tooltip({
30
- content: value + "",
31
- placement: "top",
32
- target: e.target,
33
- overflow: true,
34
- });
35
- vm.show();
36
- },
37
- mouseleave: (e) => {
38
- vm && vm.hide();
39
- },
40
- };
41
- if (item.suffix && value) value = value + " " + item.suffix;
42
- if (item.html) {
43
- return h("div", {
44
- class: "sc-default-formatter",
45
- domProps: {
46
- innerHTML: value,
47
- },
48
- style: {
49
- display: "inline",
50
- },
51
- on: tooltipEvents,
52
- });
53
- }
54
-
55
- return h(
56
- "div",
57
- {
58
- class: "sc-default-formatter",
59
- on: tooltipEvents,
60
- },
61
- value
62
- );
63
- },
64
- };
@@ -1,10 +0,0 @@
1
- import { DictManager } from "./index";
2
- import resolveTemp from "src/template";
3
- import { get } from "lodash-es";
4
-
5
- export default function (Vue, globalOpt) {
6
- const dictManager = new DictManager(Vue, globalOpt);
7
- const dicts = get(resolveTemp, "dicts");
8
- if (dicts) dictManager.registerBatch(dicts);
9
- return dictManager;
10
- }