eoss-ui 0.6.41 → 0.6.42

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 (234) hide show
  1. package/lib/eoss-ui.common.js +1158 -1047
  2. package/lib/flow-list.js +123 -112
  3. package/lib/flow.js +882 -782
  4. package/lib/index.js +1 -1
  5. package/lib/main.js +132 -132
  6. package/lib/qr-code.js +13 -13
  7. package/lib/theme-chalk/flow.css +1 -1
  8. package/lib/theme-chalk/index.css +1 -1
  9. package/package.json +159 -159
  10. package/packages/button/index.js +5 -5
  11. package/packages/button/src/main.vue +418 -418
  12. package/packages/button-group/index.js +5 -5
  13. package/packages/button-group/src/main.vue +298 -298
  14. package/packages/calendar/index.js +5 -5
  15. package/packages/card/index.js +5 -5
  16. package/packages/card/src/main.vue +156 -156
  17. package/packages/cascader/index.js +5 -5
  18. package/packages/cascader/src/main.vue +168 -168
  19. package/packages/checkbox-group/index.js +5 -5
  20. package/packages/checkbox-group/src/main.vue +333 -333
  21. package/packages/clients/index.js +5 -5
  22. package/packages/clients/src/main.vue +144 -144
  23. package/packages/data-table/index.js +5 -5
  24. package/packages/data-table/src/children.vue +39 -39
  25. package/packages/data-table/src/column.vue +989 -989
  26. package/packages/data-table/src/main.vue +1822 -1822
  27. package/packages/data-table/src/sizer.vue +195 -195
  28. package/packages/data-table-form/index.js +5 -5
  29. package/packages/data-table-form/src/checkbox.vue +101 -101
  30. package/packages/data-table-form/src/colgroup.vue +17 -17
  31. package/packages/data-table-form/src/main.vue +181 -181
  32. package/packages/data-table-form/src/radio.vue +65 -65
  33. package/packages/data-table-form/src/table.vue +233 -233
  34. package/packages/data-table-form/src/tbody.vue +336 -336
  35. package/packages/data-table-form/src/thead.vue +68 -68
  36. package/packages/date-picker/index.js +5 -5
  37. package/packages/date-picker/src/main.vue +236 -236
  38. package/packages/dialog/index.js +5 -5
  39. package/packages/enterprise/index.js +5 -5
  40. package/packages/enterprise/src/main.vue +66 -66
  41. package/packages/error-page/index.js +5 -5
  42. package/packages/error-page/src/main.vue +44 -44
  43. package/packages/flow/index.js +5 -5
  44. package/packages/flow/src/component/CommonOpinions.vue +345 -345
  45. package/packages/flow/src/component/CustomPreset.vue +322 -322
  46. package/packages/flow/src/component/FileList.vue +99 -99
  47. package/packages/flow/src/component/Preset.vue +255 -255
  48. package/packages/flow/src/component/SendMsg.vue +229 -229
  49. package/packages/flow/src/component/TimeLimit.vue +190 -190
  50. package/packages/flow/src/component/taskUnionExamine.vue +611 -611
  51. package/packages/flow/src/form.vue +121 -121
  52. package/packages/flow/src/freeStartFlow.vue +2843 -2843
  53. package/packages/flow/src/main.vue +2952 -2862
  54. package/packages/flow/src/processForm.vue +1018 -1018
  55. package/packages/flow/src/processReject.vue +293 -293
  56. package/packages/flow/src/reset.vue +899 -899
  57. package/packages/flow/src/startTaskRead.vue +596 -596
  58. package/packages/flow/src/table.vue +58 -58
  59. package/packages/flow-group/index.js +5 -5
  60. package/packages/flow-group/src/main.vue +688 -688
  61. package/packages/flow-list/index.js +5 -5
  62. package/packages/flow-list/src/main.vue +1183 -1172
  63. package/packages/form/index.js +5 -5
  64. package/packages/form/src/main.vue +3584 -3584
  65. package/packages/form/src/table.vue +1420 -1420
  66. package/packages/handle-user/index.js +5 -5
  67. package/packages/handle-user/src/main.vue +138 -138
  68. package/packages/handler/index.js +5 -5
  69. package/packages/handler/src/main.vue +474 -474
  70. package/packages/icon/index.js +5 -5
  71. package/packages/icon/src/main.vue +101 -101
  72. package/packages/icons/index.js +5 -5
  73. package/packages/icons/src/main.vue +81 -81
  74. package/packages/input/index.js +5 -5
  75. package/packages/input/src/main.vue +356 -356
  76. package/packages/input-number/index.js +5 -5
  77. package/packages/input-number/src/main.vue +106 -106
  78. package/packages/label/index.js +5 -5
  79. package/packages/label/src/main.vue +457 -457
  80. package/packages/layout/index.js +5 -5
  81. package/packages/layout/src/item.vue +152 -152
  82. package/packages/layout/src/main.vue +31 -31
  83. package/packages/login/index.js +5 -5
  84. package/packages/login/src/main.vue +1935 -1935
  85. package/packages/login/src/resetPassword.vue +562 -562
  86. package/packages/main/index.js +5 -5
  87. package/packages/main/src/default/message.vue +249 -249
  88. package/packages/main/src/default/notice.vue +157 -157
  89. package/packages/main/src/default/userinfo.vue +505 -505
  90. package/packages/main/src/public/online.vue +89 -89
  91. package/packages/main/src/public/search.vue +461 -461
  92. package/packages/main/src/public/settings.vue +221 -221
  93. package/packages/main/src/simplicity/apps.vue +388 -388
  94. package/packages/main/src/simplicity/avatar.vue +82 -82
  95. package/packages/main/src/simplicity/handler.vue +259 -259
  96. package/packages/main/src/simplicity/index.vue +2047 -2047
  97. package/packages/main/src/simplicity/lists.vue +84 -84
  98. package/packages/main/src/simplicity/menu-list.vue +128 -128
  99. package/packages/main/src/simplicity/message.vue +259 -259
  100. package/packages/main/src/simplicity/notice.vue +190 -190
  101. package/packages/main/src/simplicity/router-page.vue +45 -45
  102. package/packages/main/src/simplicity/sub-menu.vue +241 -241
  103. package/packages/main/src/simplicity/user.vue +257 -257
  104. package/packages/main/src/simplicity/userinfo.vue +312 -312
  105. package/packages/menu/index.js +5 -5
  106. package/packages/menu/src/main.vue +536 -536
  107. package/packages/nav/index.js +5 -5
  108. package/packages/nav/src/main.vue +402 -402
  109. package/packages/notify/index.js +5 -5
  110. package/packages/notify/src/main.vue +538 -538
  111. package/packages/page/index.js +5 -5
  112. package/packages/page/src/main.vue +167 -167
  113. package/packages/pagination/index.js +5 -5
  114. package/packages/pagination/src/main.vue +96 -96
  115. package/packages/player/index.js +5 -5
  116. package/packages/player/src/main.vue +194 -194
  117. package/packages/qr-code/index.js +5 -5
  118. package/packages/qr-code/src/main.vue +170 -170
  119. package/packages/radio-group/index.js +6 -6
  120. package/packages/radio-group/src/main.vue +319 -319
  121. package/packages/retrial-auth/index.js +5 -5
  122. package/packages/retrial-auth/src/main.vue +280 -280
  123. package/packages/select/index.js +5 -5
  124. package/packages/select/src/main.vue +775 -775
  125. package/packages/select-ganged/index.js +5 -5
  126. package/packages/select-ganged/src/main.vue +724 -724
  127. package/packages/selector/index.js +5 -5
  128. package/packages/selector/src/main.vue +689 -689
  129. package/packages/selector-panel/index.js +5 -5
  130. package/packages/selector-panel/src/main.vue +1027 -1027
  131. package/packages/selector-panel/src/selection.vue +177 -177
  132. package/packages/selector-panel/src/tree.vue +129 -129
  133. package/packages/sizer/index.js +5 -5
  134. package/packages/sizer/src/main.vue +254 -254
  135. package/packages/steps/index.js +5 -5
  136. package/packages/steps/src/main.vue +181 -181
  137. package/packages/switch/index.js +5 -5
  138. package/packages/switch/src/main.vue +154 -154
  139. package/packages/table-form/index.js +5 -5
  140. package/packages/tabs/index.js +5 -5
  141. package/packages/tabs/src/main.vue +788 -788
  142. package/packages/tabs-panel/index.js +5 -5
  143. package/packages/tabs-panel/src/main.vue +29 -29
  144. package/packages/theme-chalk/lib/flow.css +1 -1
  145. package/packages/theme-chalk/lib/index.css +1 -1
  146. package/packages/theme-chalk/src/base.scss +260 -260
  147. package/packages/theme-chalk/src/button-group.scss +175 -175
  148. package/packages/theme-chalk/src/button.scss +24 -24
  149. package/packages/theme-chalk/src/calendar.scss +113 -113
  150. package/packages/theme-chalk/src/card.scss +99 -99
  151. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  152. package/packages/theme-chalk/src/clients.scss +87 -87
  153. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  154. package/packages/theme-chalk/src/data-table.scss +293 -293
  155. package/packages/theme-chalk/src/date-picker.scss +7 -7
  156. package/packages/theme-chalk/src/dialog.scss +77 -77
  157. package/packages/theme-chalk/src/enterprise.scss +5 -5
  158. package/packages/theme-chalk/src/error-page.scss +18 -18
  159. package/packages/theme-chalk/src/flow-group.scss +110 -110
  160. package/packages/theme-chalk/src/flow-list.scss +36 -36
  161. package/packages/theme-chalk/src/flow.scss +318 -310
  162. package/packages/theme-chalk/src/form.scss +496 -496
  163. package/packages/theme-chalk/src/handle-user.scss +40 -40
  164. package/packages/theme-chalk/src/handler.scss +143 -143
  165. package/packages/theme-chalk/src/icon.scss +1789 -1789
  166. package/packages/theme-chalk/src/icons.scss +99 -99
  167. package/packages/theme-chalk/src/input.scss +9 -9
  168. package/packages/theme-chalk/src/label.scss +24 -24
  169. package/packages/theme-chalk/src/layout.scss +46 -46
  170. package/packages/theme-chalk/src/login.scss +947 -947
  171. package/packages/theme-chalk/src/main.scss +639 -639
  172. package/packages/theme-chalk/src/menu.scss +222 -222
  173. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  174. package/packages/theme-chalk/src/nav.scss +125 -125
  175. package/packages/theme-chalk/src/page.scss +3 -3
  176. package/packages/theme-chalk/src/pagination.scss +29 -29
  177. package/packages/theme-chalk/src/player.scss +9 -9
  178. package/packages/theme-chalk/src/qr-code.scss +17 -17
  179. package/packages/theme-chalk/src/radio-group.scss +9 -9
  180. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  181. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  182. package/packages/theme-chalk/src/select.scss +8 -8
  183. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  184. package/packages/theme-chalk/src/selector.scss +91 -91
  185. package/packages/theme-chalk/src/simplicity.scss +1262 -1262
  186. package/packages/theme-chalk/src/sizer.scss +36 -36
  187. package/packages/theme-chalk/src/steps.scss +88 -88
  188. package/packages/theme-chalk/src/switch.scss +3 -3
  189. package/packages/theme-chalk/src/table-form.scss +1 -1
  190. package/packages/theme-chalk/src/tabs.scss +87 -87
  191. package/packages/theme-chalk/src/tips.scss +7 -7
  192. package/packages/theme-chalk/src/toolbar.scss +179 -179
  193. package/packages/theme-chalk/src/tree-group.scss +72 -72
  194. package/packages/theme-chalk/src/tree.scss +165 -165
  195. package/packages/theme-chalk/src/upload.scss +167 -167
  196. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  197. package/packages/tips/index.js +5 -5
  198. package/packages/tips/src/main.vue +141 -141
  199. package/packages/toolbar/index.js +5 -5
  200. package/packages/toolbar/src/main.vue +430 -430
  201. package/packages/tree/index.js +5 -5
  202. package/packages/tree-group/index.js +5 -5
  203. package/packages/upload/index.js +5 -5
  204. package/packages/upload/src/main.vue +1334 -1334
  205. package/packages/upload/src/picture.js +15 -15
  206. package/packages/wujie/index.js +5 -5
  207. package/packages/wujie/src/main.vue +145 -145
  208. package/packages/wxlogin/index.js +5 -5
  209. package/packages/wxlogin/src/main.vue +128 -128
  210. package/src/config/api.js +248 -248
  211. package/src/config/image.js +2 -2
  212. package/src/index.js +157 -157
  213. package/src/utils/bus.js +3 -3
  214. package/src/utils/date-util.js +312 -312
  215. package/src/utils/http.js +50 -50
  216. package/src/utils/rules.js +18 -18
  217. package/src/utils/store.js +21 -21
  218. package/src/utils/webSocket.js +107 -107
  219. package/packages/.DS_Store +0 -0
  220. package/packages/data-table/.DS_Store +0 -0
  221. package/packages/data-table-form/.DS_Store +0 -0
  222. package/packages/error-page/.DS_Store +0 -0
  223. package/packages/flow/.DS_Store +0 -0
  224. package/packages/form/.DS_Store +0 -0
  225. package/packages/login/.DS_Store +0 -0
  226. package/packages/main/.DS_Store +0 -0
  227. package/packages/main/src/.DS_Store +0 -0
  228. package/packages/selector/.DS_Store +0 -0
  229. package/packages/selector-panel/.DS_Store +0 -0
  230. package/packages/sizer/.DS_Store +0 -0
  231. package/packages/tabs/.DS_Store +0 -0
  232. package/packages/theme-chalk/src/.DS_Store +0 -0
  233. package/packages/upload/.DS_Store +0 -0
  234. package/src/.DS_Store +0 -0
@@ -1,1420 +1,1420 @@
1
- <template>
2
- <div>
3
- <table
4
- class="es-table-form"
5
- border="1"
6
- cellspacing="0"
7
- cellpadding="0"
8
- v-if="content.length"
9
- >
10
- <colgroup>
11
- <template v-for="(item, index) in cols">
12
- <col :width="labelWidth" :key="'label' + index" />
13
- <col :width="item" :key="index" />
14
- </template>
15
- </colgroup>
16
- <caption v-if="caption" class="es-table-caption">
17
- {{
18
- caption
19
- }}
20
- </caption>
21
- <tbody>
22
- <tr v-for="(items, indexs) in content" :key="indexs">
23
- <template v-for="(item, index) in items">
24
- <td
25
- v-if="item.type === 'caption'"
26
- :colspan="col * 2"
27
- class="es-table-td-caption"
28
- >
29
- <div class="es-table-caption">{{ item.text }}</div>
30
- </td>
31
- <td
32
- v-else-if="item.type === 'table'"
33
- :colspan="col * 2"
34
- class="es-table-form-data"
35
- >
36
- <es-data-table-form
37
- v-if="item.lazy"
38
- class="es-form-table-data"
39
- :data="model[item.name]"
40
- :full="false"
41
- v-bind="item"
42
- :readonly="readonly ? readonly : item.readonly"
43
- @blur="
44
- (val, data) => {
45
- handleBlur(item, val, data);
46
- }
47
- "
48
- @focus="
49
- (val, data) => {
50
- handleFocus(item, val, data);
51
- }
52
- "
53
- @edit="
54
- (val, data) => {
55
- handleChange(item, val, data);
56
- }
57
- "
58
- @btnClick="handleClick"
59
- @dataChange="handleDataChange"
60
- >
61
- </es-data-table-form>
62
- <es-data-table
63
- v-else
64
- class="es-form-item-table"
65
- ref="dataTable"
66
- :data="model[item.name]"
67
- :full="false"
68
- v-bind="
69
- handleExclAttribute({
70
- data: item,
71
- attrs: ['value', 'events']
72
- })
73
- "
74
- v-on="item.events"
75
- :readonly="readonly ? readonly : item.readonly"
76
- @blur="
77
- (val, data) => {
78
- handleBlur(item, val, data);
79
- }
80
- "
81
- @focus="
82
- (val, data) => {
83
- handleFocus(item, val, data);
84
- }
85
- "
86
- @edit="
87
- (val, data) => {
88
- handleChange(item, val, data);
89
- }
90
- "
91
- @btnClick="handleClick"
92
- @dataChange="handleDataChange"
93
- >
94
- </es-data-table>
95
- </td>
96
- <template v-else>
97
- <td
98
- v-if="item.label !== false && item.hide !== true"
99
- class="es-table-form-label"
100
- :class="{
101
- 'es-align-middle': item.labelRow,
102
- 'is-required':
103
- item.rules && item.rules.required && !hideRequiredAsterisk,
104
- 'required-after': after
105
- }"
106
- :key="'label' + index"
107
- :align="item.type === 'label' ? item.align : ''"
108
- :colspan="
109
- item.labelCol
110
- ? item.labelCol
111
- : item.type === 'label'
112
- ? item.colspan
113
- : ''
114
- "
115
- :rowspan="item.labelRow"
116
- >
117
- <es-label
118
- v-if="item.showLabel !== false && item.label"
119
- v-bind="getLabel(item.label)"
120
- ></es-label>
121
- </td>
122
- <td
123
- v-if="
124
- item.type !== 'label' &&
125
- !(item.type === 'empty' && item.labelRow) &&
126
- item.hide !== true
127
- "
128
- :align="
129
- item.type === 'label' || item.type === 'empty'
130
- ? item.align
131
- : ''
132
- "
133
- :class="
134
- item.type === 'label' || item.type === 'empty'
135
- ? 'es-table-form-label'
136
- : item.disabled
137
- ? 'es-table-form-item td-disabled'
138
- : 'es-table-form-item'
139
- "
140
- :key="index"
141
- :colspan="
142
- item.colspan
143
- ? item.colspan
144
- : item.colspan !== false && items.length < col
145
- ? col * 2 - items.length
146
- : item.label === false
147
- ? 2
148
- : ''
149
- "
150
- :rowspan="item.rowspan"
151
- >
152
- <expand-dom
153
- v-if="item.render"
154
- :item="item"
155
- :model="models"
156
- :render="item.render"
157
- ></expand-dom>
158
- <template v-else>
159
- <es-label
160
- v-if="
161
- (item.type === 'label' || item.type === 'empty') &&
162
- !item.hide
163
- "
164
- :contents="item.text"
165
- v-bind="{
166
- event: item.event,
167
- events: item.events
168
- }"
169
- ></es-label>
170
- <el-form-item
171
- v-else-if="!item.hide"
172
- label-width="0"
173
- :prop="item.name"
174
- :rules="getRules(item)"
175
- :class="{
176
- 'es-form-item-inline': item.inline
177
- }"
178
- >
179
- <es-input-number
180
- v-if="item.type == 'number'"
181
- v-bind="
182
- handleExclAttribute({
183
- data: item,
184
- attrs: 'label'
185
- })
186
- "
187
- v-model="model[item.name]"
188
- :plain="item.plain"
189
- :readonly="readonly ? readonly : item.readonly"
190
- @blur="
191
- (event) => {
192
- handleBlur(item, event);
193
- }
194
- "
195
- @focus="
196
- (event) => {
197
- handleFocus(item, event);
198
- }
199
- "
200
- @change="
201
- (val) => {
202
- handleChange(item, val);
203
- }
204
- "
205
- ></es-input-number>
206
- <es-radio-group
207
- v-else-if="item.type == 'radio'"
208
- v-bind="
209
- handleExclAttribute({
210
- data: item,
211
- attrs: 'label'
212
- })
213
- "
214
- v-model="model[item.name]"
215
- :plain="item.plain"
216
- :readonly="readonly ? readonly : item.readonly"
217
- @change="
218
- (val) => {
219
- handleChange(item, val);
220
- }
221
- "
222
- ></es-radio-group>
223
- <es-checkbox-group
224
- v-else-if="item.type == 'checkbox'"
225
- v-bind="
226
- handleExclAttribute({
227
- data: item,
228
- attrs: 'label'
229
- })
230
- "
231
- v-model="model[item.name]"
232
- :plain="item.plain"
233
- :readonly="readonly ? readonly : item.readonly"
234
- @change="
235
- (val) => {
236
- handleChange(item, val);
237
- }
238
- "
239
- ></es-checkbox-group>
240
- <es-select
241
- v-else-if="item.type == 'select'"
242
- v-bind="
243
- handleExclAttribute({
244
- data: item,
245
- attrs: 'label'
246
- })
247
- "
248
- v-model="model[item.name]"
249
- :plain="item.plain"
250
- :readonly="readonly ? readonly : item.readonly"
251
- @blur="
252
- (event) => {
253
- handleBlur(item, event);
254
- }
255
- "
256
- @focus="
257
- (event) => {
258
- handleFocus(item, event);
259
- }
260
- "
261
- @change="
262
- (val) => {
263
- handleChange(item, val);
264
- }
265
- "
266
- ></es-select>
267
- <es-cascader
268
- v-else-if="item.type == 'cascader'"
269
- v-bind="
270
- handleExclAttribute({
271
- data: item,
272
- attrs: 'label'
273
- })
274
- "
275
- v-model="model[item.name]"
276
- :plain="item.plain || item.name === undefined"
277
- :readonly="readonly ? readonly : item.readonly"
278
- @blur="
279
- (event) => {
280
- handleBlur(item, event);
281
- }
282
- "
283
- @focus="
284
- (event) => {
285
- handleFocus(item, event);
286
- }
287
- "
288
- @change="
289
- (val) => {
290
- handleChange(item, val);
291
- }
292
- "
293
- >
294
- </es-cascader>
295
- <es-select-ganged
296
- v-else-if="
297
- item.type == 'ganged' ||
298
- (item.type == 'select' && item.ganged)
299
- "
300
- v-bind="
301
- handleExclAttribute({
302
- data: item,
303
- attrs: 'label'
304
- })
305
- "
306
- v-model="model[item.name]"
307
- :plain="item.plain"
308
- :readonly="readonly ? readonly : item.readonly"
309
- @change="
310
- (val) => {
311
- handleChange(item, val);
312
- }
313
- "
314
- ></es-select-ganged>
315
- <es-switch
316
- v-else-if="item.type == 'switch'"
317
- v-bind="
318
- handleExclAttribute({
319
- data: item,
320
- attrs: 'label'
321
- })
322
- "
323
- v-model="model[item.name]"
324
- :plain="item.plain"
325
- :readonly="readonly ? readonly : item.readonly"
326
- @change="
327
- (val) => {
328
- handleChange(item, val);
329
- }
330
- "
331
- ></es-switch>
332
- <es-date-picker
333
- v-else-if="
334
- item.date ||
335
- item.type == 'date' ||
336
- item.type == 'year' ||
337
- item.type == 'month' ||
338
- item.type == 'date' ||
339
- item.type == 'dates' ||
340
- item.type == 'week' ||
341
- item.type == 'datetime' ||
342
- item.type == 'datetimerange' ||
343
- item.type == 'daterange' ||
344
- item.type == 'monthrange' ||
345
- item.type == 'quarter' ||
346
- item.type == 'halfyear'
347
- "
348
- v-bind="
349
- handleExclAttribute({
350
- data: item,
351
- attrs: 'label'
352
- })
353
- "
354
- v-model="model[item.name]"
355
- :plain="item.plain"
356
- :readonly="readonly ? readonly : item.readonly"
357
- @blur="
358
- (event) => {
359
- handleBlur(item, event);
360
- }
361
- "
362
- @focus="
363
- (event) => {
364
- handleFocus(item, event);
365
- }
366
- "
367
- @change="
368
- (val) => {
369
- handleChange(item, val);
370
- }
371
- "
372
- ></es-date-picker>
373
- <es-upload
374
- v-bind="
375
- handleExclAttribute({
376
- data: item,
377
- attrs: ['value', 'ownId']
378
- })
379
- "
380
- :ownId="item.ownId || models.id"
381
- v-model="model[item.name]"
382
- v-else-if="
383
- item.type == 'attachment' || item.type == 'upload'
384
- "
385
- :readonly="readonly ? readonly : item.readonly"
386
- :rules="item.rules"
387
- btnSize="small"
388
- @change="
389
- (val) => {
390
- handleChange(item, val);
391
- }
392
- "
393
- ></es-upload>
394
- <es-selector
395
- v-bind="
396
- handleExclAttribute({
397
- data: item,
398
- attrs: 'label'
399
- })
400
- "
401
- v-model="model[item.name]"
402
- v-else-if="item.type == 'selector'"
403
- :readonly="readonly ? readonly : item.readonly"
404
- :plain="item.plain"
405
- v-on="
406
- handleExclAttribute({
407
- data: item.events,
408
- attrs: 'change'
409
- })
410
- "
411
- @change="
412
- (val) => {
413
- handleChange(item, val);
414
- }
415
- "
416
- ></es-selector>
417
- <es-icons
418
- v-else-if="item.type === 'icon'"
419
- v-bind="
420
- handleExclAttribute({
421
- data: item,
422
- attrs: ['value']
423
- })
424
- "
425
- v-model="models[item.name]"
426
- :plain="item.plain || item.name === undefined"
427
- :readonly="readonly ? readonly : item.readonly"
428
- @change="
429
- (val) => {
430
- handleChange(item, val);
431
- }
432
- "
433
- ></es-icons>
434
- <component
435
- v-else-if="item.type === 'component'"
436
- v-model="models[item.name]"
437
- v-bind="
438
- handleExclAttribute({
439
- data: item,
440
- attrs: ['value']
441
- })
442
- "
443
- v-on="item.events"
444
- ></component>
445
- <es-input
446
- v-else
447
- v-bind="
448
- handleExclAttribute({
449
- data: item,
450
- attrs: 'label'
451
- })
452
- "
453
- v-model="model[item.name]"
454
- :plain="item.plain"
455
- :readonly="readonly ? readonly : item.readonly"
456
- @blur="
457
- (event) => {
458
- handleBlur(item, event);
459
- }
460
- "
461
- @focus="
462
- (event) => {
463
- handleFocus(item, event);
464
- }
465
- "
466
- @change="
467
- (val) => {
468
- handleChange(item, val);
469
- }
470
- "
471
- @input="
472
- (val) => {
473
- handleInput(item, val);
474
- }
475
- "
476
- @clear="
477
- () => {
478
- handleClear(item);
479
- }
480
- "
481
- >
482
- <template v-if="item.prefix" slot="prefix">
483
- <expand-dom
484
- v-if="item.render"
485
- :item="item"
486
- :model="models"
487
- :render="item.render"
488
- ></expand-dom>
489
- </template>
490
- <template v-if="item.suffix" slot="suffix">
491
- <expand-dom
492
- v-if="item.render"
493
- :item="item"
494
- :model="models"
495
- :render="item.render"
496
- ></expand-dom>
497
- </template>
498
- <template v-if="item.prepend" slot="prepend">
499
- <expand-dom
500
- v-if="item.render"
501
- :item="item"
502
- :model="models"
503
- :render="item.render"
504
- ></expand-dom>
505
- </template>
506
- <template v-if="item.append" slot="append">
507
- <expand-dom
508
- v-if="item.render"
509
- :item="item"
510
- :model="models"
511
- :render="item.render"
512
- ></expand-dom>
513
- </template>
514
- </es-input>
515
- <template v-if="item.inline">
516
- <template v-if="Array.isArray(item.inline)">
517
- <template v-for="(inline, k) in item.inline">
518
- <es-button
519
- v-if="inline.type == 'button' && !inline.hide"
520
- class="es-button-inline"
521
- :disabled="isDisabled || inline.disabled"
522
- v-bind="
523
- handleExclAttribute({
524
- data: inline,
525
- attrs: ['disabled', 'type']
526
- })
527
- "
528
- @click="handleClick(inline)"
529
- ></es-button>
530
- <div
531
- v-else-if="!inline.hide"
532
- class="es-form-inline es-form-item-inline"
533
- :key="k"
534
- >
535
- <div class="es-range" v-if="inline.range !== false">
536
-
537
- </div>
538
- <el-form-item
539
- label-width="0"
540
- :prop="inline.name"
541
- :rules="getRules(inline)"
542
- >
543
- <es-input-number
544
- v-if="inline.type == 'number'"
545
- v-bind="
546
- handleExclAttribute({
547
- data: inline,
548
- attrs: ['value']
549
- })
550
- "
551
- v-model="models[inline.name]"
552
- :plain="
553
- inline.plain || inline.name === undefined
554
- "
555
- :readonly="
556
- readonly ? readonly : inline.readonly
557
- "
558
- @blur="
559
- (event) => {
560
- handleBlur(inline, event);
561
- }
562
- "
563
- @focus="
564
- (event) => {
565
- handleFocus(inline, event);
566
- }
567
- "
568
- @change="
569
- (val) => {
570
- handleChange(inline, val);
571
- }
572
- "
573
- ></es-input-number>
574
- <es-select
575
- v-else-if="inline.type == 'select'"
576
- v-bind="
577
- handleExclAttribute({
578
- data: inline,
579
- attrs: ['value']
580
- })
581
- "
582
- v-model="models[inline.name]"
583
- :plain="
584
- inline.plain || inline.name === undefined
585
- "
586
- :readonly="
587
- readonly ? readonly : inline.readonly
588
- "
589
- @blur="
590
- (event) => {
591
- handleBlur(inline, event);
592
- }
593
- "
594
- @focus="
595
- (event) => {
596
- handleFocus(inline, event);
597
- }
598
- "
599
- @change="
600
- (val) => {
601
- handleChange(inline, val);
602
- }
603
- "
604
- ></es-select>
605
- <es-cascader
606
- v-else-if="inline.type == 'cascader'"
607
- v-bind="
608
- handleExclAttribute({
609
- data: inline,
610
- attrs: ['value']
611
- })
612
- "
613
- v-model="models[inline.name]"
614
- :plain="
615
- inline.plain || inline.name === undefined
616
- "
617
- :readonly="
618
- readonly ? readonly : inline.readonly
619
- "
620
- @blur="
621
- (event) => {
622
- handleBlur(inline, event);
623
- }
624
- "
625
- @focus="
626
- (event) => {
627
- handleFocus(inline, event);
628
- }
629
- "
630
- @change="
631
- (val) => {
632
- handleChange(inline, val);
633
- }
634
- "
635
- >
636
- </es-cascader>
637
- <es-date-picker
638
- v-else-if="
639
- inline.date ||
640
- inline.type == 'date' ||
641
- inline.type == 'year' ||
642
- inline.type == 'month' ||
643
- inline.type == 'date' ||
644
- inline.type == 'dates' ||
645
- inline.type == 'week' ||
646
- inline.type == 'datetime' ||
647
- inline.type == 'datetimerange' ||
648
- inline.type == 'daterange' ||
649
- inline.type == 'monthrange' ||
650
- inline.type == 'quarter' ||
651
- inline.type == 'halfyear'
652
- "
653
- v-bind="
654
- handleExclAttribute({
655
- data: inline,
656
- attrs: ['value']
657
- })
658
- "
659
- v-model="models[inline.name]"
660
- :plain="
661
- inline.plain || inline.name === undefined
662
- "
663
- :readonly="
664
- readonly ? readonly : inline.readonly
665
- "
666
- @blur="
667
- (event) => {
668
- handleBlur(inline, event);
669
- }
670
- "
671
- @focus="
672
- (event) => {
673
- handleFocus(inline, event);
674
- }
675
- "
676
- @change="
677
- (val) => {
678
- handleChange(inline, val);
679
- }
680
- "
681
- ></es-date-picker>
682
- <template
683
- v-else-if="
684
- inline.type == 'image' || inline.type == 'img'
685
- "
686
- >
687
- <img
688
- v-if="inline.url || inline.src"
689
- v-bind="
690
- handleExclAttribute({
691
- data: inline,
692
- attrs: ['value']
693
- })
694
- "
695
- height="100%"
696
- :src="inline.url || inline.src"
697
- @click="inline.event"
698
- />
699
- </template>
700
- <es-icons
701
- v-else-if="inline.type === 'icon'"
702
- v-bind="
703
- handleExclAttribute({
704
- data: inline,
705
- attrs: ['value']
706
- })
707
- "
708
- v-model="models[inline.name]"
709
- :plain="
710
- inline.plain || inline.name === undefined
711
- "
712
- :readonly="
713
- readonly ? readonly : inline.readonly
714
- "
715
- @change="
716
- (val) => {
717
- handleChange(inline, val);
718
- }
719
- "
720
- ></es-icons>
721
- <component
722
- v-else-if="inline.type === 'component'"
723
- v-model="models[inline.name]"
724
- v-bind="
725
- handleExclAttribute({
726
- data: inline,
727
- attrs: ['value']
728
- })
729
- "
730
- v-on="inline.events"
731
- ></component>
732
- <es-input
733
- v-else
734
- v-bind="
735
- handleExclAttribute({
736
- data: inline,
737
- attrs: ['value']
738
- })
739
- "
740
- v-model="models[inline.name]"
741
- :plain="
742
- inline.plain || inline.name === undefined
743
- "
744
- :readonly="
745
- readonly ? readonly : inline.readonly
746
- "
747
- @blur="
748
- (event) => {
749
- handleBlur(inline, event);
750
- }
751
- "
752
- @focus="
753
- (event) => {
754
- handleFocus(inline, event);
755
- }
756
- "
757
- @input="
758
- (val) => {
759
- handleInput(inline, val);
760
- }
761
- "
762
- @clear="handleClear(inline)"
763
- @change="
764
- (val) => {
765
- handleChange(inline, val);
766
- }
767
- "
768
- ></es-input>
769
- </el-form-item>
770
- </div>
771
- </template>
772
- </template>
773
- <template v-else-if="!item.inline.hide">
774
- <div
775
- class="es-range"
776
- v-if="item.inline.range !== false"
777
- >
778
-
779
- </div>
780
- <el-form-item
781
- label-width="0"
782
- :prop="item.inline.name"
783
- :rules="getRules(item.inline)"
784
- >
785
- <es-input-number
786
- v-if="item.inline.type == 'number'"
787
- v-bind="item.inline"
788
- v-model="models[item.inline.name]"
789
- :plain="
790
- item.inline.plain ||
791
- item.inline.name === undefined
792
- "
793
- :readonly="
794
- readonly ? readonly : item.inline.readonly
795
- "
796
- @blur="
797
- (event) => {
798
- handleBlur(item.inline, event);
799
- }
800
- "
801
- @focus="
802
- (event) => {
803
- handleFocus(item.inline, event);
804
- }
805
- "
806
- @change="
807
- (val) => {
808
- handleChange(item.inline, val);
809
- }
810
- "
811
- ></es-input-number>
812
- <es-select
813
- v-else-if="item.inline.type == 'select'"
814
- v-bind="
815
- handleExclAttribute({
816
- data: item,
817
- attrs: 'label'
818
- })
819
- "
820
- v-model="models[item.inline.name]"
821
- :plain="
822
- item.inline.plain ||
823
- item.inline.name === undefined
824
- "
825
- :readonly="
826
- readonly ? readonly : item.inline.readonly
827
- "
828
- @blur="
829
- (event) => {
830
- handleBlur(item.inline, event);
831
- }
832
- "
833
- @focus="
834
- (event) => {
835
- handleFocus(item.inline, event);
836
- }
837
- "
838
- @change="
839
- (val) => {
840
- handleChange(item.inline, val);
841
- }
842
- "
843
- ></es-select>
844
- <es-cascader
845
- v-else-if="item.inline.type == 'cascader'"
846
- v-bind="
847
- handleExclAttribute({
848
- data: item,
849
- attrs: 'label'
850
- })
851
- "
852
- v-model="models[item.inline.name]"
853
- :plain="
854
- item.inline.plain ||
855
- item.inline.name === undefined
856
- "
857
- :readonly="
858
- readonly ? readonly : item.inline.readonly
859
- "
860
- @blur="
861
- (event) => {
862
- handleBlur(item.inline, event);
863
- }
864
- "
865
- @focus="
866
- (event) => {
867
- handleFocus(item.inline, event);
868
- }
869
- "
870
- @change="
871
- (val) => {
872
- handleChange(item.inline, val);
873
- }
874
- "
875
- >
876
- </es-cascader>
877
- <es-date-picker
878
- v-else-if="
879
- item.inline.date ||
880
- item.inline.type == 'date' ||
881
- item.inline.type == 'year' ||
882
- item.inline.type == 'month' ||
883
- item.inline.type == 'date' ||
884
- item.inline.type == 'dates' ||
885
- item.inline.type == 'week' ||
886
- item.inline.type == 'datetime' ||
887
- item.inline.type == 'datetimerange' ||
888
- item.inline.type == 'daterange' ||
889
- item.inline.type == 'monthrange' ||
890
- item.inline.type == 'quarter' ||
891
- item.inline.type == 'halfyear'
892
- "
893
- v-bind="item.inline"
894
- v-model="models[item.inline.name]"
895
- :plain="
896
- item.inline.plain ||
897
- item.inline.name === undefined
898
- "
899
- :readonly="
900
- readonly ? readonly : item.inline.readonly
901
- "
902
- @blur="
903
- (event) => {
904
- handleBlur(item.inline, event);
905
- }
906
- "
907
- @focus="
908
- (event) => {
909
- handleFocus(item.inline, event);
910
- }
911
- "
912
- @change="
913
- (val) => {
914
- handleChange(item.inline, val);
915
- }
916
- "
917
- ></es-date-picker>
918
- <es-icons
919
- v-else-if="item.inline.type === 'icon'"
920
- v-bind="
921
- handleExclAttribute({
922
- data: item.inline,
923
- attrs: ['value']
924
- })
925
- "
926
- v-model="models[item.inline.name]"
927
- :plain="
928
- item.inline.plain ||
929
- item.inline.name === undefined
930
- "
931
- :readonly="
932
- readonly ? readonly : item.inline.readonly
933
- "
934
- @change="
935
- (val) => {
936
- handleChange(item.inline, val);
937
- }
938
- "
939
- ></es-icons>
940
- <component
941
- v-else-if="item.inline.type === 'component'"
942
- v-model="models[item.inline.name]"
943
- v-bind="
944
- handleExclAttribute({
945
- data: item.inline,
946
- attrs: ['value']
947
- })
948
- "
949
- v-on="item.inline.events"
950
- ></component>
951
- <es-input
952
- v-else
953
- v-bind="item.inline"
954
- v-model="models[item.inline.name]"
955
- :plain="
956
- item.inline.plain ||
957
- item.inline.name === undefined
958
- "
959
- :readonly="
960
- readonly ? readonly : item.inline.readonly
961
- "
962
- @blur="
963
- (event) => {
964
- handleBlur(item.inline, event);
965
- }
966
- "
967
- @focus="
968
- (event) => {
969
- handleFocus(item.inline, event);
970
- }
971
- "
972
- @change="
973
- (val) => {
974
- handleChange(item.inline, val);
975
- }
976
- "
977
- @input="
978
- (val) => {
979
- handleInput(item.inline, val);
980
- }
981
- "
982
- @clear="
983
- () => {
984
- handleClear(item.inline);
985
- }
986
- "
987
- >
988
- <template v-if="item.inline.prefix" slot="prefix">
989
- <expand-dom
990
- v-if="item.inline.render"
991
- :item="item"
992
- :model="models"
993
- :render="item.inline.render"
994
- ></expand-dom>
995
- </template>
996
- <template slot="suffix" v-if="item.inline.suffix">
997
- <expand-dom
998
- v-if="item.inline.render"
999
- :item="item"
1000
- :model="models"
1001
- :render="item.inline.render"
1002
- ></expand-dom>
1003
- </template>
1004
- <template v-if="item.inline.prepend" slot="prepend">
1005
- <expand-dom
1006
- v-if="item.inline.render"
1007
- :item="item"
1008
- :model="models"
1009
- :render="item.inline.render"
1010
- ></expand-dom>
1011
- </template>
1012
- <template v-if="item.inline.append" slot="append">
1013
- <expand-dom
1014
- v-if="item.inline.render"
1015
- :item="item"
1016
- :model="models"
1017
- :render="item.inline.render"
1018
- ></expand-dom>
1019
- </template>
1020
- </es-input>
1021
- </el-form-item>
1022
- </template>
1023
- </template>
1024
- </el-form-item>
1025
- </template>
1026
- </td>
1027
- </template>
1028
- </template>
1029
- </tr>
1030
- </tbody>
1031
- </table>
1032
- <template v-for="(item, index) in table">
1033
- <es-data-table-form
1034
- v-if="item.lazy"
1035
- class="es-form-item-table"
1036
- :data="model[item.name]"
1037
- :full="false"
1038
- v-bind="item"
1039
- :readonly="readonly ? readonly : item.readonly"
1040
- @blur="
1041
- (val, data) => {
1042
- handleBlur(item, val, data);
1043
- }
1044
- "
1045
- @focus="
1046
- (val, data) => {
1047
- handleFocus(item, val, data);
1048
- }
1049
- "
1050
- @edit="
1051
- (val, data) => {
1052
- handleChange(item, val, data);
1053
- }
1054
- "
1055
- @btnClick="handleClick"
1056
- @dataChange="handleDataChange"
1057
- >
1058
- </es-data-table-form>
1059
- <es-data-table
1060
- v-else
1061
- class="es-form-item-table"
1062
- ref="dataTable"
1063
- :data="model[item.name]"
1064
- :full="false"
1065
- v-bind="
1066
- handleExclAttribute({
1067
- data: item,
1068
- attrs: ['value', 'events']
1069
- })
1070
- "
1071
- v-on="item.events"
1072
- :readonly="readonly ? readonly : item.readonly"
1073
- @blur="
1074
- (val, data) => {
1075
- handleBlur(item, val, data);
1076
- }
1077
- "
1078
- @focus="
1079
- (val, data) => {
1080
- handleFocus(item, val, data);
1081
- }
1082
- "
1083
- @edit="
1084
- (val, data) => {
1085
- handleChange(item, val, data);
1086
- }
1087
- "
1088
- @btnClick="handleClick"
1089
- @dataChange="handleDataChange"
1090
- >
1091
- </es-data-table>
1092
- </template>
1093
- </div>
1094
- </template>
1095
- <script>
1096
- import rules from 'eoss-ui/src/utils/rules.js';
1097
- import util from 'eoss-ui/src/utils/util';
1098
- export default {
1099
- name: 'EsTableForm',
1100
- components: {
1101
- expandDom: {
1102
- functional: true,
1103
- props: {
1104
- item: Object,
1105
- model: Object,
1106
- render: [Function, String]
1107
- },
1108
- render: (h, ctx) => {
1109
- if (typeof ctx.props.render == 'string') {
1110
- try {
1111
- return util.toFunction(ctx.props.render)(h, params);
1112
- } catch (error) {
1113
- throw error;
1114
- }
1115
- }
1116
- return ctx.props.render(h, ctx.props.item, ctx.props.model);
1117
- }
1118
- }
1119
- },
1120
- inject: {
1121
- scale: {
1122
- default: ''
1123
- },
1124
- esForm: {
1125
- default: ''
1126
- }
1127
- },
1128
- props: {
1129
- model: {
1130
- type: Object,
1131
- default() {
1132
- return {};
1133
- }
1134
- },
1135
- disabled: Boolean,
1136
- span: Number,
1137
- contents: {
1138
- type: Array,
1139
- default() {
1140
- return [];
1141
- }
1142
- },
1143
- hideRequiredAsterisk: {
1144
- type: Boolean,
1145
- default: false
1146
- },
1147
- after: {
1148
- type: Boolean,
1149
- default: true
1150
- },
1151
- labelWidth: {
1152
- type: [Number, String],
1153
- default: 120
1154
- },
1155
- readonly: Boolean,
1156
- tableAfter: {
1157
- type: Boolean,
1158
- default: true
1159
- },
1160
- caption: String,
1161
- widths: Array,
1162
- thead: Array,
1163
- zoom: false
1164
- },
1165
- computed: {
1166
- content() {
1167
- let content = [];
1168
- let items = [];
1169
- let n = 0;
1170
- let table = [];
1171
- let formList;
1172
- if (this.tableAfter) {
1173
- formList = this.contents.filter((items) => {
1174
- if (Array.isArray(items)) {
1175
- return items.filter((item) => {
1176
- if (item.type === 'table' && item.after !== false) {
1177
- table.push(item);
1178
- }
1179
- return item.type !== 'table' || item.after === false;
1180
- });
1181
- }
1182
- if (items.type === 'table' && items.after !== false) {
1183
- table.push(items);
1184
- }
1185
- return items.type !== 'table' || items.after === false;
1186
- });
1187
- this.table = table;
1188
- } else {
1189
- formList = this.contents;
1190
- }
1191
- if (Array.isArray(formList[0])) {
1192
- return formList;
1193
- } else {
1194
- const contents = formList.filter((item) => {
1195
- if (!item.hide) {
1196
- return item;
1197
- }
1198
- });
1199
- contents.forEach((item, index) => {
1200
- let i = (index - n) % this.col;
1201
- let cover = false;
1202
- if (i == 0) {
1203
- items = [];
1204
- }
1205
- if (
1206
- (item.colspan && item.colspan > 1) ||
1207
- item.col === 12 ||
1208
- item.col === 0 ||
1209
- item.type === 'table' ||
1210
- item.type === 'caption'
1211
- ) {
1212
- cover = true;
1213
- n++;
1214
- }
1215
- if (cover) {
1216
- if (items.length) {
1217
- content.push(items);
1218
- content.push([item]);
1219
- items = [];
1220
- } else {
1221
- content.push([item]);
1222
- }
1223
- } else {
1224
- if (i < this.col) {
1225
- items.push(item);
1226
- }
1227
- if (i + 1 === this.col) {
1228
- content.push(items);
1229
- }
1230
- }
1231
- });
1232
- return content;
1233
- }
1234
- },
1235
- models: {
1236
- get() {
1237
- return this.model;
1238
- },
1239
- set(val) {
1240
- return val;
1241
- }
1242
- },
1243
- isDisabled() {
1244
- return this.disabled || (this.esForm || {}).disabled;
1245
- }
1246
- },
1247
- watch: {
1248
- scale: {
1249
- deep: true,
1250
- handler(val) {
1251
- this.getWidth();
1252
- }
1253
- },
1254
- zoom: {
1255
- handler(val) {
1256
- this.getWidth();
1257
- }
1258
- }
1259
- },
1260
- data() {
1261
- return {
1262
- col: this.span ? this.span : 2,
1263
- cols: [],
1264
- table: [],
1265
- required: false
1266
- };
1267
- },
1268
- created() {},
1269
- mounted() {
1270
- this.getWidth();
1271
- },
1272
- methods: {
1273
- getLabel(res) {
1274
- return typeof res === 'string'
1275
- ? { contents: res }
1276
- : { ...res, plain: res.plain || res.name === undefined };
1277
- },
1278
- getRules(res) {
1279
- if (res.rules && !res.hide) {
1280
- if (Array.isArray(res.rules)) {
1281
- return res.rules.map((item) => {
1282
- if (item.required) {
1283
- this.required = item.required;
1284
- }
1285
- if (rules[item.type]) {
1286
- return {
1287
- pattern: rules[item.type]['pattern'],
1288
- message: item.message
1289
- ? item.message
1290
- : rules[item.type]['message'],
1291
- trigger: item.trigger
1292
- ? item.trigger
1293
- : res.fetchSuggestions ||
1294
- res.url ||
1295
- (res.data && res.data.length)
1296
- ? 'change'
1297
- : 'blur'
1298
- };
1299
- }
1300
- return item;
1301
- });
1302
- }
1303
- if (rules[res.rules.type]) {
1304
- return {
1305
- pattern: rules[res.rules.type]['pattern'],
1306
- message: res.rules.message
1307
- ? res.rules.message
1308
- : rules[res.rules.type]['message'],
1309
- trigger: res.rules.trigger
1310
- ? res.rules.trigger
1311
- : res.fetchSuggestions || res.url || (res.data && res.data.length)
1312
- ? 'change'
1313
- : 'blur'
1314
- };
1315
- }
1316
- if (res.rules.required) {
1317
- this.required = res.rules.required;
1318
- }
1319
- return res.rules;
1320
- }
1321
- return undefined;
1322
- },
1323
- getWidth() {
1324
- this.$nextTick(() => {
1325
- this.nextTickd();
1326
- });
1327
- },
1328
- nextTickd() {
1329
- let widths = [];
1330
- let surplus = 0;
1331
- let divisor = this.col;
1332
- let getWidth = this.$refs.dataTable
1333
- ? this.$refs.dataTable.$el
1334
- ? this.$refs.dataTable.$el.offsetWidth
1335
- : this.$refs.dataTable[0].$el.offsetWidth
1336
- : this.$parent.$el.offsetWidth;
1337
- if (getWidth < this.$parent.$el.offsetWidth) {
1338
- getWidth = this.$parent.$el.offsetWidth;
1339
- }
1340
- let allWidth = getWidth - parseInt(this.labelWidth, 10) * this.col;
1341
- if (this.widths && this.widths.length === this.col) {
1342
- this.widths.forEach((item) => {
1343
- let num = parseInt(item, 10);
1344
- if (item && num) {
1345
- allWidth -= item ? num : 0;
1346
- divisor--;
1347
- }
1348
- });
1349
- }
1350
- let width = allWidth / divisor;
1351
- if (width - Math.floor(width) > 0) {
1352
- surplus =
1353
- (getWidth - parseInt(this.labelWidth, 10) * this.col) % this.col;
1354
- }
1355
- if (this.col > 1) {
1356
- for (let i = 0; i < this.col; i++) {
1357
- if (this.widths && this.widths[i]) {
1358
- widths.push(parseInt(this.widths[i], 10) + 'px');
1359
- } else if (i < surplus) {
1360
- widths.push(Math.floor(width) + 1 + 'px');
1361
- } else {
1362
- widths.push(Math.floor(width) + 'px');
1363
- }
1364
- }
1365
- } else {
1366
- widths = [''];
1367
- }
1368
- this.cols = widths;
1369
- },
1370
- handleClick(res) {
1371
- if (res.event && typeof res.event === 'function') {
1372
- res.event(res);
1373
- }
1374
- this.$emit('btnClick', res, this.models);
1375
- this.$emit('btn-click', res, this.models);
1376
- },
1377
- handleChange(res, value, data) {
1378
- if (res.events && res.events.change) {
1379
- res.events.change(res, value, data);
1380
- } else {
1381
- this.$emit('change', res, value, data);
1382
- }
1383
- },
1384
- handleInput(res, value, data) {
1385
- this.$emit('input', res, value, data);
1386
- },
1387
- handleFocus(res, value, data) {
1388
- if (res.events && res.events.focus) {
1389
- res.events.focus(res, value, data);
1390
- } else {
1391
- this.$emit('focus', res, value, data);
1392
- }
1393
- },
1394
- handleBlur(res, value, data) {
1395
- if (res.events && res.events.blur) {
1396
- res.events.blur(res, value, data);
1397
- } else {
1398
- this.$emit('blur', res, value, data);
1399
- }
1400
- },
1401
- handleClear(res, value) {
1402
- this.$emit('clear', res, value);
1403
- },
1404
- handleDataChange(res, data) {
1405
- if (res.events && res.events.dataChange) {
1406
- res.events.dataChange(res, value, data);
1407
- } else {
1408
- this.$emit('dataChange', res, data);
1409
- this.$emit('data-change', res, data);
1410
- }
1411
- },
1412
- handleExclAttribute({ data, attrs }) {
1413
- return util.exclAttribute({
1414
- data: data,
1415
- attrs: attrs
1416
- });
1417
- }
1418
- }
1419
- };
1420
- </script>
1
+ <template>
2
+ <div>
3
+ <table
4
+ class="es-table-form"
5
+ border="1"
6
+ cellspacing="0"
7
+ cellpadding="0"
8
+ v-if="content.length"
9
+ >
10
+ <colgroup>
11
+ <template v-for="(item, index) in cols">
12
+ <col :width="labelWidth" :key="'label' + index" />
13
+ <col :width="item" :key="index" />
14
+ </template>
15
+ </colgroup>
16
+ <caption v-if="caption" class="es-table-caption">
17
+ {{
18
+ caption
19
+ }}
20
+ </caption>
21
+ <tbody>
22
+ <tr v-for="(items, indexs) in content" :key="indexs">
23
+ <template v-for="(item, index) in items">
24
+ <td
25
+ v-if="item.type === 'caption'"
26
+ :colspan="col * 2"
27
+ class="es-table-td-caption"
28
+ >
29
+ <div class="es-table-caption">{{ item.text }}</div>
30
+ </td>
31
+ <td
32
+ v-else-if="item.type === 'table'"
33
+ :colspan="col * 2"
34
+ class="es-table-form-data"
35
+ >
36
+ <es-data-table-form
37
+ v-if="item.lazy"
38
+ class="es-form-table-data"
39
+ :data="model[item.name]"
40
+ :full="false"
41
+ v-bind="item"
42
+ :readonly="readonly ? readonly : item.readonly"
43
+ @blur="
44
+ (val, data) => {
45
+ handleBlur(item, val, data);
46
+ }
47
+ "
48
+ @focus="
49
+ (val, data) => {
50
+ handleFocus(item, val, data);
51
+ }
52
+ "
53
+ @edit="
54
+ (val, data) => {
55
+ handleChange(item, val, data);
56
+ }
57
+ "
58
+ @btnClick="handleClick"
59
+ @dataChange="handleDataChange"
60
+ >
61
+ </es-data-table-form>
62
+ <es-data-table
63
+ v-else
64
+ class="es-form-item-table"
65
+ ref="dataTable"
66
+ :data="model[item.name]"
67
+ :full="false"
68
+ v-bind="
69
+ handleExclAttribute({
70
+ data: item,
71
+ attrs: ['value', 'events']
72
+ })
73
+ "
74
+ v-on="item.events"
75
+ :readonly="readonly ? readonly : item.readonly"
76
+ @blur="
77
+ (val, data) => {
78
+ handleBlur(item, val, data);
79
+ }
80
+ "
81
+ @focus="
82
+ (val, data) => {
83
+ handleFocus(item, val, data);
84
+ }
85
+ "
86
+ @edit="
87
+ (val, data) => {
88
+ handleChange(item, val, data);
89
+ }
90
+ "
91
+ @btnClick="handleClick"
92
+ @dataChange="handleDataChange"
93
+ >
94
+ </es-data-table>
95
+ </td>
96
+ <template v-else>
97
+ <td
98
+ v-if="item.label !== false && item.hide !== true"
99
+ class="es-table-form-label"
100
+ :class="{
101
+ 'es-align-middle': item.labelRow,
102
+ 'is-required':
103
+ item.rules && item.rules.required && !hideRequiredAsterisk,
104
+ 'required-after': after
105
+ }"
106
+ :key="'label' + index"
107
+ :align="item.type === 'label' ? item.align : ''"
108
+ :colspan="
109
+ item.labelCol
110
+ ? item.labelCol
111
+ : item.type === 'label'
112
+ ? item.colspan
113
+ : ''
114
+ "
115
+ :rowspan="item.labelRow"
116
+ >
117
+ <es-label
118
+ v-if="item.showLabel !== false && item.label"
119
+ v-bind="getLabel(item.label)"
120
+ ></es-label>
121
+ </td>
122
+ <td
123
+ v-if="
124
+ item.type !== 'label' &&
125
+ !(item.type === 'empty' && item.labelRow) &&
126
+ item.hide !== true
127
+ "
128
+ :align="
129
+ item.type === 'label' || item.type === 'empty'
130
+ ? item.align
131
+ : ''
132
+ "
133
+ :class="
134
+ item.type === 'label' || item.type === 'empty'
135
+ ? 'es-table-form-label'
136
+ : item.disabled
137
+ ? 'es-table-form-item td-disabled'
138
+ : 'es-table-form-item'
139
+ "
140
+ :key="index"
141
+ :colspan="
142
+ item.colspan
143
+ ? item.colspan
144
+ : item.colspan !== false && items.length < col
145
+ ? col * 2 - items.length
146
+ : item.label === false
147
+ ? 2
148
+ : ''
149
+ "
150
+ :rowspan="item.rowspan"
151
+ >
152
+ <expand-dom
153
+ v-if="item.render"
154
+ :item="item"
155
+ :model="models"
156
+ :render="item.render"
157
+ ></expand-dom>
158
+ <template v-else>
159
+ <es-label
160
+ v-if="
161
+ (item.type === 'label' || item.type === 'empty') &&
162
+ !item.hide
163
+ "
164
+ :contents="item.text"
165
+ v-bind="{
166
+ event: item.event,
167
+ events: item.events
168
+ }"
169
+ ></es-label>
170
+ <el-form-item
171
+ v-else-if="!item.hide"
172
+ label-width="0"
173
+ :prop="item.name"
174
+ :rules="getRules(item)"
175
+ :class="{
176
+ 'es-form-item-inline': item.inline
177
+ }"
178
+ >
179
+ <es-input-number
180
+ v-if="item.type == 'number'"
181
+ v-bind="
182
+ handleExclAttribute({
183
+ data: item,
184
+ attrs: 'label'
185
+ })
186
+ "
187
+ v-model="model[item.name]"
188
+ :plain="item.plain"
189
+ :readonly="readonly ? readonly : item.readonly"
190
+ @blur="
191
+ (event) => {
192
+ handleBlur(item, event);
193
+ }
194
+ "
195
+ @focus="
196
+ (event) => {
197
+ handleFocus(item, event);
198
+ }
199
+ "
200
+ @change="
201
+ (val) => {
202
+ handleChange(item, val);
203
+ }
204
+ "
205
+ ></es-input-number>
206
+ <es-radio-group
207
+ v-else-if="item.type == 'radio'"
208
+ v-bind="
209
+ handleExclAttribute({
210
+ data: item,
211
+ attrs: 'label'
212
+ })
213
+ "
214
+ v-model="model[item.name]"
215
+ :plain="item.plain"
216
+ :readonly="readonly ? readonly : item.readonly"
217
+ @change="
218
+ (val) => {
219
+ handleChange(item, val);
220
+ }
221
+ "
222
+ ></es-radio-group>
223
+ <es-checkbox-group
224
+ v-else-if="item.type == 'checkbox'"
225
+ v-bind="
226
+ handleExclAttribute({
227
+ data: item,
228
+ attrs: 'label'
229
+ })
230
+ "
231
+ v-model="model[item.name]"
232
+ :plain="item.plain"
233
+ :readonly="readonly ? readonly : item.readonly"
234
+ @change="
235
+ (val) => {
236
+ handleChange(item, val);
237
+ }
238
+ "
239
+ ></es-checkbox-group>
240
+ <es-select
241
+ v-else-if="item.type == 'select'"
242
+ v-bind="
243
+ handleExclAttribute({
244
+ data: item,
245
+ attrs: 'label'
246
+ })
247
+ "
248
+ v-model="model[item.name]"
249
+ :plain="item.plain"
250
+ :readonly="readonly ? readonly : item.readonly"
251
+ @blur="
252
+ (event) => {
253
+ handleBlur(item, event);
254
+ }
255
+ "
256
+ @focus="
257
+ (event) => {
258
+ handleFocus(item, event);
259
+ }
260
+ "
261
+ @change="
262
+ (val) => {
263
+ handleChange(item, val);
264
+ }
265
+ "
266
+ ></es-select>
267
+ <es-cascader
268
+ v-else-if="item.type == 'cascader'"
269
+ v-bind="
270
+ handleExclAttribute({
271
+ data: item,
272
+ attrs: 'label'
273
+ })
274
+ "
275
+ v-model="model[item.name]"
276
+ :plain="item.plain || item.name === undefined"
277
+ :readonly="readonly ? readonly : item.readonly"
278
+ @blur="
279
+ (event) => {
280
+ handleBlur(item, event);
281
+ }
282
+ "
283
+ @focus="
284
+ (event) => {
285
+ handleFocus(item, event);
286
+ }
287
+ "
288
+ @change="
289
+ (val) => {
290
+ handleChange(item, val);
291
+ }
292
+ "
293
+ >
294
+ </es-cascader>
295
+ <es-select-ganged
296
+ v-else-if="
297
+ item.type == 'ganged' ||
298
+ (item.type == 'select' && item.ganged)
299
+ "
300
+ v-bind="
301
+ handleExclAttribute({
302
+ data: item,
303
+ attrs: 'label'
304
+ })
305
+ "
306
+ v-model="model[item.name]"
307
+ :plain="item.plain"
308
+ :readonly="readonly ? readonly : item.readonly"
309
+ @change="
310
+ (val) => {
311
+ handleChange(item, val);
312
+ }
313
+ "
314
+ ></es-select-ganged>
315
+ <es-switch
316
+ v-else-if="item.type == 'switch'"
317
+ v-bind="
318
+ handleExclAttribute({
319
+ data: item,
320
+ attrs: 'label'
321
+ })
322
+ "
323
+ v-model="model[item.name]"
324
+ :plain="item.plain"
325
+ :readonly="readonly ? readonly : item.readonly"
326
+ @change="
327
+ (val) => {
328
+ handleChange(item, val);
329
+ }
330
+ "
331
+ ></es-switch>
332
+ <es-date-picker
333
+ v-else-if="
334
+ item.date ||
335
+ item.type == 'date' ||
336
+ item.type == 'year' ||
337
+ item.type == 'month' ||
338
+ item.type == 'date' ||
339
+ item.type == 'dates' ||
340
+ item.type == 'week' ||
341
+ item.type == 'datetime' ||
342
+ item.type == 'datetimerange' ||
343
+ item.type == 'daterange' ||
344
+ item.type == 'monthrange' ||
345
+ item.type == 'quarter' ||
346
+ item.type == 'halfyear'
347
+ "
348
+ v-bind="
349
+ handleExclAttribute({
350
+ data: item,
351
+ attrs: 'label'
352
+ })
353
+ "
354
+ v-model="model[item.name]"
355
+ :plain="item.plain"
356
+ :readonly="readonly ? readonly : item.readonly"
357
+ @blur="
358
+ (event) => {
359
+ handleBlur(item, event);
360
+ }
361
+ "
362
+ @focus="
363
+ (event) => {
364
+ handleFocus(item, event);
365
+ }
366
+ "
367
+ @change="
368
+ (val) => {
369
+ handleChange(item, val);
370
+ }
371
+ "
372
+ ></es-date-picker>
373
+ <es-upload
374
+ v-bind="
375
+ handleExclAttribute({
376
+ data: item,
377
+ attrs: ['value', 'ownId']
378
+ })
379
+ "
380
+ :ownId="item.ownId || models.id"
381
+ v-model="model[item.name]"
382
+ v-else-if="
383
+ item.type == 'attachment' || item.type == 'upload'
384
+ "
385
+ :readonly="readonly ? readonly : item.readonly"
386
+ :rules="item.rules"
387
+ btnSize="small"
388
+ @change="
389
+ (val) => {
390
+ handleChange(item, val);
391
+ }
392
+ "
393
+ ></es-upload>
394
+ <es-selector
395
+ v-bind="
396
+ handleExclAttribute({
397
+ data: item,
398
+ attrs: 'label'
399
+ })
400
+ "
401
+ v-model="model[item.name]"
402
+ v-else-if="item.type == 'selector'"
403
+ :readonly="readonly ? readonly : item.readonly"
404
+ :plain="item.plain"
405
+ v-on="
406
+ handleExclAttribute({
407
+ data: item.events,
408
+ attrs: 'change'
409
+ })
410
+ "
411
+ @change="
412
+ (val) => {
413
+ handleChange(item, val);
414
+ }
415
+ "
416
+ ></es-selector>
417
+ <es-icons
418
+ v-else-if="item.type === 'icon'"
419
+ v-bind="
420
+ handleExclAttribute({
421
+ data: item,
422
+ attrs: ['value']
423
+ })
424
+ "
425
+ v-model="models[item.name]"
426
+ :plain="item.plain || item.name === undefined"
427
+ :readonly="readonly ? readonly : item.readonly"
428
+ @change="
429
+ (val) => {
430
+ handleChange(item, val);
431
+ }
432
+ "
433
+ ></es-icons>
434
+ <component
435
+ v-else-if="item.type === 'component'"
436
+ v-model="models[item.name]"
437
+ v-bind="
438
+ handleExclAttribute({
439
+ data: item,
440
+ attrs: ['value']
441
+ })
442
+ "
443
+ v-on="item.events"
444
+ ></component>
445
+ <es-input
446
+ v-else
447
+ v-bind="
448
+ handleExclAttribute({
449
+ data: item,
450
+ attrs: 'label'
451
+ })
452
+ "
453
+ v-model="model[item.name]"
454
+ :plain="item.plain"
455
+ :readonly="readonly ? readonly : item.readonly"
456
+ @blur="
457
+ (event) => {
458
+ handleBlur(item, event);
459
+ }
460
+ "
461
+ @focus="
462
+ (event) => {
463
+ handleFocus(item, event);
464
+ }
465
+ "
466
+ @change="
467
+ (val) => {
468
+ handleChange(item, val);
469
+ }
470
+ "
471
+ @input="
472
+ (val) => {
473
+ handleInput(item, val);
474
+ }
475
+ "
476
+ @clear="
477
+ () => {
478
+ handleClear(item);
479
+ }
480
+ "
481
+ >
482
+ <template v-if="item.prefix" slot="prefix">
483
+ <expand-dom
484
+ v-if="item.render"
485
+ :item="item"
486
+ :model="models"
487
+ :render="item.render"
488
+ ></expand-dom>
489
+ </template>
490
+ <template v-if="item.suffix" slot="suffix">
491
+ <expand-dom
492
+ v-if="item.render"
493
+ :item="item"
494
+ :model="models"
495
+ :render="item.render"
496
+ ></expand-dom>
497
+ </template>
498
+ <template v-if="item.prepend" slot="prepend">
499
+ <expand-dom
500
+ v-if="item.render"
501
+ :item="item"
502
+ :model="models"
503
+ :render="item.render"
504
+ ></expand-dom>
505
+ </template>
506
+ <template v-if="item.append" slot="append">
507
+ <expand-dom
508
+ v-if="item.render"
509
+ :item="item"
510
+ :model="models"
511
+ :render="item.render"
512
+ ></expand-dom>
513
+ </template>
514
+ </es-input>
515
+ <template v-if="item.inline">
516
+ <template v-if="Array.isArray(item.inline)">
517
+ <template v-for="(inline, k) in item.inline">
518
+ <es-button
519
+ v-if="inline.type == 'button' && !inline.hide"
520
+ class="es-button-inline"
521
+ :disabled="isDisabled || inline.disabled"
522
+ v-bind="
523
+ handleExclAttribute({
524
+ data: inline,
525
+ attrs: ['disabled', 'type']
526
+ })
527
+ "
528
+ @click="handleClick(inline)"
529
+ ></es-button>
530
+ <div
531
+ v-else-if="!inline.hide"
532
+ class="es-form-inline es-form-item-inline"
533
+ :key="k"
534
+ >
535
+ <div class="es-range" v-if="inline.range !== false">
536
+
537
+ </div>
538
+ <el-form-item
539
+ label-width="0"
540
+ :prop="inline.name"
541
+ :rules="getRules(inline)"
542
+ >
543
+ <es-input-number
544
+ v-if="inline.type == 'number'"
545
+ v-bind="
546
+ handleExclAttribute({
547
+ data: inline,
548
+ attrs: ['value']
549
+ })
550
+ "
551
+ v-model="models[inline.name]"
552
+ :plain="
553
+ inline.plain || inline.name === undefined
554
+ "
555
+ :readonly="
556
+ readonly ? readonly : inline.readonly
557
+ "
558
+ @blur="
559
+ (event) => {
560
+ handleBlur(inline, event);
561
+ }
562
+ "
563
+ @focus="
564
+ (event) => {
565
+ handleFocus(inline, event);
566
+ }
567
+ "
568
+ @change="
569
+ (val) => {
570
+ handleChange(inline, val);
571
+ }
572
+ "
573
+ ></es-input-number>
574
+ <es-select
575
+ v-else-if="inline.type == 'select'"
576
+ v-bind="
577
+ handleExclAttribute({
578
+ data: inline,
579
+ attrs: ['value']
580
+ })
581
+ "
582
+ v-model="models[inline.name]"
583
+ :plain="
584
+ inline.plain || inline.name === undefined
585
+ "
586
+ :readonly="
587
+ readonly ? readonly : inline.readonly
588
+ "
589
+ @blur="
590
+ (event) => {
591
+ handleBlur(inline, event);
592
+ }
593
+ "
594
+ @focus="
595
+ (event) => {
596
+ handleFocus(inline, event);
597
+ }
598
+ "
599
+ @change="
600
+ (val) => {
601
+ handleChange(inline, val);
602
+ }
603
+ "
604
+ ></es-select>
605
+ <es-cascader
606
+ v-else-if="inline.type == 'cascader'"
607
+ v-bind="
608
+ handleExclAttribute({
609
+ data: inline,
610
+ attrs: ['value']
611
+ })
612
+ "
613
+ v-model="models[inline.name]"
614
+ :plain="
615
+ inline.plain || inline.name === undefined
616
+ "
617
+ :readonly="
618
+ readonly ? readonly : inline.readonly
619
+ "
620
+ @blur="
621
+ (event) => {
622
+ handleBlur(inline, event);
623
+ }
624
+ "
625
+ @focus="
626
+ (event) => {
627
+ handleFocus(inline, event);
628
+ }
629
+ "
630
+ @change="
631
+ (val) => {
632
+ handleChange(inline, val);
633
+ }
634
+ "
635
+ >
636
+ </es-cascader>
637
+ <es-date-picker
638
+ v-else-if="
639
+ inline.date ||
640
+ inline.type == 'date' ||
641
+ inline.type == 'year' ||
642
+ inline.type == 'month' ||
643
+ inline.type == 'date' ||
644
+ inline.type == 'dates' ||
645
+ inline.type == 'week' ||
646
+ inline.type == 'datetime' ||
647
+ inline.type == 'datetimerange' ||
648
+ inline.type == 'daterange' ||
649
+ inline.type == 'monthrange' ||
650
+ inline.type == 'quarter' ||
651
+ inline.type == 'halfyear'
652
+ "
653
+ v-bind="
654
+ handleExclAttribute({
655
+ data: inline,
656
+ attrs: ['value']
657
+ })
658
+ "
659
+ v-model="models[inline.name]"
660
+ :plain="
661
+ inline.plain || inline.name === undefined
662
+ "
663
+ :readonly="
664
+ readonly ? readonly : inline.readonly
665
+ "
666
+ @blur="
667
+ (event) => {
668
+ handleBlur(inline, event);
669
+ }
670
+ "
671
+ @focus="
672
+ (event) => {
673
+ handleFocus(inline, event);
674
+ }
675
+ "
676
+ @change="
677
+ (val) => {
678
+ handleChange(inline, val);
679
+ }
680
+ "
681
+ ></es-date-picker>
682
+ <template
683
+ v-else-if="
684
+ inline.type == 'image' || inline.type == 'img'
685
+ "
686
+ >
687
+ <img
688
+ v-if="inline.url || inline.src"
689
+ v-bind="
690
+ handleExclAttribute({
691
+ data: inline,
692
+ attrs: ['value']
693
+ })
694
+ "
695
+ height="100%"
696
+ :src="inline.url || inline.src"
697
+ @click="inline.event"
698
+ />
699
+ </template>
700
+ <es-icons
701
+ v-else-if="inline.type === 'icon'"
702
+ v-bind="
703
+ handleExclAttribute({
704
+ data: inline,
705
+ attrs: ['value']
706
+ })
707
+ "
708
+ v-model="models[inline.name]"
709
+ :plain="
710
+ inline.plain || inline.name === undefined
711
+ "
712
+ :readonly="
713
+ readonly ? readonly : inline.readonly
714
+ "
715
+ @change="
716
+ (val) => {
717
+ handleChange(inline, val);
718
+ }
719
+ "
720
+ ></es-icons>
721
+ <component
722
+ v-else-if="inline.type === 'component'"
723
+ v-model="models[inline.name]"
724
+ v-bind="
725
+ handleExclAttribute({
726
+ data: inline,
727
+ attrs: ['value']
728
+ })
729
+ "
730
+ v-on="inline.events"
731
+ ></component>
732
+ <es-input
733
+ v-else
734
+ v-bind="
735
+ handleExclAttribute({
736
+ data: inline,
737
+ attrs: ['value']
738
+ })
739
+ "
740
+ v-model="models[inline.name]"
741
+ :plain="
742
+ inline.plain || inline.name === undefined
743
+ "
744
+ :readonly="
745
+ readonly ? readonly : inline.readonly
746
+ "
747
+ @blur="
748
+ (event) => {
749
+ handleBlur(inline, event);
750
+ }
751
+ "
752
+ @focus="
753
+ (event) => {
754
+ handleFocus(inline, event);
755
+ }
756
+ "
757
+ @input="
758
+ (val) => {
759
+ handleInput(inline, val);
760
+ }
761
+ "
762
+ @clear="handleClear(inline)"
763
+ @change="
764
+ (val) => {
765
+ handleChange(inline, val);
766
+ }
767
+ "
768
+ ></es-input>
769
+ </el-form-item>
770
+ </div>
771
+ </template>
772
+ </template>
773
+ <template v-else-if="!item.inline.hide">
774
+ <div
775
+ class="es-range"
776
+ v-if="item.inline.range !== false"
777
+ >
778
+
779
+ </div>
780
+ <el-form-item
781
+ label-width="0"
782
+ :prop="item.inline.name"
783
+ :rules="getRules(item.inline)"
784
+ >
785
+ <es-input-number
786
+ v-if="item.inline.type == 'number'"
787
+ v-bind="item.inline"
788
+ v-model="models[item.inline.name]"
789
+ :plain="
790
+ item.inline.plain ||
791
+ item.inline.name === undefined
792
+ "
793
+ :readonly="
794
+ readonly ? readonly : item.inline.readonly
795
+ "
796
+ @blur="
797
+ (event) => {
798
+ handleBlur(item.inline, event);
799
+ }
800
+ "
801
+ @focus="
802
+ (event) => {
803
+ handleFocus(item.inline, event);
804
+ }
805
+ "
806
+ @change="
807
+ (val) => {
808
+ handleChange(item.inline, val);
809
+ }
810
+ "
811
+ ></es-input-number>
812
+ <es-select
813
+ v-else-if="item.inline.type == 'select'"
814
+ v-bind="
815
+ handleExclAttribute({
816
+ data: item,
817
+ attrs: 'label'
818
+ })
819
+ "
820
+ v-model="models[item.inline.name]"
821
+ :plain="
822
+ item.inline.plain ||
823
+ item.inline.name === undefined
824
+ "
825
+ :readonly="
826
+ readonly ? readonly : item.inline.readonly
827
+ "
828
+ @blur="
829
+ (event) => {
830
+ handleBlur(item.inline, event);
831
+ }
832
+ "
833
+ @focus="
834
+ (event) => {
835
+ handleFocus(item.inline, event);
836
+ }
837
+ "
838
+ @change="
839
+ (val) => {
840
+ handleChange(item.inline, val);
841
+ }
842
+ "
843
+ ></es-select>
844
+ <es-cascader
845
+ v-else-if="item.inline.type == 'cascader'"
846
+ v-bind="
847
+ handleExclAttribute({
848
+ data: item,
849
+ attrs: 'label'
850
+ })
851
+ "
852
+ v-model="models[item.inline.name]"
853
+ :plain="
854
+ item.inline.plain ||
855
+ item.inline.name === undefined
856
+ "
857
+ :readonly="
858
+ readonly ? readonly : item.inline.readonly
859
+ "
860
+ @blur="
861
+ (event) => {
862
+ handleBlur(item.inline, event);
863
+ }
864
+ "
865
+ @focus="
866
+ (event) => {
867
+ handleFocus(item.inline, event);
868
+ }
869
+ "
870
+ @change="
871
+ (val) => {
872
+ handleChange(item.inline, val);
873
+ }
874
+ "
875
+ >
876
+ </es-cascader>
877
+ <es-date-picker
878
+ v-else-if="
879
+ item.inline.date ||
880
+ item.inline.type == 'date' ||
881
+ item.inline.type == 'year' ||
882
+ item.inline.type == 'month' ||
883
+ item.inline.type == 'date' ||
884
+ item.inline.type == 'dates' ||
885
+ item.inline.type == 'week' ||
886
+ item.inline.type == 'datetime' ||
887
+ item.inline.type == 'datetimerange' ||
888
+ item.inline.type == 'daterange' ||
889
+ item.inline.type == 'monthrange' ||
890
+ item.inline.type == 'quarter' ||
891
+ item.inline.type == 'halfyear'
892
+ "
893
+ v-bind="item.inline"
894
+ v-model="models[item.inline.name]"
895
+ :plain="
896
+ item.inline.plain ||
897
+ item.inline.name === undefined
898
+ "
899
+ :readonly="
900
+ readonly ? readonly : item.inline.readonly
901
+ "
902
+ @blur="
903
+ (event) => {
904
+ handleBlur(item.inline, event);
905
+ }
906
+ "
907
+ @focus="
908
+ (event) => {
909
+ handleFocus(item.inline, event);
910
+ }
911
+ "
912
+ @change="
913
+ (val) => {
914
+ handleChange(item.inline, val);
915
+ }
916
+ "
917
+ ></es-date-picker>
918
+ <es-icons
919
+ v-else-if="item.inline.type === 'icon'"
920
+ v-bind="
921
+ handleExclAttribute({
922
+ data: item.inline,
923
+ attrs: ['value']
924
+ })
925
+ "
926
+ v-model="models[item.inline.name]"
927
+ :plain="
928
+ item.inline.plain ||
929
+ item.inline.name === undefined
930
+ "
931
+ :readonly="
932
+ readonly ? readonly : item.inline.readonly
933
+ "
934
+ @change="
935
+ (val) => {
936
+ handleChange(item.inline, val);
937
+ }
938
+ "
939
+ ></es-icons>
940
+ <component
941
+ v-else-if="item.inline.type === 'component'"
942
+ v-model="models[item.inline.name]"
943
+ v-bind="
944
+ handleExclAttribute({
945
+ data: item.inline,
946
+ attrs: ['value']
947
+ })
948
+ "
949
+ v-on="item.inline.events"
950
+ ></component>
951
+ <es-input
952
+ v-else
953
+ v-bind="item.inline"
954
+ v-model="models[item.inline.name]"
955
+ :plain="
956
+ item.inline.plain ||
957
+ item.inline.name === undefined
958
+ "
959
+ :readonly="
960
+ readonly ? readonly : item.inline.readonly
961
+ "
962
+ @blur="
963
+ (event) => {
964
+ handleBlur(item.inline, event);
965
+ }
966
+ "
967
+ @focus="
968
+ (event) => {
969
+ handleFocus(item.inline, event);
970
+ }
971
+ "
972
+ @change="
973
+ (val) => {
974
+ handleChange(item.inline, val);
975
+ }
976
+ "
977
+ @input="
978
+ (val) => {
979
+ handleInput(item.inline, val);
980
+ }
981
+ "
982
+ @clear="
983
+ () => {
984
+ handleClear(item.inline);
985
+ }
986
+ "
987
+ >
988
+ <template v-if="item.inline.prefix" slot="prefix">
989
+ <expand-dom
990
+ v-if="item.inline.render"
991
+ :item="item"
992
+ :model="models"
993
+ :render="item.inline.render"
994
+ ></expand-dom>
995
+ </template>
996
+ <template slot="suffix" v-if="item.inline.suffix">
997
+ <expand-dom
998
+ v-if="item.inline.render"
999
+ :item="item"
1000
+ :model="models"
1001
+ :render="item.inline.render"
1002
+ ></expand-dom>
1003
+ </template>
1004
+ <template v-if="item.inline.prepend" slot="prepend">
1005
+ <expand-dom
1006
+ v-if="item.inline.render"
1007
+ :item="item"
1008
+ :model="models"
1009
+ :render="item.inline.render"
1010
+ ></expand-dom>
1011
+ </template>
1012
+ <template v-if="item.inline.append" slot="append">
1013
+ <expand-dom
1014
+ v-if="item.inline.render"
1015
+ :item="item"
1016
+ :model="models"
1017
+ :render="item.inline.render"
1018
+ ></expand-dom>
1019
+ </template>
1020
+ </es-input>
1021
+ </el-form-item>
1022
+ </template>
1023
+ </template>
1024
+ </el-form-item>
1025
+ </template>
1026
+ </td>
1027
+ </template>
1028
+ </template>
1029
+ </tr>
1030
+ </tbody>
1031
+ </table>
1032
+ <template v-for="(item, index) in table">
1033
+ <es-data-table-form
1034
+ v-if="item.lazy"
1035
+ class="es-form-item-table"
1036
+ :data="model[item.name]"
1037
+ :full="false"
1038
+ v-bind="item"
1039
+ :readonly="readonly ? readonly : item.readonly"
1040
+ @blur="
1041
+ (val, data) => {
1042
+ handleBlur(item, val, data);
1043
+ }
1044
+ "
1045
+ @focus="
1046
+ (val, data) => {
1047
+ handleFocus(item, val, data);
1048
+ }
1049
+ "
1050
+ @edit="
1051
+ (val, data) => {
1052
+ handleChange(item, val, data);
1053
+ }
1054
+ "
1055
+ @btnClick="handleClick"
1056
+ @dataChange="handleDataChange"
1057
+ >
1058
+ </es-data-table-form>
1059
+ <es-data-table
1060
+ v-else
1061
+ class="es-form-item-table"
1062
+ ref="dataTable"
1063
+ :data="model[item.name]"
1064
+ :full="false"
1065
+ v-bind="
1066
+ handleExclAttribute({
1067
+ data: item,
1068
+ attrs: ['value', 'events']
1069
+ })
1070
+ "
1071
+ v-on="item.events"
1072
+ :readonly="readonly ? readonly : item.readonly"
1073
+ @blur="
1074
+ (val, data) => {
1075
+ handleBlur(item, val, data);
1076
+ }
1077
+ "
1078
+ @focus="
1079
+ (val, data) => {
1080
+ handleFocus(item, val, data);
1081
+ }
1082
+ "
1083
+ @edit="
1084
+ (val, data) => {
1085
+ handleChange(item, val, data);
1086
+ }
1087
+ "
1088
+ @btnClick="handleClick"
1089
+ @dataChange="handleDataChange"
1090
+ >
1091
+ </es-data-table>
1092
+ </template>
1093
+ </div>
1094
+ </template>
1095
+ <script>
1096
+ import rules from 'eoss-ui/src/utils/rules.js';
1097
+ import util from 'eoss-ui/src/utils/util';
1098
+ export default {
1099
+ name: 'EsTableForm',
1100
+ components: {
1101
+ expandDom: {
1102
+ functional: true,
1103
+ props: {
1104
+ item: Object,
1105
+ model: Object,
1106
+ render: [Function, String]
1107
+ },
1108
+ render: (h, ctx) => {
1109
+ if (typeof ctx.props.render == 'string') {
1110
+ try {
1111
+ return util.toFunction(ctx.props.render)(h, params);
1112
+ } catch (error) {
1113
+ throw error;
1114
+ }
1115
+ }
1116
+ return ctx.props.render(h, ctx.props.item, ctx.props.model);
1117
+ }
1118
+ }
1119
+ },
1120
+ inject: {
1121
+ scale: {
1122
+ default: ''
1123
+ },
1124
+ esForm: {
1125
+ default: ''
1126
+ }
1127
+ },
1128
+ props: {
1129
+ model: {
1130
+ type: Object,
1131
+ default() {
1132
+ return {};
1133
+ }
1134
+ },
1135
+ disabled: Boolean,
1136
+ span: Number,
1137
+ contents: {
1138
+ type: Array,
1139
+ default() {
1140
+ return [];
1141
+ }
1142
+ },
1143
+ hideRequiredAsterisk: {
1144
+ type: Boolean,
1145
+ default: false
1146
+ },
1147
+ after: {
1148
+ type: Boolean,
1149
+ default: true
1150
+ },
1151
+ labelWidth: {
1152
+ type: [Number, String],
1153
+ default: 120
1154
+ },
1155
+ readonly: Boolean,
1156
+ tableAfter: {
1157
+ type: Boolean,
1158
+ default: true
1159
+ },
1160
+ caption: String,
1161
+ widths: Array,
1162
+ thead: Array,
1163
+ zoom: false
1164
+ },
1165
+ computed: {
1166
+ content() {
1167
+ let content = [];
1168
+ let items = [];
1169
+ let n = 0;
1170
+ let table = [];
1171
+ let formList;
1172
+ if (this.tableAfter) {
1173
+ formList = this.contents.filter((items) => {
1174
+ if (Array.isArray(items)) {
1175
+ return items.filter((item) => {
1176
+ if (item.type === 'table' && item.after !== false) {
1177
+ table.push(item);
1178
+ }
1179
+ return item.type !== 'table' || item.after === false;
1180
+ });
1181
+ }
1182
+ if (items.type === 'table' && items.after !== false) {
1183
+ table.push(items);
1184
+ }
1185
+ return items.type !== 'table' || items.after === false;
1186
+ });
1187
+ this.table = table;
1188
+ } else {
1189
+ formList = this.contents;
1190
+ }
1191
+ if (Array.isArray(formList[0])) {
1192
+ return formList;
1193
+ } else {
1194
+ const contents = formList.filter((item) => {
1195
+ if (!item.hide) {
1196
+ return item;
1197
+ }
1198
+ });
1199
+ contents.forEach((item, index) => {
1200
+ let i = (index - n) % this.col;
1201
+ let cover = false;
1202
+ if (i == 0) {
1203
+ items = [];
1204
+ }
1205
+ if (
1206
+ (item.colspan && item.colspan > 1) ||
1207
+ item.col === 12 ||
1208
+ item.col === 0 ||
1209
+ item.type === 'table' ||
1210
+ item.type === 'caption'
1211
+ ) {
1212
+ cover = true;
1213
+ n++;
1214
+ }
1215
+ if (cover) {
1216
+ if (items.length) {
1217
+ content.push(items);
1218
+ content.push([item]);
1219
+ items = [];
1220
+ } else {
1221
+ content.push([item]);
1222
+ }
1223
+ } else {
1224
+ if (i < this.col) {
1225
+ items.push(item);
1226
+ }
1227
+ if (i + 1 === this.col) {
1228
+ content.push(items);
1229
+ }
1230
+ }
1231
+ });
1232
+ return content;
1233
+ }
1234
+ },
1235
+ models: {
1236
+ get() {
1237
+ return this.model;
1238
+ },
1239
+ set(val) {
1240
+ return val;
1241
+ }
1242
+ },
1243
+ isDisabled() {
1244
+ return this.disabled || (this.esForm || {}).disabled;
1245
+ }
1246
+ },
1247
+ watch: {
1248
+ scale: {
1249
+ deep: true,
1250
+ handler(val) {
1251
+ this.getWidth();
1252
+ }
1253
+ },
1254
+ zoom: {
1255
+ handler(val) {
1256
+ this.getWidth();
1257
+ }
1258
+ }
1259
+ },
1260
+ data() {
1261
+ return {
1262
+ col: this.span ? this.span : 2,
1263
+ cols: [],
1264
+ table: [],
1265
+ required: false
1266
+ };
1267
+ },
1268
+ created() {},
1269
+ mounted() {
1270
+ this.getWidth();
1271
+ },
1272
+ methods: {
1273
+ getLabel(res) {
1274
+ return typeof res === 'string'
1275
+ ? { contents: res }
1276
+ : { ...res, plain: res.plain || res.name === undefined };
1277
+ },
1278
+ getRules(res) {
1279
+ if (res.rules && !res.hide) {
1280
+ if (Array.isArray(res.rules)) {
1281
+ return res.rules.map((item) => {
1282
+ if (item.required) {
1283
+ this.required = item.required;
1284
+ }
1285
+ if (rules[item.type]) {
1286
+ return {
1287
+ pattern: rules[item.type]['pattern'],
1288
+ message: item.message
1289
+ ? item.message
1290
+ : rules[item.type]['message'],
1291
+ trigger: item.trigger
1292
+ ? item.trigger
1293
+ : res.fetchSuggestions ||
1294
+ res.url ||
1295
+ (res.data && res.data.length)
1296
+ ? 'change'
1297
+ : 'blur'
1298
+ };
1299
+ }
1300
+ return item;
1301
+ });
1302
+ }
1303
+ if (rules[res.rules.type]) {
1304
+ return {
1305
+ pattern: rules[res.rules.type]['pattern'],
1306
+ message: res.rules.message
1307
+ ? res.rules.message
1308
+ : rules[res.rules.type]['message'],
1309
+ trigger: res.rules.trigger
1310
+ ? res.rules.trigger
1311
+ : res.fetchSuggestions || res.url || (res.data && res.data.length)
1312
+ ? 'change'
1313
+ : 'blur'
1314
+ };
1315
+ }
1316
+ if (res.rules.required) {
1317
+ this.required = res.rules.required;
1318
+ }
1319
+ return res.rules;
1320
+ }
1321
+ return undefined;
1322
+ },
1323
+ getWidth() {
1324
+ this.$nextTick(() => {
1325
+ this.nextTickd();
1326
+ });
1327
+ },
1328
+ nextTickd() {
1329
+ let widths = [];
1330
+ let surplus = 0;
1331
+ let divisor = this.col;
1332
+ let getWidth = this.$refs.dataTable
1333
+ ? this.$refs.dataTable.$el
1334
+ ? this.$refs.dataTable.$el.offsetWidth
1335
+ : this.$refs.dataTable[0].$el.offsetWidth
1336
+ : this.$parent.$el.offsetWidth;
1337
+ if (getWidth < this.$parent.$el.offsetWidth) {
1338
+ getWidth = this.$parent.$el.offsetWidth;
1339
+ }
1340
+ let allWidth = getWidth - parseInt(this.labelWidth, 10) * this.col;
1341
+ if (this.widths && this.widths.length === this.col) {
1342
+ this.widths.forEach((item) => {
1343
+ let num = parseInt(item, 10);
1344
+ if (item && num) {
1345
+ allWidth -= item ? num : 0;
1346
+ divisor--;
1347
+ }
1348
+ });
1349
+ }
1350
+ let width = allWidth / divisor;
1351
+ if (width - Math.floor(width) > 0) {
1352
+ surplus =
1353
+ (getWidth - parseInt(this.labelWidth, 10) * this.col) % this.col;
1354
+ }
1355
+ if (this.col > 1) {
1356
+ for (let i = 0; i < this.col; i++) {
1357
+ if (this.widths && this.widths[i]) {
1358
+ widths.push(parseInt(this.widths[i], 10) + 'px');
1359
+ } else if (i < surplus) {
1360
+ widths.push(Math.floor(width) + 1 + 'px');
1361
+ } else {
1362
+ widths.push(Math.floor(width) + 'px');
1363
+ }
1364
+ }
1365
+ } else {
1366
+ widths = [''];
1367
+ }
1368
+ this.cols = widths;
1369
+ },
1370
+ handleClick(res) {
1371
+ if (res.event && typeof res.event === 'function') {
1372
+ res.event(res);
1373
+ }
1374
+ this.$emit('btnClick', res, this.models);
1375
+ this.$emit('btn-click', res, this.models);
1376
+ },
1377
+ handleChange(res, value, data) {
1378
+ if (res.events && res.events.change) {
1379
+ res.events.change(res, value, data);
1380
+ } else {
1381
+ this.$emit('change', res, value, data);
1382
+ }
1383
+ },
1384
+ handleInput(res, value, data) {
1385
+ this.$emit('input', res, value, data);
1386
+ },
1387
+ handleFocus(res, value, data) {
1388
+ if (res.events && res.events.focus) {
1389
+ res.events.focus(res, value, data);
1390
+ } else {
1391
+ this.$emit('focus', res, value, data);
1392
+ }
1393
+ },
1394
+ handleBlur(res, value, data) {
1395
+ if (res.events && res.events.blur) {
1396
+ res.events.blur(res, value, data);
1397
+ } else {
1398
+ this.$emit('blur', res, value, data);
1399
+ }
1400
+ },
1401
+ handleClear(res, value) {
1402
+ this.$emit('clear', res, value);
1403
+ },
1404
+ handleDataChange(res, data) {
1405
+ if (res.events && res.events.dataChange) {
1406
+ res.events.dataChange(res, value, data);
1407
+ } else {
1408
+ this.$emit('dataChange', res, data);
1409
+ this.$emit('data-change', res, data);
1410
+ }
1411
+ },
1412
+ handleExclAttribute({ data, attrs }) {
1413
+ return util.exclAttribute({
1414
+ data: data,
1415
+ attrs: attrs
1416
+ });
1417
+ }
1418
+ }
1419
+ };
1420
+ </script>