eoss-ui 0.6.77 → 0.6.79

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