eoss-ui 0.6.88 → 0.6.89

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