eoss-ui 0.8.7 → 0.8.8

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