eoss-ui 0.6.67 → 0.6.69

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 (282) hide show
  1. package/lib/button-group.js +3 -2
  2. package/lib/button.js +3 -2
  3. package/lib/calogin.js +700 -256
  4. package/lib/checkbox-group.js +3 -2
  5. package/lib/data-table-form.js +3 -2
  6. package/lib/data-table.js +3 -2
  7. package/lib/date-picker.js +3 -2
  8. package/lib/dialog.js +3 -2
  9. package/lib/eoss-ui.common.js +1386 -920
  10. package/lib/flow-group.js +3 -2
  11. package/lib/flow-list.js +161 -177
  12. package/lib/flow.js +301 -291
  13. package/lib/form.js +3 -2
  14. package/lib/handle-user.js +3 -2
  15. package/lib/handler.js +3 -2
  16. package/lib/icon.js +3 -2
  17. package/lib/index.js +1 -1
  18. package/lib/input-number.js +3 -2
  19. package/lib/input.js +3 -2
  20. package/lib/login.js +70 -39
  21. package/lib/main.js +135 -134
  22. package/lib/nav.js +3 -2
  23. package/lib/page.js +3 -2
  24. package/lib/pagination.js +3 -2
  25. package/lib/player.js +3 -2
  26. package/lib/qr-code.js +16 -15
  27. package/lib/radio-group.js +3 -2
  28. package/lib/retrial-auth.js +3 -2
  29. package/lib/select-ganged.js +3 -2
  30. package/lib/select.js +3 -2
  31. package/lib/selector-panel.js +3 -2
  32. package/lib/selector.js +3 -2
  33. package/lib/sizer.js +3 -2
  34. package/lib/steps.js +3 -2
  35. package/lib/switch.js +3 -2
  36. package/lib/table-form.js +3 -2
  37. package/lib/tabs.js +3 -2
  38. package/lib/theme-chalk/index.css +1 -1
  39. package/lib/theme-chalk/login.css +1 -1
  40. package/lib/tips.js +3 -2
  41. package/lib/tree-group.js +3 -2
  42. package/lib/tree.js +3 -2
  43. package/lib/upload.js +3 -2
  44. package/lib/utils/util.js +3 -2
  45. package/lib/wujie.js +3 -2
  46. package/lib/wxlogin.js +3 -2
  47. package/package.json +160 -160
  48. package/packages/.DS_Store +0 -0
  49. package/packages/autocomplete/.DS_Store +0 -0
  50. package/packages/button/index.js +5 -5
  51. package/packages/button/src/main.vue +418 -418
  52. package/packages/button-group/index.js +5 -5
  53. package/packages/button-group/src/main.vue +298 -298
  54. package/packages/calendar/index.js +5 -5
  55. package/packages/calogin/.DS_Store +0 -0
  56. package/packages/calogin/index.js +5 -5
  57. package/packages/calogin/src/main.vue +410 -131
  58. package/packages/calogin/src/plugin.js +915 -748
  59. package/packages/card/index.js +5 -5
  60. package/packages/card/src/main.vue +156 -156
  61. package/packages/cascader/index.js +5 -5
  62. package/packages/cascader/src/main.vue +168 -168
  63. package/packages/checkbox-group/index.js +5 -5
  64. package/packages/checkbox-group/src/main.vue +333 -333
  65. package/packages/clients/index.js +5 -5
  66. package/packages/clients/src/main.vue +151 -151
  67. package/packages/data-table/index.js +5 -5
  68. package/packages/data-table/src/children.vue +39 -39
  69. package/packages/data-table/src/column.vue +989 -989
  70. package/packages/data-table/src/main.vue +1822 -1822
  71. package/packages/data-table/src/sizer.vue +195 -195
  72. package/packages/data-table-form/index.js +5 -5
  73. package/packages/data-table-form/src/checkbox.vue +101 -101
  74. package/packages/data-table-form/src/colgroup.vue +17 -17
  75. package/packages/data-table-form/src/main.vue +181 -181
  76. package/packages/data-table-form/src/radio.vue +65 -65
  77. package/packages/data-table-form/src/table.vue +233 -233
  78. package/packages/data-table-form/src/tbody.vue +336 -336
  79. package/packages/data-table-form/src/thead.vue +68 -68
  80. package/packages/date-picker/.DS_Store +0 -0
  81. package/packages/date-picker/index.js +5 -5
  82. package/packages/date-picker/src/.DS_Store +0 -0
  83. package/packages/date-picker/src/main.vue +236 -236
  84. package/packages/dialog/index.js +5 -5
  85. package/packages/enable-drag/index.js +5 -5
  86. package/packages/enterprise/index.js +5 -5
  87. package/packages/enterprise/src/main.vue +66 -66
  88. package/packages/error-page/index.js +5 -5
  89. package/packages/error-page/src/main.vue +44 -44
  90. package/packages/flow/.DS_Store +0 -0
  91. package/packages/flow/index.js +5 -5
  92. package/packages/flow/src/component/Circulate.vue +351 -351
  93. package/packages/flow/src/component/CommonOpinions.vue +346 -346
  94. package/packages/flow/src/component/CustomPreset.vue +322 -322
  95. package/packages/flow/src/component/FileList.vue +99 -99
  96. package/packages/flow/src/component/Preset.vue +255 -255
  97. package/packages/flow/src/component/SendMsg.vue +241 -241
  98. package/packages/flow/src/component/TimeLimit.vue +190 -190
  99. package/packages/flow/src/component/taskUnionExamine.vue +619 -619
  100. package/packages/flow/src/form.vue +121 -121
  101. package/packages/flow/src/freeStartFlow.vue +2843 -2843
  102. package/packages/flow/src/main.vue +3369 -3367
  103. package/packages/flow/src/processForm.vue +1091 -1091
  104. package/packages/flow/src/processReject.vue +294 -294
  105. package/packages/flow/src/reset.vue +905 -905
  106. package/packages/flow/src/selectUser.vue +6 -0
  107. package/packages/flow/src/startTaskRead.vue +659 -659
  108. package/packages/flow/src/supervise.vue +149 -149
  109. package/packages/flow/src/table.vue +58 -58
  110. package/packages/flow-group/index.js +5 -5
  111. package/packages/flow-group/src/main.vue +688 -688
  112. package/packages/flow-list/.DS_Store +0 -0
  113. package/packages/flow-list/index.js +5 -5
  114. package/packages/flow-list/src/main.vue +1738 -1757
  115. package/packages/form/index.js +5 -5
  116. package/packages/form/src/main.vue +3581 -3581
  117. package/packages/form/src/table.vue +1426 -1426
  118. package/packages/handle-user/index.js +5 -5
  119. package/packages/handle-user/src/main.vue +138 -138
  120. package/packages/handler/index.js +5 -5
  121. package/packages/handler/src/main.vue +493 -493
  122. package/packages/icon/index.js +5 -5
  123. package/packages/icon/src/main.vue +101 -101
  124. package/packages/icons/index.js +5 -5
  125. package/packages/icons/src/main.vue +81 -81
  126. package/packages/input/index.js +5 -5
  127. package/packages/input/src/main.vue +356 -356
  128. package/packages/input-number/index.js +5 -5
  129. package/packages/input-number/src/main.vue +106 -106
  130. package/packages/label/index.js +5 -5
  131. package/packages/label/src/main.vue +457 -457
  132. package/packages/layout/index.js +5 -5
  133. package/packages/layout/src/item.vue +152 -152
  134. package/packages/layout/src/main.vue +31 -31
  135. package/packages/login/.DS_Store +0 -0
  136. package/packages/login/index.js +5 -5
  137. package/packages/login/src/main.vue +2015 -1988
  138. package/packages/login/src/resetPassword.vue +562 -562
  139. package/packages/main/.DS_Store +0 -0
  140. package/packages/main/index.js +5 -5
  141. package/packages/main/src/.DS_Store +0 -0
  142. package/packages/main/src/default/message.vue +249 -249
  143. package/packages/main/src/default/notice.vue +157 -157
  144. package/packages/main/src/default/userinfo.vue +503 -503
  145. package/packages/main/src/public/online.vue +89 -89
  146. package/packages/main/src/public/search.vue +462 -462
  147. package/packages/main/src/public/settings.vue +221 -221
  148. package/packages/main/src/simplicity/apps.vue +388 -388
  149. package/packages/main/src/simplicity/avatar.vue +83 -83
  150. package/packages/main/src/simplicity/handler.vue +259 -259
  151. package/packages/main/src/simplicity/index.vue +2089 -2089
  152. package/packages/main/src/simplicity/lists.vue +84 -84
  153. package/packages/main/src/simplicity/menu-list.vue +135 -135
  154. package/packages/main/src/simplicity/message.vue +259 -259
  155. package/packages/main/src/simplicity/notice.vue +190 -190
  156. package/packages/main/src/simplicity/router-page.vue +45 -45
  157. package/packages/main/src/simplicity/sub-menu.vue +264 -264
  158. package/packages/main/src/simplicity/user.vue +257 -257
  159. package/packages/main/src/simplicity/userinfo.vue +312 -312
  160. package/packages/menu/.DS_Store +0 -0
  161. package/packages/menu/index.js +5 -5
  162. package/packages/menu/src/main.vue +584 -584
  163. package/packages/nav/index.js +5 -5
  164. package/packages/nav/src/main.vue +351 -351
  165. package/packages/notify/index.js +5 -5
  166. package/packages/notify/src/main.vue +538 -538
  167. package/packages/page/index.js +5 -5
  168. package/packages/page/src/main.vue +167 -167
  169. package/packages/pagination/index.js +5 -5
  170. package/packages/pagination/src/main.vue +96 -96
  171. package/packages/player/index.js +5 -5
  172. package/packages/player/src/main.vue +194 -194
  173. package/packages/qr-code/index.js +5 -5
  174. package/packages/qr-code/src/main.vue +170 -170
  175. package/packages/radio-group/index.js +6 -6
  176. package/packages/radio-group/src/main.vue +319 -319
  177. package/packages/retrial-auth/index.js +5 -5
  178. package/packages/retrial-auth/src/main.vue +280 -280
  179. package/packages/scrollbar/.DS_Store +0 -0
  180. package/packages/select/.DS_Store +0 -0
  181. package/packages/select/index.js +5 -5
  182. package/packages/select/src/main.vue +778 -778
  183. package/packages/select-ganged/index.js +5 -5
  184. package/packages/select-ganged/src/main.vue +724 -724
  185. package/packages/selector/index.js +5 -5
  186. package/packages/selector/src/main.vue +687 -687
  187. package/packages/selector-panel/index.js +5 -5
  188. package/packages/selector-panel/src/main.vue +1027 -1027
  189. package/packages/selector-panel/src/selection.vue +177 -177
  190. package/packages/selector-panel/src/tree.vue +129 -129
  191. package/packages/sizer/index.js +5 -5
  192. package/packages/sizer/src/main.vue +254 -254
  193. package/packages/steps/index.js +5 -5
  194. package/packages/steps/src/main.vue +181 -181
  195. package/packages/switch/index.js +5 -5
  196. package/packages/switch/src/main.vue +154 -154
  197. package/packages/table-form/index.js +5 -5
  198. package/packages/tabs/index.js +5 -5
  199. package/packages/tabs/src/main.vue +788 -788
  200. package/packages/tabs-panel/index.js +5 -5
  201. package/packages/tabs-panel/src/main.vue +29 -29
  202. package/packages/theme-chalk/lib/index.css +1 -1
  203. package/packages/theme-chalk/lib/login.css +1 -1
  204. package/packages/theme-chalk/src/.DS_Store +0 -0
  205. package/packages/theme-chalk/src/base.scss +261 -261
  206. package/packages/theme-chalk/src/button-group.scss +176 -176
  207. package/packages/theme-chalk/src/button.scss +24 -24
  208. package/packages/theme-chalk/src/calendar.scss +113 -113
  209. package/packages/theme-chalk/src/card.scss +99 -99
  210. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  211. package/packages/theme-chalk/src/clients.scss +87 -87
  212. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  213. package/packages/theme-chalk/src/data-table.scss +293 -293
  214. package/packages/theme-chalk/src/date-picker.scss +7 -7
  215. package/packages/theme-chalk/src/dialog.scss +77 -77
  216. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  217. package/packages/theme-chalk/src/enterprise.scss +5 -5
  218. package/packages/theme-chalk/src/error-page.scss +18 -18
  219. package/packages/theme-chalk/src/flow-group.scss +110 -110
  220. package/packages/theme-chalk/src/flow-list.scss +39 -39
  221. package/packages/theme-chalk/src/flow.scss +343 -343
  222. package/packages/theme-chalk/src/form.scss +496 -496
  223. package/packages/theme-chalk/src/handle-user.scss +40 -40
  224. package/packages/theme-chalk/src/handler.scss +143 -143
  225. package/packages/theme-chalk/src/icon.scss +1792 -1792
  226. package/packages/theme-chalk/src/icons.scss +99 -99
  227. package/packages/theme-chalk/src/input.scss +9 -9
  228. package/packages/theme-chalk/src/label.scss +24 -24
  229. package/packages/theme-chalk/src/layout.scss +46 -46
  230. package/packages/theme-chalk/src/login.scss +981 -981
  231. package/packages/theme-chalk/src/main.scss +663 -663
  232. package/packages/theme-chalk/src/menu.scss +222 -222
  233. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  234. package/packages/theme-chalk/src/nav.scss +111 -111
  235. package/packages/theme-chalk/src/page.scss +3 -3
  236. package/packages/theme-chalk/src/pagination.scss +29 -29
  237. package/packages/theme-chalk/src/player.scss +9 -9
  238. package/packages/theme-chalk/src/qr-code.scss +17 -17
  239. package/packages/theme-chalk/src/radio-group.scss +9 -9
  240. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  241. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  242. package/packages/theme-chalk/src/select.scss +8 -8
  243. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  244. package/packages/theme-chalk/src/selector.scss +91 -91
  245. package/packages/theme-chalk/src/simplicity.scss +1355 -1355
  246. package/packages/theme-chalk/src/sizer.scss +36 -36
  247. package/packages/theme-chalk/src/steps.scss +88 -88
  248. package/packages/theme-chalk/src/switch.scss +3 -3
  249. package/packages/theme-chalk/src/table-form.scss +1 -1
  250. package/packages/theme-chalk/src/tabs.scss +87 -87
  251. package/packages/theme-chalk/src/tips.scss +7 -7
  252. package/packages/theme-chalk/src/toolbar.scss +179 -179
  253. package/packages/theme-chalk/src/tree-group.scss +72 -72
  254. package/packages/theme-chalk/src/tree.scss +165 -165
  255. package/packages/theme-chalk/src/upload.scss +168 -168
  256. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  257. package/packages/tips/index.js +5 -5
  258. package/packages/tips/src/main.vue +141 -141
  259. package/packages/toolbar/index.js +5 -5
  260. package/packages/toolbar/src/main.vue +430 -430
  261. package/packages/tree/index.js +5 -5
  262. package/packages/tree-group/index.js +5 -5
  263. package/packages/upload/.DS_Store +0 -0
  264. package/packages/upload/index.js +5 -5
  265. package/packages/upload/src/main.vue +1347 -1347
  266. package/packages/upload/src/picture.js +15 -15
  267. package/packages/wujie/index.js +5 -5
  268. package/packages/wujie/src/main.vue +145 -145
  269. package/packages/wxlogin/index.js +5 -5
  270. package/packages/wxlogin/src/main.vue +128 -128
  271. package/src/.DS_Store +0 -0
  272. package/src/config/api.js +291 -291
  273. package/src/config/image.js +2 -2
  274. package/src/index.js +163 -163
  275. package/src/utils/.DS_Store +0 -0
  276. package/src/utils/bus.js +3 -3
  277. package/src/utils/date-util.js +312 -312
  278. package/src/utils/http.js +50 -50
  279. package/src/utils/rules.js +18 -18
  280. package/src/utils/store.js +21 -21
  281. package/src/utils/util.js +3 -2
  282. package/src/utils/webSocket.js +107 -107
@@ -1,1426 +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
- :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', $event)"
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>
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', $event)"
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>