eoss-ui 0.7.93 → 0.7.94

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 (319) hide show
  1. package/lib/calogin.js +233 -233
  2. package/lib/eoss-ui.common.js +921 -920
  3. package/lib/flow-list.js +96 -96
  4. package/lib/flow.js +285 -284
  5. package/lib/index.js +1 -1
  6. package/lib/main.js +288 -288
  7. package/lib/qr-code.js +13 -13
  8. package/package.json +1 -1
  9. package/packages/button/index.js +5 -5
  10. package/packages/button/src/main.vue +418 -418
  11. package/packages/button-group/index.js +5 -5
  12. package/packages/button-group/src/main.vue +346 -346
  13. package/packages/calendar/index.js +5 -5
  14. package/packages/calogin/index.js +5 -5
  15. package/packages/calogin/src/main.vue +412 -412
  16. package/packages/calogin/src/plugin.js +915 -915
  17. package/packages/card/index.js +5 -5
  18. package/packages/card/src/main.vue +156 -156
  19. package/packages/cascader/index.js +5 -5
  20. package/packages/cascader/src/main.vue +168 -168
  21. package/packages/checkbox-group/index.js +5 -5
  22. package/packages/checkbox-group/src/main.vue +333 -333
  23. package/packages/clients/index.js +5 -5
  24. package/packages/clients/src/main.vue +151 -151
  25. package/packages/data-table/index.js +5 -5
  26. package/packages/data-table/src/children.vue +39 -39
  27. package/packages/data-table/src/main.vue +1845 -1845
  28. package/packages/data-table/src/sizer.vue +195 -195
  29. package/packages/data-table-form/index.js +5 -5
  30. package/packages/data-table-form/src/checkbox.vue +101 -101
  31. package/packages/data-table-form/src/colgroup.vue +17 -17
  32. package/packages/data-table-form/src/main.vue +181 -181
  33. package/packages/data-table-form/src/radio.vue +65 -65
  34. package/packages/data-table-form/src/table.vue +233 -233
  35. package/packages/data-table-form/src/tbody.vue +336 -336
  36. package/packages/data-table-form/src/thead.vue +68 -68
  37. package/packages/date-picker/index.js +5 -5
  38. package/packages/date-picker/src/main.vue +236 -236
  39. package/packages/dialog/index.js +5 -5
  40. package/packages/enable-drag/index.js +5 -5
  41. package/packages/enterprise/index.js +5 -5
  42. package/packages/enterprise/src/main.vue +66 -66
  43. package/packages/error-page/index.js +5 -5
  44. package/packages/error-page/src/main.vue +44 -44
  45. package/packages/flow/index.js +5 -5
  46. package/packages/flow/src/component/Circulate.vue +417 -417
  47. package/packages/flow/src/component/CommonOpinions.vue +376 -376
  48. package/packages/flow/src/component/CustomPreset.vue +324 -324
  49. package/packages/flow/src/component/FileList.vue +97 -97
  50. package/packages/flow/src/component/FreeCirculation.vue +244 -244
  51. package/packages/flow/src/component/Preset.vue +257 -257
  52. package/packages/flow/src/component/SendMsg.vue +242 -242
  53. package/packages/flow/src/component/SortFlow.vue +110 -110
  54. package/packages/flow/src/component/TimeLimit.vue +190 -190
  55. package/packages/flow/src/component/taskUnionExamine.vue +761 -761
  56. package/packages/flow/src/form.vue +123 -123
  57. package/packages/flow/src/freeStartFlow.vue +2855 -2855
  58. package/packages/flow/src/main.vue +4144 -4144
  59. package/packages/flow/src/processForm.vue +1680 -1680
  60. package/packages/flow/src/processReject.vue +309 -309
  61. package/packages/flow/src/reset.vue +946 -946
  62. package/packages/flow/src/startTaskRead.vue +695 -695
  63. package/packages/flow/src/supervise.vue +159 -159
  64. package/packages/flow/src/table.vue +58 -58
  65. package/packages/flow-group/index.js +5 -5
  66. package/packages/flow-group/src/main.vue +750 -750
  67. package/packages/flow-list/index.js +5 -5
  68. package/packages/flow-list/src/main.vue +2337 -2337
  69. package/packages/form/index.js +5 -5
  70. package/packages/form/src/main.vue +3901 -3901
  71. package/packages/form/src/table.vue +1512 -1512
  72. package/packages/handle-user/index.js +5 -5
  73. package/packages/handle-user/src/main.vue +137 -137
  74. package/packages/handler/index.js +5 -5
  75. package/packages/handler/src/main.vue +499 -499
  76. package/packages/icon/index.js +5 -5
  77. package/packages/icon/src/main.vue +104 -104
  78. package/packages/icons/index.js +5 -5
  79. package/packages/icons/src/main.vue +81 -81
  80. package/packages/input/index.js +5 -5
  81. package/packages/input/src/main.vue +356 -356
  82. package/packages/input-number/index.js +5 -5
  83. package/packages/input-number/src/main.vue +106 -106
  84. package/packages/label/index.js +5 -5
  85. package/packages/label/src/main.vue +457 -457
  86. package/packages/layout/index.js +5 -5
  87. package/packages/layout/src/item.vue +152 -152
  88. package/packages/layout/src/main.vue +31 -31
  89. package/packages/login/index.js +5 -5
  90. package/packages/login/src/main.vue +2088 -2088
  91. package/packages/login/src/resetPassword.vue +557 -557
  92. package/packages/main/index.js +5 -5
  93. package/packages/main/src/default/message.vue +249 -249
  94. package/packages/main/src/default/notice.vue +157 -157
  95. package/packages/main/src/default/userinfo.vue +513 -513
  96. package/packages/main/src/public/online.vue +89 -89
  97. package/packages/main/src/public/search.vue +464 -464
  98. package/packages/main/src/public/settings.vue +273 -273
  99. package/packages/main/src/simplicity/apps.vue +388 -388
  100. package/packages/main/src/simplicity/avatar.vue +82 -82
  101. package/packages/main/src/simplicity/handler.vue +158 -158
  102. package/packages/main/src/simplicity/index.vue +2335 -2335
  103. package/packages/main/src/simplicity/lists.vue +84 -84
  104. package/packages/main/src/simplicity/menu-list.vue +135 -135
  105. package/packages/main/src/simplicity/message.vue +293 -293
  106. package/packages/main/src/simplicity/notice.vue +222 -222
  107. package/packages/main/src/simplicity/router-page.vue +45 -45
  108. package/packages/main/src/simplicity/sub-menu.vue +276 -276
  109. package/packages/main/src/simplicity/user.vue +259 -259
  110. package/packages/main/src/simplicity/userinfo.vue +408 -408
  111. package/packages/main/src/simplicityTop/apps.vue +388 -388
  112. package/packages/main/src/simplicityTop/avatar.vue +82 -82
  113. package/packages/main/src/simplicityTop/handler.vue +215 -215
  114. package/packages/main/src/simplicityTop/index.vue +2620 -2620
  115. package/packages/main/src/simplicityTop/lists.vue +84 -84
  116. package/packages/main/src/simplicityTop/menu-list.vue +135 -135
  117. package/packages/main/src/simplicityTop/message.vue +293 -293
  118. package/packages/main/src/simplicityTop/notice.vue +222 -222
  119. package/packages/main/src/simplicityTop/router-page.vue +45 -45
  120. package/packages/main/src/simplicityTop/sub-menu.vue +274 -274
  121. package/packages/main/src/simplicityTop/user.vue +259 -259
  122. package/packages/main/src/simplicityTop/userinfo.vue +408 -408
  123. package/packages/menu/index.js +5 -5
  124. package/packages/menu/src/main.vue +595 -595
  125. package/packages/nav/index.js +5 -5
  126. package/packages/nav/src/main.vue +351 -351
  127. package/packages/notify/index.js +5 -5
  128. package/packages/notify/src/main.vue +538 -538
  129. package/packages/page/index.js +5 -5
  130. package/packages/page/src/main.vue +167 -167
  131. package/packages/pagination/index.js +5 -5
  132. package/packages/pagination/src/main.vue +96 -96
  133. package/packages/player/index.js +5 -5
  134. package/packages/player/src/main.vue +194 -194
  135. package/packages/qr-code/index.js +5 -5
  136. package/packages/qr-code/src/main.vue +170 -170
  137. package/packages/radio-group/index.js +6 -6
  138. package/packages/radio-group/src/main.vue +319 -319
  139. package/packages/retrial-auth/index.js +5 -5
  140. package/packages/retrial-auth/src/main.vue +299 -299
  141. package/packages/select/index.js +5 -5
  142. package/packages/select-ganged/index.js +5 -5
  143. package/packages/select-ganged/src/main.vue +724 -724
  144. package/packages/selector/index.js +5 -5
  145. package/packages/selector/src/main.vue +761 -761
  146. package/packages/selector-panel/index.js +5 -5
  147. package/packages/selector-panel/src/main.vue +1036 -1036
  148. package/packages/selector-panel/src/selection.vue +174 -174
  149. package/packages/selector-panel/src/tree.vue +129 -129
  150. package/packages/sizer/index.js +5 -5
  151. package/packages/sizer/src/main.vue +254 -254
  152. package/packages/steps/index.js +5 -5
  153. package/packages/steps/src/main.vue +181 -181
  154. package/packages/switch/index.js +5 -5
  155. package/packages/switch/src/main.vue +170 -170
  156. package/packages/table-form/index.js +5 -5
  157. package/packages/tabs/index.js +5 -5
  158. package/packages/tabs/src/main.vue +788 -788
  159. package/packages/tabs-panel/index.js +5 -5
  160. package/packages/tabs-panel/src/main.vue +29 -29
  161. package/packages/theme-chalk/gulpfile.js +25 -0
  162. package/packages/theme-chalk/src/base.scss +261 -261
  163. package/packages/theme-chalk/src/button-group.scss +176 -176
  164. package/packages/theme-chalk/src/button.scss +24 -24
  165. package/packages/theme-chalk/src/calendar.scss +113 -113
  166. package/packages/theme-chalk/src/card.scss +99 -99
  167. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  168. package/packages/theme-chalk/src/clients.scss +87 -87
  169. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  170. package/packages/theme-chalk/src/data-table.scss +297 -297
  171. package/packages/theme-chalk/src/date-picker.scss +7 -7
  172. package/packages/theme-chalk/src/dialog.scss +77 -77
  173. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  174. package/packages/theme-chalk/src/enterprise.scss +5 -5
  175. package/packages/theme-chalk/src/error-page.scss +18 -18
  176. package/packages/theme-chalk/src/flow-group.scss +110 -110
  177. package/packages/theme-chalk/src/flow-list.scss +55 -55
  178. package/packages/theme-chalk/src/flow.scss +373 -373
  179. package/packages/theme-chalk/src/form.scss +501 -501
  180. package/packages/theme-chalk/src/handle-user.scss +40 -40
  181. package/packages/theme-chalk/src/handler.scss +148 -148
  182. package/packages/theme-chalk/src/icon.scss +3452 -3452
  183. package/packages/theme-chalk/src/icons.scss +99 -99
  184. package/packages/theme-chalk/src/input.scss +9 -9
  185. package/packages/theme-chalk/src/label.scss +24 -24
  186. package/packages/theme-chalk/src/layout.scss +46 -46
  187. package/packages/theme-chalk/src/login.scss +1006 -1006
  188. package/packages/theme-chalk/src/main.scss +664 -664
  189. package/packages/theme-chalk/src/menu.scss +224 -224
  190. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  191. package/packages/theme-chalk/src/nav.scss +111 -111
  192. package/packages/theme-chalk/src/page.scss +3 -3
  193. package/packages/theme-chalk/src/pagination.scss +29 -29
  194. package/packages/theme-chalk/src/player.scss +9 -9
  195. package/packages/theme-chalk/src/qr-code.scss +17 -17
  196. package/packages/theme-chalk/src/radio-group.scss +9 -9
  197. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  198. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  199. package/packages/theme-chalk/src/select.scss +8 -8
  200. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  201. package/packages/theme-chalk/src/selector.scss +114 -114
  202. package/packages/theme-chalk/src/simplicity-top.scss +1845 -1845
  203. package/packages/theme-chalk/src/simplicity.scss +1403 -1403
  204. package/packages/theme-chalk/src/sizer.scss +36 -36
  205. package/packages/theme-chalk/src/steps.scss +88 -88
  206. package/packages/theme-chalk/src/switch.scss +3 -3
  207. package/packages/theme-chalk/src/table-form.scss +1 -1
  208. package/packages/theme-chalk/src/tabs.scss +87 -87
  209. package/packages/theme-chalk/src/tips.scss +7 -7
  210. package/packages/theme-chalk/src/toolbar.scss +179 -179
  211. package/packages/theme-chalk/src/tree-group.scss +72 -72
  212. package/packages/theme-chalk/src/tree.scss +165 -165
  213. package/packages/theme-chalk/src/upload.scss +172 -172
  214. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  215. package/packages/tips/index.js +5 -5
  216. package/packages/tips/src/main.vue +141 -141
  217. package/packages/toolbar/index.js +5 -5
  218. package/packages/toolbar/src/main.vue +430 -430
  219. package/packages/tree/index.js +5 -5
  220. package/packages/tree-group/index.js +5 -5
  221. package/packages/upload/index.js +5 -5
  222. package/packages/upload/src/main.vue +1344 -1344
  223. package/packages/upload/src/picture.js +15 -15
  224. package/packages/wujie/index.js +5 -5
  225. package/packages/wujie/src/main.vue +146 -146
  226. package/packages/wxlogin/index.js +5 -5
  227. package/packages/wxlogin/src/main.vue +128 -128
  228. package/src/config/api.js +348 -348
  229. package/src/config/image.js +2 -2
  230. package/src/index.js +163 -163
  231. package/src/utils/bus.js +3 -3
  232. package/src/utils/date-util.js +312 -312
  233. package/src/utils/http.js +50 -50
  234. package/src/utils/rules.js +18 -18
  235. package/src/utils/store.js +21 -21
  236. package/src/utils/webSocket.js +107 -107
  237. package/packages/.DS_Store +0 -0
  238. package/packages/calogin/.DS_Store +0 -0
  239. package/packages/date-picker/.DS_Store +0 -0
  240. package/packages/date-picker/src/.DS_Store +0 -0
  241. package/packages/dialog/.DS_Store +0 -0
  242. package/packages/flow/.DS_Store +0 -0
  243. package/packages/flow/src/.DS_Store +0 -0
  244. package/packages/flow-list/.DS_Store +0 -0
  245. package/packages/form/.DS_Store +0 -0
  246. package/packages/icon/.DS_Store +0 -0
  247. package/packages/login/.DS_Store +0 -0
  248. package/packages/main/.DS_Store +0 -0
  249. package/packages/main/src/.DS_Store +0 -0
  250. package/packages/menu/.DS_Store +0 -0
  251. package/packages/select/.DS_Store +0 -0
  252. package/packages/selector/.DS_Store +0 -0
  253. package/packages/selector-panel/.DS_Store +0 -0
  254. package/packages/theme-chalk/lib/base.css +0 -1
  255. package/packages/theme-chalk/lib/button-group.css +0 -1
  256. package/packages/theme-chalk/lib/button.css +0 -1
  257. package/packages/theme-chalk/lib/calendar.css +0 -1
  258. package/packages/theme-chalk/lib/calogin.css +0 -0
  259. package/packages/theme-chalk/lib/card.css +0 -1
  260. package/packages/theme-chalk/lib/cascader.css +0 -0
  261. package/packages/theme-chalk/lib/checkbox-group.css +0 -1
  262. package/packages/theme-chalk/lib/clients.css +0 -1
  263. package/packages/theme-chalk/lib/data-table-form.css +0 -1
  264. package/packages/theme-chalk/lib/data-table.css +0 -1
  265. package/packages/theme-chalk/lib/date-picker.css +0 -1
  266. package/packages/theme-chalk/lib/dialog.css +0 -1
  267. package/packages/theme-chalk/lib/enable-drag.css +0 -1
  268. package/packages/theme-chalk/lib/enterprise.css +0 -1
  269. package/packages/theme-chalk/lib/error-page.css +0 -1
  270. package/packages/theme-chalk/lib/flow-chart.css +0 -0
  271. package/packages/theme-chalk/lib/flow-group.css +0 -1
  272. package/packages/theme-chalk/lib/flow-list.css +0 -1
  273. package/packages/theme-chalk/lib/flow.css +0 -1
  274. package/packages/theme-chalk/lib/fonts/iconfont.ttf +0 -0
  275. package/packages/theme-chalk/lib/fonts/iconfont.woff +0 -0
  276. package/packages/theme-chalk/lib/form.css +0 -1
  277. package/packages/theme-chalk/lib/handle-user.css +0 -1
  278. package/packages/theme-chalk/lib/handler.css +0 -1
  279. package/packages/theme-chalk/lib/icon.css +0 -1
  280. package/packages/theme-chalk/lib/icons.css +0 -1
  281. package/packages/theme-chalk/lib/index.css +0 -1
  282. package/packages/theme-chalk/lib/input-number.css +0 -0
  283. package/packages/theme-chalk/lib/input.css +0 -1
  284. package/packages/theme-chalk/lib/label.css +0 -1
  285. package/packages/theme-chalk/lib/layout.css +0 -1
  286. package/packages/theme-chalk/lib/login.css +0 -1
  287. package/packages/theme-chalk/lib/main.css +0 -1
  288. package/packages/theme-chalk/lib/menu.css +0 -1
  289. package/packages/theme-chalk/lib/nav.css +0 -1
  290. package/packages/theme-chalk/lib/notify.css +0 -0
  291. package/packages/theme-chalk/lib/page.css +0 -1
  292. package/packages/theme-chalk/lib/pagination.css +0 -1
  293. package/packages/theme-chalk/lib/player.css +0 -1
  294. package/packages/theme-chalk/lib/qr-code.css +0 -1
  295. package/packages/theme-chalk/lib/radio-group.css +0 -1
  296. package/packages/theme-chalk/lib/retrial-auth.css +0 -1
  297. package/packages/theme-chalk/lib/select-ganged.css +0 -1
  298. package/packages/theme-chalk/lib/select.css +0 -1
  299. package/packages/theme-chalk/lib/selector-panel.css +0 -1
  300. package/packages/theme-chalk/lib/selector.css +0 -1
  301. package/packages/theme-chalk/lib/simplicity-top.css +0 -1
  302. package/packages/theme-chalk/lib/simplicity.css +0 -1
  303. package/packages/theme-chalk/lib/sizer.css +0 -1
  304. package/packages/theme-chalk/lib/steps.css +0 -1
  305. package/packages/theme-chalk/lib/switch.css +0 -1
  306. package/packages/theme-chalk/lib/table-form.css +0 -0
  307. package/packages/theme-chalk/lib/tabs-panel.css +0 -0
  308. package/packages/theme-chalk/lib/tabs.css +0 -1
  309. package/packages/theme-chalk/lib/tips.css +0 -1
  310. package/packages/theme-chalk/lib/toolbar.css +0 -1
  311. package/packages/theme-chalk/lib/tree-group.css +0 -1
  312. package/packages/theme-chalk/lib/tree.css +0 -1
  313. package/packages/theme-chalk/lib/upload.css +0 -1
  314. package/packages/theme-chalk/lib/wujie.css +0 -0
  315. package/packages/theme-chalk/lib/wxlogin.css +0 -1
  316. package/packages/theme-chalk/src/.DS_Store +0 -0
  317. package/packages/upload/.DS_Store +0 -0
  318. package/src/.DS_Store +0 -0
  319. package/src/utils/.DS_Store +0 -0
@@ -1,1845 +1,1845 @@
1
- <template>
2
- <component
3
- v-show="showTable"
4
- class="es-data-table"
5
- label-width="0"
6
- ref="component"
7
- v-loading="tableLoading"
8
- element-loading-background="rgba(0, 0, 0, 0.65)"
9
- :is="tag"
10
- :model="tag === 'div' ? '' : list"
11
- :element-loading-text="tableLoadingText"
12
- >
13
- <es-toolbar
14
- v-if="showToolbar"
15
- ref="toolbar"
16
- :class="{
17
- 'es-table-toolbar-plus': mode == 'plus'
18
- }"
19
- v-bind="{
20
- contents: toolbars,
21
- showLabel: showLabel,
22
- close: close,
23
- callBack: resetHeight,
24
- showFormBtn: showFormBtn,
25
- searchValue: searchValue,
26
- advanceValue: advanceValue
27
- }"
28
- v-on="{
29
- click: handleClick,
30
- search: hanleSearch,
31
- submit: hanleSubmit,
32
- tabs: handleTabs,
33
- reset: hanleReset,
34
- cancel: hanleCancel,
35
- toolbarChange: toolbarChange,
36
- ...toolbarEvents
37
- }"
38
- ></es-toolbar>
39
- <p v-if="title" ref="title" class="es-table-title" v-html="title"></p>
40
- <div
41
- v-if="show"
42
- :style="styles"
43
- class="es-data-table-content"
44
- :class="{
45
- 'es-table-border-none': border == 'none',
46
- 'es-table-plus': mode == 'plus'
47
- }"
48
- ref="esTableContent"
49
- >
50
- <el-table
51
- ref="oaTable"
52
- v-bind="{
53
- ...$attrs,
54
- emptyText: emptyText,
55
- showSummary: showTotal,
56
- sumText: sumText || totalText,
57
- totalRow: restotalRow || totalRow,
58
- height:
59
- tableHeight !== 'auto' && tableHeight !== false
60
- ? tableHeight
61
- : undefined,
62
- border: _border,
63
- infiniteScroll: getTableData,
64
- infiniteScrollDisabled: infiniteDisabled,
65
- dragSort: dragSort,
66
- dragSortClass: dragSortIcon
67
- }"
68
- :data.sync="list"
69
- v-on="{
70
- ...$listeners,
71
- 'row-click': rowClick,
72
- 'selection-change': selectionChange,
73
- 'filter-column': handleFilterColumn,
74
- 'sort-change': handleSortChange,
75
- 'update-drag-sort': handleUpdateDragSort
76
- }"
77
- :class="
78
- 'es-table' +
79
- (theadBorder && border != 'none' ? ' es-thead-border' : '')
80
- "
81
- >
82
- <slot name="suffix"></slot>
83
- <slot></slot>
84
- <template v-for="(item, index) in theads">
85
- <template v-if="item.hide !== true">
86
- <el-table-column
87
- v-if="item.type === 'sort'"
88
- width="32"
89
- prop="id"
90
- :key="item.key || item.label || item.title || index"
91
- label=" "
92
- >
93
- <template slot-scope="scope">
94
- <es-icon
95
- v-if="!scope.row.fixed"
96
- class="es-move"
97
- :contents="dragSortIcon"
98
- ></es-icon>
99
- </template>
100
- </el-table-column>
101
- <template
102
- v-else-if="item.type === 'index' || item.type === 'selection'"
103
- >
104
- <el-table-column
105
- :key="item.key || item.label || item.title || index"
106
- v-bind="dragSort ? { ...item, fixed: false } : item"
107
- ></el-table-column>
108
- </template>
109
- <template v-else>
110
- <children
111
- :key="item.key || item.label || item.title || index"
112
- :tag="item.tag"
113
- v-bind="{
114
- mode: mode,
115
- name: name,
116
- indexs: index,
117
- form: form,
118
- readonly: readonly,
119
- optionData: optionDatas,
120
- dragSort: dragSort,
121
- ...(dragSort ? { ...item, fixed: false } : { ...item })
122
- }"
123
- v-on="{
124
- handleClick: handleClick,
125
- formBlur: formBlur,
126
- formFocus: formFocus,
127
- formChange: formChange
128
- }"
129
- ></children>
130
- </template>
131
- </template>
132
- </template>
133
- <slot name="prefix"></slot>
134
- <el-table-column
135
- v-if="editable && !readonly"
136
- width="80"
137
- type="handle"
138
- align="center"
139
- label="操作"
140
- fixed="right"
141
- class="eoss-ui-eidt-column"
142
- :button="headButton"
143
- :total="false"
144
- >
145
- <template slot-scope="scope">
146
- <el-button
147
- v-if="!scope.row.cantAdd"
148
- type="text"
149
- @click="handleClickAddData(scope)"
150
- >
151
- <i class="el-icon-circle-plus-outline"></i>
152
- </el-button>
153
- <el-button
154
- v-if="!scope.row.cantDelete && !isLeast"
155
- type="text"
156
- @click="handleClickDeleteData(scope)"
157
- >
158
- <i class="el-icon-remove-outline"></i>
159
- </el-button>
160
- </template>
161
- </el-table-column>
162
- <template slot="append"><slot name="append"></slot></template>
163
- </el-table>
164
- <div v-if="infiniteScroll" class="es-table-page es-loading-page">
165
- <span>共{{ config.totalCount }}条,</span>
166
- <span>已加载{{ list.length }}条</span>
167
- </div>
168
- <es-pagination
169
- v-else-if="page !== false && showPage !== false"
170
- ref="pagination"
171
- v-bind="config"
172
- class="es-table-page"
173
- :position="page.position"
174
- :style="{ 'text-align': page.position }"
175
- v-on="{
176
- change: sizeChange,
177
- current: currentChange,
178
- prev: preClick,
179
- next: nextClick
180
- }"
181
- ></es-pagination>
182
- <slot name="dialog"></slot>
183
- <slot name="other"></slot>
184
- </div>
185
- <es-dialog v-if="theads.length" title="列表设置" :visible.sync="showSizer">
186
- <sizer
187
- v-if="showSizer"
188
- :data="theads"
189
- :mode="mode"
190
- @confirm="mergeThead"
191
- ></sizer>
192
- </es-dialog>
193
- <i
194
- class="el-icon-setting es-table-setting"
195
- title="页面配置"
196
- v-if="isShow"
197
- @click="openEditPage"
198
- ></i>
199
-
200
- <es-dialog title="页面配置" :visible.sync="showEditPage" size="full">
201
- <iframe
202
- v-if="showEditPage"
203
- width="100%"
204
- height="100%"
205
- frameborder="0"
206
- :src="editPage"
207
- ></iframe>
208
- </es-dialog>
209
- </component>
210
- </template>
211
- <script>
212
- import {
213
- findSysCode,
214
- getDictList,
215
- formContents
216
- } from 'eoss-ui/src/config/api.js';
217
- import { debounce, throttle } from 'throttle-debounce';
218
- import children from './children.vue';
219
- import sizer from './sizer.vue';
220
- import util from 'eoss-ui/src/utils/util';
221
- import qs from 'qs';
222
- const systemMode = util.getWinTopProperty('systemMode', 'default');
223
- const pageView = util.getParams('pageView');
224
- export default {
225
- name: 'EsDataTable',
226
- inheritAttrs: false,
227
- components: {
228
- children,
229
- sizer
230
- },
231
- provide() {
232
- return {
233
- table: this,
234
- tableReload: this.reload
235
- };
236
- },
237
- inject: {
238
- elForm: {
239
- default: ''
240
- },
241
- injector: {
242
- default: ''
243
- },
244
- scale: {
245
- default: ''
246
- }
247
- },
248
- props: {
249
- viewCode: {
250
- type: String,
251
- default: pageView
252
- },
253
- contentsUrl: {
254
- type: String,
255
- default: formContents
256
- },
257
- mode: {
258
- type: String,
259
- default: systemMode
260
- },
261
- service: String,
262
- loading: {
263
- type: Boolean,
264
- default: false
265
- },
266
- readonly: Boolean,
267
- url: {
268
- type: String,
269
- default: ''
270
- },
271
- defaults: {
272
- type: Boolean,
273
- default: false
274
- },
275
- param: {
276
- type: Object,
277
- default() {
278
- return {};
279
- }
280
- },
281
- method: {
282
- type: String,
283
- default: 'get'
284
- },
285
- isEncodeURI: Boolean,
286
- format: {
287
- type: Boolean,
288
- default: true
289
- },
290
- data: {
291
- type: Array,
292
- default() {
293
- return [];
294
- }
295
- },
296
- // 表格表单
297
- form: {
298
- type: Boolean,
299
- default: false
300
- },
301
- name: String,
302
- title: {
303
- type: String,
304
- default: ''
305
- },
306
- // 导出文件名
307
- fileName: {
308
- type: String,
309
- default: ''
310
- },
311
- // 工具栏配置
312
- toolbar: {
313
- type: [Array, Object, Boolean],
314
- default: false
315
- },
316
- showLabel: Boolean,
317
- searchValue: Object,
318
- advanceValue: Object,
319
- executeSearch: {
320
- type: Boolean,
321
- default: true
322
- },
323
- executeFilter: {
324
- type: Boolean,
325
- default: true
326
- },
327
- // 是否开启序号
328
- numbers: {
329
- type: Boolean,
330
- default: false
331
- },
332
- orders: {
333
- type: String,
334
- default: 'asc'
335
- },
336
- // 是否筛选列功能
337
- filter: {
338
- type: Boolean,
339
- default: false
340
- },
341
- // 是否开启多选
342
- checkbox: {
343
- type: Boolean,
344
- default: false
345
- },
346
- selectable: Function,
347
- reserveSelection: Boolean,
348
- // 默认选中,类型为Boolean时默认全(不)选
349
- checked: {
350
- type: [Boolean, Array],
351
- default: false
352
- },
353
- checkedKey: {
354
- type: String,
355
- default: 'id'
356
- },
357
- // 无数据时显示的文本
358
- emptyText: {
359
- type: String,
360
- default: '暂无数据'
361
- },
362
- // 是否开启合计行区域
363
- total: {
364
- type: Boolean,
365
- default: false
366
- },
367
- //本地数据总条数差值
368
- lose: {
369
- type: Number,
370
- default: 0
371
- },
372
- // 合计行显示文本
373
- totalText: {
374
- type: String,
375
- default: ''
376
- },
377
- showSummary: {
378
- type: Boolean,
379
- default: false
380
- },
381
- sumText: {
382
- type: String,
383
- default: ''
384
- },
385
- // 开启分页
386
- page: {
387
- type: [Boolean, Object],
388
- default() {
389
- return false;
390
- }
391
- },
392
- showPage: {
393
- type: Boolean,
394
- default: true
395
- },
396
- // 渲染树形数据指定field
397
- treeKey: {
398
- type: String,
399
- default: ''
400
- },
401
- // 单元格配置
402
- thead: {
403
- type: Array,
404
- default() {
405
- return [];
406
- }
407
- },
408
- optionData: Object,
409
- // 开启数据增加删除按钮
410
- editable: {
411
- type: Boolean,
412
- default: false
413
- },
414
- theadAdd: {
415
- type: Boolean,
416
- default: true
417
- },
418
- // 单元格点击事件
419
- click: {
420
- type: Boolean,
421
- default: false
422
- },
423
- totalRow: {
424
- type: Object,
425
- default() {
426
- return {};
427
- }
428
- },
429
- parseData: Function,
430
- close: Boolean,
431
- full: {
432
- type: Boolean,
433
- default: true
434
- },
435
- height: [Number, String],
436
- maxHeight: [Number, String],
437
- response: Function,
438
- minWidth: [Number, String],
439
- border: {
440
- type: [Boolean, String],
441
- default: false,
442
- validator: function (value) {
443
- return [true, false, 'none'].includes(value);
444
- }
445
- },
446
- theadBorder: {
447
- type: Boolean,
448
- default: true
449
- },
450
- checkboxParseData: Function,
451
- checkboxParse: Object,
452
- display: {
453
- type: Boolean,
454
- default: true
455
- },
456
- showFormBtn: {
457
- type: Boolean,
458
- default: true
459
- },
460
- index: {
461
- type: [Number, Function],
462
- default: 1
463
- },
464
- accumulated: {
465
- type: Boolean,
466
- default: true
467
- },
468
- immediate: {
469
- type: Boolean,
470
- default: true
471
- },
472
- zoom: false,
473
- exportExcludeLabel: {
474
- type: Array,
475
- default() {
476
- return [];
477
- }
478
- },
479
- rowData: [Object, Boolean],
480
- least: Boolean,
481
- //保留搜索参数
482
- retainSearh: Boolean,
483
- //无线滚动
484
- infiniteScroll: Boolean,
485
- isJoin: {
486
- type: Boolean,
487
- default: true
488
- },
489
- ajaxConfig: {
490
- type: Object,
491
- default() {
492
- return {};
493
- }
494
- },
495
- dragSort: Boolean,
496
- dragSortIcon: {
497
- type: String,
498
- default: 'es-icon-lanmu'
499
- },
500
- isFieldsEncryption: Boolean,
501
- contentSuccess: Function,
502
- resetScroll: {
503
- type: Boolean,
504
- default: true
505
- }
506
- },
507
- data() {
508
- return {
509
- isEncryption: this.isFieldsEncryption,
510
- requests: [],
511
- toolbars: [],
512
- toolbarEvents: {},
513
- hasThead: false,
514
- theadData: [],
515
- list: [],
516
- tableLoading: this.loading,
517
- tableLoadingText: '加载中...',
518
- isFirsetCheck: false,
519
- // 可修改表单的值
520
- editValue: {},
521
- restotalRow: null,
522
- showTotal: false,
523
- config: {
524
- pageNum: 1,
525
- pageSize: 20,
526
- totalCount: 0,
527
- layout:
528
- this.mode == 'plus'
529
- ? 'total, sizes, prev, pager, next, jumper'
530
- : undefined
531
- },
532
- searchWhere: {},
533
- advanceWhere: {},
534
- tableHeight: 'auto',
535
- styles: {},
536
- selected: null,
537
- options: {},
538
- icon: true,
539
- sysCodes: [],
540
- infiniteDisabled: !this.infiniteScroll,
541
- isReload: false,
542
- pageView: null,
543
- showSizer: false,
544
- show: true,
545
- isSetHeight: false,
546
- showTable: false,
547
- fields: null,
548
- showEditPage: false,
549
- editPage: ''
550
- };
551
- },
552
- computed: {
553
- wheres() {
554
- return { ...this.searchWhere, ...this.advanceWhere };
555
- },
556
- params() {
557
- return {
558
- ...(this.param || {}),
559
- ...(this.searchValue || {}),
560
- ...(this.advanceValue || {})
561
- };
562
- },
563
- tag() {
564
- return this.form && this.elForm == '' ? 'el-form' : 'div';
565
- },
566
- _border() {
567
- return this.border === true ? true : false;
568
- },
569
- theads: {
570
- get() {
571
- let types;
572
- types = this.theadData
573
- .filter((item) => {
574
- return (
575
- item.type == 'selection' ||
576
- item.type == 'index' ||
577
- item.type == 'sort' ||
578
- item.type == 'handle'
579
- );
580
- })
581
- .map((item) => {
582
- return item.type;
583
- });
584
- let thead = [];
585
- let addfilter = false;
586
- if (this.dragSort && !types.includes('sort')) {
587
- addfilter = true;
588
- thead.push({
589
- type: 'sort',
590
- key: 'es-sort'
591
- });
592
- }
593
- if (this.checkbox && !types.includes('selection')) {
594
- thead.push({
595
- type: 'selection',
596
- width: '55',
597
- align: 'center',
598
- fixed: 'left',
599
- selectable: this.selectable,
600
- reserveSelection: this.reserveSelection,
601
- filterIcon:
602
- this.filter && !addfilter ? 'es-icon-yingyong' : undefined,
603
- key: 'es-checkbox'
604
- });
605
- if (!addfilter) {
606
- addfilter = true;
607
- }
608
- }
609
- if (this.numbers && !types.includes('index')) {
610
- let index = 1;
611
- if (typeof this.index === 'function') {
612
- index = this.index;
613
- } else {
614
- if (this.orders == 'desc') {
615
- index = (num) => {
616
- return this.config.totalCount - num;
617
- };
618
- } else if (this.accumulated) {
619
- index =
620
- (this.config.pageNum - 1) * this.config.pageSize + this.index;
621
- } else {
622
- index = this.index;
623
- }
624
- }
625
- thead.push({
626
- type: 'index',
627
- label: '序号',
628
- width: '70',
629
- align: 'center',
630
- fixed: 'left',
631
- index: index,
632
- filterIcon:
633
- this.filter && !addfilter ? 'es-icon-yingyong' : undefined,
634
- key: 'es-index'
635
- });
636
- if (!addfilter) {
637
- addfilter = true;
638
- }
639
- }
640
- if (this.theadData.length) {
641
- let handle = this.thead.filter((item) => {
642
- return item.type == 'handle';
643
- });
644
- thead = [
645
- ...thead,
646
- ...this.theadData,
647
- ...(types.includes('handle') ? [] : handle)
648
- ];
649
- } else if (this.show) {
650
- thead = [...thead, ...this.thead];
651
- }
652
- return thead;
653
- },
654
- set(val) {
655
- return val;
656
- }
657
- },
658
- datas: {
659
- get() {
660
- if (this.list && this.list.length) {
661
- return this.list;
662
- }
663
- if (
664
- this.page &&
665
- ((typeof this.page === 'object' &&
666
- (!Object.prototype.hasOwnProperty.call(this.page, 'totalCount') ||
667
- this.page.totalCount == 0)) ||
668
- this.page === true)
669
- ) {
670
- this.config.totalCount = this.data.length - this.lose;
671
- }
672
- if (this.page && this.data.length > this.config.pageSize) {
673
- return this.data.filter((item, index) => {
674
- return (
675
- index > (this.config.pageNum - 1) * this.config.pageSize - 1 &&
676
- index < this.config.pageNum * this.config.pageSize
677
- );
678
- });
679
- }
680
- return this.data;
681
- },
682
- set(val) {
683
- if (this.list && this.list.length) {
684
- this.$nextTick(() => {
685
- this.list = val;
686
- });
687
- }
688
- this.$emit('update:data', val);
689
- return val;
690
- }
691
- },
692
- showToolbar() {
693
- if (this.readonly) {
694
- return false;
695
- }
696
- if (typeof this.toolbar === 'boolean') {
697
- if (this.toolbar) {
698
- this.toolbars = [
699
- {
700
- type: 'search',
701
- contents: [
702
- {
703
- type: 'text',
704
- name: 'keyword',
705
- placeholder: '请输入关键字'
706
- }
707
- ]
708
- }
709
- ];
710
- }
711
- return this.toolbar;
712
- } else if (Array.isArray(this.toolbar)) {
713
- this.toolbars = this.toolbar;
714
- return true;
715
- } else {
716
- this.toolbars = this.toolbar.contents;
717
- this.toolbarEvents = this.toolbar.events || {};
718
- return true;
719
- }
720
- },
721
- optionDatas: {
722
- get() {
723
- let data = this.optionData
724
- ? { ...this.optionData, ...this.options }
725
- : this.options;
726
- return data;
727
- },
728
- set(val) {
729
- return val;
730
- }
731
- },
732
- headButton() {
733
- return this.theadAdd && !this.readonly
734
- ? {
735
- icon: 'el-icon-circle-plus-outline',
736
- type: 'text',
737
- event: this.handleClickAddData
738
- }
739
- : undefined;
740
- },
741
- isLeast() {
742
- return this.data.length < 2 && this.least;
743
- },
744
- findCode() {
745
- if (this.service) {
746
- return `/${this.service}${getDictList}`;
747
- }
748
- return findSysCode;
749
- },
750
- isShow() {
751
- let useCaseCodes = util.getStorage('useCaseCodes');
752
- return (
753
- this.viewCode &&
754
- useCaseCodes &&
755
- (useCaseCodes.indexOf('SuperAdminRoleID') > -1 ||
756
- useCaseCodes.indexOf('OrgAdminRoleID') > -1)
757
- );
758
- }
759
- },
760
- watch: {
761
- viewCode: {
762
- immediate: true,
763
- handler(val) {
764
- if (val) {
765
- this.hasThead = true;
766
- this.getContents();
767
- }
768
- }
769
- },
770
- showToolbar() {
771
- this.resetHeight();
772
- this.doLayout();
773
- },
774
- data: {
775
- deep: true,
776
- handler() {
777
- this.list = this.setData();
778
- }
779
- },
780
- scale: {
781
- deep: true,
782
- handler(val) {
783
- if (
784
- this.tableHeight != 'auto' &&
785
- this.tableHeight !== false &&
786
- this.display
787
- ) {
788
- this.resetHeight();
789
- this.doLayout();
790
- }
791
- }
792
- },
793
- zoom: {
794
- handler() {
795
- if (
796
- this.tableHeight != 'auto' &&
797
- this.tableHeight !== false &&
798
- this.display
799
- ) {
800
- this.resetHeight();
801
- this.doLayout();
802
- }
803
- }
804
- },
805
- checked(newVal) {
806
- this.list.length && this.checkSelect(newVal);
807
- },
808
- thead: {
809
- deep: true,
810
- handler(val, old) {
811
- if (!util.isObjectEqual(val, old)) {
812
- this.getOptions(val);
813
- this.chekOpenTotalArea();
814
- if (Array.isArray(val) && val.length && this.datas.length == 0) {
815
- this.getTableData();
816
- }
817
- }
818
- }
819
- },
820
- theads: {
821
- deep: true,
822
- handler() {
823
- this.chekOpenTotalArea();
824
- }
825
- },
826
- param: {
827
- handler(val, old) {
828
- if (!util.isObjectEqual(val, old)) {
829
- this.getTableData();
830
- }
831
- }
832
- },
833
- page: {
834
- immediate: true,
835
- deep: true,
836
- handler(val) {
837
- if (this.$el) {
838
- this.resetHeight();
839
- this.doLayout();
840
- }
841
- if (typeof val === 'object') {
842
- this.config = util.extend({}, this.config, val);
843
- }
844
- }
845
- },
846
- 'config.pageNum'() {
847
- if (this.data.length) {
848
- this.resetScroll &&
849
- this.$refs.oaTable &&
850
- this.$refs.oaTable.resetScroll &&
851
- this.$refs.oaTable.resetScroll(0, 0);
852
- this.list = this.setData();
853
- }
854
- },
855
- height: {
856
- immediate: true,
857
- handler(val) {
858
- if (val) {
859
- this.tableHeight = val;
860
- }
861
- }
862
- },
863
- maxHeight: {
864
- immediate: true,
865
- handler(val) {
866
- if (val && this.height === undefined) {
867
- this.tableHeight = val;
868
- }
869
- }
870
- },
871
- display(val) {
872
- if (val) {
873
- this.resetHeight();
874
- this.doLayout();
875
- }
876
- },
877
- showEditPage(val) {
878
- if (val === false) {
879
- try {
880
- const topWin = util.getWinTop();
881
- topWin.refresh();
882
- } catch (error) {
883
- console.warn('Failed to refresh page:', error);
884
- }
885
- }
886
- }
887
- },
888
- beforeCreate() {
889
- this.getTableData = debounce(500, (res) => {
890
- this.getTableDatas(res);
891
- });
892
- },
893
- created() {
894
- if (Array.isArray(this.thead) && this.thead.length) {
895
- this.getOptions(this.thead);
896
- this.immediate && !this.viewCode && this.getTableData();
897
- }
898
- this.chekOpenTotalArea();
899
- },
900
- mounted() {
901
- this.showTable = true;
902
- if (this.data.length) {
903
- this.list = this.setData();
904
- }
905
- this.list.length && this.checkSelect(this.checked);
906
- this.resetHeight();
907
- if (util.getWinTop() != util.win.self) {
908
- util.win.onresize = throttle(500, this.resetHeight);
909
- }
910
- },
911
- methods: {
912
- setData() {
913
- if (
914
- this.page &&
915
- ((typeof this.page === 'object' &&
916
- (!Object.prototype.hasOwnProperty.call(this.page, 'totalCount') ||
917
- this.page.totalCount == 0)) ||
918
- this.page === true)
919
- ) {
920
- this.config.totalCount = this.data.length - this.lose;
921
- }
922
- if (this.page && this.data.length > this.config.pageSize) {
923
- return this.data.filter((item, index) => {
924
- return (
925
- index > (this.config.pageNum - 1) * this.config.pageSize - 1 &&
926
- index < this.config.pageNum * this.config.pageSize
927
- );
928
- });
929
- }
930
- return this.data;
931
- },
932
- getRequestKey(config) {
933
- const { method, url, params, data } = config;
934
- return [method, url, qs.stringify(params), qs.stringify(data)].join('&');
935
- },
936
- getContents() {
937
- util
938
- .ajax({
939
- url: this.contentsUrl,
940
- params: {
941
- formId: this.viewCode
942
- }
943
- })
944
- .then((res) => {
945
- if (res.rCode == 0) {
946
- if (this.contentSuccess) {
947
- this.contentSuccess(res.results);
948
- } else {
949
- let {
950
- results: { eossFormJson }
951
- } = res;
952
- eossFormJson = JSON.parse(eossFormJson);
953
- if (eossFormJson && eossFormJson.table) {
954
- this.isEncryption = true;
955
- this.theadData = eossFormJson.table.thead;
956
- this.getTableData();
957
- } else {
958
- this.hasThead = false;
959
- }
960
- this.$emit('init-contents', res.results);
961
- }
962
- }
963
- });
964
- },
965
- getOptions(res) {
966
- let sysCodes = [];
967
- res.forEach((item) => {
968
- if (item.sysCode || item.url) {
969
- item.sysCode && sysCodes.push(item.sysCode);
970
- let params = util.extend(
971
- {},
972
- item.sysCode
973
- ? { sysAppCode: item.sysCode, code: item.sysCode }
974
- : {},
975
- item.param ? item.param : {}
976
- );
977
- let key = this.getRequestKey({
978
- method: this.method,
979
- url: item.sysCode ? this.findCode : item.url,
980
- params: params,
981
- data: {}
982
- });
983
- if (!this.requests.includes(key)) {
984
- util
985
- .ajax({
986
- url: item.sysCode ? this.findCode : item.url,
987
- method: this.method,
988
- params: params,
989
- data: params
990
- })
991
- .then((res) => {
992
- if (res.rCode === 0) {
993
- if (item.type == 'ganged') {
994
- this.$set(
995
- this.options,
996
- item.sysCode || item.field || item.prop,
997
- [JSON.parse(JSON.stringify(res.results))]
998
- );
999
- if (item.sysCode) {
1000
- const bus = this.bus || this.$root.Bus;
1001
- bus &&
1002
- bus.$emit(
1003
- item.sysCode,
1004
- JSON.parse(JSON.stringify(this.options[item.sysCode]))
1005
- );
1006
- }
1007
- } else {
1008
- this.$set(
1009
- this.options,
1010
- item.sysCode || item.field || item.prop,
1011
- JSON.parse(JSON.stringify(res.results))
1012
- );
1013
- if (item.sysCode) {
1014
- const bus = this.bus || this.$root.Bus;
1015
- bus &&
1016
- bus.$emit(
1017
- item.sysCode,
1018
- JSON.parse(JSON.stringify(res.results))
1019
- );
1020
- }
1021
- }
1022
- this.requests.push(key);
1023
- } else {
1024
- let msg = res.msg || '系统错误,请联系管理员!';
1025
- this.$message.error(msg);
1026
- }
1027
- })
1028
- .catch((err) => {
1029
- if (err.message && err.message !== 'canceled') {
1030
- this.$message.error(err.message);
1031
- }
1032
- });
1033
- }
1034
- } else {
1035
- if (item.childHead && item.childHead.length) {
1036
- this.getOptions(item.childHead);
1037
- }
1038
- if (item.children && item.children.length) {
1039
- this.getOptions(item.children);
1040
- }
1041
- }
1042
- });
1043
- this.sysCodes = sysCodes;
1044
-
1045
- this.bindEventBus();
1046
- },
1047
- checkObject(item) {
1048
- return util.getObjectType(item) === 'object';
1049
- },
1050
- chekOpenTotalArea() {
1051
- if (this.total || this.showSummary) {
1052
- this.showTotal = true;
1053
- return;
1054
- }
1055
- if (!this.theads) {
1056
- return;
1057
- }
1058
- const arr = JSON.parse(JSON.stringify(this.theads));
1059
- let flag = false;
1060
- arr.forEach((item) => {
1061
- if (item.total) {
1062
- flag = true;
1063
- this.showTotal = true;
1064
- }
1065
- });
1066
- if (this.showTotal !== flag) {
1067
- this.showTotal = flag;
1068
- }
1069
- },
1070
- rowClick(row, column, event) {
1071
- this.$emit('click', row, column, event);
1072
- this.$emit('row-click', row, column, event);
1073
- },
1074
- handleClickAddData(scope) {
1075
- if (scope && scope.row) {
1076
- const data = JSON.parse(JSON.stringify(scope.row));
1077
- let index = scope.$index + 1;
1078
- if (this.page) {
1079
- index += (this.config.pageNum - 1) * this.config.pageSize;
1080
- }
1081
- this.data.splice(index, 0, data);
1082
- this.$emit('dataChange', 'add', data);
1083
- this.$emit('data-change', 'add', data);
1084
- this.$emit('btnClick', {
1085
- event: 'addRow',
1086
- row: data,
1087
- index: index,
1088
- data: this.data
1089
- });
1090
- this.$emit('btn-click', {
1091
- event: 'addRow',
1092
- row: data,
1093
- index: index,
1094
- data: this.data
1095
- });
1096
- } else {
1097
- let index = this.data.length;
1098
- if (this.page) {
1099
- index += (this.config.pageNum - 1) * this.config.pageSize;
1100
- }
1101
- let rows = {};
1102
- if (this.rowData && typeof this.rowData == 'object') {
1103
- rows = this.rowData;
1104
- } else if (index && this.rowData === true) {
1105
- rows = JSON.parse(JSON.stringify(this.data[index - 1]));
1106
- } else {
1107
- this.getRow(this.thead, rows);
1108
- }
1109
- this.data.splice(index, 0, rows);
1110
- }
1111
- },
1112
- getRow(thead, obj) {
1113
- thead.forEach((item) => {
1114
- if (item.field) {
1115
- obj[item['field']] = item.defaultValue || '';
1116
- } else if (item.children && item.children.length) {
1117
- this.getRow(item.children, obj);
1118
- }
1119
- });
1120
- },
1121
- handleClickDeleteData(scope) {
1122
- const data = JSON.parse(JSON.stringify(scope.row));
1123
- let index = scope.$index;
1124
- if (this.page) {
1125
- index += (this.config.pageNum - 1) * this.config.pageSize;
1126
- }
1127
- this.data.splice(index, 1);
1128
- this.$emit('dataChange', 'delete', data);
1129
- this.$emit('data-change', 'delete', data);
1130
- this.$emit('btnClick', {
1131
- event: 'deleteRow',
1132
- row: data,
1133
- index: index,
1134
- data: this.data
1135
- });
1136
- this.$emit('btn-click', {
1137
- event: 'deleteRow',
1138
- row: data,
1139
- index: index,
1140
- data: this.data
1141
- });
1142
- },
1143
- checkSelect(newVal) {
1144
- this.$nextTick(() => {
1145
- if (util.getObjectType(newVal) === 'array') {
1146
- newVal.forEach((row) => {
1147
- if (util.isObject(row)) {
1148
- this.$refs.oaTable.toggleRowSelection(row, true);
1149
- } else {
1150
- this.setChecked(this.list, row);
1151
- }
1152
- });
1153
- } else if (newVal === true) {
1154
- this.toggleAllSelection();
1155
- }
1156
- });
1157
- },
1158
- setChecked(list, row) {
1159
- list.forEach((item) => {
1160
- if (item.children && item.children.length) {
1161
- this.setChecked(item.children, row);
1162
- }
1163
- if (item[this.checkedKey] === row) {
1164
- this.$refs.oaTable.toggleRowSelection(item, true);
1165
- return;
1166
- }
1167
- });
1168
- },
1169
- getTableDatas(res) {
1170
- let where;
1171
- let first;
1172
- if (res) {
1173
- where = res.where;
1174
- first = res.first;
1175
- }
1176
- if (!this.url) {
1177
- return;
1178
- }
1179
- if (first !== false && !this.infiniteScroll) {
1180
- this.config.pageNum = 1;
1181
- }
1182
- this.tableLoadingText = '加载中...';
1183
- let reqData = util.extend(
1184
- {},
1185
- this.params,
1186
- this.page
1187
- ? {
1188
- pageNum: this.config.pageNum,
1189
- pageSize: this.config.pageSize
1190
- }
1191
- : {}
1192
- );
1193
- if (where) {
1194
- reqData = util.extend({}, reqData, where);
1195
- }
1196
- //if (this.fields)
1197
- if (this.retainSearh || first === false) {
1198
- reqData = util.extend({}, reqData, this.wheres);
1199
- }
1200
- if (this.isJoin) {
1201
- for (let i in reqData) {
1202
- if (Array.isArray(reqData[i])) {
1203
- reqData[i] = reqData[i].join(',');
1204
- }
1205
- }
1206
- }
1207
- if (this.isEncryption) {
1208
- let fields = [];
1209
- this.theads.forEach((item) => {
1210
- if (item.field || item.prop) {
1211
- fields.push(item.field || item.prop);
1212
- }
1213
- });
1214
- let initLogin = util.getStorage('initLogin');
1215
- initLogin && (initLogin = JSON.parse(initLogin));
1216
- reqData['fields'] = initLogin.secret
1217
- ? util.esmEncrypt({
1218
- data: fields.join(','),
1219
- key: initLogin.secret
1220
- })
1221
- : fields.join(',');
1222
- }
1223
- this.tableLoading = true;
1224
- util
1225
- .ajax({
1226
- ...this.ajaxConfig,
1227
- url: this.url,
1228
- method: this.method,
1229
- format: this.format,
1230
- params: reqData,
1231
- data: reqData
1232
- })
1233
- .then((res) => {
1234
- this.tableLoading = false;
1235
- if (res.rCode === 0 || res.status === 'success') {
1236
- if (this.isReload) {
1237
- this.list = [];
1238
- this.isReload = false;
1239
- }
1240
- let results =
1241
- this.parseData !== undefined
1242
- ? this.parseData(res.results || res.data || res)
1243
- : res.results || res.data;
1244
- if (this.infiniteScroll) {
1245
- this.list = this.list.concat(
1246
- results.data || results.records || results.list
1247
- );
1248
- this.config.pageNum += 1;
1249
- } else {
1250
- this.list = results.data || results.records || results.list;
1251
- this.$nextTick(() => {
1252
- this.resetScroll &&
1253
- this.$refs.oaTable &&
1254
- this.$refs.oaTable.resetScroll &&
1255
- this.$refs.oaTable.resetScroll(0, 0);
1256
- });
1257
- }
1258
- this.config.totalCount =
1259
- results.count || results.total || results.totalCount;
1260
- this.config.pageCount = results.pageCount;
1261
- this.checked &&
1262
- this.$nextTick(() => {
1263
- this.checkSelect(this.checked);
1264
- });
1265
- if (
1266
- this.infiniteScroll &&
1267
- this.config.totalCount === this.list.length
1268
- ) {
1269
- this.infiniteDisabled = true;
1270
- }
1271
- } else {
1272
- this.list = [];
1273
- //this.tableHeight = false;
1274
- let msg = res.msg || '系统错误,请联系管理员!';
1275
- this.$message.error(msg);
1276
- }
1277
- this.$emit('success', res);
1278
- })
1279
- .catch((err) => {
1280
- //this.tableHeight = false;
1281
- if (err.message && err.message !== 'canceled') {
1282
- this.$message.error(err.message);
1283
- }
1284
- this.tableLoading = false;
1285
- });
1286
- },
1287
- selectionChange(data) {
1288
- this.selected = JSON.parse(JSON.stringify(data));
1289
- this.$emit('selection-change', data);
1290
- },
1291
- clearSelection() {
1292
- this.$refs.oaTable.clearSelection();
1293
- },
1294
- toggleRowSelection(row, selected) {
1295
- this.$refs.oaTable.toggleRowSelection(row, selected);
1296
- },
1297
- toggleAllSelection() {
1298
- this.$refs.oaTable.toggleAllSelection();
1299
- },
1300
- toggleRowExpansion(row, expanded) {
1301
- this.$refs.oaTable.toggleRowExpansion(row, expanded);
1302
- },
1303
- setCurrentRow(row) {
1304
- this.$refs.oaTable.setCurrentRow(row);
1305
- },
1306
-
1307
- clearSort() {
1308
- this.$refs.oaTable.clearSort();
1309
- },
1310
- clearFilter(columnKey) {
1311
- this.$refs.oaTable.clearFilter(columnKey);
1312
- },
1313
- doLayout() {
1314
- this.$refs.oaTable && this.$refs.oaTable.doLayout();
1315
- },
1316
- sort(prop, order) {
1317
- this.$refs.oaTable.sort(prop, order);
1318
- },
1319
- formBlur(data) {
1320
- this.$emit('blur', data, this.list);
1321
- },
1322
- formFocus(data) {
1323
- this.$emit('focus', data, this.list);
1324
- },
1325
- formChange(data) {
1326
- this.$emit('edit', data, this.list);
1327
- this.$emit('change', data, this.list);
1328
- },
1329
- toolbarChange(...args) {
1330
- this.$emit('toolbar-change', ...args);
1331
- },
1332
- handleAjax(handle, row) {
1333
- this.changeLoading(true, `${handle.text}中...`);
1334
- let params = handle.param || {};
1335
- if (handle.syncKeys) {
1336
- if (typeof handle.syncKeys === 'string') {
1337
- params[handle.syncKeys] = row[handle.syncKeys];
1338
- } else if (Array.isArray(handle.syncKeys)) {
1339
- for (let i in handle.syncKeys) {
1340
- if (Array.isArray(row)) {
1341
- let param = row.map((item) => {
1342
- return item[handle.syncKeys[i]];
1343
- });
1344
- params[handle.syncKeys[i]] = param.join(',');
1345
- } else {
1346
- params[handle.syncKeys[i]] = row[handle.syncKeys[i]];
1347
- }
1348
- }
1349
- } else {
1350
- for (let i in handle.syncKeys) {
1351
- if (Array.isArray(row)) {
1352
- let param = row.map((item) => {
1353
- return item[handle.syncKeys[i]];
1354
- });
1355
- params[i] = param.join(',');
1356
- } else {
1357
- params[i] = row[handle.syncKeys[i]];
1358
- }
1359
- }
1360
- }
1361
- } else {
1362
- if (Array.isArray(row)) {
1363
- let param = row.map((item) => {
1364
- return item.id;
1365
- });
1366
- params.id = param.join(',');
1367
- } else {
1368
- params.id = row.id;
1369
- }
1370
- }
1371
- let keys = Object.keys(params);
1372
- util
1373
- .ajax({
1374
- ...(handle.ajaxConfig || {}),
1375
- url: handle.action,
1376
- data:
1377
- keys.length == 1 && handle.format === false
1378
- ? params[keys[0]].split(',')
1379
- : params,
1380
- params:
1381
- keys.length == 1 && handle.format === false
1382
- ? params[keys[0]].split(',')
1383
- : params,
1384
- method: handle.method,
1385
- format: handle.format
1386
- })
1387
- .then((res) => {
1388
- this.changeLoading(false);
1389
- if (res.rCode === 0) {
1390
- this.$message({
1391
- message: `${handle.text}成功`,
1392
- duration: 2000,
1393
- type: 'success',
1394
- onClose: () => {
1395
- let first = Object.prototype.hasOwnProperty.call(
1396
- handle,
1397
- 'first'
1398
- )
1399
- ? handle.first
1400
- : false;
1401
- let reload = handle.reload || true;
1402
- if (handle.event == 'delete') {
1403
- let totalCount = this.config.totalCount - 1;
1404
- this.config.pageNum = Math.ceil(
1405
- totalCount / this.config.pageSize
1406
- );
1407
- }
1408
-
1409
- if (reload) {
1410
- this.reload({}, first);
1411
- }
1412
- }
1413
- });
1414
- } else {
1415
- this.$message.error(
1416
- res.msg || `${handle.text}失败,请联系管理员!`
1417
- );
1418
- }
1419
- })
1420
- .catch((err) => {
1421
- this.changeLoading(false);
1422
- if (err.message && err.message !== 'canceled') {
1423
- this.$message.error(err.message);
1424
- }
1425
- });
1426
- },
1427
- checkParse(data, parse) {
1428
- if (Array.isArray(data)) {
1429
- return data.map((items) => {
1430
- let item = JSON.parse(JSON.stringify(items));
1431
- let obj = {};
1432
- for (let i in parse) {
1433
- obj[i] = item[parse[i]];
1434
- delete item[parse[i]];
1435
- }
1436
- return { ...obj, ...item };
1437
- });
1438
- }
1439
- let item = JSON.parse(JSON.stringify(data));
1440
- let obj = {};
1441
- for (let i in parse) {
1442
- obj[i] = item[parse[i]];
1443
- delete item[parse[i]];
1444
- }
1445
- return { ...obj, ...item };
1446
- },
1447
- handleClick(res) {
1448
- let { row, handle } = res;
1449
- let rows;
1450
- if (handle.checkbox) {
1451
- if (!this.selected || !this.selected.length) {
1452
- this.$alert('请选择数据', '提示', { type: 'warning' });
1453
- return;
1454
- } else {
1455
- row = this.selected;
1456
- }
1457
- }
1458
- if (this.checkboxParseData) {
1459
- rows = this.checkboxParseData(JSON.parse(JSON.stringify(row)));
1460
- } else if (this.checkboxParse) {
1461
- rows = this.checkParse(row, this.checkboxParse);
1462
- } else if (handle.checkboxParse) {
1463
- rows = this.checkParse(row, handle.checkboxParse);
1464
- } else if (row) {
1465
- rows = JSON.parse(JSON.stringify(row));
1466
- }
1467
- let thead = this.theads;
1468
- if (this.$refs.oaTable) {
1469
- thead = this.$refs.oaTable.getThead().thead;
1470
- }
1471
- if (handle.action) {
1472
- let isConfirm = handle.confirm || true;
1473
- if (isConfirm) {
1474
- let msg = handle.field ? row[handle.field] : '';
1475
- this.$confirm(`确定要${handle.text}${msg}吗`, '提示', {
1476
- confirmButtonText: '确定',
1477
- cancelButtonText: '取消',
1478
- type: 'warning'
1479
- })
1480
- .then(() => {
1481
- this.handleAjax(handle, rows);
1482
- })
1483
- .catch(() => {});
1484
- } else {
1485
- this.handleAjax(handle, rows);
1486
- }
1487
- } else if (handle.event) {
1488
- if (typeof handle.event === 'function') {
1489
- handle.event({
1490
- ele: this,
1491
- thead: thead,
1492
- data: this.list,
1493
- selected: rows,
1494
- ...res
1495
- });
1496
- } else if (
1497
- handle.event === 'add' ||
1498
- handle.event === 'edit' ||
1499
- handle.event === 'look'
1500
- ) {
1501
- let changes = {
1502
- event: handle.event,
1503
- title: handle.title || handle.text,
1504
- value: handle.event === 'add' ? {} : rows,
1505
- readonly: handle.event === 'look',
1506
- actionType: handle.actionType
1507
- ? handle.actionType
1508
- : handle.event === 'add'
1509
- ? 'save'
1510
- : 'update',
1511
- visible: true
1512
- };
1513
- if (handle.dialog) {
1514
- let dialog;
1515
- for (let i = 0; i < this.$children.length; i++) {
1516
- let child = this.$children[i];
1517
- if (child.$refs[handle.dialog]) {
1518
- dialog = child.$refs[handle.dialog];
1519
- break;
1520
- }
1521
- }
1522
- dialog.setAttrs(changes);
1523
- }
1524
- this.injector && this.injector.handleChangeData(changes);
1525
- if (handle.busEvent) {
1526
- const bus = this.bus || this.$root.Bus;
1527
- bus && bus.$emit(handle.busEvent, changes);
1528
- }
1529
- }
1530
- } else if (handle.changeData) {
1531
- let changeData = {};
1532
- if (Array.isArray(handle.changeData)) {
1533
- handle.changeData.forEach((item) => {
1534
- if (util.isObject(item)) {
1535
- for (let i in item) {
1536
- if (typeof item[i] === 'boolean') {
1537
- changeData[i] = item[i];
1538
- } else {
1539
- changeData[i] = handle[item[i]] || item[i];
1540
- }
1541
- }
1542
- } else {
1543
- changeData[item] =
1544
- handle[item] || (Array.isArray(rows) ? rows : rows[item]);
1545
- }
1546
- });
1547
- } else {
1548
- for (let i in handle.changeData) {
1549
- let item = handle.changeData[i];
1550
- if (util.isObject(item)) {
1551
- let obj = {};
1552
- for (let e in item) {
1553
- obj[e] =
1554
- handle[item[e]] ||
1555
- (Array.isArray(rows) ? rows : rows[item[e]]);
1556
- }
1557
- changeData[i] = obj;
1558
- } else {
1559
- if (typeof item === 'boolean') {
1560
- changeData[i] = item;
1561
- } else {
1562
- changeData[i] =
1563
- handle[item] || (Array.isArray(rows) ? rows : rows[item]);
1564
- }
1565
- }
1566
- }
1567
- }
1568
- if (handle.actionType) {
1569
- changeData['actionType'] = handle.actionType;
1570
- }
1571
- this.injector && this.injector.handleChangeData(changeData);
1572
- if (handle.busEvent) {
1573
- const bus = this.bus || this.$root.Bus;
1574
- bus && bus.$emit(handle.busEvent, changes);
1575
- }
1576
- } else {
1577
- if (handle.exportXls) {
1578
- let text = '操作';
1579
- if (
1580
- this.theads[this.theads.length - 1] &&
1581
- this.theads[this.theads.length - 1].type === 'handle'
1582
- ) {
1583
- text = this.theads[this.theads.length - 1].title;
1584
- }
1585
- let type = ['selection', 'index', 'expand'];
1586
- thead = thead.map((item) => {
1587
- return item.filter((ele) => {
1588
- return (
1589
- !type.includes(ele.type) &&
1590
- ele.label !== text &&
1591
- !this.exportExcludeLabel.includes(ele.label)
1592
- );
1593
- });
1594
- });
1595
- util.exportXls({
1596
- thead: thead,
1597
- data: this.list,
1598
- name: this.fileName,
1599
- option: this.optionDatas
1600
- });
1601
- }
1602
- this.$emit('btnClick', res, this.list, thead, rows);
1603
- this.$emit('btn-click', res, this.list, thead, rows);
1604
- }
1605
- },
1606
- sizeChange(res) {
1607
- this.config.pageSize = res;
1608
- this.config.pageNum = 1;
1609
- this.checkSelect(this.checked);
1610
- this.$emit('page-size-change', res);
1611
- if (this.url) {
1612
- this.getTableData({ where: this.wheres, first: false });
1613
- }
1614
- },
1615
- currentChange(res) {
1616
- this.config.pageNum = res;
1617
- this.checkSelect(this.checked);
1618
- this.$emit('page-current-change', res);
1619
- this.$emit('current', res);
1620
- if (this.url) {
1621
- this.getTableData({ where: this.wheres, first: false });
1622
- }
1623
- },
1624
- preClick(res) {
1625
- this.config.pageNum = res;
1626
- this.checkSelect(this.checked);
1627
- this.$emit('prev', res);
1628
- },
1629
- nextClick(res) {
1630
- this.config.pageNum = res;
1631
- this.checkSelect(this.checked);
1632
- this.$emit('next', res);
1633
- },
1634
- hanleSearch(data) {
1635
- this.searchWhere =
1636
- this.response !== undefined
1637
- ? this.response({
1638
- type: 'search',
1639
- data: JSON.parse(JSON.stringify(data))
1640
- })
1641
- : data;
1642
- if (this.url && this.executeSearch) {
1643
- this.getTableData({ where: this.wheres });
1644
- }
1645
- this.$emit('search', this.searchWhere);
1646
- },
1647
- hanleReset() {
1648
- this.searchWhere = {};
1649
- this.advanceWhere = {};
1650
- if (this.url) {
1651
- this.getTableData();
1652
- }
1653
- this.$emit('reset', this.params);
1654
- },
1655
- hanleSubmit({ data, show }) {
1656
- this.advanceWhere =
1657
- this.response !== undefined
1658
- ? this.response({
1659
- type: 'filter',
1660
- data: JSON.parse(JSON.stringify(data))
1661
- })
1662
- : data;
1663
-
1664
- if (this.url && this.executeFilter) {
1665
- this.getTableData({ where: this.wheres });
1666
- }
1667
- this.$emit('submit', {
1668
- data: this.advanceWhere,
1669
- where: this.wheres,
1670
- show
1671
- });
1672
- },
1673
- hanleCancel() {
1674
- this.$emit('cancel', this.params);
1675
- },
1676
- handleTabs({ item, index }) {
1677
- if (this.url) {
1678
- this.getTableData({ where: item });
1679
- }
1680
- this.$emit('tabs', { item, index });
1681
- },
1682
- reload(obj, first = false) {
1683
- if (obj && obj.config) {
1684
- this.config = util.extend({}, this.config, obj.config);
1685
- }
1686
- if (this.url) {
1687
- this.isReload = true;
1688
- this.getTableData({ where: obj && obj.where ? obj.where : {}, first });
1689
- }
1690
- },
1691
- resetHeight(warn) {
1692
- this.isSetHeight =
1693
- util.getStyle(this.$el.parentNode, 'height') == '0px' ? false : true;
1694
- this.$nextTick(() => {
1695
- if (this.full && !this.height && !this.maxHeight && this.isSetHeight) {
1696
- let height = this.$el.parentNode.offsetHeight;
1697
- if (height) {
1698
- height = parseInt(
1699
- util.getStyle(this.$el.parentNode, 'height', '%'),
1700
- 10
1701
- );
1702
- height =
1703
- (height == NaN ? 0 : height) -
1704
- parseInt(util.getStyle(this.$el.parentNode, 'padding-top'), 10) -
1705
- parseInt(
1706
- util.getStyle(this.$el.parentNode, 'padding-bottom'),
1707
- 10
1708
- );
1709
- for (let i = 0; i < this.$el.parentNode.childNodes.length; i++) {
1710
- let ele = this.$el.parentNode.childNodes[i];
1711
- if (
1712
- this.$el &&
1713
- ele.offsetHeight !== undefined &&
1714
- ele != this.$el
1715
- ) {
1716
- height =
1717
- height -
1718
- ele.offsetHeight -
1719
- parseInt(util.getStyle(ele, 'margin-top'), 10) -
1720
- parseInt(util.getStyle(ele, 'margin-bottom'), 10);
1721
- }
1722
- }
1723
- height -= this.showToolbar
1724
- ? this.$refs.toolbar.$el.offsetHeight
1725
- : 0;
1726
- height -=
1727
- this.page === false || this.showPage == false
1728
- ? 0
1729
- : this.$refs.pagination.$el.offsetHeight;
1730
- height -= this.title ? this.$refs.title.offsetHeight : 0;
1731
- height -= parseInt(
1732
- util.getStyle(this.$refs.esTableContent, 'padding-top'),
1733
- 10
1734
- );
1735
- height -= parseInt(
1736
- util.getStyle(this.$refs.esTableContent, 'padding-bottom'),
1737
- 10
1738
- );
1739
- let emptyText = this.$refs.esTableContent.querySelector(
1740
- '.el-table__empty-text'
1741
- );
1742
- if (this.total) {
1743
- height -= 1;
1744
- }
1745
- let eht = 0;
1746
- if (emptyText) {
1747
- eht = emptyText.offsetHeight;
1748
- let thead =
1749
- this.$refs.esTableContent.querySelector('.el-table__header');
1750
- thead && (eht += thead.offsetHeight);
1751
- }
1752
- if (height > 1 && height - eht > 1) {
1753
- this.tableHeight = height;
1754
- } else {
1755
- console.warn(this.$el.parentNode, `获取不到高度!`);
1756
- }
1757
- } else if (!warn) {
1758
- setTimeout(() => {
1759
- this.resetHeight(true);
1760
- }, 1000);
1761
- }
1762
- }
1763
- });
1764
- },
1765
- validate(callback) {
1766
- if (this.form) {
1767
- let form = this.elForm || this.$children[0];
1768
- form.validate((valid) => {
1769
- callback(valid);
1770
- });
1771
- }
1772
- },
1773
- changeLoading(show, text) {
1774
- this.tableLoading = show;
1775
- if (text) {
1776
- this.tableLoadingText = text;
1777
- }
1778
- },
1779
- handleFilterColumn() {
1780
- this.showSizer = true;
1781
- },
1782
- handleSortChange(res) {
1783
- if (res.data && res.data.length) {
1784
- this.list = res.data;
1785
- }
1786
- this.$emit('sort-change', res);
1787
- },
1788
- handleUpdateDragSort(data, event) {
1789
- this.$emit('update-drag-sort', data, event);
1790
- },
1791
- mergeThead(res) {
1792
- this.show = false;
1793
- this.theadData = [];
1794
- this.icon = true;
1795
- this.showSizer = false;
1796
- // if (!this.showTotal) {
1797
- // for (let i = 0; i < res.length; i++) {
1798
- // if (res[i].total) {
1799
- // this.showTotal = true;
1800
- // break;
1801
- // }
1802
- // }
1803
- // }
1804
- this.$nextTick(() => {
1805
- this.theadData = res;
1806
- setTimeout(() => {
1807
- this.show = true;
1808
- }, 500);
1809
- });
1810
- },
1811
- setOptions(val, sysCode) {
1812
- this.$set(this.options, sysCode, val);
1813
- },
1814
- bindEventBus() {
1815
- this.sysCodes.forEach((item) => {
1816
- const bus = this.bus || this.$root.Bus;
1817
- bus &&
1818
- bus.$on(item, (val) => {
1819
- this.setOptions(val, item);
1820
- });
1821
- });
1822
- },
1823
- unbindEventBus() {
1824
- this.sysCodes.forEach((item) => {
1825
- const bus = this.bus || this.$root.Bus;
1826
- bus && bus.$off(item, this.setOptions);
1827
- });
1828
- },
1829
- reset() {
1830
- this.$refs.toolbar && this.$refs.toolbar.reset();
1831
- },
1832
- openEditPage() {
1833
- let fields = [];
1834
- this.theads.forEach((item) => {
1835
- if (item.field || item.prop) {
1836
- fields.push(item.field || item.prop);
1837
- }
1838
- });
1839
- fields = util.esEncode(fields.join(','));
1840
- this.editPage = `/lowcode-ui/webpack/index.html#simpleEditOnlinePage?pageId=${this.viewCode}&fields=${fields}`;
1841
- this.showEditPage = true;
1842
- }
1843
- }
1844
- };
1845
- </script>
1
+ <template>
2
+ <component
3
+ v-show="showTable"
4
+ class="es-data-table"
5
+ label-width="0"
6
+ ref="component"
7
+ v-loading="tableLoading"
8
+ element-loading-background="rgba(0, 0, 0, 0.65)"
9
+ :is="tag"
10
+ :model="tag === 'div' ? '' : list"
11
+ :element-loading-text="tableLoadingText"
12
+ >
13
+ <es-toolbar
14
+ v-if="showToolbar"
15
+ ref="toolbar"
16
+ :class="{
17
+ 'es-table-toolbar-plus': mode == 'plus'
18
+ }"
19
+ v-bind="{
20
+ contents: toolbars,
21
+ showLabel: showLabel,
22
+ close: close,
23
+ callBack: resetHeight,
24
+ showFormBtn: showFormBtn,
25
+ searchValue: searchValue,
26
+ advanceValue: advanceValue
27
+ }"
28
+ v-on="{
29
+ click: handleClick,
30
+ search: hanleSearch,
31
+ submit: hanleSubmit,
32
+ tabs: handleTabs,
33
+ reset: hanleReset,
34
+ cancel: hanleCancel,
35
+ toolbarChange: toolbarChange,
36
+ ...toolbarEvents
37
+ }"
38
+ ></es-toolbar>
39
+ <p v-if="title" ref="title" class="es-table-title" v-html="title"></p>
40
+ <div
41
+ v-if="show"
42
+ :style="styles"
43
+ class="es-data-table-content"
44
+ :class="{
45
+ 'es-table-border-none': border == 'none',
46
+ 'es-table-plus': mode == 'plus'
47
+ }"
48
+ ref="esTableContent"
49
+ >
50
+ <el-table
51
+ ref="oaTable"
52
+ v-bind="{
53
+ ...$attrs,
54
+ emptyText: emptyText,
55
+ showSummary: showTotal,
56
+ sumText: sumText || totalText,
57
+ totalRow: restotalRow || totalRow,
58
+ height:
59
+ tableHeight !== 'auto' && tableHeight !== false
60
+ ? tableHeight
61
+ : undefined,
62
+ border: _border,
63
+ infiniteScroll: getTableData,
64
+ infiniteScrollDisabled: infiniteDisabled,
65
+ dragSort: dragSort,
66
+ dragSortClass: dragSortIcon
67
+ }"
68
+ :data.sync="list"
69
+ v-on="{
70
+ ...$listeners,
71
+ 'row-click': rowClick,
72
+ 'selection-change': selectionChange,
73
+ 'filter-column': handleFilterColumn,
74
+ 'sort-change': handleSortChange,
75
+ 'update-drag-sort': handleUpdateDragSort
76
+ }"
77
+ :class="
78
+ 'es-table' +
79
+ (theadBorder && border != 'none' ? ' es-thead-border' : '')
80
+ "
81
+ >
82
+ <slot name="suffix"></slot>
83
+ <slot></slot>
84
+ <template v-for="(item, index) in theads">
85
+ <template v-if="item.hide !== true">
86
+ <el-table-column
87
+ v-if="item.type === 'sort'"
88
+ width="32"
89
+ prop="id"
90
+ :key="item.key || item.label || item.title || index"
91
+ label=" "
92
+ >
93
+ <template slot-scope="scope">
94
+ <es-icon
95
+ v-if="!scope.row.fixed"
96
+ class="es-move"
97
+ :contents="dragSortIcon"
98
+ ></es-icon>
99
+ </template>
100
+ </el-table-column>
101
+ <template
102
+ v-else-if="item.type === 'index' || item.type === 'selection'"
103
+ >
104
+ <el-table-column
105
+ :key="item.key || item.label || item.title || index"
106
+ v-bind="dragSort ? { ...item, fixed: false } : item"
107
+ ></el-table-column>
108
+ </template>
109
+ <template v-else>
110
+ <children
111
+ :key="item.key || item.label || item.title || index"
112
+ :tag="item.tag"
113
+ v-bind="{
114
+ mode: mode,
115
+ name: name,
116
+ indexs: index,
117
+ form: form,
118
+ readonly: readonly,
119
+ optionData: optionDatas,
120
+ dragSort: dragSort,
121
+ ...(dragSort ? { ...item, fixed: false } : { ...item })
122
+ }"
123
+ v-on="{
124
+ handleClick: handleClick,
125
+ formBlur: formBlur,
126
+ formFocus: formFocus,
127
+ formChange: formChange
128
+ }"
129
+ ></children>
130
+ </template>
131
+ </template>
132
+ </template>
133
+ <slot name="prefix"></slot>
134
+ <el-table-column
135
+ v-if="editable && !readonly"
136
+ width="80"
137
+ type="handle"
138
+ align="center"
139
+ label="操作"
140
+ fixed="right"
141
+ class="eoss-ui-eidt-column"
142
+ :button="headButton"
143
+ :total="false"
144
+ >
145
+ <template slot-scope="scope">
146
+ <el-button
147
+ v-if="!scope.row.cantAdd"
148
+ type="text"
149
+ @click="handleClickAddData(scope)"
150
+ >
151
+ <i class="el-icon-circle-plus-outline"></i>
152
+ </el-button>
153
+ <el-button
154
+ v-if="!scope.row.cantDelete && !isLeast"
155
+ type="text"
156
+ @click="handleClickDeleteData(scope)"
157
+ >
158
+ <i class="el-icon-remove-outline"></i>
159
+ </el-button>
160
+ </template>
161
+ </el-table-column>
162
+ <template slot="append"><slot name="append"></slot></template>
163
+ </el-table>
164
+ <div v-if="infiniteScroll" class="es-table-page es-loading-page">
165
+ <span>共{{ config.totalCount }}条,</span>
166
+ <span>已加载{{ list.length }}条</span>
167
+ </div>
168
+ <es-pagination
169
+ v-else-if="page !== false && showPage !== false"
170
+ ref="pagination"
171
+ v-bind="config"
172
+ class="es-table-page"
173
+ :position="page.position"
174
+ :style="{ 'text-align': page.position }"
175
+ v-on="{
176
+ change: sizeChange,
177
+ current: currentChange,
178
+ prev: preClick,
179
+ next: nextClick
180
+ }"
181
+ ></es-pagination>
182
+ <slot name="dialog"></slot>
183
+ <slot name="other"></slot>
184
+ </div>
185
+ <es-dialog v-if="theads.length" title="列表设置" :visible.sync="showSizer">
186
+ <sizer
187
+ v-if="showSizer"
188
+ :data="theads"
189
+ :mode="mode"
190
+ @confirm="mergeThead"
191
+ ></sizer>
192
+ </es-dialog>
193
+ <i
194
+ class="el-icon-setting es-table-setting"
195
+ title="页面配置"
196
+ v-if="isShow"
197
+ @click="openEditPage"
198
+ ></i>
199
+
200
+ <es-dialog title="页面配置" :visible.sync="showEditPage" size="full">
201
+ <iframe
202
+ v-if="showEditPage"
203
+ width="100%"
204
+ height="100%"
205
+ frameborder="0"
206
+ :src="editPage"
207
+ ></iframe>
208
+ </es-dialog>
209
+ </component>
210
+ </template>
211
+ <script>
212
+ import {
213
+ findSysCode,
214
+ getDictList,
215
+ formContents
216
+ } from 'eoss-ui/src/config/api.js';
217
+ import { debounce, throttle } from 'throttle-debounce';
218
+ import children from './children.vue';
219
+ import sizer from './sizer.vue';
220
+ import util from 'eoss-ui/src/utils/util';
221
+ import qs from 'qs';
222
+ const systemMode = util.getWinTopProperty('systemMode', 'default');
223
+ const pageView = util.getParams('pageView');
224
+ export default {
225
+ name: 'EsDataTable',
226
+ inheritAttrs: false,
227
+ components: {
228
+ children,
229
+ sizer
230
+ },
231
+ provide() {
232
+ return {
233
+ table: this,
234
+ tableReload: this.reload
235
+ };
236
+ },
237
+ inject: {
238
+ elForm: {
239
+ default: ''
240
+ },
241
+ injector: {
242
+ default: ''
243
+ },
244
+ scale: {
245
+ default: ''
246
+ }
247
+ },
248
+ props: {
249
+ viewCode: {
250
+ type: String,
251
+ default: pageView
252
+ },
253
+ contentsUrl: {
254
+ type: String,
255
+ default: formContents
256
+ },
257
+ mode: {
258
+ type: String,
259
+ default: systemMode
260
+ },
261
+ service: String,
262
+ loading: {
263
+ type: Boolean,
264
+ default: false
265
+ },
266
+ readonly: Boolean,
267
+ url: {
268
+ type: String,
269
+ default: ''
270
+ },
271
+ defaults: {
272
+ type: Boolean,
273
+ default: false
274
+ },
275
+ param: {
276
+ type: Object,
277
+ default() {
278
+ return {};
279
+ }
280
+ },
281
+ method: {
282
+ type: String,
283
+ default: 'get'
284
+ },
285
+ isEncodeURI: Boolean,
286
+ format: {
287
+ type: Boolean,
288
+ default: true
289
+ },
290
+ data: {
291
+ type: Array,
292
+ default() {
293
+ return [];
294
+ }
295
+ },
296
+ // 表格表单
297
+ form: {
298
+ type: Boolean,
299
+ default: false
300
+ },
301
+ name: String,
302
+ title: {
303
+ type: String,
304
+ default: ''
305
+ },
306
+ // 导出文件名
307
+ fileName: {
308
+ type: String,
309
+ default: ''
310
+ },
311
+ // 工具栏配置
312
+ toolbar: {
313
+ type: [Array, Object, Boolean],
314
+ default: false
315
+ },
316
+ showLabel: Boolean,
317
+ searchValue: Object,
318
+ advanceValue: Object,
319
+ executeSearch: {
320
+ type: Boolean,
321
+ default: true
322
+ },
323
+ executeFilter: {
324
+ type: Boolean,
325
+ default: true
326
+ },
327
+ // 是否开启序号
328
+ numbers: {
329
+ type: Boolean,
330
+ default: false
331
+ },
332
+ orders: {
333
+ type: String,
334
+ default: 'asc'
335
+ },
336
+ // 是否筛选列功能
337
+ filter: {
338
+ type: Boolean,
339
+ default: false
340
+ },
341
+ // 是否开启多选
342
+ checkbox: {
343
+ type: Boolean,
344
+ default: false
345
+ },
346
+ selectable: Function,
347
+ reserveSelection: Boolean,
348
+ // 默认选中,类型为Boolean时默认全(不)选
349
+ checked: {
350
+ type: [Boolean, Array],
351
+ default: false
352
+ },
353
+ checkedKey: {
354
+ type: String,
355
+ default: 'id'
356
+ },
357
+ // 无数据时显示的文本
358
+ emptyText: {
359
+ type: String,
360
+ default: '暂无数据'
361
+ },
362
+ // 是否开启合计行区域
363
+ total: {
364
+ type: Boolean,
365
+ default: false
366
+ },
367
+ //本地数据总条数差值
368
+ lose: {
369
+ type: Number,
370
+ default: 0
371
+ },
372
+ // 合计行显示文本
373
+ totalText: {
374
+ type: String,
375
+ default: ''
376
+ },
377
+ showSummary: {
378
+ type: Boolean,
379
+ default: false
380
+ },
381
+ sumText: {
382
+ type: String,
383
+ default: ''
384
+ },
385
+ // 开启分页
386
+ page: {
387
+ type: [Boolean, Object],
388
+ default() {
389
+ return false;
390
+ }
391
+ },
392
+ showPage: {
393
+ type: Boolean,
394
+ default: true
395
+ },
396
+ // 渲染树形数据指定field
397
+ treeKey: {
398
+ type: String,
399
+ default: ''
400
+ },
401
+ // 单元格配置
402
+ thead: {
403
+ type: Array,
404
+ default() {
405
+ return [];
406
+ }
407
+ },
408
+ optionData: Object,
409
+ // 开启数据增加删除按钮
410
+ editable: {
411
+ type: Boolean,
412
+ default: false
413
+ },
414
+ theadAdd: {
415
+ type: Boolean,
416
+ default: true
417
+ },
418
+ // 单元格点击事件
419
+ click: {
420
+ type: Boolean,
421
+ default: false
422
+ },
423
+ totalRow: {
424
+ type: Object,
425
+ default() {
426
+ return {};
427
+ }
428
+ },
429
+ parseData: Function,
430
+ close: Boolean,
431
+ full: {
432
+ type: Boolean,
433
+ default: true
434
+ },
435
+ height: [Number, String],
436
+ maxHeight: [Number, String],
437
+ response: Function,
438
+ minWidth: [Number, String],
439
+ border: {
440
+ type: [Boolean, String],
441
+ default: false,
442
+ validator: function (value) {
443
+ return [true, false, 'none'].includes(value);
444
+ }
445
+ },
446
+ theadBorder: {
447
+ type: Boolean,
448
+ default: true
449
+ },
450
+ checkboxParseData: Function,
451
+ checkboxParse: Object,
452
+ display: {
453
+ type: Boolean,
454
+ default: true
455
+ },
456
+ showFormBtn: {
457
+ type: Boolean,
458
+ default: true
459
+ },
460
+ index: {
461
+ type: [Number, Function],
462
+ default: 1
463
+ },
464
+ accumulated: {
465
+ type: Boolean,
466
+ default: true
467
+ },
468
+ immediate: {
469
+ type: Boolean,
470
+ default: true
471
+ },
472
+ zoom: false,
473
+ exportExcludeLabel: {
474
+ type: Array,
475
+ default() {
476
+ return [];
477
+ }
478
+ },
479
+ rowData: [Object, Boolean],
480
+ least: Boolean,
481
+ //保留搜索参数
482
+ retainSearh: Boolean,
483
+ //无线滚动
484
+ infiniteScroll: Boolean,
485
+ isJoin: {
486
+ type: Boolean,
487
+ default: true
488
+ },
489
+ ajaxConfig: {
490
+ type: Object,
491
+ default() {
492
+ return {};
493
+ }
494
+ },
495
+ dragSort: Boolean,
496
+ dragSortIcon: {
497
+ type: String,
498
+ default: 'es-icon-lanmu'
499
+ },
500
+ isFieldsEncryption: Boolean,
501
+ contentSuccess: Function,
502
+ resetScroll: {
503
+ type: Boolean,
504
+ default: true
505
+ }
506
+ },
507
+ data() {
508
+ return {
509
+ isEncryption: this.isFieldsEncryption,
510
+ requests: [],
511
+ toolbars: [],
512
+ toolbarEvents: {},
513
+ hasThead: false,
514
+ theadData: [],
515
+ list: [],
516
+ tableLoading: this.loading,
517
+ tableLoadingText: '加载中...',
518
+ isFirsetCheck: false,
519
+ // 可修改表单的值
520
+ editValue: {},
521
+ restotalRow: null,
522
+ showTotal: false,
523
+ config: {
524
+ pageNum: 1,
525
+ pageSize: 20,
526
+ totalCount: 0,
527
+ layout:
528
+ this.mode == 'plus'
529
+ ? 'total, sizes, prev, pager, next, jumper'
530
+ : undefined
531
+ },
532
+ searchWhere: {},
533
+ advanceWhere: {},
534
+ tableHeight: 'auto',
535
+ styles: {},
536
+ selected: null,
537
+ options: {},
538
+ icon: true,
539
+ sysCodes: [],
540
+ infiniteDisabled: !this.infiniteScroll,
541
+ isReload: false,
542
+ pageView: null,
543
+ showSizer: false,
544
+ show: true,
545
+ isSetHeight: false,
546
+ showTable: false,
547
+ fields: null,
548
+ showEditPage: false,
549
+ editPage: ''
550
+ };
551
+ },
552
+ computed: {
553
+ wheres() {
554
+ return { ...this.searchWhere, ...this.advanceWhere };
555
+ },
556
+ params() {
557
+ return {
558
+ ...(this.param || {}),
559
+ ...(this.searchValue || {}),
560
+ ...(this.advanceValue || {})
561
+ };
562
+ },
563
+ tag() {
564
+ return this.form && this.elForm == '' ? 'el-form' : 'div';
565
+ },
566
+ _border() {
567
+ return this.border === true ? true : false;
568
+ },
569
+ theads: {
570
+ get() {
571
+ let types;
572
+ types = this.theadData
573
+ .filter((item) => {
574
+ return (
575
+ item.type == 'selection' ||
576
+ item.type == 'index' ||
577
+ item.type == 'sort' ||
578
+ item.type == 'handle'
579
+ );
580
+ })
581
+ .map((item) => {
582
+ return item.type;
583
+ });
584
+ let thead = [];
585
+ let addfilter = false;
586
+ if (this.dragSort && !types.includes('sort')) {
587
+ addfilter = true;
588
+ thead.push({
589
+ type: 'sort',
590
+ key: 'es-sort'
591
+ });
592
+ }
593
+ if (this.checkbox && !types.includes('selection')) {
594
+ thead.push({
595
+ type: 'selection',
596
+ width: '55',
597
+ align: 'center',
598
+ fixed: 'left',
599
+ selectable: this.selectable,
600
+ reserveSelection: this.reserveSelection,
601
+ filterIcon:
602
+ this.filter && !addfilter ? 'es-icon-yingyong' : undefined,
603
+ key: 'es-checkbox'
604
+ });
605
+ if (!addfilter) {
606
+ addfilter = true;
607
+ }
608
+ }
609
+ if (this.numbers && !types.includes('index')) {
610
+ let index = 1;
611
+ if (typeof this.index === 'function') {
612
+ index = this.index;
613
+ } else {
614
+ if (this.orders == 'desc') {
615
+ index = (num) => {
616
+ return this.config.totalCount - num;
617
+ };
618
+ } else if (this.accumulated) {
619
+ index =
620
+ (this.config.pageNum - 1) * this.config.pageSize + this.index;
621
+ } else {
622
+ index = this.index;
623
+ }
624
+ }
625
+ thead.push({
626
+ type: 'index',
627
+ label: '序号',
628
+ width: '70',
629
+ align: 'center',
630
+ fixed: 'left',
631
+ index: index,
632
+ filterIcon:
633
+ this.filter && !addfilter ? 'es-icon-yingyong' : undefined,
634
+ key: 'es-index'
635
+ });
636
+ if (!addfilter) {
637
+ addfilter = true;
638
+ }
639
+ }
640
+ if (this.theadData.length) {
641
+ let handle = this.thead.filter((item) => {
642
+ return item.type == 'handle';
643
+ });
644
+ thead = [
645
+ ...thead,
646
+ ...this.theadData,
647
+ ...(types.includes('handle') ? [] : handle)
648
+ ];
649
+ } else if (this.show) {
650
+ thead = [...thead, ...this.thead];
651
+ }
652
+ return thead;
653
+ },
654
+ set(val) {
655
+ return val;
656
+ }
657
+ },
658
+ datas: {
659
+ get() {
660
+ if (this.list && this.list.length) {
661
+ return this.list;
662
+ }
663
+ if (
664
+ this.page &&
665
+ ((typeof this.page === 'object' &&
666
+ (!Object.prototype.hasOwnProperty.call(this.page, 'totalCount') ||
667
+ this.page.totalCount == 0)) ||
668
+ this.page === true)
669
+ ) {
670
+ this.config.totalCount = this.data.length - this.lose;
671
+ }
672
+ if (this.page && this.data.length > this.config.pageSize) {
673
+ return this.data.filter((item, index) => {
674
+ return (
675
+ index > (this.config.pageNum - 1) * this.config.pageSize - 1 &&
676
+ index < this.config.pageNum * this.config.pageSize
677
+ );
678
+ });
679
+ }
680
+ return this.data;
681
+ },
682
+ set(val) {
683
+ if (this.list && this.list.length) {
684
+ this.$nextTick(() => {
685
+ this.list = val;
686
+ });
687
+ }
688
+ this.$emit('update:data', val);
689
+ return val;
690
+ }
691
+ },
692
+ showToolbar() {
693
+ if (this.readonly) {
694
+ return false;
695
+ }
696
+ if (typeof this.toolbar === 'boolean') {
697
+ if (this.toolbar) {
698
+ this.toolbars = [
699
+ {
700
+ type: 'search',
701
+ contents: [
702
+ {
703
+ type: 'text',
704
+ name: 'keyword',
705
+ placeholder: '请输入关键字'
706
+ }
707
+ ]
708
+ }
709
+ ];
710
+ }
711
+ return this.toolbar;
712
+ } else if (Array.isArray(this.toolbar)) {
713
+ this.toolbars = this.toolbar;
714
+ return true;
715
+ } else {
716
+ this.toolbars = this.toolbar.contents;
717
+ this.toolbarEvents = this.toolbar.events || {};
718
+ return true;
719
+ }
720
+ },
721
+ optionDatas: {
722
+ get() {
723
+ let data = this.optionData
724
+ ? { ...this.optionData, ...this.options }
725
+ : this.options;
726
+ return data;
727
+ },
728
+ set(val) {
729
+ return val;
730
+ }
731
+ },
732
+ headButton() {
733
+ return this.theadAdd && !this.readonly
734
+ ? {
735
+ icon: 'el-icon-circle-plus-outline',
736
+ type: 'text',
737
+ event: this.handleClickAddData
738
+ }
739
+ : undefined;
740
+ },
741
+ isLeast() {
742
+ return this.data.length < 2 && this.least;
743
+ },
744
+ findCode() {
745
+ if (this.service) {
746
+ return `/${this.service}${getDictList}`;
747
+ }
748
+ return findSysCode;
749
+ },
750
+ isShow() {
751
+ let useCaseCodes = util.getStorage('useCaseCodes');
752
+ return (
753
+ this.viewCode &&
754
+ useCaseCodes &&
755
+ (useCaseCodes.indexOf('SuperAdminRoleID') > -1 ||
756
+ useCaseCodes.indexOf('OrgAdminRoleID') > -1)
757
+ );
758
+ }
759
+ },
760
+ watch: {
761
+ viewCode: {
762
+ immediate: true,
763
+ handler(val) {
764
+ if (val) {
765
+ this.hasThead = true;
766
+ this.getContents();
767
+ }
768
+ }
769
+ },
770
+ showToolbar() {
771
+ this.resetHeight();
772
+ this.doLayout();
773
+ },
774
+ data: {
775
+ deep: true,
776
+ handler() {
777
+ this.list = this.setData();
778
+ }
779
+ },
780
+ scale: {
781
+ deep: true,
782
+ handler(val) {
783
+ if (
784
+ this.tableHeight != 'auto' &&
785
+ this.tableHeight !== false &&
786
+ this.display
787
+ ) {
788
+ this.resetHeight();
789
+ this.doLayout();
790
+ }
791
+ }
792
+ },
793
+ zoom: {
794
+ handler() {
795
+ if (
796
+ this.tableHeight != 'auto' &&
797
+ this.tableHeight !== false &&
798
+ this.display
799
+ ) {
800
+ this.resetHeight();
801
+ this.doLayout();
802
+ }
803
+ }
804
+ },
805
+ checked(newVal) {
806
+ this.list.length && this.checkSelect(newVal);
807
+ },
808
+ thead: {
809
+ deep: true,
810
+ handler(val, old) {
811
+ if (!util.isObjectEqual(val, old)) {
812
+ this.getOptions(val);
813
+ this.chekOpenTotalArea();
814
+ if (Array.isArray(val) && val.length && this.datas.length == 0) {
815
+ this.getTableData();
816
+ }
817
+ }
818
+ }
819
+ },
820
+ theads: {
821
+ deep: true,
822
+ handler() {
823
+ this.chekOpenTotalArea();
824
+ }
825
+ },
826
+ param: {
827
+ handler(val, old) {
828
+ if (!util.isObjectEqual(val, old)) {
829
+ this.getTableData();
830
+ }
831
+ }
832
+ },
833
+ page: {
834
+ immediate: true,
835
+ deep: true,
836
+ handler(val) {
837
+ if (this.$el) {
838
+ this.resetHeight();
839
+ this.doLayout();
840
+ }
841
+ if (typeof val === 'object') {
842
+ this.config = util.extend({}, this.config, val);
843
+ }
844
+ }
845
+ },
846
+ 'config.pageNum'() {
847
+ if (this.data.length) {
848
+ this.resetScroll &&
849
+ this.$refs.oaTable &&
850
+ this.$refs.oaTable.resetScroll &&
851
+ this.$refs.oaTable.resetScroll(0, 0);
852
+ this.list = this.setData();
853
+ }
854
+ },
855
+ height: {
856
+ immediate: true,
857
+ handler(val) {
858
+ if (val) {
859
+ this.tableHeight = val;
860
+ }
861
+ }
862
+ },
863
+ maxHeight: {
864
+ immediate: true,
865
+ handler(val) {
866
+ if (val && this.height === undefined) {
867
+ this.tableHeight = val;
868
+ }
869
+ }
870
+ },
871
+ display(val) {
872
+ if (val) {
873
+ this.resetHeight();
874
+ this.doLayout();
875
+ }
876
+ },
877
+ showEditPage(val) {
878
+ if (val === false) {
879
+ try {
880
+ const topWin = util.getWinTop();
881
+ topWin.refresh();
882
+ } catch (error) {
883
+ console.warn('Failed to refresh page:', error);
884
+ }
885
+ }
886
+ }
887
+ },
888
+ beforeCreate() {
889
+ this.getTableData = debounce(500, (res) => {
890
+ this.getTableDatas(res);
891
+ });
892
+ },
893
+ created() {
894
+ if (Array.isArray(this.thead) && this.thead.length) {
895
+ this.getOptions(this.thead);
896
+ this.immediate && !this.viewCode && this.getTableData();
897
+ }
898
+ this.chekOpenTotalArea();
899
+ },
900
+ mounted() {
901
+ this.showTable = true;
902
+ if (this.data.length) {
903
+ this.list = this.setData();
904
+ }
905
+ this.list.length && this.checkSelect(this.checked);
906
+ this.resetHeight();
907
+ if (util.getWinTop() != util.win.self) {
908
+ util.win.onresize = throttle(500, this.resetHeight);
909
+ }
910
+ },
911
+ methods: {
912
+ setData() {
913
+ if (
914
+ this.page &&
915
+ ((typeof this.page === 'object' &&
916
+ (!Object.prototype.hasOwnProperty.call(this.page, 'totalCount') ||
917
+ this.page.totalCount == 0)) ||
918
+ this.page === true)
919
+ ) {
920
+ this.config.totalCount = this.data.length - this.lose;
921
+ }
922
+ if (this.page && this.data.length > this.config.pageSize) {
923
+ return this.data.filter((item, index) => {
924
+ return (
925
+ index > (this.config.pageNum - 1) * this.config.pageSize - 1 &&
926
+ index < this.config.pageNum * this.config.pageSize
927
+ );
928
+ });
929
+ }
930
+ return this.data;
931
+ },
932
+ getRequestKey(config) {
933
+ const { method, url, params, data } = config;
934
+ return [method, url, qs.stringify(params), qs.stringify(data)].join('&');
935
+ },
936
+ getContents() {
937
+ util
938
+ .ajax({
939
+ url: this.contentsUrl,
940
+ params: {
941
+ formId: this.viewCode
942
+ }
943
+ })
944
+ .then((res) => {
945
+ if (res.rCode == 0) {
946
+ if (this.contentSuccess) {
947
+ this.contentSuccess(res.results);
948
+ } else {
949
+ let {
950
+ results: { eossFormJson }
951
+ } = res;
952
+ eossFormJson = JSON.parse(eossFormJson);
953
+ if (eossFormJson && eossFormJson.table) {
954
+ this.isEncryption = true;
955
+ this.theadData = eossFormJson.table.thead;
956
+ this.getTableData();
957
+ } else {
958
+ this.hasThead = false;
959
+ }
960
+ this.$emit('init-contents', res.results);
961
+ }
962
+ }
963
+ });
964
+ },
965
+ getOptions(res) {
966
+ let sysCodes = [];
967
+ res.forEach((item) => {
968
+ if (item.sysCode || item.url) {
969
+ item.sysCode && sysCodes.push(item.sysCode);
970
+ let params = util.extend(
971
+ {},
972
+ item.sysCode
973
+ ? { sysAppCode: item.sysCode, code: item.sysCode }
974
+ : {},
975
+ item.param ? item.param : {}
976
+ );
977
+ let key = this.getRequestKey({
978
+ method: this.method,
979
+ url: item.sysCode ? this.findCode : item.url,
980
+ params: params,
981
+ data: {}
982
+ });
983
+ if (!this.requests.includes(key)) {
984
+ util
985
+ .ajax({
986
+ url: item.sysCode ? this.findCode : item.url,
987
+ method: this.method,
988
+ params: params,
989
+ data: params
990
+ })
991
+ .then((res) => {
992
+ if (res.rCode === 0) {
993
+ if (item.type == 'ganged') {
994
+ this.$set(
995
+ this.options,
996
+ item.sysCode || item.field || item.prop,
997
+ [JSON.parse(JSON.stringify(res.results))]
998
+ );
999
+ if (item.sysCode) {
1000
+ const bus = this.bus || this.$root.Bus;
1001
+ bus &&
1002
+ bus.$emit(
1003
+ item.sysCode,
1004
+ JSON.parse(JSON.stringify(this.options[item.sysCode]))
1005
+ );
1006
+ }
1007
+ } else {
1008
+ this.$set(
1009
+ this.options,
1010
+ item.sysCode || item.field || item.prop,
1011
+ JSON.parse(JSON.stringify(res.results))
1012
+ );
1013
+ if (item.sysCode) {
1014
+ const bus = this.bus || this.$root.Bus;
1015
+ bus &&
1016
+ bus.$emit(
1017
+ item.sysCode,
1018
+ JSON.parse(JSON.stringify(res.results))
1019
+ );
1020
+ }
1021
+ }
1022
+ this.requests.push(key);
1023
+ } else {
1024
+ let msg = res.msg || '系统错误,请联系管理员!';
1025
+ this.$message.error(msg);
1026
+ }
1027
+ })
1028
+ .catch((err) => {
1029
+ if (err.message && err.message !== 'canceled') {
1030
+ this.$message.error(err.message);
1031
+ }
1032
+ });
1033
+ }
1034
+ } else {
1035
+ if (item.childHead && item.childHead.length) {
1036
+ this.getOptions(item.childHead);
1037
+ }
1038
+ if (item.children && item.children.length) {
1039
+ this.getOptions(item.children);
1040
+ }
1041
+ }
1042
+ });
1043
+ this.sysCodes = sysCodes;
1044
+
1045
+ this.bindEventBus();
1046
+ },
1047
+ checkObject(item) {
1048
+ return util.getObjectType(item) === 'object';
1049
+ },
1050
+ chekOpenTotalArea() {
1051
+ if (this.total || this.showSummary) {
1052
+ this.showTotal = true;
1053
+ return;
1054
+ }
1055
+ if (!this.theads) {
1056
+ return;
1057
+ }
1058
+ const arr = JSON.parse(JSON.stringify(this.theads));
1059
+ let flag = false;
1060
+ arr.forEach((item) => {
1061
+ if (item.total) {
1062
+ flag = true;
1063
+ this.showTotal = true;
1064
+ }
1065
+ });
1066
+ if (this.showTotal !== flag) {
1067
+ this.showTotal = flag;
1068
+ }
1069
+ },
1070
+ rowClick(row, column, event) {
1071
+ this.$emit('click', row, column, event);
1072
+ this.$emit('row-click', row, column, event);
1073
+ },
1074
+ handleClickAddData(scope) {
1075
+ if (scope && scope.row) {
1076
+ const data = JSON.parse(JSON.stringify(scope.row));
1077
+ let index = scope.$index + 1;
1078
+ if (this.page) {
1079
+ index += (this.config.pageNum - 1) * this.config.pageSize;
1080
+ }
1081
+ this.data.splice(index, 0, data);
1082
+ this.$emit('dataChange', 'add', data);
1083
+ this.$emit('data-change', 'add', data);
1084
+ this.$emit('btnClick', {
1085
+ event: 'addRow',
1086
+ row: data,
1087
+ index: index,
1088
+ data: this.data
1089
+ });
1090
+ this.$emit('btn-click', {
1091
+ event: 'addRow',
1092
+ row: data,
1093
+ index: index,
1094
+ data: this.data
1095
+ });
1096
+ } else {
1097
+ let index = this.data.length;
1098
+ if (this.page) {
1099
+ index += (this.config.pageNum - 1) * this.config.pageSize;
1100
+ }
1101
+ let rows = {};
1102
+ if (this.rowData && typeof this.rowData == 'object') {
1103
+ rows = this.rowData;
1104
+ } else if (index && this.rowData === true) {
1105
+ rows = JSON.parse(JSON.stringify(this.data[index - 1]));
1106
+ } else {
1107
+ this.getRow(this.thead, rows);
1108
+ }
1109
+ this.data.splice(index, 0, rows);
1110
+ }
1111
+ },
1112
+ getRow(thead, obj) {
1113
+ thead.forEach((item) => {
1114
+ if (item.field) {
1115
+ obj[item['field']] = item.defaultValue || '';
1116
+ } else if (item.children && item.children.length) {
1117
+ this.getRow(item.children, obj);
1118
+ }
1119
+ });
1120
+ },
1121
+ handleClickDeleteData(scope) {
1122
+ const data = JSON.parse(JSON.stringify(scope.row));
1123
+ let index = scope.$index;
1124
+ if (this.page) {
1125
+ index += (this.config.pageNum - 1) * this.config.pageSize;
1126
+ }
1127
+ this.data.splice(index, 1);
1128
+ this.$emit('dataChange', 'delete', data);
1129
+ this.$emit('data-change', 'delete', data);
1130
+ this.$emit('btnClick', {
1131
+ event: 'deleteRow',
1132
+ row: data,
1133
+ index: index,
1134
+ data: this.data
1135
+ });
1136
+ this.$emit('btn-click', {
1137
+ event: 'deleteRow',
1138
+ row: data,
1139
+ index: index,
1140
+ data: this.data
1141
+ });
1142
+ },
1143
+ checkSelect(newVal) {
1144
+ this.$nextTick(() => {
1145
+ if (util.getObjectType(newVal) === 'array') {
1146
+ newVal.forEach((row) => {
1147
+ if (util.isObject(row)) {
1148
+ this.$refs.oaTable.toggleRowSelection(row, true);
1149
+ } else {
1150
+ this.setChecked(this.list, row);
1151
+ }
1152
+ });
1153
+ } else if (newVal === true) {
1154
+ this.toggleAllSelection();
1155
+ }
1156
+ });
1157
+ },
1158
+ setChecked(list, row) {
1159
+ list.forEach((item) => {
1160
+ if (item.children && item.children.length) {
1161
+ this.setChecked(item.children, row);
1162
+ }
1163
+ if (item[this.checkedKey] === row) {
1164
+ this.$refs.oaTable.toggleRowSelection(item, true);
1165
+ return;
1166
+ }
1167
+ });
1168
+ },
1169
+ getTableDatas(res) {
1170
+ let where;
1171
+ let first;
1172
+ if (res) {
1173
+ where = res.where;
1174
+ first = res.first;
1175
+ }
1176
+ if (!this.url) {
1177
+ return;
1178
+ }
1179
+ if (first !== false && !this.infiniteScroll) {
1180
+ this.config.pageNum = 1;
1181
+ }
1182
+ this.tableLoadingText = '加载中...';
1183
+ let reqData = util.extend(
1184
+ {},
1185
+ this.params,
1186
+ this.page
1187
+ ? {
1188
+ pageNum: this.config.pageNum,
1189
+ pageSize: this.config.pageSize
1190
+ }
1191
+ : {}
1192
+ );
1193
+ if (where) {
1194
+ reqData = util.extend({}, reqData, where);
1195
+ }
1196
+ //if (this.fields)
1197
+ if (this.retainSearh || first === false) {
1198
+ reqData = util.extend({}, reqData, this.wheres);
1199
+ }
1200
+ if (this.isJoin) {
1201
+ for (let i in reqData) {
1202
+ if (Array.isArray(reqData[i])) {
1203
+ reqData[i] = reqData[i].join(',');
1204
+ }
1205
+ }
1206
+ }
1207
+ if (this.isEncryption) {
1208
+ let fields = [];
1209
+ this.theads.forEach((item) => {
1210
+ if (item.field || item.prop) {
1211
+ fields.push(item.field || item.prop);
1212
+ }
1213
+ });
1214
+ let initLogin = util.getStorage('initLogin');
1215
+ initLogin && (initLogin = JSON.parse(initLogin));
1216
+ reqData['fields'] = initLogin.secret
1217
+ ? util.esmEncrypt({
1218
+ data: fields.join(','),
1219
+ key: initLogin.secret
1220
+ })
1221
+ : fields.join(',');
1222
+ }
1223
+ this.tableLoading = true;
1224
+ util
1225
+ .ajax({
1226
+ ...this.ajaxConfig,
1227
+ url: this.url,
1228
+ method: this.method,
1229
+ format: this.format,
1230
+ params: reqData,
1231
+ data: reqData
1232
+ })
1233
+ .then((res) => {
1234
+ this.tableLoading = false;
1235
+ if (res.rCode === 0 || res.status === 'success') {
1236
+ if (this.isReload) {
1237
+ this.list = [];
1238
+ this.isReload = false;
1239
+ }
1240
+ let results =
1241
+ this.parseData !== undefined
1242
+ ? this.parseData(res.results || res.data || res)
1243
+ : res.results || res.data;
1244
+ if (this.infiniteScroll) {
1245
+ this.list = this.list.concat(
1246
+ results.data || results.records || results.list
1247
+ );
1248
+ this.config.pageNum += 1;
1249
+ } else {
1250
+ this.list = results.data || results.records || results.list;
1251
+ this.$nextTick(() => {
1252
+ this.resetScroll &&
1253
+ this.$refs.oaTable &&
1254
+ this.$refs.oaTable.resetScroll &&
1255
+ this.$refs.oaTable.resetScroll(0, 0);
1256
+ });
1257
+ }
1258
+ this.config.totalCount =
1259
+ results.count || results.total || results.totalCount;
1260
+ this.config.pageCount = results.pageCount;
1261
+ this.checked &&
1262
+ this.$nextTick(() => {
1263
+ this.checkSelect(this.checked);
1264
+ });
1265
+ if (
1266
+ this.infiniteScroll &&
1267
+ this.config.totalCount === this.list.length
1268
+ ) {
1269
+ this.infiniteDisabled = true;
1270
+ }
1271
+ } else {
1272
+ this.list = [];
1273
+ //this.tableHeight = false;
1274
+ let msg = res.msg || '系统错误,请联系管理员!';
1275
+ this.$message.error(msg);
1276
+ }
1277
+ this.$emit('success', res);
1278
+ })
1279
+ .catch((err) => {
1280
+ //this.tableHeight = false;
1281
+ if (err.message && err.message !== 'canceled') {
1282
+ this.$message.error(err.message);
1283
+ }
1284
+ this.tableLoading = false;
1285
+ });
1286
+ },
1287
+ selectionChange(data) {
1288
+ this.selected = JSON.parse(JSON.stringify(data));
1289
+ this.$emit('selection-change', data);
1290
+ },
1291
+ clearSelection() {
1292
+ this.$refs.oaTable.clearSelection();
1293
+ },
1294
+ toggleRowSelection(row, selected) {
1295
+ this.$refs.oaTable.toggleRowSelection(row, selected);
1296
+ },
1297
+ toggleAllSelection() {
1298
+ this.$refs.oaTable.toggleAllSelection();
1299
+ },
1300
+ toggleRowExpansion(row, expanded) {
1301
+ this.$refs.oaTable.toggleRowExpansion(row, expanded);
1302
+ },
1303
+ setCurrentRow(row) {
1304
+ this.$refs.oaTable.setCurrentRow(row);
1305
+ },
1306
+
1307
+ clearSort() {
1308
+ this.$refs.oaTable.clearSort();
1309
+ },
1310
+ clearFilter(columnKey) {
1311
+ this.$refs.oaTable.clearFilter(columnKey);
1312
+ },
1313
+ doLayout() {
1314
+ this.$refs.oaTable && this.$refs.oaTable.doLayout();
1315
+ },
1316
+ sort(prop, order) {
1317
+ this.$refs.oaTable.sort(prop, order);
1318
+ },
1319
+ formBlur(data) {
1320
+ this.$emit('blur', data, this.list);
1321
+ },
1322
+ formFocus(data) {
1323
+ this.$emit('focus', data, this.list);
1324
+ },
1325
+ formChange(data) {
1326
+ this.$emit('edit', data, this.list);
1327
+ this.$emit('change', data, this.list);
1328
+ },
1329
+ toolbarChange(...args) {
1330
+ this.$emit('toolbar-change', ...args);
1331
+ },
1332
+ handleAjax(handle, row) {
1333
+ this.changeLoading(true, `${handle.text}中...`);
1334
+ let params = handle.param || {};
1335
+ if (handle.syncKeys) {
1336
+ if (typeof handle.syncKeys === 'string') {
1337
+ params[handle.syncKeys] = row[handle.syncKeys];
1338
+ } else if (Array.isArray(handle.syncKeys)) {
1339
+ for (let i in handle.syncKeys) {
1340
+ if (Array.isArray(row)) {
1341
+ let param = row.map((item) => {
1342
+ return item[handle.syncKeys[i]];
1343
+ });
1344
+ params[handle.syncKeys[i]] = param.join(',');
1345
+ } else {
1346
+ params[handle.syncKeys[i]] = row[handle.syncKeys[i]];
1347
+ }
1348
+ }
1349
+ } else {
1350
+ for (let i in handle.syncKeys) {
1351
+ if (Array.isArray(row)) {
1352
+ let param = row.map((item) => {
1353
+ return item[handle.syncKeys[i]];
1354
+ });
1355
+ params[i] = param.join(',');
1356
+ } else {
1357
+ params[i] = row[handle.syncKeys[i]];
1358
+ }
1359
+ }
1360
+ }
1361
+ } else {
1362
+ if (Array.isArray(row)) {
1363
+ let param = row.map((item) => {
1364
+ return item.id;
1365
+ });
1366
+ params.id = param.join(',');
1367
+ } else {
1368
+ params.id = row.id;
1369
+ }
1370
+ }
1371
+ let keys = Object.keys(params);
1372
+ util
1373
+ .ajax({
1374
+ ...(handle.ajaxConfig || {}),
1375
+ url: handle.action,
1376
+ data:
1377
+ keys.length == 1 && handle.format === false
1378
+ ? params[keys[0]].split(',')
1379
+ : params,
1380
+ params:
1381
+ keys.length == 1 && handle.format === false
1382
+ ? params[keys[0]].split(',')
1383
+ : params,
1384
+ method: handle.method,
1385
+ format: handle.format
1386
+ })
1387
+ .then((res) => {
1388
+ this.changeLoading(false);
1389
+ if (res.rCode === 0) {
1390
+ this.$message({
1391
+ message: `${handle.text}成功`,
1392
+ duration: 2000,
1393
+ type: 'success',
1394
+ onClose: () => {
1395
+ let first = Object.prototype.hasOwnProperty.call(
1396
+ handle,
1397
+ 'first'
1398
+ )
1399
+ ? handle.first
1400
+ : false;
1401
+ let reload = handle.reload || true;
1402
+ if (handle.event == 'delete') {
1403
+ let totalCount = this.config.totalCount - 1;
1404
+ this.config.pageNum = Math.ceil(
1405
+ totalCount / this.config.pageSize
1406
+ );
1407
+ }
1408
+
1409
+ if (reload) {
1410
+ this.reload({}, first);
1411
+ }
1412
+ }
1413
+ });
1414
+ } else {
1415
+ this.$message.error(
1416
+ res.msg || `${handle.text}失败,请联系管理员!`
1417
+ );
1418
+ }
1419
+ })
1420
+ .catch((err) => {
1421
+ this.changeLoading(false);
1422
+ if (err.message && err.message !== 'canceled') {
1423
+ this.$message.error(err.message);
1424
+ }
1425
+ });
1426
+ },
1427
+ checkParse(data, parse) {
1428
+ if (Array.isArray(data)) {
1429
+ return data.map((items) => {
1430
+ let item = JSON.parse(JSON.stringify(items));
1431
+ let obj = {};
1432
+ for (let i in parse) {
1433
+ obj[i] = item[parse[i]];
1434
+ delete item[parse[i]];
1435
+ }
1436
+ return { ...obj, ...item };
1437
+ });
1438
+ }
1439
+ let item = JSON.parse(JSON.stringify(data));
1440
+ let obj = {};
1441
+ for (let i in parse) {
1442
+ obj[i] = item[parse[i]];
1443
+ delete item[parse[i]];
1444
+ }
1445
+ return { ...obj, ...item };
1446
+ },
1447
+ handleClick(res) {
1448
+ let { row, handle } = res;
1449
+ let rows;
1450
+ if (handle.checkbox) {
1451
+ if (!this.selected || !this.selected.length) {
1452
+ this.$alert('请选择数据', '提示', { type: 'warning' });
1453
+ return;
1454
+ } else {
1455
+ row = this.selected;
1456
+ }
1457
+ }
1458
+ if (this.checkboxParseData) {
1459
+ rows = this.checkboxParseData(JSON.parse(JSON.stringify(row)));
1460
+ } else if (this.checkboxParse) {
1461
+ rows = this.checkParse(row, this.checkboxParse);
1462
+ } else if (handle.checkboxParse) {
1463
+ rows = this.checkParse(row, handle.checkboxParse);
1464
+ } else if (row) {
1465
+ rows = JSON.parse(JSON.stringify(row));
1466
+ }
1467
+ let thead = this.theads;
1468
+ if (this.$refs.oaTable) {
1469
+ thead = this.$refs.oaTable.getThead().thead;
1470
+ }
1471
+ if (handle.action) {
1472
+ let isConfirm = handle.confirm || true;
1473
+ if (isConfirm) {
1474
+ let msg = handle.field ? row[handle.field] : '';
1475
+ this.$confirm(`确定要${handle.text}${msg}吗`, '提示', {
1476
+ confirmButtonText: '确定',
1477
+ cancelButtonText: '取消',
1478
+ type: 'warning'
1479
+ })
1480
+ .then(() => {
1481
+ this.handleAjax(handle, rows);
1482
+ })
1483
+ .catch(() => {});
1484
+ } else {
1485
+ this.handleAjax(handle, rows);
1486
+ }
1487
+ } else if (handle.event) {
1488
+ if (typeof handle.event === 'function') {
1489
+ handle.event({
1490
+ ele: this,
1491
+ thead: thead,
1492
+ data: this.list,
1493
+ selected: rows,
1494
+ ...res
1495
+ });
1496
+ } else if (
1497
+ handle.event === 'add' ||
1498
+ handle.event === 'edit' ||
1499
+ handle.event === 'look'
1500
+ ) {
1501
+ let changes = {
1502
+ event: handle.event,
1503
+ title: handle.title || handle.text,
1504
+ value: handle.event === 'add' ? {} : rows,
1505
+ readonly: handle.event === 'look',
1506
+ actionType: handle.actionType
1507
+ ? handle.actionType
1508
+ : handle.event === 'add'
1509
+ ? 'save'
1510
+ : 'update',
1511
+ visible: true
1512
+ };
1513
+ if (handle.dialog) {
1514
+ let dialog;
1515
+ for (let i = 0; i < this.$children.length; i++) {
1516
+ let child = this.$children[i];
1517
+ if (child.$refs[handle.dialog]) {
1518
+ dialog = child.$refs[handle.dialog];
1519
+ break;
1520
+ }
1521
+ }
1522
+ dialog.setAttrs(changes);
1523
+ }
1524
+ this.injector && this.injector.handleChangeData(changes);
1525
+ if (handle.busEvent) {
1526
+ const bus = this.bus || this.$root.Bus;
1527
+ bus && bus.$emit(handle.busEvent, changes);
1528
+ }
1529
+ }
1530
+ } else if (handle.changeData) {
1531
+ let changeData = {};
1532
+ if (Array.isArray(handle.changeData)) {
1533
+ handle.changeData.forEach((item) => {
1534
+ if (util.isObject(item)) {
1535
+ for (let i in item) {
1536
+ if (typeof item[i] === 'boolean') {
1537
+ changeData[i] = item[i];
1538
+ } else {
1539
+ changeData[i] = handle[item[i]] || item[i];
1540
+ }
1541
+ }
1542
+ } else {
1543
+ changeData[item] =
1544
+ handle[item] || (Array.isArray(rows) ? rows : rows[item]);
1545
+ }
1546
+ });
1547
+ } else {
1548
+ for (let i in handle.changeData) {
1549
+ let item = handle.changeData[i];
1550
+ if (util.isObject(item)) {
1551
+ let obj = {};
1552
+ for (let e in item) {
1553
+ obj[e] =
1554
+ handle[item[e]] ||
1555
+ (Array.isArray(rows) ? rows : rows[item[e]]);
1556
+ }
1557
+ changeData[i] = obj;
1558
+ } else {
1559
+ if (typeof item === 'boolean') {
1560
+ changeData[i] = item;
1561
+ } else {
1562
+ changeData[i] =
1563
+ handle[item] || (Array.isArray(rows) ? rows : rows[item]);
1564
+ }
1565
+ }
1566
+ }
1567
+ }
1568
+ if (handle.actionType) {
1569
+ changeData['actionType'] = handle.actionType;
1570
+ }
1571
+ this.injector && this.injector.handleChangeData(changeData);
1572
+ if (handle.busEvent) {
1573
+ const bus = this.bus || this.$root.Bus;
1574
+ bus && bus.$emit(handle.busEvent, changes);
1575
+ }
1576
+ } else {
1577
+ if (handle.exportXls) {
1578
+ let text = '操作';
1579
+ if (
1580
+ this.theads[this.theads.length - 1] &&
1581
+ this.theads[this.theads.length - 1].type === 'handle'
1582
+ ) {
1583
+ text = this.theads[this.theads.length - 1].title;
1584
+ }
1585
+ let type = ['selection', 'index', 'expand'];
1586
+ thead = thead.map((item) => {
1587
+ return item.filter((ele) => {
1588
+ return (
1589
+ !type.includes(ele.type) &&
1590
+ ele.label !== text &&
1591
+ !this.exportExcludeLabel.includes(ele.label)
1592
+ );
1593
+ });
1594
+ });
1595
+ util.exportXls({
1596
+ thead: thead,
1597
+ data: this.list,
1598
+ name: this.fileName,
1599
+ option: this.optionDatas
1600
+ });
1601
+ }
1602
+ this.$emit('btnClick', res, this.list, thead, rows);
1603
+ this.$emit('btn-click', res, this.list, thead, rows);
1604
+ }
1605
+ },
1606
+ sizeChange(res) {
1607
+ this.config.pageSize = res;
1608
+ this.config.pageNum = 1;
1609
+ this.checkSelect(this.checked);
1610
+ this.$emit('page-size-change', res);
1611
+ if (this.url) {
1612
+ this.getTableData({ where: this.wheres, first: false });
1613
+ }
1614
+ },
1615
+ currentChange(res) {
1616
+ this.config.pageNum = res;
1617
+ this.checkSelect(this.checked);
1618
+ this.$emit('page-current-change', res);
1619
+ this.$emit('current', res);
1620
+ if (this.url) {
1621
+ this.getTableData({ where: this.wheres, first: false });
1622
+ }
1623
+ },
1624
+ preClick(res) {
1625
+ this.config.pageNum = res;
1626
+ this.checkSelect(this.checked);
1627
+ this.$emit('prev', res);
1628
+ },
1629
+ nextClick(res) {
1630
+ this.config.pageNum = res;
1631
+ this.checkSelect(this.checked);
1632
+ this.$emit('next', res);
1633
+ },
1634
+ hanleSearch(data) {
1635
+ this.searchWhere =
1636
+ this.response !== undefined
1637
+ ? this.response({
1638
+ type: 'search',
1639
+ data: JSON.parse(JSON.stringify(data))
1640
+ })
1641
+ : data;
1642
+ if (this.url && this.executeSearch) {
1643
+ this.getTableData({ where: this.wheres });
1644
+ }
1645
+ this.$emit('search', this.searchWhere);
1646
+ },
1647
+ hanleReset() {
1648
+ this.searchWhere = {};
1649
+ this.advanceWhere = {};
1650
+ if (this.url) {
1651
+ this.getTableData();
1652
+ }
1653
+ this.$emit('reset', this.params);
1654
+ },
1655
+ hanleSubmit({ data, show }) {
1656
+ this.advanceWhere =
1657
+ this.response !== undefined
1658
+ ? this.response({
1659
+ type: 'filter',
1660
+ data: JSON.parse(JSON.stringify(data))
1661
+ })
1662
+ : data;
1663
+
1664
+ if (this.url && this.executeFilter) {
1665
+ this.getTableData({ where: this.wheres });
1666
+ }
1667
+ this.$emit('submit', {
1668
+ data: this.advanceWhere,
1669
+ where: this.wheres,
1670
+ show
1671
+ });
1672
+ },
1673
+ hanleCancel() {
1674
+ this.$emit('cancel', this.params);
1675
+ },
1676
+ handleTabs({ item, index }) {
1677
+ if (this.url) {
1678
+ this.getTableData({ where: item });
1679
+ }
1680
+ this.$emit('tabs', { item, index });
1681
+ },
1682
+ reload(obj, first = false) {
1683
+ if (obj && obj.config) {
1684
+ this.config = util.extend({}, this.config, obj.config);
1685
+ }
1686
+ if (this.url) {
1687
+ this.isReload = true;
1688
+ this.getTableData({ where: obj && obj.where ? obj.where : {}, first });
1689
+ }
1690
+ },
1691
+ resetHeight(warn) {
1692
+ this.isSetHeight =
1693
+ util.getStyle(this.$el.parentNode, 'height') == '0px' ? false : true;
1694
+ this.$nextTick(() => {
1695
+ if (this.full && !this.height && !this.maxHeight && this.isSetHeight) {
1696
+ let height = this.$el.parentNode.offsetHeight;
1697
+ if (height) {
1698
+ height = parseInt(
1699
+ util.getStyle(this.$el.parentNode, 'height', '%'),
1700
+ 10
1701
+ );
1702
+ height =
1703
+ (height == NaN ? 0 : height) -
1704
+ parseInt(util.getStyle(this.$el.parentNode, 'padding-top'), 10) -
1705
+ parseInt(
1706
+ util.getStyle(this.$el.parentNode, 'padding-bottom'),
1707
+ 10
1708
+ );
1709
+ for (let i = 0; i < this.$el.parentNode.childNodes.length; i++) {
1710
+ let ele = this.$el.parentNode.childNodes[i];
1711
+ if (
1712
+ this.$el &&
1713
+ ele.offsetHeight !== undefined &&
1714
+ ele != this.$el
1715
+ ) {
1716
+ height =
1717
+ height -
1718
+ ele.offsetHeight -
1719
+ parseInt(util.getStyle(ele, 'margin-top'), 10) -
1720
+ parseInt(util.getStyle(ele, 'margin-bottom'), 10);
1721
+ }
1722
+ }
1723
+ height -= this.showToolbar
1724
+ ? this.$refs.toolbar.$el.offsetHeight
1725
+ : 0;
1726
+ height -=
1727
+ this.page === false || this.showPage == false
1728
+ ? 0
1729
+ : this.$refs.pagination.$el.offsetHeight;
1730
+ height -= this.title ? this.$refs.title.offsetHeight : 0;
1731
+ height -= parseInt(
1732
+ util.getStyle(this.$refs.esTableContent, 'padding-top'),
1733
+ 10
1734
+ );
1735
+ height -= parseInt(
1736
+ util.getStyle(this.$refs.esTableContent, 'padding-bottom'),
1737
+ 10
1738
+ );
1739
+ let emptyText = this.$refs.esTableContent.querySelector(
1740
+ '.el-table__empty-text'
1741
+ );
1742
+ if (this.total) {
1743
+ height -= 1;
1744
+ }
1745
+ let eht = 0;
1746
+ if (emptyText) {
1747
+ eht = emptyText.offsetHeight;
1748
+ let thead =
1749
+ this.$refs.esTableContent.querySelector('.el-table__header');
1750
+ thead && (eht += thead.offsetHeight);
1751
+ }
1752
+ if (height > 1 && height - eht > 1) {
1753
+ this.tableHeight = height;
1754
+ } else {
1755
+ console.warn(this.$el.parentNode, `获取不到高度!`);
1756
+ }
1757
+ } else if (!warn) {
1758
+ setTimeout(() => {
1759
+ this.resetHeight(true);
1760
+ }, 1000);
1761
+ }
1762
+ }
1763
+ });
1764
+ },
1765
+ validate(callback) {
1766
+ if (this.form) {
1767
+ let form = this.elForm || this.$children[0];
1768
+ form.validate((valid) => {
1769
+ callback(valid);
1770
+ });
1771
+ }
1772
+ },
1773
+ changeLoading(show, text) {
1774
+ this.tableLoading = show;
1775
+ if (text) {
1776
+ this.tableLoadingText = text;
1777
+ }
1778
+ },
1779
+ handleFilterColumn() {
1780
+ this.showSizer = true;
1781
+ },
1782
+ handleSortChange(res) {
1783
+ if (res.data && res.data.length) {
1784
+ this.list = res.data;
1785
+ }
1786
+ this.$emit('sort-change', res);
1787
+ },
1788
+ handleUpdateDragSort(data, event) {
1789
+ this.$emit('update-drag-sort', data, event);
1790
+ },
1791
+ mergeThead(res) {
1792
+ this.show = false;
1793
+ this.theadData = [];
1794
+ this.icon = true;
1795
+ this.showSizer = false;
1796
+ // if (!this.showTotal) {
1797
+ // for (let i = 0; i < res.length; i++) {
1798
+ // if (res[i].total) {
1799
+ // this.showTotal = true;
1800
+ // break;
1801
+ // }
1802
+ // }
1803
+ // }
1804
+ this.$nextTick(() => {
1805
+ this.theadData = res;
1806
+ setTimeout(() => {
1807
+ this.show = true;
1808
+ }, 500);
1809
+ });
1810
+ },
1811
+ setOptions(val, sysCode) {
1812
+ this.$set(this.options, sysCode, val);
1813
+ },
1814
+ bindEventBus() {
1815
+ this.sysCodes.forEach((item) => {
1816
+ const bus = this.bus || this.$root.Bus;
1817
+ bus &&
1818
+ bus.$on(item, (val) => {
1819
+ this.setOptions(val, item);
1820
+ });
1821
+ });
1822
+ },
1823
+ unbindEventBus() {
1824
+ this.sysCodes.forEach((item) => {
1825
+ const bus = this.bus || this.$root.Bus;
1826
+ bus && bus.$off(item, this.setOptions);
1827
+ });
1828
+ },
1829
+ reset() {
1830
+ this.$refs.toolbar && this.$refs.toolbar.reset();
1831
+ },
1832
+ openEditPage() {
1833
+ let fields = [];
1834
+ this.theads.forEach((item) => {
1835
+ if (item.field || item.prop) {
1836
+ fields.push(item.field || item.prop);
1837
+ }
1838
+ });
1839
+ fields = util.esEncode(fields.join(','));
1840
+ this.editPage = `/lowcode-ui/webpack/index.html#simpleEditOnlinePage?pageId=${this.viewCode}&fields=${fields}`;
1841
+ this.showEditPage = true;
1842
+ }
1843
+ }
1844
+ };
1845
+ </script>