eoss-ui 0.6.38 → 0.6.39

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