vue2-client 1.8.310 → 1.8.312

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 (222) 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/LowCodeEditorPanel.vue +413 -350
  45. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  46. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -699
  47. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  48. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -162
  49. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  50. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  51. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  52. package/src/base-client/components/common/Tree/index.js +2 -2
  53. package/src/base-client/components/common/Upload/Upload.vue +239 -239
  54. package/src/base-client/components/common/Upload/index.js +3 -3
  55. package/src/base-client/components/common/XAddForm/XAddForm.vue +105 -105
  56. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +807 -807
  57. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  58. package/src/base-client/components/common/XAddNativeForm/lowcodeEditorRegister.js +16 -16
  59. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  60. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  61. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  62. package/src/base-client/components/common/XBadge/XBadge.vue +78 -78
  63. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  64. package/src/base-client/components/common/XDataCard/XDataCard.vue +355 -0
  65. package/src/base-client/components/common/XDataCard/index.js +3 -0
  66. package/src/base-client/components/common/XDataCard/index.md +1 -0
  67. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  68. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  69. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  70. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +188 -187
  71. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +306 -306
  72. package/src/base-client/components/common/XDescriptions/demo.vue +50 -50
  73. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  74. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  75. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +214 -214
  76. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  77. package/src/base-client/components/common/XForm/XForm.vue +294 -294
  78. package/src/base-client/components/common/XForm/XFormItem.vue +911 -911
  79. package/src/base-client/components/common/XForm/XTreeSelect.vue +207 -207
  80. package/src/base-client/components/common/XForm/index.md +178 -178
  81. package/src/base-client/components/common/XFormCol/XFormCol.vue +36 -36
  82. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +241 -241
  83. package/src/base-client/components/common/XFormGroup/demo.vue +40 -40
  84. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  85. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  86. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  87. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  88. package/src/base-client/components/common/XFormTable/XFormTable.vue +545 -539
  89. package/src/base-client/components/common/XFormTable/demo.vue +72 -72
  90. package/src/base-client/components/common/XFormTable/index.md +98 -98
  91. package/src/base-client/components/common/XFormTable/lowcodeEditorRegister.js +30 -30
  92. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +147 -147
  93. package/src/base-client/components/common/XReport/XReport.vue +858 -858
  94. package/src/base-client/components/common/XReport/XReportDemo.vue +266 -266
  95. package/src/base-client/components/common/XReport/XReportDesign.vue +509 -509
  96. package/src/base-client/components/common/XReport/XReportJsonRender.vue +295 -295
  97. package/src/base-client/components/common/XReport/XReportTrGroup.vue +801 -801
  98. package/src/base-client/components/common/XReport/index.js +3 -3
  99. package/src/base-client/components/common/XReport/index.md +44 -44
  100. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  101. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  102. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +137 -0
  103. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -0
  104. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -0
  105. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  106. package/src/base-client/components/common/XStepView/index.js +3 -3
  107. package/src/base-client/components/common/XStepView/index.md +31 -31
  108. package/src/base-client/components/common/XTable/XTable.vue +715 -676
  109. package/src/base-client/components/common/XTable/index.md +255 -255
  110. package/src/base-client/components/common/XTree/XTree.vue +423 -423
  111. package/src/base-client/components/common/XTree/index.js +3 -3
  112. package/src/base-client/components/common/XTree/index.md +36 -36
  113. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +114 -114
  114. package/src/base-client/components/common/XTreeOne/lowcodeEditorRegister.js +11 -11
  115. package/src/base-client/components/index.js +51 -51
  116. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  117. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  118. package/src/base-client/plugins/AppData.js +121 -121
  119. package/src/base-client/plugins/Config.js +19 -19
  120. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  121. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  122. package/src/bootstrap.js +39 -39
  123. package/src/components/CodeMirror/inedx.vue +118 -118
  124. package/src/components/CodeMirror/setting.js +40 -40
  125. package/src/components/FilePreview/FilePreview.vue +166 -166
  126. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  127. package/src/components/STable/index.js +361 -361
  128. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  129. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  130. package/src/components/menu/SideMenu.vue +75 -75
  131. package/src/components/menu/menu.js +273 -273
  132. package/src/components/tool/AStepItem.vue +60 -60
  133. package/src/config/CreateQueryConfig.js +322 -322
  134. package/src/config/default/antd.config.js +89 -89
  135. package/src/config/default/setting.config.js +55 -55
  136. package/src/font-style/font.css +4 -4
  137. package/src/layouts/CommonLayout.vue +56 -56
  138. package/src/layouts/PageLayout.vue +151 -151
  139. package/src/layouts/SinglePageView.vue +138 -138
  140. package/src/layouts/header/AdminHeader.vue +132 -132
  141. package/src/layouts/header/HeaderNotice.vue +177 -177
  142. package/src/layouts/tabs/TabsHead.vue +189 -189
  143. package/src/layouts/tabs/TabsView.vue +387 -387
  144. package/src/lib.js +1 -1
  145. package/src/main.js +26 -26
  146. package/src/mock/extend/index.js +84 -84
  147. package/src/mock/goods/index.js +108 -108
  148. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  149. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  150. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  151. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  152. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  153. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  154. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
  155. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  156. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  157. package/src/pages/DynamicStatistics/index.vue +282 -282
  158. package/src/pages/Example/index.vue +193 -33
  159. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  160. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  161. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  162. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  163. package/src/pages/NewDynamicStatistics/FavoriteList.vue +51 -51
  164. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  165. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  166. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  167. package/src/pages/ServiceReview/index.vue +284 -284
  168. package/src/pages/XReportView/index.vue +62 -62
  169. package/src/pages/login/Login.vue +378 -378
  170. package/src/pages/login/LoginV3.vue +389 -389
  171. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1030
  172. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  173. package/src/pages/resourceManage/orgListManage.vue +98 -98
  174. package/src/pages/system/dictionary/index.vue +44 -44
  175. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  176. package/src/pages/system/monitor/operLog/index.vue +37 -37
  177. package/src/pages/system/settings/modifyPassword.vue +117 -117
  178. package/src/pages/system/ticket/index.vue +480 -480
  179. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  180. package/src/router/async/config.async.js +34 -34
  181. package/src/router/async/router.map.js +104 -104
  182. package/src/router/guards.js +223 -223
  183. package/src/router/index.js +27 -27
  184. package/src/router.js +19 -19
  185. package/src/services/api/TicketDetailsViewApi.js +46 -46
  186. package/src/services/api/cas.js +79 -79
  187. package/src/services/api/common.js +307 -307
  188. package/src/services/api/entity.js +18 -18
  189. package/src/services/api/index.js +17 -17
  190. package/src/services/api/restTools.js +46 -46
  191. package/src/services/apiService.js +14 -14
  192. package/src/services/user.js +71 -71
  193. package/src/services/v3Api.js +81 -81
  194. package/src/store/modules/index.js +5 -5
  195. package/src/store/modules/lowCode.js +33 -33
  196. package/src/store/modules/setting.js +119 -119
  197. package/src/theme/default/style.less +58 -58
  198. package/src/theme/global.less +139 -139
  199. package/src/utils/authority-utils.js +85 -85
  200. package/src/utils/errorCode.js +6 -6
  201. package/src/utils/formatter.js +80 -80
  202. package/src/utils/htmlToPDF.js +108 -108
  203. package/src/utils/htmlToPDFApi.js +5 -5
  204. package/src/utils/indexedDB.js +258 -258
  205. package/src/utils/login.js +188 -188
  206. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  207. package/src/utils/lowcode/lowcodeLog.js +29 -29
  208. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  209. package/src/utils/lowcode/registerComponentForEditor.js +11 -11
  210. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  211. package/src/utils/map-utils.js +47 -47
  212. package/src/utils/reg.js +95 -95
  213. package/src/utils/request.js +347 -347
  214. package/src/utils/routerUtil.js +435 -435
  215. package/src/utils/runEvalFunction.js +6 -6
  216. package/src/utils/util.js +241 -241
  217. package/src/utils/waterMark.js +31 -31
  218. package/test/Amis.spec.js +163 -163
  219. package/test/Tree.spec.js +167 -167
  220. package/test/myDialog.spec.js +46 -46
  221. package/vue.config.js +181 -181
  222. 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
+ }