eoss-ui 0.3.97

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 (378) hide show
  1. package/CHANGELOG.md +929 -0
  2. package/README.md +30 -0
  3. package/lib/button-group.js +2857 -0
  4. package/lib/button.js +2884 -0
  5. package/lib/card.js +603 -0
  6. package/lib/cascader.js +373 -0
  7. package/lib/checkbox-group.js +3099 -0
  8. package/lib/clients.js +375 -0
  9. package/lib/config/api.js +205 -0
  10. package/lib/data-table-form.js +3848 -0
  11. package/lib/data-table.js +6315 -0
  12. package/lib/date-picker.js +2821 -0
  13. package/lib/dialog.js +3730 -0
  14. package/lib/enterprise.js +372 -0
  15. package/lib/eoss-ui.common.js +65365 -0
  16. package/lib/error-page.js +293 -0
  17. package/lib/flow-group.js +4200 -0
  18. package/lib/flow-list.js +4350 -0
  19. package/lib/flow.js +12893 -0
  20. package/lib/form.js +15635 -0
  21. package/lib/handle-user.js +2900 -0
  22. package/lib/handler.js +3118 -0
  23. package/lib/index.js +1 -0
  24. package/lib/input-number.js +2743 -0
  25. package/lib/input.js +2935 -0
  26. package/lib/label.js +411 -0
  27. package/lib/login.js +5048 -0
  28. package/lib/main.js +5816 -0
  29. package/lib/mainComp.js +6530 -0
  30. package/lib/menu.js +529 -0
  31. package/lib/nav.js +3048 -0
  32. package/lib/notify.js +1079 -0
  33. package/lib/page.js +3036 -0
  34. package/lib/pagination.js +354 -0
  35. package/lib/player.js +2904 -0
  36. package/lib/qr-code.js +2860 -0
  37. package/lib/radio-group.js +3091 -0
  38. package/lib/select-ganged.js +3242 -0
  39. package/lib/select.js +3295 -0
  40. package/lib/selector-panel.js +4425 -0
  41. package/lib/selector.js +3722 -0
  42. package/lib/sizer.js +3067 -0
  43. package/lib/steps.js +2943 -0
  44. package/lib/switch.js +2784 -0
  45. package/lib/table-form.js +6211 -0
  46. package/lib/tabs-panel.js +274 -0
  47. package/lib/tabs.js +4988 -0
  48. package/lib/theme-chalk/base.css +1 -0
  49. package/lib/theme-chalk/button-group.css +1 -0
  50. package/lib/theme-chalk/button.css +0 -0
  51. package/lib/theme-chalk/card.css +1 -0
  52. package/lib/theme-chalk/cascader.css +0 -0
  53. package/lib/theme-chalk/checkbox-group.css +1 -0
  54. package/lib/theme-chalk/clients.css +1 -0
  55. package/lib/theme-chalk/data-table-form.css +1 -0
  56. package/lib/theme-chalk/data-table.css +1 -0
  57. package/lib/theme-chalk/date-picker.css +1 -0
  58. package/lib/theme-chalk/dialog.css +1 -0
  59. package/lib/theme-chalk/enterprise.css +1 -0
  60. package/lib/theme-chalk/error-page.css +1 -0
  61. package/lib/theme-chalk/flow-chart.css +0 -0
  62. package/lib/theme-chalk/flow-group.css +1 -0
  63. package/lib/theme-chalk/flow-list.css +1 -0
  64. package/lib/theme-chalk/flow.css +1 -0
  65. package/lib/theme-chalk/fonts/iconfont.ttf +0 -0
  66. package/lib/theme-chalk/fonts/iconfont.woff +0 -0
  67. package/lib/theme-chalk/form.css +1 -0
  68. package/lib/theme-chalk/handle-user.css +1 -0
  69. package/lib/theme-chalk/handler.css +1 -0
  70. package/lib/theme-chalk/icon.css +1 -0
  71. package/lib/theme-chalk/index.css +1 -0
  72. package/lib/theme-chalk/input-number.css +0 -0
  73. package/lib/theme-chalk/input.css +1 -0
  74. package/lib/theme-chalk/label.css +1 -0
  75. package/lib/theme-chalk/login.css +1 -0
  76. package/lib/theme-chalk/main.css +1 -0
  77. package/lib/theme-chalk/mainComp.css +0 -0
  78. package/lib/theme-chalk/menu.css +1 -0
  79. package/lib/theme-chalk/nav.css +1 -0
  80. package/lib/theme-chalk/notify.css +0 -0
  81. package/lib/theme-chalk/page.css +1 -0
  82. package/lib/theme-chalk/pagination.css +1 -0
  83. package/lib/theme-chalk/player.css +1 -0
  84. package/lib/theme-chalk/qr-code.css +1 -0
  85. package/lib/theme-chalk/radio-group.css +1 -0
  86. package/lib/theme-chalk/radio.css +1 -0
  87. package/lib/theme-chalk/select-ganged.css +1 -0
  88. package/lib/theme-chalk/select.css +0 -0
  89. package/lib/theme-chalk/selector-panel.css +1 -0
  90. package/lib/theme-chalk/selector.css +1 -0
  91. package/lib/theme-chalk/sizer.css +1 -0
  92. package/lib/theme-chalk/steps.css +1 -0
  93. package/lib/theme-chalk/switch.css +1 -0
  94. package/lib/theme-chalk/table-form.css +0 -0
  95. package/lib/theme-chalk/tabs-panel.css +0 -0
  96. package/lib/theme-chalk/tabs.css +1 -0
  97. package/lib/theme-chalk/tips.css +1 -0
  98. package/lib/theme-chalk/toolbar.css +1 -0
  99. package/lib/theme-chalk/tree-group.css +1 -0
  100. package/lib/theme-chalk/tree.css +1 -0
  101. package/lib/theme-chalk/upload.css +1 -0
  102. package/lib/theme-chalk/wujie.css +0 -0
  103. package/lib/theme-chalk/wxlogin.css +1 -0
  104. package/lib/tips.js +2830 -0
  105. package/lib/toolbar.js +531 -0
  106. package/lib/tree-group.js +3373 -0
  107. package/lib/tree.js +3482 -0
  108. package/lib/upload.js +3913 -0
  109. package/lib/utils/bus.js +9 -0
  110. package/lib/utils/date-util.js +318 -0
  111. package/lib/utils/http.js +58 -0
  112. package/lib/utils/rules.js +19 -0
  113. package/lib/utils/store.js +22 -0
  114. package/lib/utils/util.js +2056 -0
  115. package/lib/wujie.js +2845 -0
  116. package/lib/wxlogin.js +2799 -0
  117. package/package.json +151 -0
  118. package/packages/button/index.js +5 -0
  119. package/packages/button/src/main.vue +264 -0
  120. package/packages/button-group/index.js +5 -0
  121. package/packages/button-group/src/main.vue +130 -0
  122. package/packages/card/index.js +5 -0
  123. package/packages/card/src/main.vue +144 -0
  124. package/packages/cascader/index.js +5 -0
  125. package/packages/cascader/src/main.vue +144 -0
  126. package/packages/checkbox-group/index.js +5 -0
  127. package/packages/checkbox-group/src/main.vue +285 -0
  128. package/packages/clients/index.js +5 -0
  129. package/packages/clients/src/main.vue +50 -0
  130. package/packages/data-table/index.js +5 -0
  131. package/packages/data-table/src/children.vue +40 -0
  132. package/packages/data-table/src/column.vue +796 -0
  133. package/packages/data-table/src/main copy.vue +1383 -0
  134. package/packages/data-table/src/main.vue +1229 -0
  135. package/packages/data-table/src/mixins/table.js +12 -0
  136. package/packages/data-table/src/sizer.vue +160 -0
  137. package/packages/data-table-form/index.js +5 -0
  138. package/packages/data-table-form/src/colgroup.vue +17 -0
  139. package/packages/data-table-form/src/main.vue +167 -0
  140. package/packages/data-table-form/src/table.vue +192 -0
  141. package/packages/data-table-form/src/tbody.vue +219 -0
  142. package/packages/data-table-form/src/thead.vue +68 -0
  143. package/packages/date-picker/index.js +5 -0
  144. package/packages/date-picker/src/main.vue +185 -0
  145. package/packages/dialog/index.js +5 -0
  146. package/packages/dialog/src/main.vue +442 -0
  147. package/packages/enterprise/index.js +5 -0
  148. package/packages/enterprise/src/main.vue +66 -0
  149. package/packages/error-page/index.js +5 -0
  150. package/packages/error-page/src/main.vue +44 -0
  151. package/packages/flow/index.js +5 -0
  152. package/packages/flow/src/component/CommonOpinions.vue +290 -0
  153. package/packages/flow/src/component/CustomPreset.vue +311 -0
  154. package/packages/flow/src/component/FileList.vue +97 -0
  155. package/packages/flow/src/component/Preset.vue +253 -0
  156. package/packages/flow/src/component/SendMsg.vue +221 -0
  157. package/packages/flow/src/component/TimeLimit.vue +190 -0
  158. package/packages/flow/src/component/taskUnionExamine.vue +507 -0
  159. package/packages/flow/src/form.vue +120 -0
  160. package/packages/flow/src/main.vue +2107 -0
  161. package/packages/flow/src/processForm.vue +866 -0
  162. package/packages/flow/src/processReject.vue +262 -0
  163. package/packages/flow/src/selectUser.vue +425 -0
  164. package/packages/flow/src/startTaskRead.vue +556 -0
  165. package/packages/flow/src/table.vue +51 -0
  166. package/packages/flow-group/index.js +5 -0
  167. package/packages/flow-group/src/main.vue +540 -0
  168. package/packages/flow-list/index.js +5 -0
  169. package/packages/flow-list/src/flow-table.vue +445 -0
  170. package/packages/flow-list/src/main.vue +456 -0
  171. package/packages/form/index.js +5 -0
  172. package/packages/form/src/main.vue +4429 -0
  173. package/packages/form/src/table.vue +1196 -0
  174. package/packages/handle-user/index.js +5 -0
  175. package/packages/handle-user/src/main.vue +122 -0
  176. package/packages/handler/index.js +5 -0
  177. package/packages/handler/src/main.vue +306 -0
  178. package/packages/input/index.js +5 -0
  179. package/packages/input/src/main.vue +307 -0
  180. package/packages/input-number/index.js +5 -0
  181. package/packages/input-number/src/main.vue +106 -0
  182. package/packages/label/index.js +5 -0
  183. package/packages/label/src/main.vue +208 -0
  184. package/packages/login/index.js +5 -0
  185. package/packages/login/src/main.vue +1193 -0
  186. package/packages/login/src/resetPassword.vue +332 -0
  187. package/packages/main/index.js +5 -0
  188. package/packages/main/src/main.vue +1496 -0
  189. package/packages/main/src/message.vue +239 -0
  190. package/packages/main/src/notice.vue +145 -0
  191. package/packages/main/src/settings.vue +105 -0
  192. package/packages/main/src/userinfo.vue +430 -0
  193. package/packages/mainComp/index.js +5 -0
  194. package/packages/mainComp/src/async-component/index.vue +85 -0
  195. package/packages/mainComp/src/main.vue +1934 -0
  196. package/packages/mainComp/src/message.vue +239 -0
  197. package/packages/mainComp/src/notice.vue +152 -0
  198. package/packages/mainComp/src/settings.vue +105 -0
  199. package/packages/mainComp/src/userinfo.vue +423 -0
  200. package/packages/menu/index.js +5 -0
  201. package/packages/menu/src/main.vue +401 -0
  202. package/packages/nav/index.js +5 -0
  203. package/packages/nav/src/main.vue +250 -0
  204. package/packages/notify/index.js +5 -0
  205. package/packages/notify/src/main.vue +538 -0
  206. package/packages/page/index.js +5 -0
  207. package/packages/page/src/main.vue +167 -0
  208. package/packages/pagination/index.js +5 -0
  209. package/packages/pagination/src/main.vue +77 -0
  210. package/packages/player/index.js +5 -0
  211. package/packages/player/src/main.vue +194 -0
  212. package/packages/qr-code/index.js +5 -0
  213. package/packages/qr-code/src/main.vue +154 -0
  214. package/packages/radio/index.js +5 -0
  215. package/packages/radio/src/main.vue +259 -0
  216. package/packages/radio-group/index.js +6 -0
  217. package/packages/radio-group/src/main.vue +267 -0
  218. package/packages/select/index.js +5 -0
  219. package/packages/select/src/main.vue +683 -0
  220. package/packages/select-ganged/index.js +5 -0
  221. package/packages/select-ganged/src/main.vue +686 -0
  222. package/packages/selector/index.js +5 -0
  223. package/packages/selector/src/main.vue +588 -0
  224. package/packages/selector-panel/index.js +5 -0
  225. package/packages/selector-panel/src/main.vue +968 -0
  226. package/packages/selector-panel/src/selection.vue +142 -0
  227. package/packages/selector-panel/src/tree.vue +129 -0
  228. package/packages/sizer/index.js +5 -0
  229. package/packages/sizer/src/main.vue +254 -0
  230. package/packages/steps/index.js +5 -0
  231. package/packages/steps/src/main.vue +175 -0
  232. package/packages/switch/index.js +5 -0
  233. package/packages/switch/src/main.vue +154 -0
  234. package/packages/table-form/index.js +5 -0
  235. package/packages/tabs/index.js +5 -0
  236. package/packages/tabs/src/main.vue +749 -0
  237. package/packages/tabs-panel/index.js +5 -0
  238. package/packages/tabs-panel/src/main.vue +18 -0
  239. package/packages/theme-chalk/README.md +33 -0
  240. package/packages/theme-chalk/lib/base.css +1 -0
  241. package/packages/theme-chalk/lib/button-group.css +1 -0
  242. package/packages/theme-chalk/lib/button.css +0 -0
  243. package/packages/theme-chalk/lib/card.css +1 -0
  244. package/packages/theme-chalk/lib/cascader.css +0 -0
  245. package/packages/theme-chalk/lib/checkbox-group.css +1 -0
  246. package/packages/theme-chalk/lib/clients.css +1 -0
  247. package/packages/theme-chalk/lib/data-table-form.css +1 -0
  248. package/packages/theme-chalk/lib/data-table.css +1 -0
  249. package/packages/theme-chalk/lib/date-picker.css +1 -0
  250. package/packages/theme-chalk/lib/dialog.css +1 -0
  251. package/packages/theme-chalk/lib/enterprise.css +1 -0
  252. package/packages/theme-chalk/lib/error-page.css +1 -0
  253. package/packages/theme-chalk/lib/flow-chart.css +0 -0
  254. package/packages/theme-chalk/lib/flow-group.css +1 -0
  255. package/packages/theme-chalk/lib/flow-list.css +1 -0
  256. package/packages/theme-chalk/lib/flow.css +1 -0
  257. package/packages/theme-chalk/lib/fonts/iconfont.ttf +0 -0
  258. package/packages/theme-chalk/lib/fonts/iconfont.woff +0 -0
  259. package/packages/theme-chalk/lib/form.css +1 -0
  260. package/packages/theme-chalk/lib/handle-user.css +1 -0
  261. package/packages/theme-chalk/lib/handler.css +1 -0
  262. package/packages/theme-chalk/lib/icon.css +1 -0
  263. package/packages/theme-chalk/lib/index.css +1 -0
  264. package/packages/theme-chalk/lib/input-number.css +0 -0
  265. package/packages/theme-chalk/lib/input.css +1 -0
  266. package/packages/theme-chalk/lib/label.css +1 -0
  267. package/packages/theme-chalk/lib/login.css +1 -0
  268. package/packages/theme-chalk/lib/main.css +1 -0
  269. package/packages/theme-chalk/lib/mainComp.css +0 -0
  270. package/packages/theme-chalk/lib/menu.css +1 -0
  271. package/packages/theme-chalk/lib/nav.css +1 -0
  272. package/packages/theme-chalk/lib/notify.css +0 -0
  273. package/packages/theme-chalk/lib/page.css +1 -0
  274. package/packages/theme-chalk/lib/pagination.css +1 -0
  275. package/packages/theme-chalk/lib/player.css +1 -0
  276. package/packages/theme-chalk/lib/qr-code.css +1 -0
  277. package/packages/theme-chalk/lib/radio-group.css +1 -0
  278. package/packages/theme-chalk/lib/radio.css +1 -0
  279. package/packages/theme-chalk/lib/select-ganged.css +1 -0
  280. package/packages/theme-chalk/lib/select.css +0 -0
  281. package/packages/theme-chalk/lib/selector-panel.css +1 -0
  282. package/packages/theme-chalk/lib/selector.css +1 -0
  283. package/packages/theme-chalk/lib/sizer.css +1 -0
  284. package/packages/theme-chalk/lib/steps.css +1 -0
  285. package/packages/theme-chalk/lib/switch.css +1 -0
  286. package/packages/theme-chalk/lib/table-form.css +0 -0
  287. package/packages/theme-chalk/lib/tabs-panel.css +0 -0
  288. package/packages/theme-chalk/lib/tabs.css +1 -0
  289. package/packages/theme-chalk/lib/tips.css +1 -0
  290. package/packages/theme-chalk/lib/toolbar.css +1 -0
  291. package/packages/theme-chalk/lib/tree-group.css +1 -0
  292. package/packages/theme-chalk/lib/tree.css +1 -0
  293. package/packages/theme-chalk/lib/upload.css +1 -0
  294. package/packages/theme-chalk/lib/wujie.css +0 -0
  295. package/packages/theme-chalk/lib/wxlogin.css +1 -0
  296. package/packages/theme-chalk/package.json +35 -0
  297. package/packages/theme-chalk/src/base.scss +165 -0
  298. package/packages/theme-chalk/src/button-group.scss +9 -0
  299. package/packages/theme-chalk/src/button.scss +0 -0
  300. package/packages/theme-chalk/src/card.scss +55 -0
  301. package/packages/theme-chalk/src/cascader.scss +0 -0
  302. package/packages/theme-chalk/src/checkbox-group.scss +8 -0
  303. package/packages/theme-chalk/src/clients.scss +72 -0
  304. package/packages/theme-chalk/src/common/var.scss +1516 -0
  305. package/packages/theme-chalk/src/data-table-form.scss +55 -0
  306. package/packages/theme-chalk/src/data-table.scss +202 -0
  307. package/packages/theme-chalk/src/date-picker.scss +8 -0
  308. package/packages/theme-chalk/src/dialog.scss +52 -0
  309. package/packages/theme-chalk/src/enterprise.scss +5 -0
  310. package/packages/theme-chalk/src/error-page.scss +18 -0
  311. package/packages/theme-chalk/src/flow-chart.scss +0 -0
  312. package/packages/theme-chalk/src/flow-group.scss +101 -0
  313. package/packages/theme-chalk/src/flow-list.scss +41 -0
  314. package/packages/theme-chalk/src/flow.scss +285 -0
  315. package/packages/theme-chalk/src/fonts/iconfont.ttf +0 -0
  316. package/packages/theme-chalk/src/fonts/iconfont.woff +0 -0
  317. package/packages/theme-chalk/src/form.scss +451 -0
  318. package/packages/theme-chalk/src/handle-user.scss +40 -0
  319. package/packages/theme-chalk/src/handler.scss +131 -0
  320. package/packages/theme-chalk/src/icon.scss +1714 -0
  321. package/packages/theme-chalk/src/index.scss +50 -0
  322. package/packages/theme-chalk/src/input-number.scss +0 -0
  323. package/packages/theme-chalk/src/input.scss +3 -0
  324. package/packages/theme-chalk/src/label.scss +24 -0
  325. package/packages/theme-chalk/src/login.scss +490 -0
  326. package/packages/theme-chalk/src/main.scss +483 -0
  327. package/packages/theme-chalk/src/mainComp.scss +0 -0
  328. package/packages/theme-chalk/src/menu.scss +201 -0
  329. package/packages/theme-chalk/src/mixins/color.scss +117 -0
  330. package/packages/theme-chalk/src/mixins/mixins.scss +25 -0
  331. package/packages/theme-chalk/src/nav.scss +73 -0
  332. package/packages/theme-chalk/src/notify.scss +0 -0
  333. package/packages/theme-chalk/src/page.scss +3 -0
  334. package/packages/theme-chalk/src/pagination.scss +14 -0
  335. package/packages/theme-chalk/src/player.scss +9 -0
  336. package/packages/theme-chalk/src/qr-code.scss +17 -0
  337. package/packages/theme-chalk/src/radio-group.scss +9 -0
  338. package/packages/theme-chalk/src/radio.scss +3 -0
  339. package/packages/theme-chalk/src/select-ganged.scss +9 -0
  340. package/packages/theme-chalk/src/select.scss +0 -0
  341. package/packages/theme-chalk/src/selector-panel.scss +203 -0
  342. package/packages/theme-chalk/src/selector.scss +85 -0
  343. package/packages/theme-chalk/src/sizer.scss +36 -0
  344. package/packages/theme-chalk/src/steps.scss +88 -0
  345. package/packages/theme-chalk/src/switch.scss +3 -0
  346. package/packages/theme-chalk/src/table-form.scss +1 -0
  347. package/packages/theme-chalk/src/tabs-panel.scss +0 -0
  348. package/packages/theme-chalk/src/tabs.scss +91 -0
  349. package/packages/theme-chalk/src/tips.scss +7 -0
  350. package/packages/theme-chalk/src/toolbar.scss +121 -0
  351. package/packages/theme-chalk/src/tree-group.scss +64 -0
  352. package/packages/theme-chalk/src/tree.scss +140 -0
  353. package/packages/theme-chalk/src/upload.scss +131 -0
  354. package/packages/theme-chalk/src/wujie.scss +0 -0
  355. package/packages/theme-chalk/src/wxlogin.scss +3 -0
  356. package/packages/tips/index.js +5 -0
  357. package/packages/tips/src/main.vue +126 -0
  358. package/packages/toolbar/index.js +5 -0
  359. package/packages/toolbar/src/main.vue +377 -0
  360. package/packages/tree/index.js +5 -0
  361. package/packages/tree/src/main.vue +636 -0
  362. package/packages/tree-group/index.js +5 -0
  363. package/packages/tree-group/src/main.vue +435 -0
  364. package/packages/upload/index.js +5 -0
  365. package/packages/upload/src/main.vue +1033 -0
  366. package/packages/upload/src/picture.js +15 -0
  367. package/packages/wujie/index.js +5 -0
  368. package/packages/wujie/src/main.vue +137 -0
  369. package/packages/wxlogin/index.js +5 -0
  370. package/packages/wxlogin/src/main.vue +110 -0
  371. package/src/config/api.js +211 -0
  372. package/src/index.js +167 -0
  373. package/src/utils/bus.js +3 -0
  374. package/src/utils/date-util.js +312 -0
  375. package/src/utils/http.js +50 -0
  376. package/src/utils/rules.js +18 -0
  377. package/src/utils/store.js +21 -0
  378. package/src/utils/util.js +2105 -0
@@ -0,0 +1,4429 @@
1
+ <template>
2
+ <el-form
3
+ ref="esForm"
4
+ v-bind="$attrs"
5
+ :label-position="labelPosition"
6
+ :model="models"
7
+ :label-width="labelWidth"
8
+ :class="{
9
+ 'es-form-readonly': readonly,
10
+ 'es-form-group': inline,
11
+ 'es-form-table': table,
12
+ 'es-form-inside-dialog': dialog
13
+ }"
14
+ :inline="inline"
15
+ class="es-form"
16
+ v-loading="loading"
17
+ element-loading-text="获取数据中..."
18
+ element-loading-spinner="el-icon-loading"
19
+ element-loading-background="rgba(0, 0, 0, 0.65)"
20
+ v-on="$listeners"
21
+ >
22
+ <input type="text" style="display: none" v-if="forbid" />
23
+ <es-steps
24
+ v-if="steps"
25
+ class="es-steps-group"
26
+ v-bind="
27
+ handleExclAttribute({ data: steps, attrs: ['active', 'contents'] })
28
+ "
29
+ :contents="stepContents"
30
+ :active="stepActive"
31
+ @click="handleClick"
32
+ ></es-steps>
33
+ <slot>
34
+ <template v-if="formHeight">
35
+ <el-collapse
36
+ v-if="isCollapse"
37
+ v-model="activeNames"
38
+ class="es-collapse"
39
+ :accordion="accordion"
40
+ @change="handleCollapse"
41
+ >
42
+ <el-scrollbar
43
+ class="es-scrollbar"
44
+ :style="{ height: formHeight }"
45
+ ref="scrollbar"
46
+ >
47
+ <el-collapse-item
48
+ v-for="(items, indexs) in content"
49
+ class="es-collapse-item"
50
+ :class="{
51
+ 'es-collapse-readonly': accordion ? false : !collapse,
52
+ 'es-collapse-caption': items.caption
53
+ }"
54
+ :name="items.name || String(indexs)"
55
+ :key="indexs"
56
+ :readonly="accordion ? false : !collapse"
57
+ >
58
+ <div slot="title" class="es-collapse-title">
59
+ <template v-if="typeof items.title === 'object'">
60
+ <template v-for="(item, index) in items.title">
61
+ <template v-if="typeof item === 'string'">
62
+ <span :key="index">{{ item }}</span>
63
+ </template>
64
+ <div v-else :key="index" class="es-collapse-title-handler">
65
+ <es-label
66
+ :contents="item.label"
67
+ v-if="item.label"
68
+ ></es-label>
69
+ <span v-if="item.text || item.type === 'text'">{{
70
+ item.text || item.contents
71
+ }}</span>
72
+ <i
73
+ v-else-if="item.type === 'icon' || item.icon"
74
+ :class="item.class || item.icon"
75
+ v-html="item.contents"
76
+ @click.stop="
77
+ () => {
78
+ item.event && item.event(items, indexs);
79
+ item.click && item.click(items, indexs);
80
+ }
81
+ "
82
+ ></i>
83
+ <es-radio-group
84
+ v-else-if="item.type == 'radio'"
85
+ v-bind="
86
+ handleExclAttribute({
87
+ data: item,
88
+ attrs: ['value']
89
+ })
90
+ "
91
+ v-model="models[item.name]"
92
+ size="medium"
93
+ :plain="item.plain || item.name === undefined"
94
+ :readonly="readonly ? readonly : item.readonly"
95
+ @change="
96
+ val => {
97
+ handleChange(item, val, items);
98
+ }
99
+ "
100
+ ></es-radio-group>
101
+ <es-checkbox-group
102
+ v-else-if="item.type == 'checkbox'"
103
+ v-bind="
104
+ handleExclAttribute({
105
+ data: item,
106
+ attrs: ['value']
107
+ })
108
+ "
109
+ v-model="models[item.name]"
110
+ size="medium"
111
+ :plain="item.plain || item.name === undefined"
112
+ :readonly="readonly ? readonly : item.readonly"
113
+ @change="
114
+ val => {
115
+ handleChange(item, val, items);
116
+ }
117
+ "
118
+ ></es-checkbox-group>
119
+ <es-select
120
+ v-else-if="item.type == 'select'"
121
+ v-bind="
122
+ handleExclAttribute({
123
+ data: item,
124
+ attrs: ['value']
125
+ })
126
+ "
127
+ v-model="models[item.name]"
128
+ size="medium"
129
+ :plain="item.plain || item.name === undefined"
130
+ :readonly="readonly ? readonly : item.readonly"
131
+ @change="
132
+ val => {
133
+ handleChange(item, val, items);
134
+ }
135
+ "
136
+ ></es-select>
137
+ </div>
138
+ </template>
139
+ </template>
140
+ <template v-else>{{ items.title }}</template>
141
+ </div>
142
+ <es-table-form
143
+ v-if="table || items.table"
144
+ ref="form"
145
+ :label-width="items.labelWidth || labelWidth"
146
+ :span="items.span || span"
147
+ :tableAfter="tableAfter"
148
+ v-bind="items"
149
+ :thead="thead"
150
+ :model.sync="models"
151
+ :readonly="readonly"
152
+ :contents="items.contents"
153
+ :widths="widths"
154
+ @click="handleClick"
155
+ @change="handleChange"
156
+ @dataChange="handleDataChange"
157
+ @focus="handleFocus"
158
+ @blur="handleBlur"
159
+ @clear="handleClear"
160
+ ></es-table-form>
161
+ <template v-else>
162
+ <template v-for="item in items.contents">
163
+ <div
164
+ v-if="item.type === 'caption'"
165
+ class="es-form-item-caption"
166
+ :key="item.name"
167
+ >
168
+ {{ item.text }}
169
+ </div>
170
+ <el-form-item
171
+ v-else
172
+ ref="es-form-pane"
173
+ v-show="!item.hide"
174
+ :key="item.name"
175
+ :label-width="labelWidth"
176
+ :prop="item.name"
177
+ :rules="getRules(item)"
178
+ :style="style(item)"
179
+ :class="[
180
+ {
181
+ 'es-form-space-none': !space,
182
+ 'es-form-item-readonly': readonly,
183
+ 'es-form-item-table': item.type === 'table',
184
+ 'es-form-item-inline': item.inline,
185
+ 'es-form-item-onrow': item.row,
186
+ 'es-form-item-label-hide':
187
+ item.labelHide || item.showLabel === false
188
+ },
189
+ item.class,
190
+ itemClass[item.type]
191
+ ]"
192
+ :label-class="
193
+ [
194
+ {
195
+ 'required-after': after,
196
+ 'es-label-box': labelPosition !== 'top',
197
+ 'required-position':
198
+ !labelPosition || labelPosition === 'right'
199
+ },
200
+ 'es-justify-' +
201
+ (item.labelAlign
202
+ ? align[item.labelAlign]
203
+ : typeof item.label == 'object' && item.label.align
204
+ ? align[item.label.align]
205
+ : labelPosition
206
+ ? labelPosition == 'top'
207
+ ? 'start'
208
+ : align[labelPosition]
209
+ : 'end'),
210
+ !Array.isArray(item.labelClass) ? item.labelClass : ''
211
+ ].concat(
212
+ Array.isArray(item.labelClass ? item.labelClass : '')
213
+ )
214
+ "
215
+ >
216
+ <es-label
217
+ slot="label"
218
+ v-if="
219
+ item.showLabel !== false &&
220
+ item.type !== 'table' &&
221
+ showLabel
222
+ "
223
+ :contents="item.label"
224
+ :plain="item.plain || item.name === undefined"
225
+ ></es-label>
226
+ <es-input-number
227
+ v-if="item.type == 'number'"
228
+ v-bind="
229
+ handleExclAttribute({ data: item, attrs: ['value'] })
230
+ "
231
+ v-model="models[item.name]"
232
+ :plain="item.plain || item.name === undefined"
233
+ :readonly="readonly ? readonly : item.readonly"
234
+ @blur="
235
+ event => {
236
+ handleBlur(item, event);
237
+ }
238
+ "
239
+ @focus="
240
+ event => {
241
+ handleFocus(item, event);
242
+ }
243
+ "
244
+ @change="
245
+ val => {
246
+ handleChange(item, val);
247
+ }
248
+ "
249
+ ></es-input-number>
250
+ <es-radio-group
251
+ v-else-if="item.type == 'radio'"
252
+ v-bind="
253
+ handleExclAttribute({ data: item, attrs: ['value'] })
254
+ "
255
+ v-model="models[item.name]"
256
+ :plain="item.plain || item.name === undefined"
257
+ :readonly="readonly ? readonly : item.readonly"
258
+ @change="
259
+ val => {
260
+ handleChange(item, val);
261
+ }
262
+ "
263
+ ></es-radio-group>
264
+ <es-checkbox-group
265
+ v-else-if="item.type == 'checkbox'"
266
+ v-bind="
267
+ handleExclAttribute({ data: item, attrs: ['value'] })
268
+ "
269
+ v-model="models[item.name]"
270
+ :plain="item.plain || item.name === undefined"
271
+ :readonly="readonly ? readonly : item.readonly"
272
+ @change="
273
+ val => {
274
+ handleChange(item, val);
275
+ }
276
+ "
277
+ ></es-checkbox-group>
278
+ <es-select
279
+ v-else-if="item.type == 'select'"
280
+ v-bind="
281
+ handleExclAttribute({ data: item, attrs: ['value'] })
282
+ "
283
+ v-model="models[item.name]"
284
+ :plain="item.plain || item.name === undefined"
285
+ :readonly="readonly ? readonly : item.readonly"
286
+ @blur="
287
+ event => {
288
+ handleBlur(item, event);
289
+ }
290
+ "
291
+ @focus="
292
+ event => {
293
+ handleFocus(item, event);
294
+ }
295
+ "
296
+ @change="
297
+ val => {
298
+ handleChange(item, val);
299
+ }
300
+ "
301
+ ></es-select>
302
+ <es-cascader
303
+ v-else-if="item.type == 'cascader'"
304
+ v-bind="
305
+ handleExclAttribute({ data: item, attrs: ['value'] })
306
+ "
307
+ v-model="models[item.name]"
308
+ :plain="item.plain || item.name === undefined"
309
+ :readonly="readonly ? readonly : item.readonly"
310
+ @blur="
311
+ event => {
312
+ handleBlur(item, event);
313
+ }
314
+ "
315
+ @focus="
316
+ event => {
317
+ handleFocus(item, event);
318
+ }
319
+ "
320
+ @change="
321
+ val => {
322
+ handleChange(item, val);
323
+ }
324
+ "
325
+ >
326
+ </es-cascader>
327
+ <es-selector
328
+ v-else-if="item.type === 'selector'"
329
+ v-bind="
330
+ handleExclAttribute({ data: item, attrs: ['value'] })
331
+ "
332
+ v-model="models[item.name]"
333
+ :plain="item.plain || item.name === undefined"
334
+ :readonly="readonly ? readonly : item.readonly"
335
+ @blur="
336
+ event => {
337
+ handleBlur(item, event);
338
+ }
339
+ "
340
+ @focus="
341
+ event => {
342
+ handleFocus(item, event);
343
+ }
344
+ "
345
+ @change="
346
+ val => {
347
+ handleChange(item, val);
348
+ }
349
+ "
350
+ ></es-selector>
351
+ <es-select-ganged
352
+ v-else-if="
353
+ item.type == 'ganged' ||
354
+ (item.type == 'select' && item.ganged)
355
+ "
356
+ v-bind="
357
+ handleExclAttribute({ data: item, attrs: ['value'] })
358
+ "
359
+ v-model="models[item.name]"
360
+ :plain="item.plain || item.name === undefined"
361
+ :readonly="readonly ? readonly : item.readonly"
362
+ @change="
363
+ val => {
364
+ handleChange(item, val);
365
+ }
366
+ "
367
+ ></es-select-ganged>
368
+ <es-switch
369
+ v-else-if="item.type == 'switch'"
370
+ v-bind="
371
+ handleExclAttribute({ data: item, attrs: ['value'] })
372
+ "
373
+ v-model="models[item.name]"
374
+ :plain="item.plain || item.name === undefined"
375
+ :readonly="readonly ? readonly : item.readonly"
376
+ @change="
377
+ val => {
378
+ handleChange(item, val);
379
+ }
380
+ "
381
+ ></es-switch>
382
+ <es-date-picker
383
+ v-else-if="
384
+ item.date ||
385
+ item.type == 'date' ||
386
+ item.type == 'year' ||
387
+ item.type == 'month' ||
388
+ item.type == 'date' ||
389
+ item.type == 'dates' ||
390
+ item.type == 'week' ||
391
+ item.type == 'datetime' ||
392
+ item.type == 'datetimerange' ||
393
+ item.type == 'daterange' ||
394
+ item.type == 'monthrange' ||
395
+ item.type == 'quarter' ||
396
+ item.type == 'halfyear'
397
+ "
398
+ v-bind="
399
+ handleExclAttribute({ data: item, attrs: ['value'] })
400
+ "
401
+ v-model="models[item.name]"
402
+ :plain="item.plain || item.name === undefined"
403
+ :readonly="readonly ? readonly : item.readonly"
404
+ @blur="
405
+ event => {
406
+ handleBlur(item, event);
407
+ }
408
+ "
409
+ @focus="
410
+ event => {
411
+ handleFocus(item, event);
412
+ }
413
+ "
414
+ @change="
415
+ val => {
416
+ handleChange(item, val);
417
+ }
418
+ "
419
+ ></es-date-picker>
420
+ <es-upload
421
+ v-else-if="
422
+ item.type == 'attachment' || item.type == 'upload'
423
+ "
424
+ v-bind="
425
+ handleExclAttribute({
426
+ data: item,
427
+ attrs: ['value', 'ownId']
428
+ })
429
+ "
430
+ :ownId="item.ownId || models.id"
431
+ v-model="models[item.name]"
432
+ btn-size="medium"
433
+ :readonly="readonly ? readonly : item.readonly"
434
+ :rules="item.rules"
435
+ @change="
436
+ val => {
437
+ handleChange(item, val);
438
+ }
439
+ "
440
+ ></es-upload>
441
+ <es-selector
442
+ v-bind="
443
+ handleExclAttribute({ data: item, attrs: ['value'] })
444
+ "
445
+ v-model="models[item.name]"
446
+ v-else-if="item.type == 'selector'"
447
+ :readonly="readonly ? readonly : item.readonly"
448
+ :plain="item.plain || item.name === undefined"
449
+ @change="
450
+ val => {
451
+ handleChange(item, val);
452
+ }
453
+ "
454
+ ></es-selector>
455
+ <template v-else-if="item.type === 'table'">
456
+ <es-data-table-form
457
+ v-if="item.lazy"
458
+ :data="models[item.name]"
459
+ :full="item.height != undefined || item.height != null"
460
+ v-bind="
461
+ handleExclAttribute({ data: item, attrs: ['value'] })
462
+ "
463
+ :readonly="readonly ? readonly : item.readonly"
464
+ @blur="
465
+ (val, data) => {
466
+ handleBlur(item, val, data);
467
+ }
468
+ "
469
+ @focus="
470
+ (val, data) => {
471
+ handleFocus(item, val, data);
472
+ }
473
+ "
474
+ @edit="
475
+ (val, data) => {
476
+ handleChange(item, val, data);
477
+ }
478
+ "
479
+ @clear="handleClear"
480
+ @btnClick="handleClick"
481
+ @dataChange="handleDataChange"
482
+ >
483
+ </es-data-table-form>
484
+ <es-data-table
485
+ v-else
486
+ :data="models[item.name]"
487
+ :full="item.height != undefined || item.height != null"
488
+ v-bind="
489
+ handleExclAttribute({
490
+ data: item,
491
+ attrs: ['value', 'events']
492
+ })
493
+ "
494
+ v-on="item.events"
495
+ :readonly="readonly ? readonly : item.readonly"
496
+ @blur="
497
+ (val, data) => {
498
+ handleBlur(item, val, data);
499
+ }
500
+ "
501
+ @focus="
502
+ (val, data) => {
503
+ handleFocus(item, val, data);
504
+ }
505
+ "
506
+ @edit="
507
+ (val, data) => {
508
+ handleChange(item, val, data);
509
+ }
510
+ "
511
+ @btnClick="handleClick"
512
+ @dataChange="handleDataChange"
513
+ >
514
+ </es-data-table>
515
+ </template>
516
+ <es-input
517
+ v-else
518
+ v-bind="
519
+ handleExclAttribute({ data: item, attrs: ['value'] })
520
+ "
521
+ v-model="models[item.name]"
522
+ :plain="item.plain || item.name === undefined"
523
+ :readonly="readonly ? readonly : item.readonly"
524
+ @blur="
525
+ event => {
526
+ handleBlur(item, event);
527
+ }
528
+ "
529
+ @focus="
530
+ event => {
531
+ handleFocus(item, event);
532
+ }
533
+ "
534
+ @input="
535
+ val => {
536
+ handleInput(item, val);
537
+ }
538
+ "
539
+ @clear="
540
+ () => {
541
+ handleClear(item);
542
+ }
543
+ "
544
+ @change="
545
+ val => {
546
+ handleChange(item, val);
547
+ }
548
+ "
549
+ ></es-input>
550
+ <template v-if="item.inline">
551
+ <template v-if="Array.isArray(item.inline)">
552
+ <div
553
+ class="es-form-inline"
554
+ v-for="(inline, k) in item.inline"
555
+ :key="k"
556
+ >
557
+ <div class="es-range" v-if="inline.range !== false">
558
+
559
+ </div>
560
+ <es-input-number
561
+ v-if="inline.type == 'number'"
562
+ v-bind="
563
+ handleExclAttribute({
564
+ data: inline,
565
+ attrs: ['value']
566
+ })
567
+ "
568
+ v-model="models[inline.name]"
569
+ :plain="inline.plain || inline.name === undefined"
570
+ :readonly="readonly ? readonly : inline.readonly"
571
+ @blur="
572
+ event => {
573
+ handleBlur(inline, event);
574
+ }
575
+ "
576
+ @focus="
577
+ event => {
578
+ handleFocus(inline, event);
579
+ }
580
+ "
581
+ @change="
582
+ val => {
583
+ handleChange(inline, val);
584
+ }
585
+ "
586
+ ></es-input-number>
587
+ <es-select
588
+ v-else-if="inline.type == 'select'"
589
+ v-bind="
590
+ handleExclAttribute({
591
+ data: inline,
592
+ attrs: ['value']
593
+ })
594
+ "
595
+ v-model="models[inline.name]"
596
+ :plain="inline.plain || inline.name === undefined"
597
+ :readonly="readonly ? readonly : inline.readonly"
598
+ @blur="
599
+ event => {
600
+ handleBlur(inline, event);
601
+ }
602
+ "
603
+ @focus="
604
+ event => {
605
+ handleFocus(inline, event);
606
+ }
607
+ "
608
+ @change="
609
+ val => {
610
+ handleChange(inline, val);
611
+ }
612
+ "
613
+ ></es-select>
614
+ <es-cascader
615
+ v-else-if="inline.type == 'cascader'"
616
+ v-bind="
617
+ handleExclAttribute({
618
+ data: inline,
619
+ attrs: ['value']
620
+ })
621
+ "
622
+ v-model="models[inline.name]"
623
+ :plain="inline.plain || inline.name === undefined"
624
+ :readonly="readonly ? readonly : inline.readonly"
625
+ @blur="
626
+ event => {
627
+ handleBlur(inline, event);
628
+ }
629
+ "
630
+ @focus="
631
+ event => {
632
+ handleFocus(inline, event);
633
+ }
634
+ "
635
+ @change="
636
+ val => {
637
+ handleChange(inline, val);
638
+ }
639
+ "
640
+ >
641
+ </es-cascader>
642
+ <es-date-picker
643
+ v-else-if="
644
+ inline.date ||
645
+ inline.type == 'date' ||
646
+ inline.type == 'year' ||
647
+ inline.type == 'month' ||
648
+ inline.type == 'date' ||
649
+ inline.type == 'dates' ||
650
+ inline.type == 'week' ||
651
+ inline.type == 'datetime' ||
652
+ inline.type == 'datetimerange' ||
653
+ inline.type == 'daterange' ||
654
+ inline.type == 'monthrange' ||
655
+ inline.type == 'quarter' ||
656
+ inline.type == 'halfyear'
657
+ "
658
+ v-bind="
659
+ handleExclAttribute({
660
+ data: inline,
661
+ attrs: ['value']
662
+ })
663
+ "
664
+ v-model="models[inline.name]"
665
+ :plain="inline.plain || inline.name === undefined"
666
+ :readonly="readonly ? readonly : inline.readonly"
667
+ @blur="
668
+ event => {
669
+ handleBlur(inline, event);
670
+ }
671
+ "
672
+ @focus="
673
+ event => {
674
+ handleFocus(inline, event);
675
+ }
676
+ "
677
+ @change="
678
+ val => {
679
+ handleChange(inline, val);
680
+ }
681
+ "
682
+ ></es-date-picker>
683
+ <template
684
+ v-else-if="
685
+ inline.type == 'image' || inline.type == 'img'
686
+ "
687
+ >
688
+ <img
689
+ v-if="inline.url || inline.src"
690
+ v-bind="
691
+ handleExclAttribute({
692
+ data: inline,
693
+ attrs: ['value']
694
+ })
695
+ "
696
+ height="100%"
697
+ :src="inline.url || inline.src"
698
+ @click="inline.event"
699
+ />
700
+ </template>
701
+ <es-input
702
+ v-else
703
+ v-bind="
704
+ handleExclAttribute({
705
+ data: inline,
706
+ attrs: ['value']
707
+ })
708
+ "
709
+ v-model="models[inline.name]"
710
+ :plain="inline.plain || inline.name === undefined"
711
+ :readonly="readonly ? readonly : inline.readonly"
712
+ @blur="
713
+ event => {
714
+ handleBlur(inline, event);
715
+ }
716
+ "
717
+ @focus="
718
+ event => {
719
+ handleFocus(inline, event);
720
+ }
721
+ "
722
+ @input="
723
+ val => {
724
+ handleInput(inline, val);
725
+ }
726
+ "
727
+ @clear="handleClear(inline)"
728
+ @change="
729
+ val => {
730
+ handleChange(inline, val);
731
+ }
732
+ "
733
+ ></es-input>
734
+ </div>
735
+ </template>
736
+ <template v-else>
737
+ <div
738
+ class="es-range"
739
+ v-if="item.inline.range !== false"
740
+ >
741
+
742
+ </div>
743
+ <es-input-number
744
+ v-if="item.inline.type == 'number'"
745
+ v-bind="
746
+ handleExclAttribute({
747
+ data: item.inline,
748
+ attrs: ['value']
749
+ })
750
+ "
751
+ v-model="models[item.inline.name]"
752
+ :plain="
753
+ item.inline.plain || item.inline.name === undefined
754
+ "
755
+ :readonly="readonly ? readonly : item.inline.readonly"
756
+ @blur="
757
+ event => {
758
+ handleBlur(item.inline, event);
759
+ }
760
+ "
761
+ @focus="
762
+ event => {
763
+ handleFocus(item.inline, event);
764
+ }
765
+ "
766
+ @change="
767
+ val => {
768
+ handleChange(item.inline, val);
769
+ }
770
+ "
771
+ ></es-input-number>
772
+ <es-select
773
+ v-else-if="item.inline.type == 'select'"
774
+ v-bind="
775
+ handleExclAttribute({
776
+ data: item.inline,
777
+ attrs: ['value']
778
+ })
779
+ "
780
+ v-model="models[item.inline.name]"
781
+ :plain="
782
+ item.inline.plain || item.inline.name === undefined
783
+ "
784
+ :readonly="readonly ? readonly : item.inline.readonly"
785
+ @blur="
786
+ event => {
787
+ handleBlur(item.inline, event);
788
+ }
789
+ "
790
+ @focus="
791
+ event => {
792
+ handleFocus(item.inline, event);
793
+ }
794
+ "
795
+ @change="
796
+ val => {
797
+ handleChange(item.inline, val);
798
+ }
799
+ "
800
+ ></es-select>
801
+ <es-cascader
802
+ v-else-if="item.inline.type == 'cascader'"
803
+ v-bind="
804
+ handleExclAttribute({
805
+ data: item.inline,
806
+ attrs: ['value']
807
+ })
808
+ "
809
+ v-model="models[item.inline.name]"
810
+ :plain="
811
+ item.inline.plain || item.inline.name === undefined
812
+ "
813
+ :readonly="readonly ? readonly : item.inline.readonly"
814
+ @blur="
815
+ event => {
816
+ handleBlur(item.inline, event);
817
+ }
818
+ "
819
+ @focus="
820
+ event => {
821
+ handleFocus(item.inline, event);
822
+ }
823
+ "
824
+ @change="
825
+ val => {
826
+ handleChange(item.inline, val);
827
+ }
828
+ "
829
+ >
830
+ </es-cascader>
831
+ <es-date-picker
832
+ v-else-if="
833
+ item.inline.date ||
834
+ item.inline.type == 'date' ||
835
+ item.inline.type == 'year' ||
836
+ item.inline.type == 'month' ||
837
+ item.inline.type == 'date' ||
838
+ item.inline.type == 'dates' ||
839
+ item.inline.type == 'week' ||
840
+ item.inline.type == 'datetime' ||
841
+ item.inline.type == 'datetimerange' ||
842
+ item.inline.type == 'daterange' ||
843
+ item.inline.type == 'monthrange' ||
844
+ item.inline.type == 'quarter' ||
845
+ item.inline.type == 'halfyear'
846
+ "
847
+ v-bind="
848
+ handleExclAttribute({
849
+ data: item.inline,
850
+ attrs: ['value']
851
+ })
852
+ "
853
+ v-model="models[item.inline.name]"
854
+ :plain="
855
+ item.inline.plain || item.inline.name === undefined
856
+ "
857
+ :readonly="readonly ? readonly : item.inline.readonly"
858
+ @blur="
859
+ event => {
860
+ handleBlur(item.inline, event);
861
+ }
862
+ "
863
+ @focus="
864
+ event => {
865
+ handleFocus(item.inline, event);
866
+ }
867
+ "
868
+ @change="
869
+ val => {
870
+ handleChange(item.inline, val);
871
+ }
872
+ "
873
+ ></es-date-picker>
874
+ <template
875
+ v-else-if="
876
+ item.inline.type == 'image' ||
877
+ item.inline.type == 'img'
878
+ "
879
+ >
880
+ <img
881
+ v-if="item.inline.url || item.inline.src"
882
+ v-bind="
883
+ handleExclAttribute({
884
+ data: item.inline,
885
+ attrs: ['value']
886
+ })
887
+ "
888
+ height="100%"
889
+ :src="item.inline.url || item.inline.src"
890
+ @click="item.inline.event"
891
+ />
892
+ </template>
893
+ <es-input
894
+ v-else
895
+ v-bind="
896
+ handleExclAttribute({
897
+ data: item.inline,
898
+ attrs: ['value']
899
+ })
900
+ "
901
+ v-model="models[item.inline.name]"
902
+ :plain="
903
+ item.inline.plain || item.inline.name === undefined
904
+ "
905
+ :readonly="readonly ? readonly : item.inline.readonly"
906
+ @blur="
907
+ event => {
908
+ handleBlur(item.inline, event);
909
+ }
910
+ "
911
+ @focus="
912
+ event => {
913
+ handleFocus(item.inline, event);
914
+ }
915
+ "
916
+ @input="
917
+ val => {
918
+ handleInput(item.inline, val);
919
+ }
920
+ "
921
+ @clear="handleClear(item.inline)"
922
+ @change="
923
+ val => {
924
+ handleChange(item.inline, val);
925
+ }
926
+ "
927
+ ></es-input>
928
+ </template>
929
+ </template>
930
+ </el-form-item>
931
+ </template>
932
+ </template>
933
+ </el-collapse-item>
934
+ </el-scrollbar>
935
+ </el-collapse>
936
+ <div class="es-form-content" v-else>
937
+ <el-scrollbar
938
+ class="es-scrollbar"
939
+ :style="{ height: formHeight }"
940
+ ref="scrollbar"
941
+ >
942
+ <es-table-form
943
+ v-if="table"
944
+ ref="form"
945
+ :tableAfter="tableAfter"
946
+ v-bind="tableAttrs"
947
+ :thead="thead"
948
+ :contents="formContent"
949
+ :readonly="readonly"
950
+ :label-width="labelWidth"
951
+ :span="span"
952
+ :widths="widths"
953
+ :model.sync="models"
954
+ @click="handleClick"
955
+ @change="handleChange"
956
+ @dataChange="handleDataChange"
957
+ @focus="handleFocus"
958
+ @blur="handleBlur"
959
+ @clear="handleClear"
960
+ ></es-table-form>
961
+ <template v-else>
962
+ <template v-for="item in formContent">
963
+ <div
964
+ v-if="item.type === 'caption'"
965
+ class="es-form-item-caption"
966
+ :key="item.name"
967
+ >
968
+ {{ item.text }}
969
+ </div>
970
+ <el-form-item
971
+ v-else
972
+ ref="es-form-pane"
973
+ v-show="!item.hide"
974
+ :key="item.name"
975
+ :label-width="labelWidth"
976
+ :prop="item.name"
977
+ :rules="getRules(item)"
978
+ :style="style(item)"
979
+ :class="[
980
+ {
981
+ 'es-form-space-none': !space,
982
+ 'es-form-item-readonly': readonly,
983
+ 'es-form-item-table': item.type === 'table',
984
+ 'es-form-item-inline': item.inline,
985
+ 'es-form-item-onrow': item.row,
986
+ 'es-form-item-label-hide':
987
+ item.labelHide || item.showLabel === false
988
+ },
989
+ item.class,
990
+ itemClass[item.type]
991
+ ]"
992
+ :label-class="
993
+ [
994
+ {
995
+ 'required-after': after,
996
+ 'es-label-box': labelPosition !== 'top',
997
+ 'required-position':
998
+ !labelPosition || labelPosition === 'right'
999
+ },
1000
+ 'es-justify-' +
1001
+ (item.labelAlign
1002
+ ? align[item.labelAlign]
1003
+ : typeof item.label == 'object' && item.label.align
1004
+ ? align[item.label.align]
1005
+ : labelPosition
1006
+ ? labelPosition == 'top'
1007
+ ? 'start'
1008
+ : align[labelPosition]
1009
+ : 'end'),
1010
+ !Array.isArray(item.labelClass) ? item.labelClass : ''
1011
+ ].concat(
1012
+ Array.isArray(item.labelClass ? item.labelClass : '')
1013
+ )
1014
+ "
1015
+ >
1016
+ <es-label
1017
+ slot="label"
1018
+ v-if="
1019
+ item.showLabel !== false &&
1020
+ item.type !== 'table' &&
1021
+ showLabel
1022
+ "
1023
+ :contents="item.label"
1024
+ :plain="item.plain || item.name === undefined"
1025
+ ></es-label>
1026
+ <es-input-number
1027
+ v-if="item.type == 'number'"
1028
+ v-bind="
1029
+ handleExclAttribute({ data: item, attrs: ['value'] })
1030
+ "
1031
+ v-model="models[item.name]"
1032
+ :plain="item.plain || item.name === undefined"
1033
+ :readonly="readonly ? readonly : item.readonly"
1034
+ @blur="
1035
+ event => {
1036
+ handleBlur(item, event);
1037
+ }
1038
+ "
1039
+ @focus="
1040
+ event => {
1041
+ handleFocus(item, event);
1042
+ }
1043
+ "
1044
+ @change="
1045
+ val => {
1046
+ handleChange(item, val);
1047
+ }
1048
+ "
1049
+ ></es-input-number>
1050
+ <es-radio-group
1051
+ v-else-if="item.type == 'radio'"
1052
+ v-bind="
1053
+ handleExclAttribute({ data: item, attrs: ['value'] })
1054
+ "
1055
+ v-model="models[item.name]"
1056
+ :plain="item.plain || item.name === undefined"
1057
+ :readonly="readonly ? readonly : item.readonly"
1058
+ @change="
1059
+ val => {
1060
+ handleChange(item, val);
1061
+ }
1062
+ "
1063
+ ></es-radio-group>
1064
+ <es-checkbox-group
1065
+ v-else-if="item.type == 'checkbox'"
1066
+ v-bind="
1067
+ handleExclAttribute({ data: item, attrs: ['value'] })
1068
+ "
1069
+ v-model="models[item.name]"
1070
+ :plain="item.plain || item.name === undefined"
1071
+ :readonly="readonly ? readonly : item.readonly"
1072
+ @change="
1073
+ val => {
1074
+ handleChange(item, val);
1075
+ }
1076
+ "
1077
+ ></es-checkbox-group>
1078
+ <es-select
1079
+ v-else-if="item.type == 'select'"
1080
+ v-bind="
1081
+ handleExclAttribute({ data: item, attrs: ['value'] })
1082
+ "
1083
+ v-model="models[item.name]"
1084
+ :plain="item.plain || item.name === undefined"
1085
+ :readonly="readonly ? readonly : item.readonly"
1086
+ @blur="
1087
+ event => {
1088
+ handleBlur(item, event);
1089
+ }
1090
+ "
1091
+ @focus="
1092
+ event => {
1093
+ handleFocus(item, event);
1094
+ }
1095
+ "
1096
+ @change="
1097
+ val => {
1098
+ handleChange(item, val);
1099
+ }
1100
+ "
1101
+ ></es-select>
1102
+ <es-cascader
1103
+ v-else-if="item.type == 'cascader'"
1104
+ v-bind="
1105
+ handleExclAttribute({ data: item, attrs: ['value'] })
1106
+ "
1107
+ v-model="models[item.name]"
1108
+ :plain="item.plain || item.name === undefined"
1109
+ :readonly="readonly ? readonly : item.readonly"
1110
+ @blur="
1111
+ event => {
1112
+ handleBlur(item, event);
1113
+ }
1114
+ "
1115
+ @focus="
1116
+ event => {
1117
+ handleFocus(item, event);
1118
+ }
1119
+ "
1120
+ @change="
1121
+ val => {
1122
+ handleChange(item, val);
1123
+ }
1124
+ "
1125
+ >
1126
+ </es-cascader>
1127
+ <es-select-ganged
1128
+ v-else-if="
1129
+ item.type == 'ganged' ||
1130
+ (item.type == 'select' && item.ganged)
1131
+ "
1132
+ v-bind="
1133
+ handleExclAttribute({ data: item, attrs: ['value'] })
1134
+ "
1135
+ v-model="models[item.name]"
1136
+ :plain="item.plain || item.name === undefined"
1137
+ :readonly="readonly ? readonly : item.readonly"
1138
+ @change="
1139
+ val => {
1140
+ handleChange(item, val);
1141
+ }
1142
+ "
1143
+ ></es-select-ganged>
1144
+ <es-switch
1145
+ v-else-if="item.type == 'switch'"
1146
+ v-bind="
1147
+ handleExclAttribute({ data: item, attrs: ['value'] })
1148
+ "
1149
+ v-model="models[item.name]"
1150
+ :plain="item.plain || item.name === undefined"
1151
+ :readonly="readonly ? readonly : item.readonly"
1152
+ @change="
1153
+ val => {
1154
+ handleChange(item, val);
1155
+ }
1156
+ "
1157
+ ></es-switch>
1158
+ <es-date-picker
1159
+ v-else-if="
1160
+ item.date ||
1161
+ item.type == 'date' ||
1162
+ item.type == 'year' ||
1163
+ item.type == 'month' ||
1164
+ item.type == 'date' ||
1165
+ item.type == 'dates' ||
1166
+ item.type == 'week' ||
1167
+ item.type == 'datetime' ||
1168
+ item.type == 'datetimerange' ||
1169
+ item.type == 'daterange' ||
1170
+ item.type == 'monthrange' ||
1171
+ item.type == 'quarter' ||
1172
+ item.type == 'halfyear'
1173
+ "
1174
+ v-bind="
1175
+ handleExclAttribute({ data: item, attrs: ['value'] })
1176
+ "
1177
+ v-model="models[item.name]"
1178
+ :plain="item.plain || item.name === undefined"
1179
+ :readonly="readonly ? readonly : item.readonly"
1180
+ @blur="
1181
+ event => {
1182
+ handleBlur(item, event);
1183
+ }
1184
+ "
1185
+ @focus="
1186
+ event => {
1187
+ handleFocus(item, event);
1188
+ }
1189
+ "
1190
+ @change="
1191
+ val => {
1192
+ handleChange(item, val);
1193
+ }
1194
+ "
1195
+ ></es-date-picker>
1196
+ <es-upload
1197
+ v-else-if="
1198
+ item.type == 'attachment' || item.type == 'upload'
1199
+ "
1200
+ v-bind="
1201
+ handleExclAttribute({
1202
+ data: item,
1203
+ attrs: ['value', 'ownId']
1204
+ })
1205
+ "
1206
+ :ownId="item.ownId || models.id"
1207
+ btn-size="medium"
1208
+ v-model="models[item.name]"
1209
+ :readonly="readonly ? readonly : item.readonly"
1210
+ :rules="item.rules"
1211
+ @change="
1212
+ val => {
1213
+ handleChange(item, val);
1214
+ }
1215
+ "
1216
+ ></es-upload>
1217
+ <es-selector
1218
+ v-bind="
1219
+ handleExclAttribute({ data: item, attrs: ['value'] })
1220
+ "
1221
+ v-model="models[item.name]"
1222
+ v-else-if="item.type === 'selector'"
1223
+ :readonly="readonly ? readonly : item.readonly"
1224
+ :plain="item.plain || item.name === undefined"
1225
+ @change="
1226
+ val => {
1227
+ handleChange(item, val);
1228
+ }
1229
+ "
1230
+ ></es-selector>
1231
+ <template v-else-if="item.type === 'table'">
1232
+ <es-data-table-form
1233
+ v-if="item.lazy"
1234
+ :data="models[item.name]"
1235
+ :full="item.height != undefined || item.height != null"
1236
+ v-bind="
1237
+ handleExclAttribute({ data: item, attrs: ['value'] })
1238
+ "
1239
+ :readonly="readonly ? readonly : item.readonly"
1240
+ @blur="
1241
+ (val, data) => {
1242
+ handleBlur(item, val, data);
1243
+ }
1244
+ "
1245
+ @focus="
1246
+ (val, data) => {
1247
+ handleFocus(item, val, data);
1248
+ }
1249
+ "
1250
+ @edit="
1251
+ (val, data) => {
1252
+ handleChange(item, val, data);
1253
+ }
1254
+ "
1255
+ @clear="handleClear"
1256
+ @btnClick="handleClick"
1257
+ @dataChange="handleDataChange"
1258
+ >
1259
+ </es-data-table-form>
1260
+ <es-data-table
1261
+ v-else
1262
+ :data="models[item.name]"
1263
+ :full="item.height != undefined || item.height != null"
1264
+ v-bind="
1265
+ handleExclAttribute({
1266
+ data: item,
1267
+ attrs: ['value', 'events']
1268
+ })
1269
+ "
1270
+ v-on="item.events"
1271
+ :readonly="readonly ? readonly : item.readonly"
1272
+ @blur="
1273
+ (val, data) => {
1274
+ handleBlur(item, val, data);
1275
+ }
1276
+ "
1277
+ @focus="
1278
+ (val, data) => {
1279
+ handleFocus(item, val, data);
1280
+ }
1281
+ "
1282
+ @edit="
1283
+ (val, data) => {
1284
+ handleChange(item, val, data);
1285
+ }
1286
+ "
1287
+ @btnClick="handleClick"
1288
+ @dataChange="handleDataChange"
1289
+ >
1290
+ </es-data-table>
1291
+ </template>
1292
+ <es-input
1293
+ v-else
1294
+ v-bind="
1295
+ handleExclAttribute({ data: item, attrs: ['value'] })
1296
+ "
1297
+ v-model="models[item.name]"
1298
+ :plain="item.plain || item.name === undefined"
1299
+ :readonly="readonly ? readonly : item.readonly"
1300
+ @blur="
1301
+ event => {
1302
+ handleBlur(item.name, event);
1303
+ }
1304
+ "
1305
+ @focus="
1306
+ event => {
1307
+ handleFocus(item.name, event);
1308
+ }
1309
+ "
1310
+ @input="
1311
+ val => {
1312
+ handleInput(item.name, val);
1313
+ }
1314
+ "
1315
+ @clear="handleClear(item.name)"
1316
+ @change="
1317
+ val => {
1318
+ handleChange(item, val);
1319
+ }
1320
+ "
1321
+ ></es-input>
1322
+ <template v-if="item.inline">
1323
+ <template v-if="Array.isArray(item.inline)">
1324
+ <div
1325
+ class="es-form-inline"
1326
+ v-for="(inline, k) in item.inline"
1327
+ :key="k"
1328
+ >
1329
+ <div class="es-range" v-if="inline.range !== false">
1330
+
1331
+ </div>
1332
+ <es-input-number
1333
+ v-if="inline.type == 'number'"
1334
+ v-bind="
1335
+ handleExclAttribute({
1336
+ data: inline,
1337
+ attrs: ['value']
1338
+ })
1339
+ "
1340
+ v-model="models[inline.name]"
1341
+ :plain="inline.plain || inline.name === undefined"
1342
+ :readonly="readonly ? readonly : inline.readonly"
1343
+ @blur="
1344
+ event => {
1345
+ handleBlur(inline, event);
1346
+ }
1347
+ "
1348
+ @focus="
1349
+ event => {
1350
+ handleFocus(inline, event);
1351
+ }
1352
+ "
1353
+ @change="
1354
+ val => {
1355
+ handleChange(inline, val);
1356
+ }
1357
+ "
1358
+ ></es-input-number>
1359
+ <es-select
1360
+ v-else-if="inline.type == 'select'"
1361
+ v-bind="
1362
+ handleExclAttribute({
1363
+ data: inline,
1364
+ attrs: ['value']
1365
+ })
1366
+ "
1367
+ v-model="models[inline.name]"
1368
+ :plain="inline.plain || inline.name === undefined"
1369
+ :readonly="readonly ? readonly : inline.readonly"
1370
+ @blur="
1371
+ event => {
1372
+ handleBlur(inline, event);
1373
+ }
1374
+ "
1375
+ @focus="
1376
+ event => {
1377
+ handleFocus(inline, event);
1378
+ }
1379
+ "
1380
+ @change="
1381
+ val => {
1382
+ handleChange(inline, val);
1383
+ }
1384
+ "
1385
+ ></es-select>
1386
+ <es-cascader
1387
+ v-else-if="inline.type == 'cascader'"
1388
+ v-bind="
1389
+ handleExclAttribute({
1390
+ data: inline,
1391
+ attrs: ['value']
1392
+ })
1393
+ "
1394
+ v-model="models[inline.name]"
1395
+ :plain="inline.plain || inline.name === undefined"
1396
+ :readonly="readonly ? readonly : inline.readonly"
1397
+ @blur="
1398
+ event => {
1399
+ handleBlur(inline, event);
1400
+ }
1401
+ "
1402
+ @focus="
1403
+ event => {
1404
+ handleFocus(inline, event);
1405
+ }
1406
+ "
1407
+ @change="
1408
+ val => {
1409
+ handleChange(inline, val);
1410
+ }
1411
+ "
1412
+ >
1413
+ </es-cascader>
1414
+ <es-date-picker
1415
+ v-else-if="
1416
+ inline.date ||
1417
+ inline.type == 'date' ||
1418
+ inline.type == 'year' ||
1419
+ inline.type == 'month' ||
1420
+ inline.type == 'date' ||
1421
+ inline.type == 'dates' ||
1422
+ inline.type == 'week' ||
1423
+ inline.type == 'datetime' ||
1424
+ inline.type == 'datetimerange' ||
1425
+ inline.type == 'daterange' ||
1426
+ inline.type == 'monthrange' ||
1427
+ inline.type == 'quarter' ||
1428
+ inline.type == 'halfyear'
1429
+ "
1430
+ v-bind="
1431
+ handleExclAttribute({
1432
+ data: inline,
1433
+ attrs: ['value']
1434
+ })
1435
+ "
1436
+ v-model="models[inline.name]"
1437
+ :plain="inline.plain || inline.name === undefined"
1438
+ :readonly="readonly ? readonly : inline.readonly"
1439
+ @blur="
1440
+ event => {
1441
+ handleBlur(inline, event);
1442
+ }
1443
+ "
1444
+ @focus="
1445
+ event => {
1446
+ handleFocus(inline, event);
1447
+ }
1448
+ "
1449
+ @change="
1450
+ val => {
1451
+ handleChange(inline, val);
1452
+ }
1453
+ "
1454
+ ></es-date-picker>
1455
+ <template
1456
+ v-else-if="
1457
+ inline.type == 'image' || inline.type == 'img'
1458
+ "
1459
+ >
1460
+ <img
1461
+ v-if="inline.url || inline.src"
1462
+ v-bind="
1463
+ handleExclAttribute({
1464
+ data: inline,
1465
+ attrs: ['value']
1466
+ })
1467
+ "
1468
+ height="100%"
1469
+ :src="inline.url || inline.src"
1470
+ @click="inline.event"
1471
+ />
1472
+ </template>
1473
+ <es-input
1474
+ v-else
1475
+ v-bind="
1476
+ handleExclAttribute({
1477
+ data: inline,
1478
+ attrs: ['value']
1479
+ })
1480
+ "
1481
+ v-model="models[inline.name]"
1482
+ :plain="inline.plain || inline.name === undefined"
1483
+ :readonly="readonly ? readonly : inline.readonly"
1484
+ @blur="
1485
+ event => {
1486
+ handleBlur(inline, event);
1487
+ }
1488
+ "
1489
+ @focus="
1490
+ event => {
1491
+ handleFocus(inline, event);
1492
+ }
1493
+ "
1494
+ @input="
1495
+ val => {
1496
+ handleInput(inline, val);
1497
+ }
1498
+ "
1499
+ @clear="handleClear(inline)"
1500
+ @change="
1501
+ val => {
1502
+ handleChange(inline, val);
1503
+ }
1504
+ "
1505
+ ></es-input>
1506
+ </div>
1507
+ </template>
1508
+ <template v-else>
1509
+ <div class="es-range" v-if="item.inline.range !== false">
1510
+
1511
+ </div>
1512
+ <es-input-number
1513
+ v-if="item.inline.type == 'number'"
1514
+ v-bind="
1515
+ handleExclAttribute({
1516
+ data: item.inline,
1517
+ attrs: ['value']
1518
+ })
1519
+ "
1520
+ v-model="models[item.inline.name]"
1521
+ :plain="
1522
+ item.inline.plain || item.inline.name === undefined
1523
+ "
1524
+ :readonly="readonly ? readonly : item.inline.readonly"
1525
+ @blur="
1526
+ event => {
1527
+ handleBlur(item.inline, event);
1528
+ }
1529
+ "
1530
+ @focus="
1531
+ event => {
1532
+ handleFocus(item.inline, event);
1533
+ }
1534
+ "
1535
+ @change="
1536
+ val => {
1537
+ handleChange(item.inline, val);
1538
+ }
1539
+ "
1540
+ ></es-input-number>
1541
+ <es-select
1542
+ v-else-if="item.inline.type == 'select'"
1543
+ v-bind="
1544
+ handleExclAttribute({
1545
+ data: item.inline,
1546
+ attrs: ['value']
1547
+ })
1548
+ "
1549
+ v-model="models[item.inline.name]"
1550
+ :plain="
1551
+ item.inline.plain || item.inline.name === undefined
1552
+ "
1553
+ :readonly="readonly ? readonly : item.inline.readonly"
1554
+ @blur="
1555
+ event => {
1556
+ handleBlur(item.inline, event);
1557
+ }
1558
+ "
1559
+ @focus="
1560
+ event => {
1561
+ handleFocus(item.inline, event);
1562
+ }
1563
+ "
1564
+ @change="
1565
+ val => {
1566
+ handleChange(item.inline, val);
1567
+ }
1568
+ "
1569
+ ></es-select>
1570
+ <es-cascader
1571
+ v-else-if="item.inline.type == 'cascader'"
1572
+ v-bind="
1573
+ handleExclAttribute({
1574
+ data: item.inline,
1575
+ attrs: ['value']
1576
+ })
1577
+ "
1578
+ v-model="models[item.inline.name]"
1579
+ :plain="
1580
+ item.inline.plain || item.inline.name === undefined
1581
+ "
1582
+ :readonly="readonly ? readonly : item.inline.readonly"
1583
+ @blur="
1584
+ event => {
1585
+ handleBlur(item.inline, event);
1586
+ }
1587
+ "
1588
+ @focus="
1589
+ event => {
1590
+ handleFocus(item.inline, event);
1591
+ }
1592
+ "
1593
+ @change="
1594
+ val => {
1595
+ handleChange(item.inline, val);
1596
+ }
1597
+ "
1598
+ >
1599
+ </es-cascader>
1600
+ <es-date-picker
1601
+ v-else-if="
1602
+ item.inline.date ||
1603
+ item.inline.type == 'date' ||
1604
+ item.inline.type == 'year' ||
1605
+ item.inline.type == 'month' ||
1606
+ item.inline.type == 'date' ||
1607
+ item.inline.type == 'dates' ||
1608
+ item.inline.type == 'week' ||
1609
+ item.inline.type == 'datetime' ||
1610
+ item.inline.type == 'datetimerange' ||
1611
+ item.inline.type == 'daterange' ||
1612
+ item.inline.type == 'monthrange' ||
1613
+ item.inline.type == 'quarter' ||
1614
+ item.inline.type == 'halfyear'
1615
+ "
1616
+ v-bind="
1617
+ handleExclAttribute({
1618
+ data: item.inline,
1619
+ attrs: ['value']
1620
+ })
1621
+ "
1622
+ v-model="models[item.inline.name]"
1623
+ :plain="
1624
+ item.inline.plain || item.inline.name === undefined
1625
+ "
1626
+ :readonly="readonly ? readonly : item.inline.readonly"
1627
+ @blur="
1628
+ event => {
1629
+ handleBlur(item.inline, event);
1630
+ }
1631
+ "
1632
+ @focus="
1633
+ event => {
1634
+ handleFocus(item.inline, event);
1635
+ }
1636
+ "
1637
+ @change="
1638
+ val => {
1639
+ handleChange(item.inline, val);
1640
+ }
1641
+ "
1642
+ ></es-date-picker>
1643
+ <es-input
1644
+ v-else
1645
+ v-bind="
1646
+ handleExclAttribute({
1647
+ data: item.inline,
1648
+ attrs: ['value']
1649
+ })
1650
+ "
1651
+ v-model="models[item.inline.name]"
1652
+ :plain="
1653
+ item.inline.plain || item.inline.name === undefined
1654
+ "
1655
+ :readonly="readonly ? readonly : item.inline.readonly"
1656
+ @blur="
1657
+ event => {
1658
+ handleBlur(item.inline, event);
1659
+ }
1660
+ "
1661
+ @focus="
1662
+ event => {
1663
+ handleFocus(item.inline, event);
1664
+ }
1665
+ "
1666
+ @input="
1667
+ val => {
1668
+ handleInput(item.inline, val);
1669
+ }
1670
+ "
1671
+ @clear="handleClear(item.inline)"
1672
+ @change="
1673
+ val => {
1674
+ handleChange(item.inline, val);
1675
+ }
1676
+ "
1677
+ ></es-input>
1678
+ </template>
1679
+ </template>
1680
+ </el-form-item>
1681
+ </template>
1682
+ </template>
1683
+ <el-form-item v-show="labelWidth" v-if="inline">
1684
+ <el-button
1685
+ v-for="(item, index) in buttons"
1686
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
1687
+ size="medium"
1688
+ :key="index"
1689
+ v-show="!item.hide"
1690
+ @click="handleClick(item)"
1691
+ >{{ item.label || item.text || item.name }}</el-button
1692
+ >
1693
+ </el-form-item>
1694
+ </el-scrollbar>
1695
+ </div>
1696
+ </template>
1697
+ <template v-else>
1698
+ <el-collapse
1699
+ v-if="isCollapse"
1700
+ v-model="activeNames"
1701
+ class="es-collapse"
1702
+ :accordion="accordion"
1703
+ @change="handleCollapse"
1704
+ >
1705
+ <el-collapse-item
1706
+ v-for="(items, indexs) in formContent"
1707
+ class="es-collapse-item"
1708
+ :class="{ 'es-collapse-readonly': accordion ? false : !collapse }"
1709
+ :name="items.name || String(indexs)"
1710
+ :key="indexs"
1711
+ :readonly="accordion ? false : !collapse"
1712
+ >
1713
+ <div class="es-collapse-title" slot="title">
1714
+ <template v-if="typeof items.title === 'string'">{{
1715
+ items.title
1716
+ }}</template>
1717
+ <template v-else>
1718
+ <template v-for="(item, index) in items.title">
1719
+ <template v-if="typeof item === 'string'">
1720
+ <span :key="index">{{ item }}</span>
1721
+ </template>
1722
+ <div v-else :key="index" class="es-collapse-title-handler">
1723
+ <es-label
1724
+ :contents="item.label"
1725
+ v-if="item.label"
1726
+ ></es-label>
1727
+ <span v-if="item.text || item.type === 'text'">{{
1728
+ item.text || item.contents
1729
+ }}</span>
1730
+ <i
1731
+ v-else-if="item.type === 'icon' || item.icon"
1732
+ :class="item.class || item.icon"
1733
+ v-html="item.contents"
1734
+ @click.stop="
1735
+ () => {
1736
+ item.event && item.event(items, indexs);
1737
+ item.click && item.click(items, indexs);
1738
+ }
1739
+ "
1740
+ ></i>
1741
+ <es-radio-group
1742
+ v-else-if="item.type == 'radio'"
1743
+ v-bind="
1744
+ handleExclAttribute({ data: item, attrs: ['value'] })
1745
+ "
1746
+ v-model="models[item.name]"
1747
+ size="medium"
1748
+ :plain="item.plain || item.name === undefined"
1749
+ :readonly="readonly ? readonly : item.readonly"
1750
+ @change="
1751
+ val => {
1752
+ handleChange(item, val, items);
1753
+ }
1754
+ "
1755
+ ></es-radio-group>
1756
+ <es-checkbox-group
1757
+ v-else-if="item.type == 'checkbox'"
1758
+ v-bind="
1759
+ handleExclAttribute({ data: item, attrs: ['value'] })
1760
+ "
1761
+ v-model="models[item.name]"
1762
+ size="medium"
1763
+ :plain="item.plain || item.name === undefined"
1764
+ :readonly="readonly ? readonly : item.readonly"
1765
+ @change="
1766
+ val => {
1767
+ handleChange(item, val, items);
1768
+ }
1769
+ "
1770
+ ></es-checkbox-group>
1771
+ <es-select
1772
+ v-else-if="item.type == 'select'"
1773
+ v-bind="
1774
+ handleExclAttribute({ data: item, attrs: ['value'] })
1775
+ "
1776
+ v-model="models[item.name]"
1777
+ size="medium"
1778
+ :plain="item.plain || item.name === undefined"
1779
+ :readonly="readonly ? readonly : item.readonly"
1780
+ @change="
1781
+ val => {
1782
+ handleChange(item, val, items);
1783
+ }
1784
+ "
1785
+ ></es-select>
1786
+ </div>
1787
+ </template>
1788
+ </template>
1789
+ </div>
1790
+ <es-table-form
1791
+ v-if="table || items.table"
1792
+ ref="form"
1793
+ :label-width="items.labelWidth || labelWidth"
1794
+ :span="items.span || span"
1795
+ :tableAfter="tableAfter"
1796
+ v-bind="items"
1797
+ :thead="thead"
1798
+ :model.sync="models"
1799
+ :readonly="readonly"
1800
+ :contents="items.contents"
1801
+ :widths="widths"
1802
+ @click="handleClick"
1803
+ @change="handleChange"
1804
+ @dataChange="handleDataChange"
1805
+ @focus="handleFocus"
1806
+ @blur="handleBlur"
1807
+ @clear="handleClear"
1808
+ ></es-table-form>
1809
+ <template v-else>
1810
+ <template v-for="item in items.contents">
1811
+ <div
1812
+ v-if="item.type === 'caption'"
1813
+ class="es-form-item-caption"
1814
+ :key="item.name"
1815
+ >
1816
+ {{ item.text }}
1817
+ </div>
1818
+ <el-form-item
1819
+ v-else
1820
+ ref="es-form-pane"
1821
+ v-show="!item.hide"
1822
+ :key="item.name"
1823
+ :label-width="labelWidth"
1824
+ :prop="item.name"
1825
+ :rules="getRules(item)"
1826
+ :style="style(item)"
1827
+ :class="[
1828
+ {
1829
+ 'es-form-pane':
1830
+ !inline &&
1831
+ item.type !== 'submit' &&
1832
+ item.type !== 'button',
1833
+ 'es-form-space-none': !space,
1834
+ 'es-form-item-readonly': readonly,
1835
+ 'es-form-item-table': item.type === 'table',
1836
+ 'es-form-item-inline': item.inline,
1837
+ 'es-form-item-onrow': item.row,
1838
+ 'es-form-item-label-hide':
1839
+ item.labelHide || item.showLabel === false
1840
+ },
1841
+ item.class,
1842
+ itemClass[item.type]
1843
+ ]"
1844
+ :label-class="
1845
+ [
1846
+ {
1847
+ 'required-after': after,
1848
+ 'es-label-box': labelPosition !== 'top',
1849
+ 'required-position':
1850
+ !labelPosition || labelPosition === 'right'
1851
+ },
1852
+ 'es-justify-' +
1853
+ (item.labelAlign
1854
+ ? align[item.labelAlign]
1855
+ : typeof item.label == 'object' && item.label.align
1856
+ ? align[item.label.align]
1857
+ : labelPosition
1858
+ ? labelPosition == 'top'
1859
+ ? 'left'
1860
+ : align[labelPosition]
1861
+ : 'end'),
1862
+ !Array.isArray(item.labelClass) ? item.labelClass : ''
1863
+ ].concat(
1864
+ Array.isArray(item.labelClass ? item.labelClass : '')
1865
+ )
1866
+ "
1867
+ >
1868
+ <es-label
1869
+ slot="label"
1870
+ v-if="
1871
+ item.showLabel !== false &&
1872
+ item.type !== 'table' &&
1873
+ showLabel
1874
+ "
1875
+ :contents="item.label"
1876
+ :plain="item.plain || item.name === undefined"
1877
+ ></es-label>
1878
+ <es-input-number
1879
+ v-if="item.type == 'number'"
1880
+ v-bind="
1881
+ handleExclAttribute({ data: item, attrs: ['value'] })
1882
+ "
1883
+ v-model="models[item.name]"
1884
+ :plain="item.plain || item.name === undefined"
1885
+ :readonly="readonly ? readonly : item.readonly"
1886
+ @blur="
1887
+ event => {
1888
+ handleBlur(item, event);
1889
+ }
1890
+ "
1891
+ @focus="
1892
+ event => {
1893
+ handleFocus(item, event);
1894
+ }
1895
+ "
1896
+ @change="
1897
+ val => {
1898
+ handleChange(item, val);
1899
+ }
1900
+ "
1901
+ ></es-input-number>
1902
+ <es-radio-group
1903
+ v-else-if="item.type == 'radio'"
1904
+ v-bind="
1905
+ handleExclAttribute({ data: item, attrs: ['value'] })
1906
+ "
1907
+ v-model="models[item.name]"
1908
+ :plain="item.plain || item.name === undefined"
1909
+ :readonly="readonly ? readonly : item.readonly"
1910
+ @change="
1911
+ val => {
1912
+ handleChange(item, val);
1913
+ }
1914
+ "
1915
+ ></es-radio-group>
1916
+ <es-checkbox-group
1917
+ v-else-if="item.type == 'checkbox'"
1918
+ v-bind="
1919
+ handleExclAttribute({ data: item, attrs: ['value'] })
1920
+ "
1921
+ v-model="models[item.name]"
1922
+ :plain="item.plain || item.name === undefined"
1923
+ :readonly="readonly ? readonly : item.readonly"
1924
+ @change="
1925
+ val => {
1926
+ handleChange(item, val);
1927
+ }
1928
+ "
1929
+ ></es-checkbox-group>
1930
+ <es-select
1931
+ v-else-if="item.type == 'select'"
1932
+ v-bind="
1933
+ handleExclAttribute({ data: item, attrs: ['value'] })
1934
+ "
1935
+ v-model="models[item.name]"
1936
+ :plain="item.plain || item.name === undefined"
1937
+ :readonly="readonly ? readonly : item.readonly"
1938
+ @blur="
1939
+ event => {
1940
+ handleBlur(item, event);
1941
+ }
1942
+ "
1943
+ @focus="
1944
+ event => {
1945
+ handleFocus(item, event);
1946
+ }
1947
+ "
1948
+ @change="
1949
+ val => {
1950
+ handleChange(item, val);
1951
+ }
1952
+ "
1953
+ ></es-select>
1954
+ <es-cascader
1955
+ v-else-if="item.type == 'cascader'"
1956
+ v-bind="
1957
+ handleExclAttribute({ data: item, attrs: ['value'] })
1958
+ "
1959
+ v-model="models[item.name]"
1960
+ :plain="item.plain || item.name === undefined"
1961
+ :readonly="readonly ? readonly : item.readonly"
1962
+ @blur="
1963
+ event => {
1964
+ handleBlur(item, event);
1965
+ }
1966
+ "
1967
+ @focus="
1968
+ event => {
1969
+ handleFocus(item, event);
1970
+ }
1971
+ "
1972
+ @change="
1973
+ val => {
1974
+ handleChange(item, val);
1975
+ }
1976
+ "
1977
+ >
1978
+ </es-cascader>
1979
+ <es-select-ganged
1980
+ v-else-if="
1981
+ item.type == 'ganged' ||
1982
+ (item.type == 'select' && item.ganged)
1983
+ "
1984
+ v-bind="
1985
+ handleExclAttribute({ data: item, attrs: ['value'] })
1986
+ "
1987
+ v-model="models[item.name]"
1988
+ :plain="item.plain || item.name === undefined"
1989
+ :readonly="readonly ? readonly : item.readonly"
1990
+ @change="
1991
+ val => {
1992
+ handleChange(item, val);
1993
+ }
1994
+ "
1995
+ ></es-select-ganged>
1996
+ <es-switch
1997
+ v-else-if="item.type == 'switch'"
1998
+ v-bind="
1999
+ handleExclAttribute({ data: item, attrs: ['value'] })
2000
+ "
2001
+ v-model="models[item.name]"
2002
+ :plain="item.plain || item.name === undefined"
2003
+ :readonly="readonly ? readonly : item.readonly"
2004
+ @change="
2005
+ val => {
2006
+ handleChange(item, val);
2007
+ }
2008
+ "
2009
+ ></es-switch>
2010
+ <es-date-picker
2011
+ v-else-if="
2012
+ item.date ||
2013
+ item.type == 'date' ||
2014
+ item.type == 'year' ||
2015
+ item.type == 'month' ||
2016
+ item.type == 'date' ||
2017
+ item.type == 'dates' ||
2018
+ item.type == 'week' ||
2019
+ item.type == 'datetime' ||
2020
+ item.type == 'datetimerange' ||
2021
+ item.type == 'daterange' ||
2022
+ item.type == 'monthrange' ||
2023
+ item.type == 'quarter' ||
2024
+ item.type == 'halfyear'
2025
+ "
2026
+ v-bind="
2027
+ handleExclAttribute({ data: item, attrs: ['value'] })
2028
+ "
2029
+ v-model="models[item.name]"
2030
+ :plain="item.plain || item.name === undefined"
2031
+ :readonly="readonly ? readonly : item.readonly"
2032
+ @blur="
2033
+ event => {
2034
+ handleBlur(item, event);
2035
+ }
2036
+ "
2037
+ @focus="
2038
+ event => {
2039
+ handleFocus(item, event);
2040
+ }
2041
+ "
2042
+ @change="
2043
+ val => {
2044
+ handleChange(item, val);
2045
+ }
2046
+ "
2047
+ ></es-date-picker>
2048
+ <es-upload
2049
+ v-else-if="
2050
+ item.type == 'attachment' || item.type == 'upload'
2051
+ "
2052
+ v-bind="
2053
+ handleExclAttribute({
2054
+ data: item,
2055
+ attrs: ['value', 'ownId']
2056
+ })
2057
+ "
2058
+ :ownId="item.ownId || models.id"
2059
+ btn-size="medium"
2060
+ v-model="models[item.name]"
2061
+ :readonly="readonly ? readonly : item.readonly"
2062
+ :rules="item.rules"
2063
+ @change="
2064
+ val => {
2065
+ handleChange(item, val);
2066
+ }
2067
+ "
2068
+ ></es-upload>
2069
+ <es-selector
2070
+ v-bind="
2071
+ handleExclAttribute({ data: item, attrs: ['value'] })
2072
+ "
2073
+ v-model="models[item.name]"
2074
+ :readonly="readonly ? readonly : item.readonly"
2075
+ :plain="item.plain || item.name === undefined"
2076
+ v-else-if="item.type == 'selector'"
2077
+ ></es-selector>
2078
+ <template v-else-if="item.type === 'table'">
2079
+ <es-data-table-form
2080
+ v-if="item.lazy"
2081
+ :data="models[item.name]"
2082
+ :full="item.height != undefined || item.height != null"
2083
+ v-bind="
2084
+ handleExclAttribute({ data: item, attrs: ['value'] })
2085
+ "
2086
+ :readonly="readonly ? readonly : item.readonly"
2087
+ @blur="
2088
+ (val, data) => {
2089
+ handleBlur(item, val, data);
2090
+ }
2091
+ "
2092
+ @focus="
2093
+ (val, data) => {
2094
+ handleFocus(item, val, data);
2095
+ }
2096
+ "
2097
+ @edit="
2098
+ (val, data) => {
2099
+ handleChange(item, val, data);
2100
+ }
2101
+ "
2102
+ @clear="handleClear"
2103
+ @btnClick="handleClick"
2104
+ @dataChange="handleDataChange"
2105
+ >
2106
+ </es-data-table-form>
2107
+ <es-data-table
2108
+ v-else
2109
+ :data="models[item.name]"
2110
+ :full="item.height != undefined || item.height != null"
2111
+ v-bind="
2112
+ handleExclAttribute({
2113
+ data: item,
2114
+ attrs: ['value', 'events']
2115
+ })
2116
+ "
2117
+ v-on="item.events"
2118
+ :readonly="readonly ? readonly : item.readonly"
2119
+ @blur="
2120
+ (val, data) => {
2121
+ handleBlur(item, val, data);
2122
+ }
2123
+ "
2124
+ @focus="
2125
+ (val, data) => {
2126
+ handleFocus(item, val, data);
2127
+ }
2128
+ "
2129
+ @edit="
2130
+ (val, data) => {
2131
+ handleChange(item, val, data);
2132
+ }
2133
+ "
2134
+ @btnClick="handleClick"
2135
+ @dataChange="handleDataChange"
2136
+ >
2137
+ </es-data-table>
2138
+ </template>
2139
+ <es-input
2140
+ v-else
2141
+ v-bind="
2142
+ handleExclAttribute({ data: item, attrs: ['value'] })
2143
+ "
2144
+ v-model="models[item.name]"
2145
+ :plain="item.plain || item.name === undefined"
2146
+ :readonly="readonly ? readonly : item.readonly"
2147
+ @blur="
2148
+ event => {
2149
+ handleBlur(item, event);
2150
+ }
2151
+ "
2152
+ @focus="
2153
+ event => {
2154
+ handleFocus(item, event);
2155
+ }
2156
+ "
2157
+ @input="
2158
+ val => {
2159
+ handleInput(item, val);
2160
+ }
2161
+ "
2162
+ @clear="
2163
+ () => {
2164
+ handleClear(item);
2165
+ }
2166
+ "
2167
+ @change="
2168
+ val => {
2169
+ handleChange(item, val);
2170
+ }
2171
+ "
2172
+ ></es-input>
2173
+ <template v-if="item.inline">
2174
+ <template v-if="Array.isArray(item.inline)">
2175
+ <div
2176
+ class="es-form-inline"
2177
+ v-for="(inline, k) in item.inline"
2178
+ :key="k"
2179
+ >
2180
+ <div class="es-range" v-if="inline.range !== false">
2181
+
2182
+ </div>
2183
+ <es-input-number
2184
+ v-if="inline.type == 'number'"
2185
+ v-bind="
2186
+ handleExclAttribute({
2187
+ data: inline,
2188
+ attrs: ['value']
2189
+ })
2190
+ "
2191
+ v-model="models[inline.name]"
2192
+ :plain="inline.plain || inline.name === undefined"
2193
+ :readonly="readonly ? readonly : inline.readonly"
2194
+ @blur="
2195
+ event => {
2196
+ handleBlur(inline, event);
2197
+ }
2198
+ "
2199
+ @focus="
2200
+ event => {
2201
+ handleFocus(inline, event);
2202
+ }
2203
+ "
2204
+ @change="
2205
+ val => {
2206
+ handleChange(inline, val);
2207
+ }
2208
+ "
2209
+ ></es-input-number>
2210
+ <es-select
2211
+ v-else-if="inline.type == 'select'"
2212
+ v-bind="
2213
+ handleExclAttribute({
2214
+ data: inline,
2215
+ attrs: ['value']
2216
+ })
2217
+ "
2218
+ v-model="models[inline.name]"
2219
+ :plain="inline.plain || inline.name === undefined"
2220
+ :readonly="readonly ? readonly : inline.readonly"
2221
+ @blur="
2222
+ event => {
2223
+ handleBlur(inline, event);
2224
+ }
2225
+ "
2226
+ @focus="
2227
+ event => {
2228
+ handleFocus(inline, event);
2229
+ }
2230
+ "
2231
+ @change="
2232
+ val => {
2233
+ handleChange(inline, val);
2234
+ }
2235
+ "
2236
+ ></es-select>
2237
+ <es-cascader
2238
+ v-else-if="inline.type == 'cascader'"
2239
+ v-bind="
2240
+ handleExclAttribute({
2241
+ data: inline,
2242
+ attrs: ['value']
2243
+ })
2244
+ "
2245
+ v-model="models[inline.name]"
2246
+ :plain="inline.plain || inline.name === undefined"
2247
+ :readonly="readonly ? readonly : inline.readonly"
2248
+ @blur="
2249
+ event => {
2250
+ handleBlur(inline, event);
2251
+ }
2252
+ "
2253
+ @focus="
2254
+ event => {
2255
+ handleFocus(inline, event);
2256
+ }
2257
+ "
2258
+ @change="
2259
+ val => {
2260
+ handleChange(inline, val);
2261
+ }
2262
+ "
2263
+ >
2264
+ </es-cascader>
2265
+ <es-date-picker
2266
+ v-else-if="
2267
+ inline.date ||
2268
+ inline.type == 'date' ||
2269
+ inline.type == 'year' ||
2270
+ inline.type == 'month' ||
2271
+ inline.type == 'date' ||
2272
+ inline.type == 'dates' ||
2273
+ inline.type == 'week' ||
2274
+ inline.type == 'datetime' ||
2275
+ inline.type == 'datetimerange' ||
2276
+ inline.type == 'daterange' ||
2277
+ inline.type == 'monthrange' ||
2278
+ inline.type == 'quarter' ||
2279
+ inline.type == 'halfyear'
2280
+ "
2281
+ v-bind="
2282
+ handleExclAttribute({
2283
+ data: inline,
2284
+ attrs: ['value']
2285
+ })
2286
+ "
2287
+ v-model="models[inline.name]"
2288
+ :plain="inline.plain || inline.name === undefined"
2289
+ :readonly="readonly ? readonly : inline.readonly"
2290
+ @blur="
2291
+ event => {
2292
+ handleBlur(inline, event);
2293
+ }
2294
+ "
2295
+ @focus="
2296
+ event => {
2297
+ handleFocus(inline, event);
2298
+ }
2299
+ "
2300
+ @change="
2301
+ val => {
2302
+ handleChange(inline, val);
2303
+ }
2304
+ "
2305
+ ></es-date-picker>
2306
+ <template
2307
+ v-else-if="
2308
+ inline.type == 'image' || inline.type == 'img'
2309
+ "
2310
+ >
2311
+ <img
2312
+ v-if="inline.url || inline.src"
2313
+ v-bind="
2314
+ handleExclAttribute({
2315
+ data: inline,
2316
+ attrs: ['value']
2317
+ })
2318
+ "
2319
+ height="100%"
2320
+ :src="inline.url || inline.src"
2321
+ @click="inline.event"
2322
+ />
2323
+ </template>
2324
+ <es-input
2325
+ v-else
2326
+ v-bind="
2327
+ handleExclAttribute({
2328
+ data: inline,
2329
+ attrs: ['value']
2330
+ })
2331
+ "
2332
+ v-model="models[inline.name]"
2333
+ :plain="inline.plain || inline.name === undefined"
2334
+ :readonly="readonly ? readonly : inline.readonly"
2335
+ @blur="
2336
+ event => {
2337
+ handleBlur(inline, event);
2338
+ }
2339
+ "
2340
+ @focus="
2341
+ event => {
2342
+ handleFocus(inline, event);
2343
+ }
2344
+ "
2345
+ @input="
2346
+ val => {
2347
+ handleInput(inline, val);
2348
+ }
2349
+ "
2350
+ @clear="handleClear(inline)"
2351
+ @change="
2352
+ val => {
2353
+ handleChange(inline, val);
2354
+ }
2355
+ "
2356
+ ></es-input>
2357
+ </div>
2358
+ </template>
2359
+ <template v-else>
2360
+ <div class="es-range" v-if="item.inline.range !== false">
2361
+
2362
+ </div>
2363
+ <es-input-number
2364
+ v-if="item.inline.type == 'number'"
2365
+ v-bind="
2366
+ handleExclAttribute({
2367
+ data: item.inline,
2368
+ attrs: ['value']
2369
+ })
2370
+ "
2371
+ v-model="models[item.inline.name]"
2372
+ :plain="
2373
+ item.inline.plain || item.inline.name === undefined
2374
+ "
2375
+ :readonly="readonly ? readonly : item.inline.readonly"
2376
+ @blur="
2377
+ event => {
2378
+ handleBlur(item.inline, event);
2379
+ }
2380
+ "
2381
+ @focus="
2382
+ event => {
2383
+ handleFocus(item.inline, event);
2384
+ }
2385
+ "
2386
+ @change="
2387
+ val => {
2388
+ handleChange(item.inline, val);
2389
+ }
2390
+ "
2391
+ ></es-input-number>
2392
+ <es-select
2393
+ v-else-if="item.inline.type == 'select'"
2394
+ v-bind="
2395
+ handleExclAttribute({
2396
+ data: item.inline,
2397
+ attrs: ['value']
2398
+ })
2399
+ "
2400
+ v-model="models[item.inline.name]"
2401
+ :plain="
2402
+ item.inline.plain || item.inline.name === undefined
2403
+ "
2404
+ :readonly="readonly ? readonly : item.inline.readonly"
2405
+ @blur="
2406
+ event => {
2407
+ handleBlur(item.inline, event);
2408
+ }
2409
+ "
2410
+ @focus="
2411
+ event => {
2412
+ handleFocus(item.inline, event);
2413
+ }
2414
+ "
2415
+ @change="
2416
+ val => {
2417
+ handleChange(item.inline, val);
2418
+ }
2419
+ "
2420
+ ></es-select>
2421
+ <es-cascader
2422
+ v-else-if="item.inline.type == 'cascader'"
2423
+ v-bind="
2424
+ handleExclAttribute({
2425
+ data: item.inline,
2426
+ attrs: ['value']
2427
+ })
2428
+ "
2429
+ v-model="models[item.inline.name]"
2430
+ :plain="
2431
+ item.inline.plain || item.inline.name === undefined
2432
+ "
2433
+ :readonly="readonly ? readonly : item.inline.readonly"
2434
+ @blur="
2435
+ event => {
2436
+ handleBlur(item.inline, event);
2437
+ }
2438
+ "
2439
+ @focus="
2440
+ event => {
2441
+ handleFocus(item.inline, event);
2442
+ }
2443
+ "
2444
+ @change="
2445
+ val => {
2446
+ handleChange(item.inline, val);
2447
+ }
2448
+ "
2449
+ >
2450
+ </es-cascader>
2451
+ <es-date-picker
2452
+ v-else-if="
2453
+ item.inline.date ||
2454
+ item.inline.type == 'date' ||
2455
+ item.inline.type == 'year' ||
2456
+ item.inline.type == 'month' ||
2457
+ item.inline.type == 'date' ||
2458
+ item.inline.type == 'dates' ||
2459
+ item.inline.type == 'week' ||
2460
+ item.inline.type == 'datetime' ||
2461
+ item.inline.type == 'datetimerange' ||
2462
+ item.inline.type == 'daterange' ||
2463
+ item.inline.type == 'monthrange' ||
2464
+ item.inline.type == 'quarter' ||
2465
+ item.inline.type == 'halfyear'
2466
+ "
2467
+ v-bind="
2468
+ handleExclAttribute({
2469
+ data: item.inline,
2470
+ attrs: ['value']
2471
+ })
2472
+ "
2473
+ v-model="models[item.inline.name]"
2474
+ :plain="
2475
+ item.inline.plain || item.inline.name === undefined
2476
+ "
2477
+ :readonly="readonly ? readonly : item.inline.readonly"
2478
+ @blur="
2479
+ event => {
2480
+ handleBlur(item.inline, event);
2481
+ }
2482
+ "
2483
+ @focus="
2484
+ event => {
2485
+ handleFocus(item.inline, event);
2486
+ }
2487
+ "
2488
+ @change="
2489
+ val => {
2490
+ handleChange(item.inline, val);
2491
+ }
2492
+ "
2493
+ ></es-date-picker>
2494
+ <es-input
2495
+ v-else
2496
+ v-bind="
2497
+ handleExclAttribute({
2498
+ data: item.inline,
2499
+ attrs: ['value']
2500
+ })
2501
+ "
2502
+ v-model="models[item.inline.name]"
2503
+ :plain="
2504
+ item.inline.plain || item.inline.name === undefined
2505
+ "
2506
+ :readonly="readonly ? readonly : item.inline.readonly"
2507
+ @blur="
2508
+ event => {
2509
+ handleBlur(item.inline, event);
2510
+ }
2511
+ "
2512
+ @focus="
2513
+ event => {
2514
+ handleFocus(item.inline, event);
2515
+ }
2516
+ "
2517
+ @input="
2518
+ val => {
2519
+ handleInput(item.inline, val);
2520
+ }
2521
+ "
2522
+ @clear="
2523
+ () => {
2524
+ handleClear(item);
2525
+ }
2526
+ "
2527
+ @change="
2528
+ val => {
2529
+ handleChange(item.inline, val);
2530
+ }
2531
+ "
2532
+ ></es-input>
2533
+ </template>
2534
+ </template>
2535
+ </el-form-item>
2536
+ </template>
2537
+ </template>
2538
+ </el-collapse-item>
2539
+ </el-collapse>
2540
+ <div class="es-form-content es-form-padding" v-else>
2541
+ <es-table-form
2542
+ v-if="table"
2543
+ ref="form"
2544
+ :tableAfter="tableAfter"
2545
+ v-bind="tableAttrs"
2546
+ :thead="thead"
2547
+ :model.sync="models"
2548
+ :contents="formContent"
2549
+ :readonly="readonly"
2550
+ :label-width="labelWidth"
2551
+ :span="span"
2552
+ :widths="widths"
2553
+ @click="handleClick"
2554
+ @change="handleChange"
2555
+ @dataChange="handleDataChange"
2556
+ @focus="handleFocus"
2557
+ @blur="handleBlur"
2558
+ @clear="handleClear"
2559
+ ></es-table-form>
2560
+ <template v-else>
2561
+ <template v-for="item in formContent">
2562
+ <div
2563
+ v-if="item.type === 'caption'"
2564
+ class="es-form-item-caption"
2565
+ :key="item.name"
2566
+ >
2567
+ {{ item.text }}
2568
+ </div>
2569
+ <el-form-item
2570
+ v-else
2571
+ ref="es-form-pane"
2572
+ v-show="!item.hide"
2573
+ :key="item.name"
2574
+ :label-width="labelWidth"
2575
+ :prop="item.name"
2576
+ :rules="getRules(item)"
2577
+ :style="style(item)"
2578
+ :class="[
2579
+ {
2580
+ 'es-form-space-none': !space,
2581
+ 'es-form-item-readonly': readonly,
2582
+ 'es-form-item-table': item.type === 'table',
2583
+ 'es-form-item-inline': item.inline,
2584
+ 'es-form-item-onrow': item.row,
2585
+ 'es-form-item-label-hide':
2586
+ item.labelHide || item.showLabel === false
2587
+ },
2588
+ item.class,
2589
+ itemClass[item.type]
2590
+ ]"
2591
+ :label-class="
2592
+ [
2593
+ {
2594
+ 'required-after': after,
2595
+ 'es-label-box': labelPosition !== 'top',
2596
+ 'required-position':
2597
+ !labelPosition || labelPosition === 'right'
2598
+ },
2599
+ 'es-justify-' +
2600
+ (item.labelAlign
2601
+ ? align[item.labelAlign]
2602
+ : typeof item.label == 'object' && item.label.align
2603
+ ? align[item.label.align]
2604
+ : labelPosition
2605
+ ? labelPosition == 'top'
2606
+ ? 'start'
2607
+ : align[labelPosition]
2608
+ : 'end'),
2609
+ !Array.isArray(item.labelClass) ? item.labelClass : ''
2610
+ ].concat(
2611
+ Array.isArray(item.labelClass ? item.labelClass : '')
2612
+ )
2613
+ "
2614
+ >
2615
+ <es-label
2616
+ slot="label"
2617
+ v-if="
2618
+ item.showLabel !== false &&
2619
+ item.type !== 'table' &&
2620
+ showLabel
2621
+ "
2622
+ :contents="item.label"
2623
+ :plain="item.plain || item.name === undefined"
2624
+ ></es-label>
2625
+ <es-input-number
2626
+ v-if="item.type == 'number'"
2627
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2628
+ v-model="models[item.name]"
2629
+ :plain="item.plain || item.name === undefined"
2630
+ :readonly="readonly ? readonly : item.readonly"
2631
+ @blur="
2632
+ event => {
2633
+ handleBlur(item, event);
2634
+ }
2635
+ "
2636
+ @focus="
2637
+ event => {
2638
+ handleFocus(item, event);
2639
+ }
2640
+ "
2641
+ @change="
2642
+ val => {
2643
+ handleChange(item, val);
2644
+ }
2645
+ "
2646
+ ></es-input-number>
2647
+ <es-radio-group
2648
+ v-else-if="item.type == 'radio'"
2649
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2650
+ v-model="models[item.name]"
2651
+ :plain="item.plain || item.name === undefined"
2652
+ :readonly="readonly ? readonly : item.readonly"
2653
+ @change="
2654
+ val => {
2655
+ handleChange(item, val);
2656
+ }
2657
+ "
2658
+ ></es-radio-group>
2659
+ <es-checkbox-group
2660
+ v-else-if="item.type == 'checkbox'"
2661
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2662
+ v-model="models[item.name]"
2663
+ :plain="item.plain || item.name === undefined"
2664
+ :readonly="readonly ? readonly : item.readonly"
2665
+ @change="
2666
+ val => {
2667
+ handleChange(item, val);
2668
+ }
2669
+ "
2670
+ ></es-checkbox-group>
2671
+ <es-select
2672
+ v-else-if="item.type == 'select'"
2673
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2674
+ v-model="models[item.name]"
2675
+ :plain="item.plain || item.name === undefined"
2676
+ :readonly="readonly ? readonly : item.readonly"
2677
+ @blur="
2678
+ event => {
2679
+ handleBlur(item, event);
2680
+ }
2681
+ "
2682
+ @focus="
2683
+ event => {
2684
+ handleFocus(item, event);
2685
+ }
2686
+ "
2687
+ @change="
2688
+ val => {
2689
+ handleChange(item, val);
2690
+ }
2691
+ "
2692
+ ></es-select>
2693
+ <es-cascader
2694
+ v-else-if="item.type == 'cascader'"
2695
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2696
+ v-model="models[item.name]"
2697
+ :plain="item.plain || item.name === undefined"
2698
+ :readonly="readonly ? readonly : item.readonly"
2699
+ @blur="
2700
+ event => {
2701
+ handleBlur(item, event);
2702
+ }
2703
+ "
2704
+ @focus="
2705
+ event => {
2706
+ handleFocus(item, event);
2707
+ }
2708
+ "
2709
+ @change="
2710
+ val => {
2711
+ handleChange(item, val);
2712
+ }
2713
+ "
2714
+ >
2715
+ </es-cascader>
2716
+ <es-select-ganged
2717
+ v-else-if="
2718
+ item.type == 'ganged' ||
2719
+ (item.type == 'select' && item.ganged)
2720
+ "
2721
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2722
+ v-model="models[item.name]"
2723
+ :plain="item.plain || item.name === undefined"
2724
+ :readonly="readonly ? readonly : item.readonly"
2725
+ @change="
2726
+ val => {
2727
+ handleChange(item, val);
2728
+ }
2729
+ "
2730
+ ></es-select-ganged>
2731
+ <es-switch
2732
+ v-else-if="item.type == 'switch'"
2733
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2734
+ v-model="models[item.name]"
2735
+ :plain="item.plain || item.name === undefined"
2736
+ :readonly="readonly ? readonly : item.readonly"
2737
+ @change="
2738
+ val => {
2739
+ handleChange(item, val);
2740
+ }
2741
+ "
2742
+ ></es-switch>
2743
+ <es-date-picker
2744
+ v-else-if="
2745
+ item.date ||
2746
+ item.type == 'date' ||
2747
+ item.type == 'year' ||
2748
+ item.type == 'month' ||
2749
+ item.type == 'date' ||
2750
+ item.type == 'dates' ||
2751
+ item.type == 'week' ||
2752
+ item.type == 'datetime' ||
2753
+ item.type == 'datetimerange' ||
2754
+ item.type == 'daterange' ||
2755
+ item.type == 'monthrange' ||
2756
+ item.type == 'quarter' ||
2757
+ item.type == 'halfyear'
2758
+ "
2759
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2760
+ v-model="models[item.name]"
2761
+ :plain="item.plain || item.name === undefined"
2762
+ :readonly="readonly ? readonly : item.readonly"
2763
+ @blur="
2764
+ event => {
2765
+ handleBlur(item, event);
2766
+ }
2767
+ "
2768
+ @focus="
2769
+ event => {
2770
+ handleFocus(item, event);
2771
+ }
2772
+ "
2773
+ @change="
2774
+ val => {
2775
+ handleChange(item, val);
2776
+ }
2777
+ "
2778
+ ></es-date-picker>
2779
+ <es-upload
2780
+ v-else-if="item.type == 'attachment' || item.type == 'upload'"
2781
+ v-bind="
2782
+ handleExclAttribute({
2783
+ data: item,
2784
+ attrs: ['value', 'ownId']
2785
+ })
2786
+ "
2787
+ :ownId="item.ownId || models.id"
2788
+ btn-size="medium"
2789
+ v-model="models[item.name]"
2790
+ :readonly="readonly ? readonly : item.readonly"
2791
+ :rules="item.rules"
2792
+ @change="
2793
+ val => {
2794
+ handleChange(item, val);
2795
+ }
2796
+ "
2797
+ ></es-upload>
2798
+ <es-selector
2799
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2800
+ v-model="models[item.name]"
2801
+ v-else-if="item.type == 'selector'"
2802
+ :readonly="readonly ? readonly : item.readonly"
2803
+ :plain="item.plain || item.name === undefined"
2804
+ @change="
2805
+ val => {
2806
+ handleChange(item, val);
2807
+ }
2808
+ "
2809
+ ></es-selector>
2810
+ <template v-else-if="item.type === 'table'">
2811
+ <es-data-table-form
2812
+ v-if="item.lazy"
2813
+ :data="models[item.name]"
2814
+ :full="item.height != undefined || item.height != null"
2815
+ v-bind="
2816
+ handleExclAttribute({ data: item, attrs: ['value'] })
2817
+ "
2818
+ :readonly="readonly ? readonly : item.readonly"
2819
+ @blur="
2820
+ (val, data) => {
2821
+ handleBlur(item, val, data);
2822
+ }
2823
+ "
2824
+ @focus="
2825
+ (val, data) => {
2826
+ handleFocus(item, val, data);
2827
+ }
2828
+ "
2829
+ @edit="
2830
+ (val, data) => {
2831
+ handleChange(item, val, data);
2832
+ }
2833
+ "
2834
+ @clear="handleClear"
2835
+ @btnClick="handleClick"
2836
+ @dataChange="handleDataChange"
2837
+ >
2838
+ </es-data-table-form>
2839
+ <es-data-table
2840
+ v-else
2841
+ :data="models[item.name]"
2842
+ :full="item.height != undefined || item.height != null"
2843
+ v-bind="
2844
+ handleExclAttribute({
2845
+ data: item,
2846
+ attrs: ['value', 'events']
2847
+ })
2848
+ "
2849
+ v-on="item.events"
2850
+ :readonly="readonly ? readonly : item.readonly"
2851
+ @blur="
2852
+ (val, data) => {
2853
+ handleBlur(item, val, data);
2854
+ }
2855
+ "
2856
+ @focus="
2857
+ (val, data) => {
2858
+ handleFocus(item, val, data);
2859
+ }
2860
+ "
2861
+ @edit="
2862
+ (val, data) => {
2863
+ handleChange(item, val, data);
2864
+ }
2865
+ "
2866
+ @btnClick="handleClick"
2867
+ @dataChange="handleDataChange"
2868
+ >
2869
+ </es-data-table>
2870
+ </template>
2871
+ <es-input
2872
+ v-else
2873
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
2874
+ v-model="models[item.name]"
2875
+ :plain="item.plain || item.name === undefined"
2876
+ :readonly="readonly ? readonly : item.readonly"
2877
+ @blur="
2878
+ event => {
2879
+ handleBlur(item, event);
2880
+ }
2881
+ "
2882
+ @focus="
2883
+ event => {
2884
+ handleFocus(item, event);
2885
+ }
2886
+ "
2887
+ @input="
2888
+ val => {
2889
+ handleInput(item, val);
2890
+ }
2891
+ "
2892
+ @clear="
2893
+ () => {
2894
+ handleClear(item);
2895
+ }
2896
+ "
2897
+ @change="
2898
+ val => {
2899
+ handleChange(item, val);
2900
+ }
2901
+ "
2902
+ ></es-input>
2903
+ <template v-if="item.inline">
2904
+ <template v-if="Array.isArray(item.inline)">
2905
+ <div
2906
+ class="es-form-inline"
2907
+ v-for="(inline, k) in item.inline"
2908
+ :key="k"
2909
+ >
2910
+ <div class="es-range" v-if="inline.range !== false">
2911
+
2912
+ </div>
2913
+ <es-input-number
2914
+ v-if="inline.type == 'number'"
2915
+ v-bind="
2916
+ handleExclAttribute({
2917
+ data: inline,
2918
+ attrs: ['value']
2919
+ })
2920
+ "
2921
+ v-model="models[inline.name]"
2922
+ :plain="inline.plain || inline.name === undefined"
2923
+ :readonly="readonly ? readonly : inline.readonly"
2924
+ @blur="
2925
+ event => {
2926
+ handleBlur(inline, event);
2927
+ }
2928
+ "
2929
+ @focus="
2930
+ event => {
2931
+ handleFocus(inline, event);
2932
+ }
2933
+ "
2934
+ @change="
2935
+ val => {
2936
+ handleChange(inline, val);
2937
+ }
2938
+ "
2939
+ ></es-input-number>
2940
+ <es-select
2941
+ v-else-if="inline.type == 'select'"
2942
+ v-bind="
2943
+ handleExclAttribute({
2944
+ data: inline,
2945
+ attrs: ['value']
2946
+ })
2947
+ "
2948
+ v-model="models[inline.name]"
2949
+ :plain="inline.plain || inline.name === undefined"
2950
+ :readonly="readonly ? readonly : inline.readonly"
2951
+ @blur="
2952
+ event => {
2953
+ handleBlur(inline, event);
2954
+ }
2955
+ "
2956
+ @focus="
2957
+ event => {
2958
+ handleFocus(inline, event);
2959
+ }
2960
+ "
2961
+ @change="
2962
+ val => {
2963
+ handleChange(inline, val);
2964
+ }
2965
+ "
2966
+ ></es-select>
2967
+ <es-cascader
2968
+ v-else-if="inline.type == 'cascader'"
2969
+ v-bind="
2970
+ handleExclAttribute({
2971
+ data: inline,
2972
+ attrs: ['value']
2973
+ })
2974
+ "
2975
+ v-model="models[inline.name]"
2976
+ :plain="inline.plain || inline.name === undefined"
2977
+ :readonly="readonly ? readonly : inline.readonly"
2978
+ @blur="
2979
+ event => {
2980
+ handleBlur(inline, event);
2981
+ }
2982
+ "
2983
+ @focus="
2984
+ event => {
2985
+ handleFocus(inline, event);
2986
+ }
2987
+ "
2988
+ @change="
2989
+ val => {
2990
+ handleChange(inline, val);
2991
+ }
2992
+ "
2993
+ >
2994
+ </es-cascader>
2995
+ <es-date-picker
2996
+ v-else-if="
2997
+ inline.date ||
2998
+ inline.type == 'date' ||
2999
+ inline.type == 'year' ||
3000
+ inline.type == 'month' ||
3001
+ inline.type == 'date' ||
3002
+ inline.type == 'dates' ||
3003
+ inline.type == 'week' ||
3004
+ inline.type == 'datetime' ||
3005
+ inline.type == 'datetimerange' ||
3006
+ inline.type == 'daterange' ||
3007
+ inline.type == 'monthrange' ||
3008
+ inline.type == 'quarter' ||
3009
+ inline.type == 'halfyear'
3010
+ "
3011
+ v-bind="
3012
+ handleExclAttribute({
3013
+ data: inline,
3014
+ attrs: ['value']
3015
+ })
3016
+ "
3017
+ v-model="models[inline.name]"
3018
+ :plain="inline.plain || inline.name === undefined"
3019
+ :readonly="readonly ? readonly : inline.readonly"
3020
+ @blur="
3021
+ event => {
3022
+ handleBlur(inline, event);
3023
+ }
3024
+ "
3025
+ @focus="
3026
+ event => {
3027
+ handleFocus(inline, event);
3028
+ }
3029
+ "
3030
+ @change="
3031
+ val => {
3032
+ handleChange(inline, val);
3033
+ }
3034
+ "
3035
+ ></es-date-picker>
3036
+ <template
3037
+ v-else-if="
3038
+ inline.type == 'image' || inline.type == 'img'
3039
+ "
3040
+ >
3041
+ <img
3042
+ v-if="inline.url || inline.src"
3043
+ v-bind="
3044
+ handleExclAttribute({
3045
+ data: inline,
3046
+ attrs: ['value']
3047
+ })
3048
+ "
3049
+ height="100%"
3050
+ :src="inline.url || inline.src"
3051
+ @click="inline.event"
3052
+ />
3053
+ </template>
3054
+ <es-input
3055
+ v-else
3056
+ v-bind="
3057
+ handleExclAttribute({
3058
+ data: inline,
3059
+ attrs: ['value']
3060
+ })
3061
+ "
3062
+ v-model="models[inline.name]"
3063
+ :plain="inline.plain || inline.name === undefined"
3064
+ :readonly="readonly ? readonly : inline.readonly"
3065
+ @blur="
3066
+ event => {
3067
+ handleBlur(inline, event);
3068
+ }
3069
+ "
3070
+ @focus="
3071
+ event => {
3072
+ handleFocus(inline, event);
3073
+ }
3074
+ "
3075
+ @input="
3076
+ val => {
3077
+ handleInput(inline, val);
3078
+ }
3079
+ "
3080
+ @clear="handleClear(inline)"
3081
+ @change="
3082
+ val => {
3083
+ handleChange(inline, val);
3084
+ }
3085
+ "
3086
+ ></es-input>
3087
+ </div>
3088
+ </template>
3089
+ <template v-else>
3090
+ <div class="es-range" v-if="item.inline.range !== false">
3091
+
3092
+ </div>
3093
+ <es-input-number
3094
+ v-if="item.inline.type == 'number'"
3095
+ v-bind="
3096
+ handleExclAttribute({
3097
+ data: item.inline,
3098
+ attrs: ['value']
3099
+ })
3100
+ "
3101
+ v-model="models[item.inline.name]"
3102
+ :plain="
3103
+ item.inline.plain || item.inline.name === undefined
3104
+ "
3105
+ :readonly="readonly ? readonly : item.inline.readonly"
3106
+ @blur="
3107
+ event => {
3108
+ handleBlur(item.inline, event);
3109
+ }
3110
+ "
3111
+ @focus="
3112
+ event => {
3113
+ handleFocus(item.inline, event);
3114
+ }
3115
+ "
3116
+ @change="
3117
+ val => {
3118
+ handleChange(item.inline, val);
3119
+ }
3120
+ "
3121
+ ></es-input-number>
3122
+ <es-select
3123
+ v-else-if="item.inline.type == 'select'"
3124
+ v-bind="
3125
+ handleExclAttribute({
3126
+ data: item.inline,
3127
+ attrs: ['value']
3128
+ })
3129
+ "
3130
+ v-model="models[item.inline.name]"
3131
+ :plain="
3132
+ item.inline.plain || item.inline.name === undefined
3133
+ "
3134
+ :readonly="readonly ? readonly : item.inline.readonly"
3135
+ @blur="
3136
+ event => {
3137
+ handleBlur(item.inline, event);
3138
+ }
3139
+ "
3140
+ @focus="
3141
+ event => {
3142
+ handleFocus(item.inline, event);
3143
+ }
3144
+ "
3145
+ @change="
3146
+ val => {
3147
+ handleChange(item.inline, val);
3148
+ }
3149
+ "
3150
+ ></es-select>
3151
+ <es-cascader
3152
+ v-else-if="item.inline.type == 'cascader'"
3153
+ v-bind="
3154
+ handleExclAttribute({
3155
+ data: item.inline,
3156
+ attrs: ['value']
3157
+ })
3158
+ "
3159
+ v-model="models[item.inline.name]"
3160
+ :plain="
3161
+ item.inline.plain || item.inline.name === undefined
3162
+ "
3163
+ :readonly="readonly ? readonly : item.inline.readonly"
3164
+ @blur="
3165
+ event => {
3166
+ handleBlur(item.inline, event);
3167
+ }
3168
+ "
3169
+ @focus="
3170
+ event => {
3171
+ handleFocus(item.inline, event);
3172
+ }
3173
+ "
3174
+ @change="
3175
+ val => {
3176
+ handleChange(item.inline, val);
3177
+ }
3178
+ "
3179
+ >
3180
+ </es-cascader>
3181
+ <es-date-picker
3182
+ v-else-if="
3183
+ item.inline.date ||
3184
+ item.inline.type == 'date' ||
3185
+ item.inline.type == 'year' ||
3186
+ item.inline.type == 'month' ||
3187
+ item.inline.type == 'date' ||
3188
+ item.inline.type == 'dates' ||
3189
+ item.inline.type == 'week' ||
3190
+ item.inline.type == 'datetime' ||
3191
+ item.inline.type == 'datetimerange' ||
3192
+ item.inline.type == 'daterange' ||
3193
+ item.inline.type == 'monthrange' ||
3194
+ item.inline.type == 'quarter' ||
3195
+ item.inline.type == 'halfyear'
3196
+ "
3197
+ v-bind="
3198
+ handleExclAttribute({
3199
+ data: item.inline,
3200
+ attrs: ['value']
3201
+ })
3202
+ "
3203
+ v-model="models[item.inline.name]"
3204
+ :plain="
3205
+ item.inline.plain || item.inline.name === undefined
3206
+ "
3207
+ :readonly="readonly ? readonly : item.inline.readonly"
3208
+ @blur="
3209
+ event => {
3210
+ handleBlur(item.inline, event);
3211
+ }
3212
+ "
3213
+ @focus="
3214
+ event => {
3215
+ handleFocus(item.inline, event);
3216
+ }
3217
+ "
3218
+ @change="
3219
+ val => {
3220
+ handleChange(item.inline, val);
3221
+ }
3222
+ "
3223
+ ></es-date-picker>
3224
+ <es-input
3225
+ v-else
3226
+ v-bind="
3227
+ handleExclAttribute({
3228
+ data: item.inline,
3229
+ attrs: ['value', 'events']
3230
+ })
3231
+ "
3232
+ v-model="models[item.inline.name]"
3233
+ :plain="
3234
+ item.inline.plain || item.inline.name === undefined
3235
+ "
3236
+ :readonly="readonly ? readonly : item.inline.readonly"
3237
+ @blur="
3238
+ event => {
3239
+ handleBlur(item.inline, event);
3240
+ }
3241
+ "
3242
+ @focus="
3243
+ event => {
3244
+ handleFocus(item.inline, event);
3245
+ }
3246
+ "
3247
+ @input="
3248
+ val => {
3249
+ handleInput(item.inline, val);
3250
+ }
3251
+ "
3252
+ @clear="handleClear(item.inline)"
3253
+ @change="
3254
+ val => {
3255
+ handleChange(item.inline, val);
3256
+ }
3257
+ "
3258
+ ></es-input>
3259
+ </template>
3260
+ </template>
3261
+ </el-form-item>
3262
+ </template>
3263
+ </template>
3264
+ <el-form-item
3265
+ v-show="labelWidth"
3266
+ v-if="inline && !readonly && showButton"
3267
+ >
3268
+ <el-button
3269
+ v-for="(item, index) in buttons"
3270
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
3271
+ size="medium"
3272
+ :key="index"
3273
+ v-show="!item.hide"
3274
+ @click="handleClick(item)"
3275
+ >{{ item.label || item.text || item.name }}</el-button
3276
+ >
3277
+ </el-form-item>
3278
+ </div>
3279
+ </template>
3280
+ <div
3281
+ v-show="labelWidth"
3282
+ v-if="!inline && !readonly && showButton"
3283
+ class="es-form-button"
3284
+ >
3285
+ <el-button
3286
+ v-for="(item, index) in buttons"
3287
+ v-bind="handleExclAttribute({ data: item, attrs: ['value'] })"
3288
+ size="medium"
3289
+ :key="index"
3290
+ v-show="!item.hide"
3291
+ @click="handleClick(item)"
3292
+ >{{ item.label || item.text || item.name }}</el-button
3293
+ >
3294
+ </div>
3295
+ </slot>
3296
+ <slot name="dialog"></slot>
3297
+ <slot name="other"></slot>
3298
+ </el-form>
3299
+ </template>
3300
+ <script>
3301
+ import { formContents } from 'eoss-ui/src/config/api.js';
3302
+ import util from 'eoss-ui/src/utils/util';
3303
+ import rules from 'eoss-ui/src/utils/rules.js';
3304
+ export default {
3305
+ name: 'EsForm',
3306
+ inheritAttrs: false,
3307
+ provide() {
3308
+ return {
3309
+ esForm: this
3310
+ };
3311
+ },
3312
+ inject: {
3313
+ esDialog: {
3314
+ default: ''
3315
+ },
3316
+ esTabs: {
3317
+ default: ''
3318
+ },
3319
+ esPage: {
3320
+ default: ''
3321
+ }
3322
+ },
3323
+ props: {
3324
+ model: {
3325
+ type: [Object, String],
3326
+ default: () => {
3327
+ return {};
3328
+ }
3329
+ },
3330
+ steps: Object,
3331
+ param: {
3332
+ type: Object,
3333
+ default() {
3334
+ return {};
3335
+ }
3336
+ },
3337
+ value: {
3338
+ type: Object,
3339
+ default() {
3340
+ return {};
3341
+ }
3342
+ },
3343
+ action: [String, Object],
3344
+ actionType: String,
3345
+ formatSubmit: [Boolean, String],
3346
+ method: {
3347
+ type: String,
3348
+ default: 'post'
3349
+ },
3350
+ modelMethod: {
3351
+ type: String,
3352
+ default: 'get'
3353
+ },
3354
+ format: {
3355
+ type: Boolean,
3356
+ default: true
3357
+ },
3358
+ showLabel: {
3359
+ type: Boolean,
3360
+ default: true
3361
+ },
3362
+ labelPosition: String,
3363
+ labelWidth: {
3364
+ type: String,
3365
+ default: '120px'
3366
+ },
3367
+ // 列数
3368
+ span: Number,
3369
+ readonly: Boolean,
3370
+ // 渲染表单的内容
3371
+ contents: [Array, String, Object],
3372
+ // 显示提交按钮
3373
+ submit: {
3374
+ type: Boolean,
3375
+ default: true
3376
+ },
3377
+ // 显示取消按钮
3378
+ reset: {
3379
+ type: Boolean,
3380
+ default() {
3381
+ return this.submit;
3382
+ }
3383
+ },
3384
+ // 间隔
3385
+ space: {
3386
+ type: Boolean,
3387
+ default: true
3388
+ },
3389
+ inline: {
3390
+ type: Boolean,
3391
+ default: false
3392
+ },
3393
+ search: {
3394
+ type: Boolean,
3395
+ default: false
3396
+ },
3397
+ isReset: {
3398
+ type: Boolean,
3399
+ default: false
3400
+ },
3401
+ collapse: {
3402
+ type: Boolean,
3403
+ default: false
3404
+ },
3405
+ height: String,
3406
+ accordion: {
3407
+ type: Boolean,
3408
+ default: false
3409
+ },
3410
+ table: {
3411
+ type: Boolean,
3412
+ default: false
3413
+ },
3414
+ thead: Array,
3415
+ tableAttrs: {},
3416
+ showButton: {
3417
+ type: Boolean,
3418
+ default: true
3419
+ },
3420
+ after: {
3421
+ type: Boolean,
3422
+ default: true
3423
+ },
3424
+ tableAfter: {
3425
+ type: Boolean,
3426
+ default: true
3427
+ },
3428
+ closeDialog: {
3429
+ type: Boolean,
3430
+ default: true
3431
+ },
3432
+ itemClass: {
3433
+ type: Object,
3434
+ default() {
3435
+ return {};
3436
+ }
3437
+ },
3438
+ parseData: Function,
3439
+ formatTable: Object,
3440
+ full: Boolean,
3441
+ within: [String, Object],
3442
+ display: Boolean,
3443
+ submitLoading: {
3444
+ type: Boolean,
3445
+ default: true
3446
+ },
3447
+ //操作配置
3448
+ handles: Object,
3449
+ //业务id
3450
+ businessId: String,
3451
+ //表格样式表单的宽度
3452
+ widths: Array,
3453
+ parseValue: [Object, Function],
3454
+ //是否自动生成id
3455
+ autoId: [Boolean, String],
3456
+ paramId: String
3457
+ },
3458
+ data() {
3459
+ return {
3460
+ stepContent: null,
3461
+ stepActive: 0,
3462
+ align: { left: 'start', center: 'center', right: 'end' },
3463
+ forbid: false,
3464
+ content: '',
3465
+ button: null,
3466
+ activeNames: '',
3467
+ isCollapse: false,
3468
+ loading: false,
3469
+ values: {},
3470
+ newHeight: null,
3471
+ uuid: util.uuid(32),
3472
+ dialog: false
3473
+ };
3474
+ },
3475
+ computed: {
3476
+ models: {
3477
+ get() {
3478
+ if (this.model && typeof this.model !== 'string') {
3479
+ return this.model;
3480
+ }
3481
+ return this.values;
3482
+ },
3483
+ set(val) {
3484
+ return val;
3485
+ }
3486
+ },
3487
+ _value() {
3488
+ let data = {};
3489
+ if (this.businessId !== undefined) {
3490
+ data = { id: this.businessId };
3491
+ } else if (typeof this.model !== 'string' && this.autoId) {
3492
+ if (typeof this.autoId === 'boolean' && !this.model.id) {
3493
+ data = { id: this.uuid };
3494
+ this.$emit('update:businessId', this.uuid);
3495
+ } else if (!this.model[this.autoId]) {
3496
+ data[this.autoId] = this.uuid;
3497
+ this.$emit('update:businessId', this.uuid);
3498
+ }
3499
+ }
3500
+ return util.extend({}, data, this.value);
3501
+ },
3502
+ stepContents() {
3503
+ if (this.stepContent) {
3504
+ return this.stepContent;
3505
+ }
3506
+ if (
3507
+ this.steps &&
3508
+ Object.prototype.hasOwnProperty.call(this.steps, 'contents')
3509
+ ) {
3510
+ return this.steps.contents;
3511
+ }
3512
+ return null;
3513
+ },
3514
+ formContent() {
3515
+ if (this.stepContents) {
3516
+ return this.content[this.stepActive];
3517
+ }
3518
+ return this.content;
3519
+ },
3520
+ formHeight() {
3521
+ return this.height ? this.height : this.newHeight;
3522
+ },
3523
+ width() {
3524
+ return this.span > 0 ? 100 / this.span : null;
3525
+ },
3526
+ construction() {
3527
+ if (Array.isArray(this.contents)) {
3528
+ return this.contents;
3529
+ }
3530
+ },
3531
+ buttons() {
3532
+ let buttons = [];
3533
+ if (this.stepContents) {
3534
+ if (this.stepActive > 0 && this.stepActive < this.stepContents.length) {
3535
+ buttons.push({
3536
+ text: '上一步',
3537
+ event: 'stepPrev'
3538
+ });
3539
+ }
3540
+ if (this.stepActive < this.stepContents.length - 1) {
3541
+ buttons.push({
3542
+ type: 'primary',
3543
+ text: '下一步',
3544
+ event: 'stepNext'
3545
+ });
3546
+ } else if (this.showButton) {
3547
+ if (this.button) {
3548
+ buttons = buttons.concat(this.button);
3549
+ }
3550
+ if (this.submit) {
3551
+ buttons.push({
3552
+ type: 'primary',
3553
+ text: '确定',
3554
+ event: 'submit'
3555
+ });
3556
+ }
3557
+ if (this.reset) {
3558
+ buttons.push({
3559
+ type: 'reset',
3560
+ text: '取消',
3561
+ event: 'cancel'
3562
+ });
3563
+ }
3564
+ }
3565
+ } else {
3566
+ if (!this.showButton) {
3567
+ return null;
3568
+ }
3569
+ if (this.button) {
3570
+ return this.button;
3571
+ }
3572
+ if (this.search) {
3573
+ buttons.push({
3574
+ type: 'primary',
3575
+ text: '搜索',
3576
+ event: 'submit'
3577
+ });
3578
+ if (this.isReset) {
3579
+ buttons.push({
3580
+ type: 'reset',
3581
+ text: '重置',
3582
+ event: 'reset'
3583
+ });
3584
+ }
3585
+ } else {
3586
+ if (this.submit) {
3587
+ buttons.push({
3588
+ type: 'primary',
3589
+ text: '确定',
3590
+ event: 'submit'
3591
+ });
3592
+ }
3593
+ if (this.reset) {
3594
+ buttons.push({
3595
+ type: 'reset',
3596
+ text: '取消',
3597
+ event: 'cancel'
3598
+ });
3599
+ }
3600
+ }
3601
+ }
3602
+ return buttons;
3603
+ }
3604
+ },
3605
+ watch: {
3606
+ steps: {
3607
+ immediate: true,
3608
+ deep: true,
3609
+ handler(val) {
3610
+ if (val && Object.prototype.hasOwnProperty.call(val, 'active')) {
3611
+ this.stepActive = val.active;
3612
+ }
3613
+ }
3614
+ },
3615
+ param: {
3616
+ deep: true,
3617
+ handler() {
3618
+ if (this.model && typeof this.model === 'string') {
3619
+ this.getValue();
3620
+ }
3621
+ }
3622
+ },
3623
+ construction: {
3624
+ immediate: true,
3625
+ deep: true,
3626
+ handler(val) {
3627
+ if (val) {
3628
+ this.forbid = false;
3629
+ if (val.length > 0) {
3630
+ let contents = [];
3631
+ let names = [];
3632
+ val.forEach((item, index) => {
3633
+ if (item.type === 'submit' || item.type === 'button') {
3634
+ this.button = item.contents;
3635
+ } else {
3636
+ if (
3637
+ Object.prototype.hasOwnProperty.call(item, 'title') &&
3638
+ Object.prototype.hasOwnProperty.call(item, 'contents')
3639
+ ) {
3640
+ this.isCollapse = true;
3641
+ if (this.accordion) {
3642
+ if (index === 0) {
3643
+ names = item.name || String(index);
3644
+ }
3645
+ } else {
3646
+ names.push(item.name || String(index));
3647
+ }
3648
+ } else {
3649
+ this.isCollapse = false;
3650
+ }
3651
+ contents.push(item);
3652
+ }
3653
+ });
3654
+ this.activeNames = names;
3655
+ this.content = contents;
3656
+ if (this.content.length === 1) {
3657
+ if (
3658
+ Object.prototype.hasOwnProperty.call(
3659
+ this.content[0],
3660
+ 'title'
3661
+ ) &&
3662
+ Object.prototype.hasOwnProperty.call(
3663
+ this.content[0],
3664
+ 'contents'
3665
+ )
3666
+ ) {
3667
+ if (
3668
+ this.content[0].contents.length === 1 &&
3669
+ (this.content[0].contents[0].type === 'text' ||
3670
+ this.content[0].contents[0].type === 'textarea' ||
3671
+ this.content[0].contents[0].type === undefined)
3672
+ ) {
3673
+ this.forbid = true;
3674
+ }
3675
+ } else {
3676
+ if (
3677
+ this.content[0].type === 'text' ||
3678
+ this.content[0].type === 'textarea' ||
3679
+ this.content[0].type === undefined
3680
+ ) {
3681
+ this.forbid = true;
3682
+ }
3683
+ }
3684
+ }
3685
+ }
3686
+ }
3687
+ }
3688
+ },
3689
+ model: {
3690
+ immediate: true,
3691
+ deep: true,
3692
+ handler(val) {
3693
+ if (val) {
3694
+ if (typeof val === 'string') {
3695
+ this.getValue();
3696
+ }
3697
+ }
3698
+ }
3699
+ },
3700
+ values: {
3701
+ deep: true,
3702
+ handler(val) {
3703
+ //this.$emit('input', val);
3704
+ if (this.esTabs && val.id) {
3705
+ this.esTabs.id = val.id;
3706
+ }
3707
+ if (this.esPage) {
3708
+ this.esPage.handleChangeData(this.models);
3709
+ }
3710
+ }
3711
+ },
3712
+ display(val) {
3713
+ if (val && !this.height) {
3714
+ this.getHeight();
3715
+ }
3716
+ },
3717
+ readonly() {
3718
+ !this.height && this.getHeight();
3719
+ }
3720
+ },
3721
+ created() {
3722
+ this.dialog =
3723
+ window.$wujie && window.$wujie.props
3724
+ ? window.$wujie.props._dialog
3725
+ : false;
3726
+ },
3727
+ mounted() {
3728
+ this.$nextTick(() => {
3729
+ !this.height && this.getHeight();
3730
+ });
3731
+ },
3732
+ methods: {
3733
+ getHeight() {
3734
+ if (
3735
+ util.hasClass(this.$parent.$el, 'el-dialog__wrapper') ||
3736
+ this.full ||
3737
+ (this.$el.parentNode.children.length == 1 &&
3738
+ util.getStyle(this.$el.parentNode, 'height'))
3739
+ ) {
3740
+ let pt =
3741
+ parseInt(util.getStyle(this.$el.parentNode, 'padding-top'), 10) || 0;
3742
+ let pb =
3743
+ parseInt(util.getStyle(this.$el.parentNode, 'padding-bottom'), 10) ||
3744
+ 0;
3745
+ let btn = this.readonly || !this.showButton ? 0 : 48;
3746
+ this.newHeight =
3747
+ this.$el.parentNode.offsetHeight - pt - pb - btn + 'px';
3748
+ }
3749
+ },
3750
+ getContent() {
3751
+ if (
3752
+ typeof this.contents === 'string' ||
3753
+ (util.isObject(this.contents) &&
3754
+ Object.prototype.hasOwnProperty.call(this.contents, 'formId'))
3755
+ ) {
3756
+ this.loading = true;
3757
+ let params =
3758
+ typeof this.contents === 'string'
3759
+ ? { formId: this.contents }
3760
+ : this.contents;
3761
+ util
3762
+ .ajax({
3763
+ url: formContents,
3764
+ data: params,
3765
+ params: params
3766
+ })
3767
+ .then(res => {
3768
+ this.loading = false;
3769
+ if (res.rCode === 0) {
3770
+ let results = JSON.parse(JSON.stringify(res.results));
3771
+ if (Array.isArray(results)) {
3772
+ this.resolution(results);
3773
+ } else {
3774
+ this.resolution(results.contents || results.content || []);
3775
+ let data = {};
3776
+ if (this.businessId !== undefined) {
3777
+ data = { id: this.businessId };
3778
+ } else if (this.autoId) {
3779
+ if (typeof this.autoId === 'boolean') {
3780
+ data = { id: this.uuid };
3781
+ } else {
3782
+ data[this.autoId] = this.uuid;
3783
+ }
3784
+ }
3785
+ this.values = util.extend(
3786
+ {},
3787
+ data,
3788
+ results.value || results.data || {}
3789
+ );
3790
+ }
3791
+ }
3792
+ })
3793
+ .catch(err => {
3794
+ this.loading = false;
3795
+ if (err.message && err.message !== 'canceled') {
3796
+ this.$message.error(err.message);
3797
+ }
3798
+ });
3799
+ }
3800
+ },
3801
+ resolution(res) {
3802
+ this.forbid = false;
3803
+ if (res.length > 0) {
3804
+ let contents = [];
3805
+ let names = [];
3806
+ res.forEach((item, index) => {
3807
+ if (item.type === 'submit' || item.type === 'button') {
3808
+ this.$set(this, 'button', item.contents);
3809
+ } else {
3810
+ if (
3811
+ Object.prototype.hasOwnProperty.call(item, 'title') &&
3812
+ Object.prototype.hasOwnProperty.call(item, 'contents')
3813
+ ) {
3814
+ this.isCollapse = true;
3815
+ if (this.accordion) {
3816
+ if (index === 0) {
3817
+ names = item.name || String(index);
3818
+ }
3819
+ } else {
3820
+ names.push(item.name || String(index));
3821
+ }
3822
+ } else {
3823
+ this.isCollapse = false;
3824
+ }
3825
+ contents.push(util.extend({}, item));
3826
+ }
3827
+ });
3828
+ this.activeNames = names;
3829
+ this.content = contents;
3830
+ if (
3831
+ this.content.length === 1 &&
3832
+ (this.content[0].type === 'text' ||
3833
+ this.content[0].type === 'textarea' ||
3834
+ this.content[0].type === undefined ||
3835
+ (Object.prototype.hasOwnProperty.call(this.content[0], 'title') &&
3836
+ Object.prototype.hasOwnProperty.call(
3837
+ this.content[0],
3838
+ 'contents'
3839
+ ) &&
3840
+ this.content[0].contents.length === 1 &&
3841
+ (this.content[0].contents[0].type === 'text' ||
3842
+ this.content[0].contents[0].type === 'textarea' ||
3843
+ this.content[0].contents[0].type === undefined)))
3844
+ ) {
3845
+ this.forbid = true;
3846
+ }
3847
+ }
3848
+ },
3849
+ getValue() {
3850
+ if (typeof this.model === 'string') {
3851
+ this.loading = true;
3852
+ let param = this.paramId
3853
+ ? { ...this.param, id: this.paramId }
3854
+ : this.param;
3855
+ util
3856
+ .ajax({
3857
+ method: this.modelMethod || this.method,
3858
+ url: this.model,
3859
+ data: param,
3860
+ params: param
3861
+ })
3862
+ .then(res => {
3863
+ this.loading = false;
3864
+ if (res.rCode === 0) {
3865
+ let value = res.results
3866
+ ? this.parseData
3867
+ ? this.parseData(JSON.parse(JSON.stringify(res.results)))
3868
+ : JSON.parse(JSON.stringify(res.results))
3869
+ : {};
3870
+
3871
+ let data = {};
3872
+ if (this.autoId) {
3873
+ if (typeof this.autoId === 'boolean') {
3874
+ if (value.id) {
3875
+ this.$emit('update:businessId', value.id);
3876
+ } else {
3877
+ if (this.businessId !== undefined) {
3878
+ data = { id: this.businessId };
3879
+ } else {
3880
+ data = { id: this.uuid };
3881
+ }
3882
+ this.$emit('update:businessId', data.id);
3883
+ }
3884
+ } else {
3885
+ if (value[this.autoId]) {
3886
+ this.$emit('update:businessId', value[this.autoId]);
3887
+ } else {
3888
+ if (this.businessId !== undefined) {
3889
+ data[this.autoId] = this.businessId;
3890
+ } else {
3891
+ data[this.autoId] = this.uuid;
3892
+ }
3893
+ this.$emit('update:businessId', data[this.autoId]);
3894
+ }
3895
+ }
3896
+ }
3897
+ this.values = util.extend({}, data, value);
3898
+ this.$emit('valueSuccess', this.values);
3899
+ this.$emit('result', this.values);
3900
+ }
3901
+ })
3902
+ .catch(err => {
3903
+ this.loading = false;
3904
+ if (err.message && err.message !== 'canceled') {
3905
+ this.$message.error(err.message);
3906
+ }
3907
+ });
3908
+ }
3909
+ },
3910
+ style(item, res) {
3911
+ const { col, row } = item;
3912
+ if (this.inline) {
3913
+ if (Object.prototype.hasOwnProperty.call(item, 'width')) {
3914
+ return { width: item.width };
3915
+ }
3916
+ return '';
3917
+ }
3918
+ if (this.width != null) {
3919
+ if (col && col > 0 && col < this.span && this.width < 100) {
3920
+ return {
3921
+ width: row
3922
+ ? '100%'
3923
+ : Math.floor(this.width * col * 10000) / 10000 + '%',
3924
+ float: 'left',
3925
+ display: 'inline-block',
3926
+ clear: 'both'
3927
+ };
3928
+ } else {
3929
+ return { width: '100%', float: 'left', display: 'inline-block' };
3930
+ }
3931
+ } else {
3932
+ if (col > 0) {
3933
+ return {
3934
+ width: row
3935
+ ? '100%'
3936
+ : Math.floor((100 / 12) * col * 10000) / 10000 + '%',
3937
+ float: 'left',
3938
+ display: 'inline-block'
3939
+ };
3940
+ } else {
3941
+ return { width: '100%', float: 'left', display: 'inline-block' };
3942
+ }
3943
+ }
3944
+ },
3945
+ handleClick(res, index) {
3946
+ if (res.event && typeof res.event === 'function') {
3947
+ if (res.validate) {
3948
+ this.$refs.esForm.validate(async (valid, fields, triggers) => {
3949
+ if (valid) {
3950
+ res.event(res, this.models);
3951
+ } else {
3952
+ this.setScroll(valid, triggers, this.$refs.scrollbar);
3953
+ }
3954
+ });
3955
+ } else {
3956
+ res.event(res, this.models);
3957
+ }
3958
+ } else if (res.type === 'step') {
3959
+ if (this.stepActive < index) {
3960
+ this.$refs.esForm.validate((valid, fields, triggers) => {
3961
+ if (valid) {
3962
+ this.stepActive = index;
3963
+ this.$emit('stepChange', this.stepActive);
3964
+ } else {
3965
+ this.setScroll(valid, triggers, this.$refs.scrollbar);
3966
+ }
3967
+ });
3968
+ } else {
3969
+ this.stepActive = index;
3970
+ this.$emit('stepChange', this.stepActive);
3971
+ }
3972
+ } else if (
3973
+ res.event === 'submit' ||
3974
+ res.event === 'confirm' ||
3975
+ res.type === 'submit'
3976
+ ) {
3977
+ if (this.action) {
3978
+ this.submitData(res);
3979
+ } else {
3980
+ this.$refs.esForm.validate(async (valid, fields, triggers) => {
3981
+ if (valid) {
3982
+ this.$emit('submit', this.models, res);
3983
+ } else {
3984
+ this.setScroll(valid, triggers, this.$refs.scrollbar);
3985
+ }
3986
+ });
3987
+ }
3988
+ } else if (
3989
+ res.event === 'reset' ||
3990
+ res.event === 'cancel' ||
3991
+ res.type === 'reset'
3992
+ ) {
3993
+ this.resetFields();
3994
+ if (this.closeDialog && this.esDialog) {
3995
+ this.esDialog.handleClose(res.reload || false);
3996
+ }
3997
+ this.$emit('reset', res);
3998
+ } else if (res.event === 'stepPrev') {
3999
+ this.stepActive -= 1;
4000
+ this.$emit('stepChange', this.stepActive);
4001
+ this.$emit(
4002
+ 'stepPrev',
4003
+ res,
4004
+ this.models,
4005
+ this.getNewValue(this.models, res)
4006
+ );
4007
+ } else if (res.event === 'stepNext') {
4008
+ this.$refs.esForm.validate((valid, fields, triggers) => {
4009
+ if (valid) {
4010
+ this.stepActive += 1;
4011
+ this.$emit('stepChange', this.stepActive);
4012
+ this.$emit(
4013
+ 'stepNext',
4014
+ res,
4015
+ this.models,
4016
+ this.getNewValue(this.models, res)
4017
+ );
4018
+ } else {
4019
+ this.setScroll(valid, triggers, this.$refs.scrollbar);
4020
+ }
4021
+ });
4022
+ } else if (res.verify === false) {
4023
+ this.$emit(
4024
+ 'click',
4025
+ res,
4026
+ this.models,
4027
+ this.getNewValue(this.models, res)
4028
+ );
4029
+ } else {
4030
+ this.$emit(
4031
+ 'click',
4032
+ res,
4033
+ this.models,
4034
+ this.getNewValue(this.models, res)
4035
+ );
4036
+ }
4037
+ },
4038
+ IdCardToInfo(id, res, type) {
4039
+ let reg = new RegExp('(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)');
4040
+ // 校验身份证:
4041
+ if (reg.test(id)) {
4042
+ let birthday =
4043
+ id.substring(6, 10) +
4044
+ '-' +
4045
+ id.substring(10, 12) +
4046
+ '-' +
4047
+ id.substring(12, 14);
4048
+ let sex = parseInt(id.substr(16, 2)) % 2 === 1 ? '男' : '女';
4049
+ let ageDate = new Date();
4050
+ let month = ageDate.getMonth() + 1;
4051
+ let day = ageDate.getDate();
4052
+ let age = ageDate.getFullYear() - id.substring(6, 10) - 1;
4053
+ if (
4054
+ id.substring(10, 12) < month ||
4055
+ (id.substring(10, 12) === month && id.substring(12, 14) <= day)
4056
+ ) {
4057
+ age++;
4058
+ }
4059
+ if (age <= 0) {
4060
+ age = 1;
4061
+ }
4062
+ if (type === 1) {
4063
+ //获取出生日期
4064
+ return birthday;
4065
+ } else if (type === 2) {
4066
+ //获取性别
4067
+ return sex;
4068
+ } else if (type === 3) {
4069
+ //获取年龄
4070
+ return age;
4071
+ } else {
4072
+ return { birthday: birthday, sex: sex, age: age };
4073
+ }
4074
+ } else {
4075
+ this.$refs.esForm.validateField(res.name);
4076
+ console.error('身份证号码错误');
4077
+ return null;
4078
+ }
4079
+ },
4080
+ handleDataChange(res, data) {
4081
+ this.$emit('dataChange', res, data);
4082
+ },
4083
+ handleCollapse() {},
4084
+ handleChange(a, b, c) {
4085
+ if (Object.prototype.hasOwnProperty.call(a, 'idCard')) {
4086
+ let obj = this.IdCardToInfo(b, a);
4087
+ if (obj) {
4088
+ if (Array.isArray(a.idCard)) {
4089
+ a.idCard.forEach(item => {
4090
+ if (typeof item === 'object') {
4091
+ for (let i in item) {
4092
+ if (typeof item[i] === 'string') {
4093
+ this.$set(this.models, i, obj[item[i]]);
4094
+ } else {
4095
+ this.$set(this.models, i, item[i][obj.sex]);
4096
+ }
4097
+ }
4098
+ } else {
4099
+ this.$set(this.models, item, obj[item]);
4100
+ }
4101
+ });
4102
+ } else {
4103
+ this.$set(this.models, 'age', obj.age);
4104
+ this.$set(this.models, 'sex', obj.sex);
4105
+ }
4106
+ }
4107
+ }
4108
+ if (a.portrait) {
4109
+ let adjunctId = b[0].response.adjunctId;
4110
+ this.$set(
4111
+ this.models,
4112
+ a.name,
4113
+ a.previewUrl ? a.previewUrl + adjunctId : adjunctId
4114
+ );
4115
+ }
4116
+ if (
4117
+ Object.prototype.hasOwnProperty.call(a, 'setValues') &&
4118
+ typeof b === 'object'
4119
+ ) {
4120
+ if (Array.isArray(a.setValues)) {
4121
+ a.setValues.forEach(item => {
4122
+ this.$set(this.models, item, b[item]);
4123
+ });
4124
+ } else {
4125
+ for (let i in a.setValues) {
4126
+ let item = a.setValues[i];
4127
+ this.$set(this.models, i, b[item]);
4128
+ }
4129
+ }
4130
+ }
4131
+ if (a.events && a.events.change) {
4132
+ a.events.change(a.name, b, c, this.models, a);
4133
+ } else {
4134
+ this.$emit('change', a.name, b, c, this.models, a);
4135
+ }
4136
+ },
4137
+ handleInput(a, b, c) {
4138
+ this.$emit('input', a.name, b, c, this.models);
4139
+ },
4140
+ handleFocus(a, b, c) {
4141
+ if (a.events && a.events.focus) {
4142
+ a.events.focus(a.name, b, c, this.models);
4143
+ } else {
4144
+ this.$emit('focus', a.name, b, c, this.models);
4145
+ }
4146
+ },
4147
+ handleBlur(a, b, c) {
4148
+ if (a.events && a.events.blur) {
4149
+ a.events.blur(a.name, b, c, this.models);
4150
+ } else {
4151
+ this.$emit('blur', a.name, b, c, this.models);
4152
+ }
4153
+ },
4154
+ handleClear(a, b, c) {
4155
+ if (a.events && a.events.clear) {
4156
+ a.events.clear(a.name, b, c, this.models);
4157
+ } else {
4158
+ this.$emit('clear', a.name, b, c, this.models);
4159
+ }
4160
+ },
4161
+ validate(callback) {
4162
+ let promise;
4163
+ if (typeof callback !== 'function' && window.Promise) {
4164
+ promise = new window.Promise((resolve, reject) => {
4165
+ callback = function(valid) {
4166
+ valid ? resolve(valid) : reject(valid);
4167
+ };
4168
+ });
4169
+ }
4170
+ this.$refs.esForm.validate((val, fields, triggers) => {
4171
+ this.setScroll(val, triggers, this.$refs.scrollbar);
4172
+ callback(val, fields, triggers);
4173
+ });
4174
+ if (promise) {
4175
+ return promise;
4176
+ }
4177
+ },
4178
+ setScroll(val, triggers, scrollbar) {
4179
+ if (!val && scrollbar && scrollbar.wrap) {
4180
+ let trigger = triggers[0];
4181
+ let top = trigger.offsetTop;
4182
+ let left = trigger.offsetLeft;
4183
+ scrollbar.wrap.scrollTop = top - 10 < 0 ? 0 : top;
4184
+ scrollbar.wrap.scrollLeft = left - 10 < 0 ? 0 : left;
4185
+ }
4186
+ },
4187
+ validateField(props, callback) {
4188
+ return this.$refs.esForm.validateField(props, callback);
4189
+ },
4190
+ resetFields() {
4191
+ for (let i in this.models) {
4192
+ this.$set(this.models, i, '');
4193
+ }
4194
+ this.$nextTick(() => {
4195
+ this.clearValidate();
4196
+ });
4197
+ //this.$refs.esForm.resetFields();
4198
+ },
4199
+ clearValidate() {
4200
+ this.$refs.esForm && this.$refs.esForm.clearValidate();
4201
+ },
4202
+ submitData(handle, close = true, type) {
4203
+ if (!handle) {
4204
+ handle = this.handles || {};
4205
+ }
4206
+ return new Promise((resolve, reject) => {
4207
+ this.$refs.esForm.validate(async (valid, fields, triggers) => {
4208
+ if (valid) {
4209
+ let models = this.getNewValue(
4210
+ util.extend({}, this._value, this.models),
4211
+ handle,
4212
+ type
4213
+ );
4214
+ let param = this.param;
4215
+ if (handle.param) {
4216
+ param = util.extend({}, this.param, handle.param);
4217
+ }
4218
+ let loading;
4219
+ if (this.submitLoading) {
4220
+ loading = util.loading(
4221
+ this.$loading,
4222
+ handle.loadingText ? `${handle.loadingText}...` : '提交中...'
4223
+ );
4224
+ }
4225
+ await util
4226
+ .ajax({
4227
+ url:
4228
+ typeof this.action === 'object'
4229
+ ? this.action[this.actionType]
4230
+ : this.action,
4231
+ format: handle.format || this.format,
4232
+ data: { ...models, ...param },
4233
+ method: this.method,
4234
+ loading: loading
4235
+ })
4236
+ .then(res => {
4237
+ loading && loading.close();
4238
+ if (res.rCode === 0) {
4239
+ this.$message.success(res.msg || res.message || '成功!');
4240
+ this.$emit('success', res, models);
4241
+ this.models = {};
4242
+ if (this.esTabs) {
4243
+ this.esTabs.handleTabState(true);
4244
+ }
4245
+ if (this.closeDialog) {
4246
+ if (
4247
+ window.$wujie &&
4248
+ window.$wujie.props &&
4249
+ window.$wujie.props._dialog
4250
+ ) {
4251
+ window.$wujie.bus.$emit(
4252
+ 'dialogClose',
4253
+ handle.reload,
4254
+ window.$wujie.props
4255
+ );
4256
+ }
4257
+ if (this.esDialog && close) {
4258
+ this.esDialog.handleClose(handle.reload);
4259
+ }
4260
+ }
4261
+ resolve();
4262
+ } else {
4263
+ this.$message.error(
4264
+ res.msg || res.message || '系统错误,请联系管理员!'
4265
+ );
4266
+ this.$emit('error', res);
4267
+ }
4268
+ })
4269
+ .catch(err => {
4270
+ if (err.message && err.message !== 'canceled') {
4271
+ this.$message.error(err.message);
4272
+ }
4273
+ reject(err);
4274
+ });
4275
+ } else {
4276
+ this.setScroll(valid, triggers, this.$refs.scrollbar);
4277
+ console.error(valid);
4278
+ return false;
4279
+ }
4280
+ });
4281
+ });
4282
+ },
4283
+ getVal(value, keys) {
4284
+ if (typeof keys === 'string') {
4285
+ if (Array.isArray(value)) {
4286
+ let val = value.map(item => {
4287
+ return item[keys];
4288
+ });
4289
+ return this.format ? val.join(',') : val;
4290
+ }
4291
+ return this.format && Array.isArray(value[keys])
4292
+ ? value[keys].join(',')
4293
+ : value[keys];
4294
+ } else if (!Array.isArray(keys)) {
4295
+ for (let i in keys) {
4296
+ if (typeof keys[i] === 'string') {
4297
+ if (Array.isArray(value[i])) {
4298
+ let val = value[i].map(item => {
4299
+ return item[keys[i]];
4300
+ });
4301
+ return this.format ? val.join(',') : val;
4302
+ }
4303
+ return this.format && Array.isArray(value[i][keys[i]])
4304
+ ? value[i][keys[i]].join(',')
4305
+ : value[i][keys[i]];
4306
+ } else {
4307
+ return this.getVal(value[i], keys[i]);
4308
+ }
4309
+ }
4310
+ }
4311
+ return null;
4312
+ },
4313
+ getNewValue(value, handle, type) {
4314
+ let models = JSON.parse(JSON.stringify(value));
4315
+ if (this.parseValue) {
4316
+ if (typeof this.parseValue === 'function') {
4317
+ models = this.parseValue(value, type);
4318
+ } else {
4319
+ for (let i in this.parseValue) {
4320
+ models[i] = this.getVal(value, this.parseValue[i]);
4321
+ }
4322
+ }
4323
+ }
4324
+ if (handle && handle.table) {
4325
+ //table:取数据表中id或者指定的值作为提交值
4326
+ if (util.isObject(handle.table)) {
4327
+ let tval = models[handle.table.valueKey];
4328
+ for (let i in handle.table) {
4329
+ if (i !== 'valueKey') {
4330
+ models[i] = tval.map(item => {
4331
+ return item[handle.table[i]];
4332
+ });
4333
+ if (handle.join) {
4334
+ models[i] = models[i].join(',');
4335
+ }
4336
+ }
4337
+ }
4338
+ } else {
4339
+ let tval = models[handle.table];
4340
+ let ids = tval.map(item => {
4341
+ return item.id;
4342
+ });
4343
+ //join:提交值是否拼接
4344
+ models[handle.table] = handle.join ? ids.join(',') : ids;
4345
+ }
4346
+ }
4347
+
4348
+ if (this.within) {
4349
+ //within:把提交数据装到指定属性中
4350
+ let newData = {};
4351
+ if (typeof this.within === 'string') {
4352
+ newData[this.within] = obj;
4353
+ } else {
4354
+ for (let i in this.within) {
4355
+ let names = this.within[i];
4356
+ let itemData;
4357
+ if (Array.isArray(names)) {
4358
+ itemData = names.map(item => {
4359
+ let val = obj[item];
4360
+ delete obj[item];
4361
+ return val;
4362
+ });
4363
+ }
4364
+ newData[i] = itemData;
4365
+ }
4366
+ }
4367
+ models = { ...newData, ...obj };
4368
+ }
4369
+ if (this.formatSubmit) {
4370
+ //formatSubmit:提交数据装到masterData或者指定属性中
4371
+ let masterData = {};
4372
+ let obj = JSON.parse(JSON.stringify(models));
4373
+ if (typeof this.formatSubmit === 'string') {
4374
+ masterData[this.formatSubmit] = obj;
4375
+ } else {
4376
+ masterData['masterData'] = obj;
4377
+ }
4378
+ models = masterData;
4379
+ }
4380
+ return models;
4381
+ },
4382
+ getRules(res) {
4383
+ if (res.rules && !res.hide) {
4384
+ if (Array.isArray(res.rules)) {
4385
+ return res.rules.map(item => {
4386
+ if (rules[item.type]) {
4387
+ return {
4388
+ pattern: rules[item.type]['pattern'],
4389
+ message: item.message
4390
+ ? item.message
4391
+ : rules[item.type]['message'],
4392
+ trigger: item.trigger
4393
+ ? item.trigger
4394
+ : res.fetchSuggestions ||
4395
+ res.url ||
4396
+ (res.data && res.data.length)
4397
+ ? 'change'
4398
+ : 'blur'
4399
+ };
4400
+ }
4401
+ return item;
4402
+ });
4403
+ }
4404
+ if (rules[res.rules.type]) {
4405
+ return {
4406
+ pattern: rules[res.rules.type]['pattern'],
4407
+ message: res.rules.message
4408
+ ? res.rules.message
4409
+ : rules[res.rules.type]['message'],
4410
+ trigger: res.rules.trigger
4411
+ ? res.rules.trigger
4412
+ : res.fetchSuggestions || res.url || (res.data && res.data.length)
4413
+ ? 'change'
4414
+ : 'blur'
4415
+ };
4416
+ }
4417
+ return res.rules;
4418
+ }
4419
+ return undefined;
4420
+ },
4421
+ handleExclAttribute({ data, attrs }) {
4422
+ return util.exclAttribute({
4423
+ data: data,
4424
+ attrs: attrs
4425
+ });
4426
+ }
4427
+ }
4428
+ };
4429
+ </script>