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,451 +0,0 @@
1
- <template>
2
- <div
3
- :class="[
4
- b(),
5
- { 'sc-form--border': isDetail && isBorder, 'sc-form--group': isGroup },
6
- ]"
7
- :style="{ padding: formOptions.gap }"
8
- @contextmenu="handleContextMenu"
9
- >
10
- <div style="min-height: 0; position: relative;">
11
- <position
12
- slotName="title"
13
- :render="formOptions.titleRender"
14
- :slots="$scopedSlots"
15
- ><div v-if="formOptions.title" class="sc-title">
16
- {{ formOptions.title }}
17
- </div></position
18
- >
19
- <el-form
20
- v-loading="isLoading"
21
- :disabled="isDisabled"
22
- ref="formRef"
23
- :model="value"
24
- v-bind="formProps"
25
- :key="key"
26
- @submit.native.prevent
27
- >
28
- <template v-if="isGroup">
29
- <group
30
- v-for="(item, index) in columns"
31
- v-bind="item"
32
- :key="index"
33
- :border="!isBorder"
34
- >
35
- <component
36
- v-if="item.children"
37
- :is="formOptions.layout"
38
- v-bind="item"
39
- :style="{ padding: `0 ${item.gap}px` }"
40
- >
41
- <formItem
42
- v-for="(i, idx) in item.children"
43
- :key="idx"
44
- :col="i"
45
- v-bind="i"
46
- :is-first-row="idx <= firstRowLastCellIndex[index]"
47
- :ref="i.prop"
48
- ></formItem
49
- ></component>
50
- <position
51
- v-else
52
- :slotName="item.prop"
53
- :render="item.render"
54
- :slots="slots"
55
- :scope="formScope"
56
- />
57
- </group>
58
- <formAction />
59
- </template>
60
- <component
61
- v-else
62
- :is="formOptions.layout"
63
- v-bind="formOptions"
64
- :style="{ padding: `0 ${formOptions.gap}px` }"
65
- >
66
- <formItem
67
- v-for="(item, index) in columns"
68
- :key="index"
69
- :col="item"
70
- v-bind="item"
71
- :is-first-row="index <= firstRowLastCellIndex"
72
- :ref="item.prop"
73
- ></formItem
74
- ><formAction
75
- /></component>
76
- </el-form>
77
- </div>
78
- <draftDrawer ref="draftDrawer" />
79
- </div>
80
- </template>
81
-
82
- <script>
83
- // TODO 详情模式:增加 detail 配置详情单独渲染的组件
84
- // TODO 提交清除hidden 字段
85
- import { create, init, event } from "core";
86
- import formItem from "./formItem.vue";
87
- import grid from "../grid/index.vue";
88
- import cell from "pak/grid/cell.vue";
89
- import group from "../group/index.vue";
90
- import formAction from "./formAction.vue";
91
- import draftDrawer from "./draftDrawer.vue";
92
- import contextMenu from "./contextMenu";
93
- import {
94
- isFunction,
95
- isPlainObject,
96
- uniqueId,
97
- set,
98
- get,
99
- cloneDeep,
100
- merge,
101
- omit,
102
- pick,
103
- } from "lodash-es";
104
- import { mergeTemp } from "utils/mergeTemp";
105
- import { isEmptyData, toCamelCase, filterColumns } from "utils";
106
- import position from "core/components/position";
107
- import formProps from "./props";
108
-
109
- // 表单初始化队列
110
- const formInitQueue = {
111
- promise: Promise.resolve(),
112
- isProcessing: false, // 添加标记表示队列是否正在处理
113
- add(callback) {
114
- this.isProcessing = true;
115
- const currentPromise = this.promise.then(async () => {
116
- try {
117
- await callback();
118
- } catch (error) {
119
- console.error("Form init error:", error);
120
- } finally {
121
- // 检查是否还有待处理的 promise
122
- if (this.promise === currentPromise) {
123
- this.isProcessing = false;
124
- }
125
- }
126
- });
127
- this.promise = currentPromise;
128
- return currentPromise;
129
- },
130
- };
131
- export default create({
132
- name: "form",
133
- components: {
134
- grid,
135
- cell,
136
- group,
137
- formItem,
138
- formAction,
139
- position,
140
- draftDrawer,
141
- },
142
- props: {
143
- value: {
144
- type: Object,
145
- default: () => {
146
- return {};
147
- },
148
- },
149
- scope: {
150
- type: Object,
151
- default: () => {
152
- return {};
153
- },
154
- },
155
- loading: {
156
- type: Boolean,
157
- },
158
- },
159
- provide() {
160
- return {
161
- formCtx: this,
162
- controlCtx: this,
163
- };
164
- },
165
- mixins: [init("formOptions"), event, contextMenu],
166
- data() {
167
- return {
168
- key: 1,
169
- loadingStatus: false,
170
- formBind: {},
171
- isInitializing: false, // 添加初始化状态标记
172
- };
173
- },
174
- created() {
175
- this.initFormValue();
176
- },
177
- mounted() {
178
- this.extendMethod(this.$refs.formRef);
179
- },
180
- computed: {
181
- formOptions() {
182
- return this.resultOptions;
183
- },
184
- isGroup() {
185
- return this.formOptions.group || this.formOptions.group === "";
186
- },
187
- isDetail() {
188
- return this.formOptions.detail || this.formOptions.detail === "";
189
- },
190
- isBorder() {
191
- return this.formOptions.border || this.formOptions.border === "";
192
- },
193
- isDisabled() {
194
- return this.isDetail || this.loadingStatus || this.formOptions.disabled;
195
- },
196
- isLoading() {
197
- if (this.isDetail) return this.loadingStatus;
198
- return false;
199
- },
200
- columns() {
201
- return this.groupBy(filterColumns(this.resultColumns, this.formScope));
202
- },
203
- trueRenderColumns() {
204
- let columns = [];
205
- this.columns.forEach((item) => {
206
- if (item.children) {
207
- columns.push(...item.children);
208
- } else {
209
- columns.push(item);
210
- }
211
- });
212
- return columns;
213
- },
214
- columnsMap() {
215
- const map = {};
216
- this.trueRenderColumns.forEach((i) => {
217
- map[i.prop] = i;
218
- });
219
- return map;
220
- },
221
- formScope() {
222
- const baseScope = {
223
- row: this.value,
224
- form: this.$refs.formRef,
225
- };
226
-
227
- if (!this.scope) return baseScope;
228
-
229
- return {
230
- ...this.scope,
231
- ...baseScope,
232
- };
233
- },
234
- slots() {
235
- return this.formOptions.slots || this.$scopedSlots;
236
- },
237
- layoutCell() {
238
- if (this.formOptions.layout === "grid") {
239
- return "cell";
240
- }
241
- if (this.formOptions.layout === "el-row") {
242
- return "el-col";
243
- }
244
- },
245
- firstRowLastCellIndex() {
246
- if (this.isGroup) {
247
- const map = this.columns.reduce((acc, cur, index) => {
248
- acc[index] = this.getFirstRowLastCellIndex(cur.children, cur.columns);
249
- return acc;
250
- }, {});
251
- return map || {};
252
- }
253
- return this.getFirstRowLastCellIndex(
254
- this.columns,
255
- this.formOptions.columns
256
- );
257
- },
258
- formProps() {
259
- const obj = {};
260
- Object.keys(this.formOptions).forEach((key) => {
261
- obj[toCamelCase(key)] = this.formOptions[key];
262
- });
263
- const props = pick(obj, formProps);
264
- return props;
265
- },
266
- },
267
- watch: {
268
- value() {
269
- // value重新赋值时需要再初始化
270
- if (!this.isInitializing && !formInitQueue.isProcessing) {
271
- this.initFormValue();
272
- }
273
- },
274
- loading: {
275
- handler(val) {
276
- val !== undefined && (this.loadingStatus = val);
277
- },
278
- immediate: true,
279
- },
280
- loadingStatus(val) {
281
- this.$emit("update:loading", val);
282
- },
283
- },
284
- methods: {
285
- initColumn(item, index) {
286
- if (item.detail) {
287
- item.detail = this.extendsOption(
288
- item,
289
- item.detail,
290
- omit(item, ["detail"])
291
- );
292
- }
293
- },
294
- extendsOption(item, current, extendsObj) {
295
- if (current === false) return;
296
- // current 可能为 undefined || true 转换为 {}
297
- current = isPlainObject(current) ? current : {};
298
- current = mergeTemp("render", current.presetType, current);
299
- extendsObj = cloneDeep(extendsObj);
300
- if (current.hidden !== true) {
301
- return merge(
302
- {
303
- label: item.label,
304
- prop: item.prop,
305
- ...extendsObj,
306
- },
307
- current
308
- );
309
- }
310
- },
311
- //初始化表单
312
- async initFormValue() {
313
- if (this.isInitializing) return;
314
-
315
- // 将初始化操作添加到队列
316
- await formInitQueue.add(async () => {
317
- this.isInitializing = true;
318
-
319
- try {
320
- // 确保获取最新的 value
321
- await this.$nextTick();
322
- let form = { ...this.value };
323
-
324
- this.trueRenderColumns.forEach((col) => {
325
- if (form[col.prop] === undefined) {
326
- if (col.initValue) {
327
- form[col.prop] = col.initValue;
328
- } else {
329
- form[col.prop] = "";
330
- }
331
- }
332
- });
333
-
334
- this.setControl();
335
-
336
- // 发出更新事件
337
- this.$emit("input", form);
338
-
339
- // 等待更新完成
340
- await this.$nextTick();
341
- this.clearValidate();
342
- } finally {
343
- this.isInitializing = false;
344
- }
345
- });
346
- },
347
- setControl() {
348
- this.trueRenderColumns.forEach((column) => {
349
- let prop = column.prop;
350
- let bind = column.deepProp;
351
- if (!this.formBind[prop]) {
352
- let bindList = [];
353
- if (bind) {
354
- // 实际与表单绑定的值还是浅层的值,通过watch,浅层的值改变会修改深层,深层改变也会修改浅层
355
- let formProp = this.$watch("value." + prop, (n, o) => {
356
- if (n != o) set(this.value, bind, n);
357
- });
358
- let formDeep = this.$watch("value." + bind, (n, o) => {
359
- if (n != o) this.$set(this.value, prop, n);
360
- });
361
- bindList.push(formProp);
362
- bindList.push(formDeep);
363
- this.$set(this.value, prop, get(this.value, bind));
364
- }
365
- this.formBind[prop] = bindList;
366
- }
367
- });
368
- },
369
- groupBy(column) {
370
- let group = this.formOptions.group;
371
-
372
- if (group && Array.isArray(group)) {
373
- return group.map((item) => {
374
- return {
375
- label: item.label,
376
- children: item.children.map((i) => {
377
- return column.find((c) => c.prop === i);
378
- }),
379
- };
380
- });
381
- }
382
- return column;
383
- },
384
- validate(callBack) {
385
- return new Promise((resolve, reject) => {
386
- this.$refs.formRef.validate((valid, obj) => {
387
- if (!valid) {
388
- reject(obj);
389
- callBack && callBack(false);
390
- if (this.formOptions.scrollError) {
391
- const key = Object.keys(obj)[0];
392
- const itemRef =
393
- this.$refs[key] && this.$refs[key][0].$refs.formItem;
394
- if (Object.keys(obj).length && itemRef) {
395
- itemRef.$el.scrollIntoView({
396
- behavior: "smooth",
397
- block: "center",
398
- });
399
- }
400
- }
401
- } else {
402
- callBack && callBack(true);
403
- resolve();
404
- }
405
- });
406
- });
407
- },
408
- async submit() {
409
- await this.validate();
410
- this.loadingStatus = true;
411
- this.runBefore(
412
- "submit",
413
- () => {
414
- this.loadingStatus = false;
415
- },
416
- this.value
417
- );
418
- },
419
- resetField(prop) {
420
- // 通知子组件执行重置
421
- this.$emit("handleChild", "resetField", prop);
422
- },
423
- reset() {
424
- this.$refs.formRef && this.$refs.formRef.resetFields();
425
- this.$emit("reset");
426
- },
427
- clearValidate(prop) {
428
- this.$refs.formRef && this.$refs.formRef.clearValidate(prop);
429
- },
430
- validateField(prop) {
431
- this.$refs.formRef && this.$refs.formRef.validateField(prop);
432
- },
433
- refreshForm() {
434
- const tempValue = cloneDeep(this.value);
435
- this.$emit("input", {});
436
- this.key = Math.random();
437
- setTimeout(() => {
438
- this.$emit("input", tempValue);
439
- }, 100);
440
- },
441
- getFirstRowLastCellIndex(columns = [], columnsNumber = 1) {
442
- let widthSize = 0;
443
- const lastIndex = columns.findIndex((item, idx) => {
444
- widthSize += item.widthSize || 1;
445
- return widthSize === columnsNumber;
446
- });
447
- return lastIndex === -1 ? columns.length - 1 : lastIndex;
448
- },
449
- },
450
- });
451
- </script>
@@ -1,15 +0,0 @@
1
- export default [
2
- "model",
3
- "rules",
4
- "labelPosition",
5
- "labelWidth",
6
- "labelSuffix",
7
- "inline",
8
- "inlineMessage",
9
- "statusIcon",
10
- "showMessage",
11
- "size",
12
- "disabled",
13
- "validateOnRuleChange",
14
- "hideRequiredAsterisk",
15
- ];
@@ -1,65 +0,0 @@
1
- <template>
2
- <div :class="b()" :style="mergeStyle">
3
- <slot></slot>
4
- </div>
5
- </template>
6
-
7
- <script>
8
- import create from "core/create";
9
- export default create({
10
- inheritAttrs: false,
11
- name: "cell",
12
- props: {
13
- widthSize: {
14
- type: [Number, String],
15
- default: 1,
16
- },
17
- heightSize: {
18
- type: [Number, String],
19
- default: 1,
20
- },
21
- area: {},
22
- center: {},
23
- left: {},
24
- top: {},
25
- center: {},
26
- cellStyle: {
27
- type: Object,
28
- default: () => ({}),
29
- },
30
- },
31
- computed: {
32
- mergeStyle() {
33
- return {
34
- height: "100%",
35
- minWidth: 0,
36
- gridArea: this.area || "auto",
37
- gridColumnEnd: `span ${this.widthSize}`, // 使用 grid-column-end 属性设置网格元素跨越多少列,或者在哪一列结束。
38
- gridRowEnd: `span ${this.heightSize}`, // grid-row-start 属性指定哪一行开始显示网格元素
39
- gridColumnStart: this.left, // grid-column-start 属性定义了网格元素从哪一列开始
40
- gridRowStart: this.top, // grid-row-end 属性指定哪一行停止显示网格元素,或设置跨越多少行
41
- textAlign:
42
- this.center !== undefined && this.center !== null && "center",
43
- ...this.middleStyle(this.center),
44
- boxSizing: "border-box",
45
- ...this.$attrs,
46
- ...this.cellStyle,
47
- };
48
- },
49
- },
50
- methods: {
51
- middleStyle(center) {
52
- if (center !== undefined && center !== null) {
53
- return {
54
- display: "inline-flex",
55
- flexFlow: "column wrap",
56
- justifyContent: "center",
57
- justifySelf: "stretch",
58
- };
59
- }
60
- },
61
- },
62
- });
63
- </script>
64
-
65
- <style></style>
@@ -1,130 +0,0 @@
1
- <template>
2
- <div :class="b()" :style="mergeStyle">
3
- <slot></slot>
4
- </div>
5
- </template>
6
-
7
- <script>
8
- import create from "core/create";
9
- import { setPx, setPxSaveSource } from "utils";
10
- export default create({
11
- inheritAttrs: false,
12
- name: "grid",
13
- props: {
14
- columns: {
15
- type: Number,
16
- default: 1,
17
- },
18
- autoFill: [Boolean, String],
19
- fillCell: Boolean,
20
- minColumns: Number,
21
- maxColumns: Number,
22
- columnWidth: [String, Number],
23
- minColumnWidth: [String, Number],
24
- maxColumnWidth: [String, Number],
25
- gap: {}, // 防止覆盖column-gap
26
- columnGap: {},
27
- rowGap: {},
28
- areas: {},
29
- minRowHeight: [String, Number],
30
- maxRowHeight: [String, Number],
31
- alignContent: {},
32
- rows: {},
33
- justifyContent: {},
34
- flow: {},
35
- height: { default: "auto" },
36
- gridStyle: {
37
- type: Object,
38
- default: () => ({}),
39
- },
40
- },
41
- computed: {
42
- mergeStyle() {
43
- return {
44
- display: "grid", // 布局是grid布局
45
- height: this.height, // 设置容器高度
46
- gridAutoFlow: this.fillCell ? "row dense" : this.flow, // 设置容器内元素是从左往右(默认),还是从右往左
47
- gridAutoRows: this.autoRows(), // grid-auto-rows设置默认单元格高度
48
- gridTemplateRows: this.frGetter(this.rows), // 当传递一个数字时,它是指定行数的简写,平分高度,自适应。如果是例如100px,就是以这个数值为宽度
49
- gridTemplateColumns: this.gridTemplateColumns,
50
- areas: this.formatAreas(this.areas), // 传递一个字符串数组,例如 [“a a”,“b c”]。 默认不提供。
51
- justifyContent: this.justifyContent, // 决定整个内容区域在容器里面的水平位置(左中右)
52
- columnGap: this.columnGap,
53
- rowGap: this.rowGap,
54
- alignContent: this.alignContent, // 决定整个内容区域的垂直位置(上中下)
55
- ...this.$attrs,
56
- ...this.gridStyle,
57
- };
58
- },
59
- gridTemplateColumns() {
60
- // 处理自动填充模式
61
- if (this.autoFill) {
62
- const columnWidth = this.getAutoFillColumnWidth();
63
- const autoFill = this.autoFill === "autoFit" ? "auto-fit" : "auto-fill";
64
- return this.getAutoFillTemplate(autoFill, columnWidth);
65
- }
66
-
67
- // 处理固定列数模式
68
- return this.getFixedColumnsTemplate();
69
- },
70
- },
71
- methods: {
72
- getAutoFillColumnWidth() {
73
- if (this.autoFill === "fixedWidth") {
74
- return setPx(this.columnWidth || "300px");
75
- }
76
- return `minmax(${setPx(this.columnWidth || "300px")}, 1fr)`;
77
- },
78
- getAutoFillTemplate(autoFill, columnWidth) {
79
- if (this.minColumns && this.maxColumns) {
80
- return `repeat(max(${this.minColumns}, min(${this.maxColumns}, ${autoFill})), ${columnWidth})`;
81
- }
82
- if (this.minColumns) {
83
- return `repeat(max(${this.minColumns}, ${autoFill}), ${columnWidth})`;
84
- }
85
- if (this.maxColumns) {
86
- return `repeat(min(${this.maxColumns}, ${autoFill}), ${columnWidth})`;
87
- }
88
- return `repeat(${autoFill}, ${columnWidth})`;
89
- },
90
-
91
- getFixedColumnsTemplate() {
92
- if (this.columnWidth) {
93
- return `repeat(${this.columns}, ${setPx(this.columnWidth)})`;
94
- }
95
- if (this.minColumnWidth && this.maxColumnWidth) {
96
- return `repeat(${this.columns}, minmax(${setPx(
97
- this.minColumnWidth
98
- )}, ${setPx(this.maxColumnWidth)}))`;
99
- }
100
- if (this.minColumnWidth) {
101
- return `repeat(${this.columns}, minmax(${setPx(
102
- this.minColumnWidth
103
- )}, 1fr))`;
104
- }
105
- if (this.maxColumnWidth) {
106
- return `repeat(${this.columns}, minmax(200px, ${setPx(
107
- this.maxColumnWidth
108
- )}))`;
109
- }
110
- return `repeat(${this.columns}, 1fr)`;
111
- },
112
- autoRows() {
113
- return `minmax(${setPx(this.minRowHeight)}, ${setPxSaveSource(
114
- this.maxRowHeight || "auto"
115
- )})`;
116
- },
117
- frGetter(value) {
118
- if (!value) return;
119
- return typeof value === "number" ? `repeat(${value}, 1fr)` : value;
120
- },
121
- formatAreas(areas) {
122
- if (!areas) return;
123
- if (typeof areas === "string") return areas;
124
- return areas.map((area) => `"${area}"`).join(" ");
125
- },
126
- },
127
- });
128
- </script>
129
-
130
- <style></style>