eoss-ui 0.6.45 → 0.6.47

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