vue2-client 1.8.310 → 1.8.311

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 (215) hide show
  1. package/.env +19 -19
  2. package/.eslintrc.js +90 -90
  3. package/CHANGELOG.md +824 -824
  4. package/Components.md +60 -60
  5. package/babel.config.js +21 -21
  6. package/docs/LowCode/lowcode.md +155 -155
  7. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  8. package/docs/index.md +30 -30
  9. package/index.js +31 -31
  10. package/jest-transform-stub.js +8 -8
  11. package/jest.config.js +21 -21
  12. package/jest.setup.js +7 -7
  13. package/package.json +97 -97
  14. package/public/index.html +27 -27
  15. package/src/App.vue +188 -188
  16. package/src/ReportView.js +19 -19
  17. package/src/assets/img/querySlotDemo.svg +15 -15
  18. package/src/assets/svg/badtwo.svg +1 -1
  19. package/src/assets/svg/goodtwo.svg +1 -1
  20. package/src/base-client/components/common/AMisRender/index.js +3 -3
  21. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  22. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +438 -416
  23. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  24. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  25. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  26. package/src/base-client/components/common/CitySelect/CitySelect.vue +342 -342
  27. package/src/base-client/components/common/CitySelect/index.js +3 -3
  28. package/src/base-client/components/common/CitySelect/index.md +109 -109
  29. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  30. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  31. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  32. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  33. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  34. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  35. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  36. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  37. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  38. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  39. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  40. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  41. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  42. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  43. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  44. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  45. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +350 -350
  46. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  47. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +699 -699
  48. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  49. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +162 -162
  50. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  51. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  52. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  53. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  54. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  55. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  56. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  57. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  58. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  59. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  60. package/src/base-client/components/common/Tree/index.js +2 -2
  61. package/src/base-client/components/common/Upload/Upload.vue +239 -239
  62. package/src/base-client/components/common/Upload/index.js +3 -3
  63. package/src/base-client/components/common/XAddForm/XAddForm.vue +105 -105
  64. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +807 -807
  65. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  66. package/src/base-client/components/common/XAddNativeForm/lowcodeEditorRegister.js +16 -16
  67. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  68. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  69. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  70. package/src/base-client/components/common/XBadge/XBadge.vue +78 -78
  71. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  72. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  73. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  74. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  75. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +187 -187
  76. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +306 -306
  77. package/src/base-client/components/common/XDescriptions/demo.vue +50 -50
  78. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  79. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  80. package/src/base-client/components/common/XDescriptions/lowcodeEditorRegister.js +31 -31
  81. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +214 -214
  82. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  83. package/src/base-client/components/common/XForm/XForm.vue +294 -294
  84. package/src/base-client/components/common/XForm/XFormItem.vue +911 -911
  85. package/src/base-client/components/common/XForm/XTreeSelect.vue +207 -207
  86. package/src/base-client/components/common/XForm/index.md +178 -178
  87. package/src/base-client/components/common/XFormCol/XFormCol.vue +36 -36
  88. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +241 -241
  89. package/src/base-client/components/common/XFormGroup/demo.vue +40 -40
  90. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  91. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  92. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  93. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  94. package/src/base-client/components/common/XFormTable/XFormTable.vue +539 -539
  95. package/src/base-client/components/common/XFormTable/demo.vue +72 -72
  96. package/src/base-client/components/common/XFormTable/index.md +98 -98
  97. package/src/base-client/components/common/XFormTable/lowcodeEditorRegister.js +30 -30
  98. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +147 -147
  99. package/src/base-client/components/common/XReport/XReport.vue +858 -858
  100. package/src/base-client/components/common/XReport/XReportDemo.vue +266 -266
  101. package/src/base-client/components/common/XReport/XReportDesign.vue +509 -509
  102. package/src/base-client/components/common/XReport/XReportJsonRender.vue +295 -295
  103. package/src/base-client/components/common/XReport/XReportTrGroup.vue +801 -801
  104. package/src/base-client/components/common/XReport/index.js +3 -3
  105. package/src/base-client/components/common/XReport/index.md +44 -44
  106. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  107. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  108. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  109. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  110. package/src/base-client/components/common/XStepView/index.js +3 -3
  111. package/src/base-client/components/common/XStepView/index.md +31 -31
  112. package/src/base-client/components/common/XTable/XTable.vue +676 -676
  113. package/src/base-client/components/common/XTable/index.md +255 -255
  114. package/src/base-client/components/common/XTree/XTree.vue +423 -423
  115. package/src/base-client/components/common/XTree/index.js +3 -3
  116. package/src/base-client/components/common/XTree/index.md +36 -36
  117. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +114 -114
  118. package/src/base-client/components/common/XTreeOne/lowcodeEditorRegister.js +11 -11
  119. package/src/base-client/components/index.js +51 -51
  120. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  121. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  122. package/src/base-client/plugins/AppData.js +121 -121
  123. package/src/base-client/plugins/Config.js +19 -19
  124. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  125. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  126. package/src/bootstrap.js +39 -39
  127. package/src/components/FilePreview/FilePreview.vue +166 -166
  128. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  129. package/src/components/STable/index.js +361 -361
  130. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  131. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  132. package/src/components/menu/SideMenu.vue +75 -75
  133. package/src/components/menu/menu.js +273 -273
  134. package/src/components/tool/AStepItem.vue +60 -60
  135. package/src/config/default/antd.config.js +89 -89
  136. package/src/config/default/setting.config.js +55 -55
  137. package/src/font-style/font.css +4 -4
  138. package/src/layouts/CommonLayout.vue +56 -56
  139. package/src/layouts/PageLayout.vue +151 -151
  140. package/src/layouts/SinglePageView.vue +138 -138
  141. package/src/layouts/header/AdminHeader.vue +132 -132
  142. package/src/layouts/header/HeaderNotice.vue +177 -177
  143. package/src/layouts/tabs/TabsHead.vue +189 -189
  144. package/src/layouts/tabs/TabsView.vue +387 -387
  145. package/src/lib.js +1 -1
  146. package/src/main.js +26 -26
  147. package/src/mock/extend/index.js +84 -84
  148. package/src/mock/goods/index.js +108 -108
  149. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  150. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  151. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  152. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  153. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  154. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  155. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
  156. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  157. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  158. package/src/pages/DynamicStatistics/index.vue +282 -282
  159. package/src/pages/Example/index.vue +33 -33
  160. package/src/pages/ServiceReview/index.vue +284 -284
  161. package/src/pages/XReportView/index.vue +62 -62
  162. package/src/pages/login/Login.vue +378 -378
  163. package/src/pages/login/LoginV3.vue +389 -389
  164. package/src/pages/lowCode/lowCodeEditor.vue +1030 -1030
  165. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  166. package/src/pages/resourceManage/orgListManage.vue +98 -98
  167. package/src/pages/system/dictionary/index.vue +44 -44
  168. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  169. package/src/pages/system/monitor/operLog/index.vue +37 -37
  170. package/src/pages/system/settings/modifyPassword.vue +117 -117
  171. package/src/pages/system/ticket/index.vue +480 -480
  172. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  173. package/src/router/async/config.async.js +34 -34
  174. package/src/router/async/router.map.js +104 -104
  175. package/src/router/guards.js +223 -223
  176. package/src/router/index.js +27 -27
  177. package/src/router.js +19 -19
  178. package/src/services/api/TicketDetailsViewApi.js +46 -46
  179. package/src/services/api/cas.js +79 -79
  180. package/src/services/api/common.js +307 -307
  181. package/src/services/api/entity.js +18 -18
  182. package/src/services/api/index.js +17 -17
  183. package/src/services/api/restTools.js +46 -46
  184. package/src/services/apiService.js +14 -14
  185. package/src/services/user.js +71 -71
  186. package/src/services/v3Api.js +81 -81
  187. package/src/store/modules/index.js +5 -5
  188. package/src/store/modules/lowCode.js +33 -33
  189. package/src/store/modules/setting.js +119 -119
  190. package/src/theme/default/style.less +58 -58
  191. package/src/theme/global.less +139 -139
  192. package/src/utils/authority-utils.js +85 -85
  193. package/src/utils/errorCode.js +6 -6
  194. package/src/utils/formatter.js +80 -80
  195. package/src/utils/htmlToPDF.js +108 -108
  196. package/src/utils/htmlToPDFApi.js +5 -5
  197. package/src/utils/indexedDB.js +258 -258
  198. package/src/utils/login.js +188 -188
  199. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  200. package/src/utils/lowcode/lowcodeLog.js +29 -29
  201. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  202. package/src/utils/lowcode/registerComponentForEditor.js +11 -11
  203. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  204. package/src/utils/map-utils.js +47 -47
  205. package/src/utils/reg.js +95 -95
  206. package/src/utils/request.js +347 -347
  207. package/src/utils/routerUtil.js +435 -435
  208. package/src/utils/runEvalFunction.js +6 -6
  209. package/src/utils/util.js +241 -241
  210. package/src/utils/waterMark.js +31 -31
  211. package/test/Amis.spec.js +163 -163
  212. package/test/Tree.spec.js +167 -167
  213. package/test/myDialog.spec.js +46 -46
  214. package/vue.config.js +181 -181
  215. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,361 +1,361 @@
1
- import T from 'ant-design-vue/es/table/Table'
2
- import get from 'lodash.get'
3
-
4
- export default {
5
- data () {
6
- return {
7
- needTotalList: [],
8
-
9
- selectedRows: [],
10
- selectedRowKeys: [],
11
-
12
- localLoading: false,
13
- localDataSource: [],
14
- localPagination: Object.assign({}, this.pagination),
15
-
16
- sortField: undefined,
17
- sortOrder: undefined
18
- }
19
- },
20
- props: Object.assign({}, T.props, {
21
- rowKey: {
22
- type: [String, Function],
23
- default: 'key'
24
- },
25
- data: {
26
- type: Function,
27
- required: true
28
- },
29
- pageNum: {
30
- type: Number,
31
- default: 1
32
- },
33
- pageSize: {
34
- type: Number,
35
- default: 10
36
- },
37
- showSizeChanger: {
38
- type: Boolean,
39
- default: true
40
- },
41
- showSummary: {
42
- type: Boolean,
43
- default: false
44
- },
45
- size: {
46
- type: String,
47
- default: 'default'
48
- },
49
- /**
50
- * alert: {
51
- * show: true,
52
- * clear: Function
53
- * }
54
- */
55
- alert: {
56
- type: [Object, Boolean],
57
- default: null
58
- },
59
- rowSelection: {
60
- type: Object,
61
- default: null
62
- },
63
- /** @Deprecated */
64
- showAlertInfo: {
65
- type: Boolean,
66
- default: false
67
- },
68
- showPagination: {
69
- type: String | Boolean,
70
- default: 'auto'
71
- },
72
- /**
73
- * enable page URI mode
74
- *
75
- * e.g:
76
- * /users/1
77
- * /users/2
78
- * /users/3?queryParam=test
79
- * ...
80
- */
81
- pageURI: {
82
- type: Boolean,
83
- default: false
84
- }
85
- }),
86
- watch: {
87
- 'localPagination.current' (val) {
88
- this.pageURI && this.$router.push({
89
- ...this.$route,
90
- name: this.$route.name,
91
- params: Object.assign({}, this.$route.params, {
92
- pageNo: val
93
- })
94
- })
95
- // change pagination, reset total data
96
- this.needTotalList = this.initTotalList(this.columns)
97
- this.selectedRowKeys = []
98
- this.selectedRows = []
99
- },
100
- pageNum (val) {
101
- Object.assign(this.localPagination, {
102
- current: val
103
- })
104
- },
105
- pageSize (val) {
106
- Object.assign(this.localPagination, {
107
- pageSize: val
108
- })
109
- },
110
- showSizeChanger (val) {
111
- Object.assign(this.localPagination, {
112
- showSizeChanger: val
113
- })
114
- }
115
- },
116
- created () {
117
- const { pageNo } = this.$route.params
118
- const localPageNum = this.pageURI && (pageNo && parseInt(pageNo)) || this.pageNum
119
- this.localPagination = ['auto', true].includes(this.showPagination) && Object.assign({}, this.localPagination, {
120
- current: localPageNum,
121
- pageSize: this.pageSize,
122
- showSizeChanger: this.showSizeChanger
123
- }) || false
124
- this.needTotalList = this.initTotalList(this.columns)
125
- // this.loadData()
126
- },
127
- methods: {
128
- /**
129
- * 表格重新加载方法
130
- * 如果参数为 true, 则强制刷新到第一页
131
- * @param Boolean bool
132
- */
133
- refresh (bool = false) {
134
- bool && (this.localPagination = Object.assign({}, {
135
- current: 1, pageSize: this.pageSize
136
- }))
137
- this.loadData()
138
- },
139
- /**
140
- * 加载数据方法
141
- * @param {Object} pagination 分页选项器
142
- * @param {Object} filters 过滤条件
143
- * @param {Object} sorter 排序条件
144
- */
145
- loadData (pagination, filters, sorter) {
146
- this.localLoading = true
147
- // 暂存排序方式,避免 refresh 之后排序失效
148
- if (sorter && sorter.field) {
149
- this.sortField = sorter.field
150
- }
151
- if (sorter && sorter.order) {
152
- this.sortOrder = sorter.order
153
- }
154
- const parameter = Object.assign({
155
- querySummary: !pagination && this.showSummary, // 分页查询的情况不重新获取汇总数据
156
- pageNo: (pagination && pagination.current) ||
157
- this.showPagination && this.localPagination.current || this.pageNum,
158
- pageSize: (pagination && pagination.pageSize) ||
159
- this.showPagination && this.localPagination.pageSize || this.pageSize
160
- },
161
- (this.sortField && { sortField: this.sortField }) || {},
162
- (this.sortOrder && { sortOrder: this.sortOrder }) || {},
163
- { ...filters }
164
- )
165
- const result = this.data(parameter)
166
- // 对接自己的通用数据接口需要修改下方代码中的 r.pageNo, r.totalCount, r.data
167
- // eslint-disable-next-line
168
- if ((typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function') {
169
- result.then(r => {
170
- this.localPagination = this.showPagination && Object.assign({}, this.localPagination, {
171
- current: r.pageNo, // 返回结果中的当前分页数
172
- total: r.totalCount, // 返回结果中的总记录数
173
- showSizeChanger: this.showSizeChanger,
174
- pageSize: (pagination && pagination.pageSize) || this.localPagination.pageSize
175
- }) || false
176
- // 为防止删除数据后导致页面当前页面数据长度为 0 ,自动翻页到上一页
177
- if (r.data.length === 0 && this.showPagination && this.localPagination.current > 1) {
178
- this.localPagination.current--
179
- this.loadData()
180
- return
181
- }
182
-
183
- // 这里用于判断接口是否有返回 r.totalCount 且 this.showPagination = 'auto' 且 pageNo 和 pageSize 存在 且 totalCount 小于等于 pageNo * pageSize 的大小
184
- // 当情况满足时,表示数据不满足分页大小,关闭 table 分页功能
185
- try {
186
- if ((['auto'].includes(this.showPagination) && r.totalCount <= (r.pageNo * this.localPagination.pageSize))) {
187
- this.localPagination.hideOnSinglePage = true
188
- }
189
- } catch (e) {
190
- this.localPagination = false
191
- }
192
- this.localDataSource = r.data // 返回结果中的数组数据
193
- this.localLoading = false
194
- }, () => {
195
- this.localLoading = false
196
- })
197
- }
198
- },
199
- initTotalList (columns) {
200
- const totalList = []
201
- columns && columns instanceof Array && columns.forEach(column => {
202
- if (column.needTotal) {
203
- totalList.push({
204
- ...column,
205
- total: 0
206
- })
207
- }
208
- })
209
- return totalList
210
- },
211
- /**
212
- * 用于更新已选中的列表数据 total 统计
213
- * @param selectedRowKeys
214
- * @param selectedRows
215
- */
216
- updateSelect (selectedRowKeys, selectedRows) {
217
- this.selectedRows = selectedRows
218
- this.selectedRowKeys = selectedRowKeys
219
- const list = this.needTotalList
220
- this.needTotalList = list.map(item => {
221
- return {
222
- ...item,
223
- total: selectedRows.reduce((sum, val) => {
224
- const total = sum + parseInt(get(val, item.dataIndex))
225
- return isNaN(total) ? 0 : total
226
- }, 0)
227
- }
228
- })
229
- },
230
- /**
231
- * 清空 table 已选中项
232
- */
233
- clearSelected () {
234
- if (this.rowSelection) {
235
- this.rowSelection.onChange([], [])
236
- this.updateSelect([], [])
237
- }
238
- },
239
- /**
240
- * 处理交给 table 使用者去处理 clear 事件时,内部选中统计同时调用
241
- * @param callback
242
- * @returns {*}
243
- */
244
- renderClear (callback) {
245
- if (this.selectedRowKeys.length <= 0) return null
246
- return (
247
- <a style="margin-left: 24px" onClick={() => {
248
- callback()
249
- this.clearSelected()
250
- }}>清空</a>
251
- )
252
- },
253
- renderAlert () {
254
- // 绘制统计列数据
255
- const needTotalItems = this.needTotalList.map((item) => {
256
- return (<span style="margin-right: 12px">
257
- {item.title}总计 <a
258
- style="font-weight: 600">{!item.customRender ? item.total : item.customRender(item.total)}</a>
259
- </span>)
260
- })
261
-
262
- // 绘制 清空 按钮
263
- const clearItem = (typeof this.alert.clear === 'boolean' && this.alert.clear) ? (
264
- this.renderClear(this.clearSelected)
265
- ) : (typeof this.alert.clear === 'function') ? (
266
- this.renderClear(this.alert.clear)
267
- ) : null
268
-
269
- // 绘制 alert 组件
270
- return (
271
- <a-alert showIcon={true} style={{ marginBottom: '8px', fontSize: '14px' }}>
272
- <template slot="message">
273
- <span style="margin-right: 12px;">已选择: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
274
- {needTotalItems}
275
- {clearItem}
276
- </template>
277
- </a-alert>
278
- )
279
- },
280
- onExpand (expanded, record) {
281
- this.$emit('expand', expanded, record)
282
- }
283
- },
284
-
285
- render () {
286
- const props = {}
287
- const localKeys = Object.keys(this.$data)
288
- const showAlert = (typeof this.alert === 'object' && this.alert !== null && this.alert.show) && typeof this.rowSelection.selectedRowKeys !== 'undefined' || this.alert
289
-
290
- Object.keys(T.props).forEach(k => {
291
- const localKey = `local${k.substring(0, 1).toUpperCase()}${k.substring(1)}`
292
- if (localKeys.includes(localKey)) {
293
- props[k] = this[localKey]
294
- return props[k]
295
- }
296
- if (k === 'rowSelection') {
297
- if (showAlert && this.rowSelection) {
298
- // 如果需要使用alert,则重新绑定 rowSelection 事件
299
- props[k] = {
300
- ...this.rowSelection,
301
- selectedRows: this.selectedRows,
302
- selectedRowKeys: this.selectedRowKeys,
303
- onChange: (selectedRowKeys, selectedRows) => {
304
- this.updateSelect(selectedRowKeys, selectedRows)
305
- typeof this[k].onChange !== 'undefined' && this[k].onChange(selectedRowKeys, selectedRows)
306
- }
307
- }
308
- return props[k]
309
- } else if (!this.rowSelection) {
310
- // 如果没打算开启 rowSelection 则清空默认的选择项
311
- props[k] = null
312
- return props[k]
313
- }
314
- }
315
- this[k] && (props[k] = this[k])
316
- return props[k]
317
- })
318
- // 取消原有的分页组件 产品设计分页组件和汇总在一行 重新分页逻辑
319
- props.pagination = false
320
- // 自定义底部汇总插槽组件
321
- const pagination = (
322
- <a-row type={'flex'} justify={'start'} style={{ marginTop: '8px' }}>
323
- <a-col flex="1" style={{
324
- alignItems: 'center',
325
- display: 'flex',
326
- justifyContent: 'start',
327
- boxSizing: 'border-box',
328
- paddingRight: '2rem'
329
- }}>
330
- {this.$slots.fixedfooter}
331
- </a-col>
332
- <a-col flex="0 0">
333
- <a-pagination
334
- total={this.localPagination.total}
335
- onChange={(page, pageSize) => this.loadData({
336
- current: page,
337
- pageSize: pageSize
338
- })
339
- }
340
- show-total={(total, range) => range[0] === range[1] ? `${range[0]} | 共 ${total} 项` : `${range[0]}-${range[1]} | 共 ${total} 项`}
341
- default-current={this.localPagination.current}
342
- showSizeChanger={this.localPagination.showSizeChanger}/>
343
- </a-col>
344
- </a-row>
345
- )
346
- const table = (
347
- <a-table {...{ props, scopedSlots: { ...this.$scopedSlots } }} onChange={this.loadData}
348
- onExpand={(expanded, record) => this.onExpand(expanded, record)}>
349
- {Object.keys(this.$slots).map(name => (<template slot={name}>{this.$slots[name]}</template>))}
350
- </a-table>
351
- )
352
-
353
- return (
354
- <div class="table-wrapper">
355
- {showAlert ? this.renderAlert() : null}
356
- {table}
357
- {pagination}
358
- </div>
359
- )
360
- }
361
- }
1
+ import T from 'ant-design-vue/es/table/Table'
2
+ import get from 'lodash.get'
3
+
4
+ export default {
5
+ data () {
6
+ return {
7
+ needTotalList: [],
8
+
9
+ selectedRows: [],
10
+ selectedRowKeys: [],
11
+
12
+ localLoading: false,
13
+ localDataSource: [],
14
+ localPagination: Object.assign({}, this.pagination),
15
+
16
+ sortField: undefined,
17
+ sortOrder: undefined
18
+ }
19
+ },
20
+ props: Object.assign({}, T.props, {
21
+ rowKey: {
22
+ type: [String, Function],
23
+ default: 'key'
24
+ },
25
+ data: {
26
+ type: Function,
27
+ required: true
28
+ },
29
+ pageNum: {
30
+ type: Number,
31
+ default: 1
32
+ },
33
+ pageSize: {
34
+ type: Number,
35
+ default: 10
36
+ },
37
+ showSizeChanger: {
38
+ type: Boolean,
39
+ default: true
40
+ },
41
+ showSummary: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ size: {
46
+ type: String,
47
+ default: 'default'
48
+ },
49
+ /**
50
+ * alert: {
51
+ * show: true,
52
+ * clear: Function
53
+ * }
54
+ */
55
+ alert: {
56
+ type: [Object, Boolean],
57
+ default: null
58
+ },
59
+ rowSelection: {
60
+ type: Object,
61
+ default: null
62
+ },
63
+ /** @Deprecated */
64
+ showAlertInfo: {
65
+ type: Boolean,
66
+ default: false
67
+ },
68
+ showPagination: {
69
+ type: String | Boolean,
70
+ default: 'auto'
71
+ },
72
+ /**
73
+ * enable page URI mode
74
+ *
75
+ * e.g:
76
+ * /users/1
77
+ * /users/2
78
+ * /users/3?queryParam=test
79
+ * ...
80
+ */
81
+ pageURI: {
82
+ type: Boolean,
83
+ default: false
84
+ }
85
+ }),
86
+ watch: {
87
+ 'localPagination.current' (val) {
88
+ this.pageURI && this.$router.push({
89
+ ...this.$route,
90
+ name: this.$route.name,
91
+ params: Object.assign({}, this.$route.params, {
92
+ pageNo: val
93
+ })
94
+ })
95
+ // change pagination, reset total data
96
+ this.needTotalList = this.initTotalList(this.columns)
97
+ this.selectedRowKeys = []
98
+ this.selectedRows = []
99
+ },
100
+ pageNum (val) {
101
+ Object.assign(this.localPagination, {
102
+ current: val
103
+ })
104
+ },
105
+ pageSize (val) {
106
+ Object.assign(this.localPagination, {
107
+ pageSize: val
108
+ })
109
+ },
110
+ showSizeChanger (val) {
111
+ Object.assign(this.localPagination, {
112
+ showSizeChanger: val
113
+ })
114
+ }
115
+ },
116
+ created () {
117
+ const { pageNo } = this.$route.params
118
+ const localPageNum = this.pageURI && (pageNo && parseInt(pageNo)) || this.pageNum
119
+ this.localPagination = ['auto', true].includes(this.showPagination) && Object.assign({}, this.localPagination, {
120
+ current: localPageNum,
121
+ pageSize: this.pageSize,
122
+ showSizeChanger: this.showSizeChanger
123
+ }) || false
124
+ this.needTotalList = this.initTotalList(this.columns)
125
+ // this.loadData()
126
+ },
127
+ methods: {
128
+ /**
129
+ * 表格重新加载方法
130
+ * 如果参数为 true, 则强制刷新到第一页
131
+ * @param Boolean bool
132
+ */
133
+ refresh (bool = false) {
134
+ bool && (this.localPagination = Object.assign({}, {
135
+ current: 1, pageSize: this.pageSize
136
+ }))
137
+ this.loadData()
138
+ },
139
+ /**
140
+ * 加载数据方法
141
+ * @param {Object} pagination 分页选项器
142
+ * @param {Object} filters 过滤条件
143
+ * @param {Object} sorter 排序条件
144
+ */
145
+ loadData (pagination, filters, sorter) {
146
+ this.localLoading = true
147
+ // 暂存排序方式,避免 refresh 之后排序失效
148
+ if (sorter && sorter.field) {
149
+ this.sortField = sorter.field
150
+ }
151
+ if (sorter && sorter.order) {
152
+ this.sortOrder = sorter.order
153
+ }
154
+ const parameter = Object.assign({
155
+ querySummary: !pagination && this.showSummary, // 分页查询的情况不重新获取汇总数据
156
+ pageNo: (pagination && pagination.current) ||
157
+ this.showPagination && this.localPagination.current || this.pageNum,
158
+ pageSize: (pagination && pagination.pageSize) ||
159
+ this.showPagination && this.localPagination.pageSize || this.pageSize
160
+ },
161
+ (this.sortField && { sortField: this.sortField }) || {},
162
+ (this.sortOrder && { sortOrder: this.sortOrder }) || {},
163
+ { ...filters }
164
+ )
165
+ const result = this.data(parameter)
166
+ // 对接自己的通用数据接口需要修改下方代码中的 r.pageNo, r.totalCount, r.data
167
+ // eslint-disable-next-line
168
+ if ((typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function') {
169
+ result.then(r => {
170
+ this.localPagination = this.showPagination && Object.assign({}, this.localPagination, {
171
+ current: r.pageNo, // 返回结果中的当前分页数
172
+ total: r.totalCount, // 返回结果中的总记录数
173
+ showSizeChanger: this.showSizeChanger,
174
+ pageSize: (pagination && pagination.pageSize) || this.localPagination.pageSize
175
+ }) || false
176
+ // 为防止删除数据后导致页面当前页面数据长度为 0 ,自动翻页到上一页
177
+ if (r.data.length === 0 && this.showPagination && this.localPagination.current > 1) {
178
+ this.localPagination.current--
179
+ this.loadData()
180
+ return
181
+ }
182
+
183
+ // 这里用于判断接口是否有返回 r.totalCount 且 this.showPagination = 'auto' 且 pageNo 和 pageSize 存在 且 totalCount 小于等于 pageNo * pageSize 的大小
184
+ // 当情况满足时,表示数据不满足分页大小,关闭 table 分页功能
185
+ try {
186
+ if ((['auto'].includes(this.showPagination) && r.totalCount <= (r.pageNo * this.localPagination.pageSize))) {
187
+ this.localPagination.hideOnSinglePage = true
188
+ }
189
+ } catch (e) {
190
+ this.localPagination = false
191
+ }
192
+ this.localDataSource = r.data // 返回结果中的数组数据
193
+ this.localLoading = false
194
+ }, () => {
195
+ this.localLoading = false
196
+ })
197
+ }
198
+ },
199
+ initTotalList (columns) {
200
+ const totalList = []
201
+ columns && columns instanceof Array && columns.forEach(column => {
202
+ if (column.needTotal) {
203
+ totalList.push({
204
+ ...column,
205
+ total: 0
206
+ })
207
+ }
208
+ })
209
+ return totalList
210
+ },
211
+ /**
212
+ * 用于更新已选中的列表数据 total 统计
213
+ * @param selectedRowKeys
214
+ * @param selectedRows
215
+ */
216
+ updateSelect (selectedRowKeys, selectedRows) {
217
+ this.selectedRows = selectedRows
218
+ this.selectedRowKeys = selectedRowKeys
219
+ const list = this.needTotalList
220
+ this.needTotalList = list.map(item => {
221
+ return {
222
+ ...item,
223
+ total: selectedRows.reduce((sum, val) => {
224
+ const total = sum + parseInt(get(val, item.dataIndex))
225
+ return isNaN(total) ? 0 : total
226
+ }, 0)
227
+ }
228
+ })
229
+ },
230
+ /**
231
+ * 清空 table 已选中项
232
+ */
233
+ clearSelected () {
234
+ if (this.rowSelection) {
235
+ this.rowSelection.onChange([], [])
236
+ this.updateSelect([], [])
237
+ }
238
+ },
239
+ /**
240
+ * 处理交给 table 使用者去处理 clear 事件时,内部选中统计同时调用
241
+ * @param callback
242
+ * @returns {*}
243
+ */
244
+ renderClear (callback) {
245
+ if (this.selectedRowKeys.length <= 0) return null
246
+ return (
247
+ <a style="margin-left: 24px" onClick={() => {
248
+ callback()
249
+ this.clearSelected()
250
+ }}>清空</a>
251
+ )
252
+ },
253
+ renderAlert () {
254
+ // 绘制统计列数据
255
+ const needTotalItems = this.needTotalList.map((item) => {
256
+ return (<span style="margin-right: 12px">
257
+ {item.title}总计 <a
258
+ style="font-weight: 600">{!item.customRender ? item.total : item.customRender(item.total)}</a>
259
+ </span>)
260
+ })
261
+
262
+ // 绘制 清空 按钮
263
+ const clearItem = (typeof this.alert.clear === 'boolean' && this.alert.clear) ? (
264
+ this.renderClear(this.clearSelected)
265
+ ) : (typeof this.alert.clear === 'function') ? (
266
+ this.renderClear(this.alert.clear)
267
+ ) : null
268
+
269
+ // 绘制 alert 组件
270
+ return (
271
+ <a-alert showIcon={true} style={{ marginBottom: '8px', fontSize: '14px' }}>
272
+ <template slot="message">
273
+ <span style="margin-right: 12px;">已选择: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
274
+ {needTotalItems}
275
+ {clearItem}
276
+ </template>
277
+ </a-alert>
278
+ )
279
+ },
280
+ onExpand (expanded, record) {
281
+ this.$emit('expand', expanded, record)
282
+ }
283
+ },
284
+
285
+ render () {
286
+ const props = {}
287
+ const localKeys = Object.keys(this.$data)
288
+ const showAlert = (typeof this.alert === 'object' && this.alert !== null && this.alert.show) && typeof this.rowSelection.selectedRowKeys !== 'undefined' || this.alert
289
+
290
+ Object.keys(T.props).forEach(k => {
291
+ const localKey = `local${k.substring(0, 1).toUpperCase()}${k.substring(1)}`
292
+ if (localKeys.includes(localKey)) {
293
+ props[k] = this[localKey]
294
+ return props[k]
295
+ }
296
+ if (k === 'rowSelection') {
297
+ if (showAlert && this.rowSelection) {
298
+ // 如果需要使用alert,则重新绑定 rowSelection 事件
299
+ props[k] = {
300
+ ...this.rowSelection,
301
+ selectedRows: this.selectedRows,
302
+ selectedRowKeys: this.selectedRowKeys,
303
+ onChange: (selectedRowKeys, selectedRows) => {
304
+ this.updateSelect(selectedRowKeys, selectedRows)
305
+ typeof this[k].onChange !== 'undefined' && this[k].onChange(selectedRowKeys, selectedRows)
306
+ }
307
+ }
308
+ return props[k]
309
+ } else if (!this.rowSelection) {
310
+ // 如果没打算开启 rowSelection 则清空默认的选择项
311
+ props[k] = null
312
+ return props[k]
313
+ }
314
+ }
315
+ this[k] && (props[k] = this[k])
316
+ return props[k]
317
+ })
318
+ // 取消原有的分页组件 产品设计分页组件和汇总在一行 重新分页逻辑
319
+ props.pagination = false
320
+ // 自定义底部汇总插槽组件
321
+ const pagination = (
322
+ <a-row type={'flex'} justify={'start'} style={{ marginTop: '8px' }}>
323
+ <a-col flex="1" style={{
324
+ alignItems: 'center',
325
+ display: 'flex',
326
+ justifyContent: 'start',
327
+ boxSizing: 'border-box',
328
+ paddingRight: '2rem'
329
+ }}>
330
+ {this.$slots.fixedfooter}
331
+ </a-col>
332
+ <a-col flex="0 0">
333
+ <a-pagination
334
+ total={this.localPagination.total}
335
+ onChange={(page, pageSize) => this.loadData({
336
+ current: page,
337
+ pageSize: pageSize
338
+ })
339
+ }
340
+ show-total={(total, range) => range[0] === range[1] ? `${range[0]} | 共 ${total} 项` : `${range[0]}-${range[1]} | 共 ${total} 项`}
341
+ default-current={this.localPagination.current}
342
+ showSizeChanger={this.localPagination.showSizeChanger}/>
343
+ </a-col>
344
+ </a-row>
345
+ )
346
+ const table = (
347
+ <a-table {...{ props, scopedSlots: { ...this.$scopedSlots } }} onChange={this.loadData}
348
+ onExpand={(expanded, record) => this.onExpand(expanded, record)}>
349
+ {Object.keys(this.$slots).map(name => (<template slot={name}>{this.$slots[name]}</template>))}
350
+ </a-table>
351
+ )
352
+
353
+ return (
354
+ <div class="table-wrapper">
355
+ {showAlert ? this.renderAlert() : null}
356
+ {table}
357
+ {pagination}
358
+ </div>
359
+ )
360
+ }
361
+ }