vue2-client 1.13.6 → 1.13.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 (390) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.gaslink +19 -19
  3. package/.env.his +19 -19
  4. package/.env.iot +19 -19
  5. package/.env.liuli +19 -19
  6. package/.env.revenue +19 -19
  7. package/.env.scada +19 -19
  8. package/.eslintrc.js +90 -90
  9. package/CHANGELOG.md +824 -824
  10. package/Components.md +60 -60
  11. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +45 -45
  12. package/docs/LowCode/lowcode.md +155 -155
  13. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  14. package/docs/index.md +30 -30
  15. package/index.js +31 -31
  16. package/jest-transform-stub.js +8 -8
  17. package/jest.setup.js +7 -7
  18. package/jsconfig.json +19 -19
  19. package/package.json +1 -1
  20. package/public/his/editor/editor.html +51 -51
  21. package/public/his/editor/mock/bind_data.html +779 -779
  22. package/public/his/editor/mock/data_table.html +40 -40
  23. package/public/his/editor/mock/sign.html +75 -75
  24. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  25. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  26. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  27. package/public/his/editor/vender/date97/calendar.js +4 -4
  28. package/public/his/editor/vender/date97/lang/en.js +13 -13
  29. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  30. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  31. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  32. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  33. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  34. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  35. package/public/his/editor/vender/diff.js +1627 -1627
  36. package/public/his/editor/vender/editor.js +1 -1
  37. package/public/his/editor/vender/fabric.js +31187 -31187
  38. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  39. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  40. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  41. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  42. package/public/his/editor/vender/mui/mui.min.css +4 -4
  43. package/public/his/editor/vender/mui/mui.min.js +5 -5
  44. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  45. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  46. package/public/his/editor/vender/qrcode.js +7 -7
  47. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  48. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  49. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  50. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  51. package/public/his/editor/vender/validator.js +5094 -5094
  52. package/public/his/editor/vender/weui/weui.css +5659 -5659
  53. package/public/his/editor/vender/weui/weui.min.css +4 -4
  54. package/public/his/editor/vender/weui/weui.min.js +11 -11
  55. package/public/index.html +27 -27
  56. package/src/ReportView.js +19 -19
  57. package/src/assets/img/querySlotDemo.svg +15 -15
  58. package/src/assets/svg/badtwo.svg +1 -1
  59. package/src/assets/svg/goodtwo.svg +1 -1
  60. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  61. package/src/base-client/components/AI/demo.vue +31 -31
  62. package/src/base-client/components/common/AMisRender/index.js +3 -3
  63. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  64. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +470 -470
  65. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  66. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  67. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  68. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  69. package/src/base-client/components/common/CitySelect/index.js +3 -3
  70. package/src/base-client/components/common/CitySelect/index.md +109 -109
  71. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  72. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  73. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  74. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  75. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  76. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  77. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  78. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  79. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  80. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  81. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  82. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  83. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  84. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  85. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  86. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  87. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  88. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  89. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  90. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  91. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  92. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  93. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  94. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  95. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  96. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  97. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  98. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  99. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  100. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  101. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  102. package/src/base-client/components/common/Recording/index.js +3 -3
  103. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  104. package/src/base-client/components/common/Tree/index.js +2 -2
  105. package/src/base-client/components/common/Upload/index.js +3 -3
  106. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  107. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1156 -1156
  108. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  109. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  110. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  111. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  112. package/src/base-client/components/common/XAddReport/index.js +3 -3
  113. package/src/base-client/components/common/XAddReport/index.md +56 -56
  114. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  115. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  116. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  117. package/src/base-client/components/common/XButtons/index.js +3 -3
  118. package/src/base-client/components/common/XButtons/index.md +61 -61
  119. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  120. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  121. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  122. package/src/base-client/components/common/XCollapse/XCollapse.vue +9 -2
  123. package/src/base-client/components/common/XDataCard/index.js +3 -3
  124. package/src/base-client/components/common/XDataCard/index.md +1 -1
  125. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  126. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  127. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  128. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  129. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  130. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  131. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  132. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  133. package/src/base-client/components/common/XForm/XForm.vue +404 -404
  134. package/src/base-client/components/common/XForm/XFormItem.vue +1310 -1310
  135. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  136. package/src/base-client/components/common/XForm/XTreeSelect.vue +270 -270
  137. package/src/base-client/components/common/XForm/index.md +178 -178
  138. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  139. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  140. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  141. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  142. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  143. package/src/base-client/components/common/XFormTable/demo.vue +76 -76
  144. package/src/base-client/components/common/XFormTable/index.md +92 -92
  145. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +167 -167
  146. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  147. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  148. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  149. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  150. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  151. package/src/base-client/components/common/XPrint/PrintBill.vue +302 -302
  152. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  153. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  154. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  155. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  156. package/src/base-client/components/common/XPrint/index.vue +97 -97
  157. package/src/base-client/components/common/XReport/XReport.vue +892 -892
  158. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  159. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  160. package/src/base-client/components/common/XReport/index.js +3 -3
  161. package/src/base-client/components/common/XReport/index.md +44 -44
  162. package/src/base-client/components/common/XReport/print.js +186 -186
  163. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  164. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  165. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +712 -712
  166. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  167. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  168. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  169. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  170. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  171. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  172. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  173. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  174. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  175. package/src/base-client/components/common/XStepView/index.js +3 -3
  176. package/src/base-client/components/common/XStepView/index.md +31 -31
  177. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  178. package/src/base-client/components/common/XTab/index.js +3 -3
  179. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  180. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  181. package/src/base-client/components/common/XTable/XTable.vue +1361 -1361
  182. package/src/base-client/components/common/XTable/XTableWrapper.vue +257 -257
  183. package/src/base-client/components/common/XTable/index.md +255 -255
  184. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  185. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  186. package/src/base-client/components/common/XTree/index.js +3 -3
  187. package/src/base-client/components/common/XTree/index.md +36 -36
  188. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  189. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  190. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  191. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  192. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  193. package/src/base-client/components/his/XList/XList.vue +131 -131
  194. package/src/base-client/components/his/XSelect/XSelect.vue +72 -70
  195. package/src/base-client/components/his/XTextCard/XTextCard.vue +2 -2
  196. package/src/base-client/components/his/XTitle/XTitle.vue +39 -39
  197. package/src/base-client/components/index.js +51 -51
  198. package/src/base-client/components/layout/XPageView/XErrorView.vue +11 -11
  199. package/src/base-client/components/layout/XPageView/XPageView.vue +155 -155
  200. package/src/base-client/components/layout/XPageView/index.js +3 -3
  201. package/src/base-client/components/layout/XPageView/index.md +38 -38
  202. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  203. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  204. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  205. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  206. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  207. package/src/base-client/plugins/AppData.js +126 -126
  208. package/src/base-client/plugins/Config.js +19 -19
  209. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  210. package/src/base-client/plugins/Recording.js +258 -258
  211. package/src/base-client/plugins/index.js +23 -23
  212. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  213. package/src/components/Charts/Bar.vue +62 -62
  214. package/src/components/Charts/ChartCard.vue +134 -134
  215. package/src/components/Charts/Liquid.vue +67 -67
  216. package/src/components/Charts/MiniArea.vue +39 -39
  217. package/src/components/Charts/MiniBar.vue +39 -39
  218. package/src/components/Charts/MiniProgress.vue +75 -75
  219. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  220. package/src/components/Charts/Radar.vue +68 -68
  221. package/src/components/Charts/RankList.vue +77 -77
  222. package/src/components/Charts/TagCloud.vue +113 -113
  223. package/src/components/Charts/TransferBar.vue +64 -64
  224. package/src/components/Charts/Trend.vue +82 -82
  225. package/src/components/Charts/chart.less +12 -12
  226. package/src/components/Charts/smooth.area.less +13 -13
  227. package/src/components/CodeMirror/inedx.vue +118 -118
  228. package/src/components/CodeMirror/setting.js +40 -40
  229. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  230. package/src/components/HeightScanner/index.vue +571 -571
  231. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  232. package/src/components/NumberInfo/index.js +3 -3
  233. package/src/components/NumberInfo/index.less +54 -54
  234. package/src/components/NumberInfo/index.md +43 -43
  235. package/src/components/STable/index.js +437 -437
  236. package/src/components/card/ChartCard.vue +79 -79
  237. package/src/components/chart/Bar.vue +60 -60
  238. package/src/components/chart/MiniArea.vue +67 -67
  239. package/src/components/chart/MiniBar.vue +59 -59
  240. package/src/components/chart/MiniProgress.vue +57 -57
  241. package/src/components/chart/Radar.vue +80 -80
  242. package/src/components/chart/RankingList.vue +60 -60
  243. package/src/components/chart/Trend.vue +79 -79
  244. package/src/components/chart/index.less +9 -9
  245. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  246. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  247. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  248. package/src/components/checkbox/index.js +9 -9
  249. package/src/components/exception/ExceptionPage.vue +70 -70
  250. package/src/components/g2Charts/constants.js +202 -202
  251. package/src/components/g2Charts/demo.vue +808 -808
  252. package/src/components/g2Charts/designer.vue +228 -228
  253. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  254. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  255. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  256. package/src/components/g2Charts/index.vue +397 -397
  257. package/src/components/index.js +36 -36
  258. package/src/components/input/IInput.vue +66 -66
  259. package/src/components/menu/SideMenu.vue +75 -75
  260. package/src/components/menu/menu.js +273 -273
  261. package/src/components/setting/Setting.vue +234 -234
  262. package/src/components/tool/AStepItem.vue +60 -60
  263. package/src/config/CreateQueryConfig.js +325 -325
  264. package/src/config/default/antd.config.js +89 -89
  265. package/src/config/default/setting.config.js +55 -55
  266. package/src/font-style/font.css +4 -4
  267. package/src/layouts/CommonLayout.vue +56 -56
  268. package/src/layouts/PageLayout.vue +151 -151
  269. package/src/layouts/SinglePageView.vue +136 -136
  270. package/src/layouts/header/AdminHeader.vue +132 -132
  271. package/src/layouts/header/HeaderNotice.vue +177 -177
  272. package/src/layouts/header/InstitutionDetail.vue +181 -181
  273. package/src/layouts/tabs/TabsHead.vue +189 -189
  274. package/src/layouts/tabs/TabsView.vue +389 -389
  275. package/src/lib.js +1 -1
  276. package/src/main.js +34 -34
  277. package/src/mixins/formValidationMixin.js +46 -46
  278. package/src/mock/extend/index.js +84 -84
  279. package/src/mock/goods/index.js +108 -108
  280. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  281. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  282. package/src/pages/DefaultExample/index.vue +77 -77
  283. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  284. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  285. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  286. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  287. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  288. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  289. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  290. package/src/pages/DynamicStatistics/index.vue +282 -282
  291. package/src/pages/Example/childIndex.vue +15 -15
  292. package/src/pages/Example/index.vue +30 -30
  293. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  294. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  295. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  296. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  297. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  298. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  299. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  300. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  301. package/src/pages/Recording/index.vue +77 -77
  302. package/src/pages/ReportGrid/index.vue +76 -76
  303. package/src/pages/ServiceReview/index.vue +284 -284
  304. package/src/pages/SubExample/index.vue +26 -26
  305. package/src/pages/WorkflowDetail/WorkflowDetail.vue +235 -235
  306. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +131 -131
  307. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  308. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +302 -302
  309. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  310. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +997 -997
  311. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +222 -222
  312. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +233 -233
  313. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +261 -261
  314. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  315. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +73 -73
  316. package/src/pages/XPageViewExample/index.vue +38 -38
  317. package/src/pages/XReportView/index.vue +64 -64
  318. package/src/pages/XTreeOneProExample/index.vue +67 -67
  319. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  320. package/src/pages/login/Login.vue +378 -378
  321. package/src/pages/login/LoginV3.vue +389 -389
  322. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  323. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  324. package/src/pages/report/ReportTable.js +124 -124
  325. package/src/pages/resourceManage/orgListManage.vue +98 -98
  326. package/src/pages/system/dictionary/index.vue +44 -44
  327. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  328. package/src/pages/system/monitor/operLog/index.vue +37 -37
  329. package/src/pages/system/settings/modifyPassword.vue +117 -117
  330. package/src/pages/system/ticket/index.vue +480 -480
  331. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  332. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  333. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +76 -76
  334. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +74 -74
  335. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  336. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  337. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +74 -74
  338. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  339. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +74 -74
  340. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  341. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +86 -86
  342. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +73 -73
  343. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  344. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +1 -1
  345. package/src/plugins/EventLogPlugin.js +33 -33
  346. package/src/plugins/FindParentsData.js +17 -17
  347. package/src/router/async/config.async.js +35 -35
  348. package/src/router/async/router.map.js +119 -126
  349. package/src/router/index.js +27 -27
  350. package/src/router.js +19 -19
  351. package/src/services/DataModel.js +30 -30
  352. package/src/services/LodopFuncs.js +137 -137
  353. package/src/services/api/TicketDetailsViewApi.js +46 -46
  354. package/src/services/api/cas.js +79 -79
  355. package/src/services/api/common.js +346 -346
  356. package/src/services/api/entity.js +18 -18
  357. package/src/services/api/index.js +17 -17
  358. package/src/services/api/restTools.js +145 -145
  359. package/src/services/api/workFlow.js +63 -63
  360. package/src/services/apiService.js +16 -16
  361. package/src/store/modules/account.js +115 -115
  362. package/src/store/modules/index.js +5 -5
  363. package/src/store/modules/lowCode.js +33 -33
  364. package/src/store/modules/setting.js +119 -119
  365. package/src/theme/default/style.less +58 -58
  366. package/src/theme/global.less +159 -159
  367. package/src/utils/authority-utils.js +85 -85
  368. package/src/utils/errorCode.js +6 -6
  369. package/src/utils/formatter.js +74 -74
  370. package/src/utils/htmlToPDF.js +108 -108
  371. package/src/utils/htmlToPDFApi.js +5 -5
  372. package/src/utils/login.js +188 -188
  373. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  374. package/src/utils/lowcode/lowcodeLog.js +29 -29
  375. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  376. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  377. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  378. package/src/utils/map-utils.js +47 -47
  379. package/src/utils/reg.js +95 -95
  380. package/src/utils/runEvalFunction.js +14 -14
  381. package/src/utils/theme-color-replacer-extend.js +92 -92
  382. package/src/utils/util.js +329 -329
  383. package/src/utils/waterMark.js +31 -31
  384. package/test/Amis.spec.js +164 -164
  385. package/test/Tree.spec.js +168 -168
  386. package/test/myDialog.spec.js +47 -47
  387. package/test/util.test.js +53 -53
  388. package/test/v3Api.test.js +1984 -1984
  389. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  390. package/src/base-client/components/common/XCollapse/XCollapseDemo.vue +0 -15
@@ -1,1361 +1,1361 @@
1
- <template>
2
- <div v-show="tableColumns.length > 0">
3
- <a-row :gutter="48">
4
- <a-col v-show="showLeftOperaBtn">
5
- <span :style="{ float: 'left', marginBottom: '8px' }">
6
- <a-space>
7
- <!-- <a-button v-if="eventState.customDelete" type="primary" @click="custom('customDelete')">-->
8
- <!-- <a-icon type="delete"/>删除-->
9
- <!-- </a-button>-->
10
- <!-- <a-button v-if="eventState.customSave" type="primary" @click="custom('customSave')">-->
11
- <!-- <a-icon type="save"/>保存-->
12
- <!-- </a-button>-->
13
- <slot name="leftButton" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
14
- <a-button v-if="buttonState.add && buttonRendering('add')" type="primary" @click="add">
15
- <a-icon type="plus"/>新增
16
- </a-button>
17
- <a-button v-if="buttonState.move && buttonRendering('move')" type="primary" @click="move">
18
- <a-icon type="plus"/>添加
19
- </a-button>
20
- <a-button
21
- v-if="buttonState.choose && buttonRendering('choose')"
22
- :disabled="!isChoose"
23
- type="primary"
24
- @click="choose">
25
- <a-icon type="check-square"/>选择
26
- </a-button>
27
- <a-button
28
- v-if="buttonState.edit && buttonRendering('edit')"
29
- :disabled="!isModify"
30
- :loading="editLoading"
31
- class="btn-success"
32
- type="dashed"
33
- @click="edit()">
34
- <a-icon :style="iconStyle" type="form"/>修改
35
- </a-button>
36
- <template
37
- v-if="buttonState.editRow && buttonRendering('editRow')">
38
- <a-button
39
- v-if="isEditMode"
40
- class="ant-btn-hover"
41
- @click="editRowSave">
42
- <a-icon :style="iconStyle" type="save"/>保存
43
- </a-button>
44
- <a-button
45
- v-else
46
- @click="openEditMode">
47
- <a-icon :style="iconStyle" type="edit"/>行编辑
48
- </a-button>
49
- </template>
50
- <a-button
51
- v-if="buttonState.delete && buttonRendering('delete')"
52
- :disabled="!isDelete"
53
- type="danger"
54
- @click="deleteItem">
55
- <a-icon :style="iconStyle" type="delete"/>删除
56
- </a-button>
57
- <a-button
58
- v-if="buttonState.import && buttonRendering('import')"
59
- type="dashed"
60
- @click="importData">
61
- <a-icon :style="iconStyle" type="import"/>导入
62
- </a-button>
63
- <a-dropdown v-if="!buttonState || buttonState.export && buttonRendering('export')">
64
- <a-menu slot="overlay">
65
- <a-menu-item :disabled="selectedRowKeys.length === 0" key="1" @click="handleExport('selected')"><a-icon
66
- :style="iconStyle"
67
- type="ordered-list"/>导出选中数据</a-menu-item>
68
- <a-menu-item key="2" @click="handleExport('curPage')"><a-icon :style="iconStyle" type="snippets"/>导出本页数据</a-menu-item>
69
- <a-menu-item key="3" @click="handleExport('exportByQuery')"><a-icon :style="iconStyle" type="download"/>导出所有符合条件的数据</a-menu-item>
70
- </a-menu>
71
- <a-button>导出 <a-icon type="down" :style="iconStyle"/> </a-button>
72
- </a-dropdown>
73
- <a-dropdown v-if="!buttonState || buttonState.print && buttonRendering('print')">
74
- <a-menu slot="overlay">
75
- <a-menu-item :disabled="selectedRowKeys.length === 0" key="1" @click="handlePrint('selected')"><a-icon
76
- :style="iconStyle"
77
- type="ordered-list"/>打印选中数据</a-menu-item>
78
- <a-menu-item key="2" @click="handlePrint('curPage')"><a-icon :style="iconStyle" type="snippets"/>打印本页数据</a-menu-item>
79
- <a-menu-item key="3" @click="handlePrint('exportByQuery')"><a-icon :style="iconStyle" type="download"/>打印所有符合条件的数据</a-menu-item>
80
- </a-menu>
81
- <a-button>打印 <a-icon type="printer" :style="iconStyle"/> </a-button>
82
- </a-dropdown>
83
- <!-- 遍历按钮配置数组,动态生成按钮 -->
84
- <a-button
85
- v-for="(button, index) in editButtonStateData"
86
- :key="index"
87
- :type="button.type || 'dashed'"
88
- @click="editButtonStateDataClick(index)"
89
- class="btn-success"
90
- >
91
- <a-icon type="dashed" :style="iconStyle"/>
92
- {{ button.buttonName }}
93
- </a-button>
94
- <a-button
95
- v-if="allowedCardMode && !simpleMode"
96
- @click="changeViewMode"
97
- :type="isTableMode ? '' : 'primary'">
98
- 看板模式
99
- </a-button>
100
- <a-badge
101
- v-if="selectRowMode === 'listView'"
102
- :count="selectedRows.length"
103
- :number-style="{ backgroundColor:theme.color }"
104
- >
105
- <a-button
106
- type="dashed"
107
- @click="showTempData">
108
- <a-icon :style="iconStyle" type="monitor"/>已选择
109
- </a-button>
110
- </a-badge>
111
- <!-- 头部附加栅格 -->
112
- <x-report
113
- v-if="attachGrid"
114
- :env="env"
115
- :isWidget="true"
116
- :use-oss-for-img="false"
117
- :config-name="attachGrid"
118
- :show-img-in-cell="true"
119
- :display-only="true"
120
- :edit-mode="false"
121
- :show-save-button="false"
122
- :dont-format="true"/>
123
-
124
- <slot name="button" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
125
- </a-space>
126
-
127
- </span>
128
- </a-col>
129
- <a-col v-show="showRightTools && !simpleMode">
130
- <span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">
131
- <a-button-group>
132
- <slot name="rightBtnExpand" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
133
- <a-tooltip title="汇总" placement="bottom">
134
- <a-button @click="showDrawer">
135
- <a-icon :style="iconStyle" type="project"/>
136
- </a-button>
137
- </a-tooltip>
138
- <a-tooltip title="重新查询" placement="bottom">
139
- <a-button @click="refresh(true)">
140
- <a-icon :style="iconStyle" type="reload"/>
141
- </a-button>
142
- </a-tooltip>
143
- <a-tooltip title="列展示/排序" placement="bottom">
144
- <table-setting v-if="columnSelectLoaded" v-model="tableColumns"/>
145
- </a-tooltip>
146
- </a-button-group>
147
- </span>
148
- </a-col>
149
- </a-row>
150
- <!-- 如果当前是表格模式 -->
151
- <template v-if="isTableMode">
152
- <x-table-wrapper ref="table">
153
- <template slot="footer">
154
- <slot
155
- name="footer"
156
- :selectedRowKeys="selectedRowKeys"
157
- :selectedRows="selectedRows"></slot>
158
- </template>
159
- </x-table-wrapper>
160
- </template>
161
- <!-- 如果当前是看板模式 -->
162
- <template v-else>
163
- <XDataCard
164
- ref="table"
165
- @cardEmit="handleCardEmit"
166
- :tableColumns="tableColumns"
167
- :card-config="cardModeConfig"
168
- :show-pagination="!simpleMode"
169
- :prePageSize="simpleMode ? 1000 : undefined"
170
- :serviceName="serviceName"
171
- :card-data="loadData"
172
- :env="env"
173
- :createdQuery="createdQuery"
174
- :simple-mode="simpleMode"/>
175
- </template>
176
- <!-- 上传文件 -->
177
- <a-drawer
178
- title="汇总信息"
179
- placement="right"
180
- :closable="false"
181
- :visible="summaryDrawerVisible"
182
- :z-index="2000"
183
- :width="`${summaryDrawerWidth}vw`"
184
- :after-visible-change="afterVisibleChange"
185
- @close="onClose"
186
- >
187
- <template>
188
- <a-row>
189
- <a-col :span="8" v-for="(f,index) in summaryData" :key="index">
190
- <a-statistic
191
- :title="f.title + ':'"
192
- :value="f.value"
193
- :precision="2">
194
- <template #prefix>
195
- <a-spin :spinning="f.loading">
196
- </a-spin>
197
- </template>
198
- <template #suffix>
199
- <a-icon
200
- v-show="!f.loading"
201
- :type="f.success !== false ? 'check-circle' : 'close-circle'"
202
- :style="{color: f.success !== false ? 'green' : 'red'}"/>
203
- </template>
204
- </a-statistic>
205
- </a-col>
206
- <a-col
207
- :span="item.span"
208
- v-for="(item,index) in chartsConfigArray"
209
- :key="index"
210
- style="height: 20rem; margin-bottom: 3rem">
211
- <div class="custom-chart-title" v-if="item.config.title">{{ item.config.title }}</div>
212
- <div class="custom-chart-desc" v-if="item.config.description">{{ item.config.description }}</div>
213
- <g2Charts
214
- :key="index"
215
- :chatsKey="index"
216
- :is-dev="env === 'dev'"
217
- :config="item.config"
218
- :requestParameters="requestParameters"/>
219
- </a-col>
220
- </a-row>
221
- </template>
222
- </a-drawer>
223
- <x-import-excel
224
- ref="importExcel"
225
- @ok="importExcelOk"
226
- :title="title"
227
- :service-name="serviceName"
228
- :env="env"
229
- :query-params-name="queryParamsName"
230
- >
231
- <template #importExcelSlot>
232
- <slot name="importExcelSlot"></slot>
233
- </template>
234
- </x-import-excel>
235
- <ExportExcel
236
- ref="exportExcel"
237
- />
238
- <a-modal @cancel="$refs.table.refresh()" v-model="selectedRowModalVisible" width="80vw" title="已选中数据" :footer="null">
239
- <x-table-wrapper ref="selectedDataTable" :load-selected-data="true"></x-table-wrapper>
240
- </a-modal>
241
- </div>
242
- </template>
243
- <script>
244
- import { STable } from '@vue2-client/components'
245
- import { getChangedData, setDataByRealKey } from '@vue2-client/utils/util'
246
- import * as util from '@vue2-client/utils/util'
247
- import TableSetting from '@vue2-client/components/TableSetting/TableSetting'
248
- import {
249
- query,
250
- querySummary,
251
- queryWithResource,
252
- remove,
253
- getConfigByNameAsync,
254
- editRowSave,
255
- runLogic
256
- } from '@vue2-client/services/api/common'
257
- import XImportExcel from '@vue2-client/base-client/components/common/XImportExcel'
258
- import { Modal } from 'ant-design-vue'
259
- import { mapState } from 'vuex'
260
- import { executeStrFunction, executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
261
- import debounce from 'lodash.debounce'
262
- import XDataCard from '@vue2-client/base-client/components/common/XDataCard/XDataCard.vue'
263
- import { getRealKeyData } from '@vue2-client/utils/formatter'
264
- import ReportTableHome from '../../../../pages/report/ReportTableHome.vue'
265
- import CustomFuncCel from '@vue2-client/base-client/components/common/XTable/CustomFuncCel.vue'
266
- import ExportExcel from '@vue2-client/base-client/components/common/XTable/ExportExcel.vue'
267
- import g2Charts from '@vue2-client/components/g2Charts/index.vue'
268
- import moment from 'moment/moment'
269
- import XTableWrapper from './XTableWrapper.vue'
270
-
271
- export default {
272
- name: 'XTable',
273
- components: {
274
- ExportExcel,
275
- CustomFuncCel,
276
- XDataCard,
277
- TableSetting,
278
- STable,
279
- XImportExcel,
280
- g2Charts,
281
- XReport: () => import('@vue2-client/base-client/components/common/XReportGrid/XReport.vue'),
282
- ReportTableHome,
283
- XTableWrapper
284
- },
285
- inject: ['getSelf'],
286
- provide () {
287
- return {
288
- tableContext: this
289
- }
290
- },
291
- data () {
292
- return {
293
- uniqueId: `x-table-${this._uid}`, // 使用 _uid 生成唯一 ID
294
- // 筛选列加载状态
295
- columnSelectLoaded: false,
296
- // 预览模式
297
- viewMode: false,
298
- // 本地编辑模式
299
- localEditMode: false,
300
- // 本地编辑表单提交方式
301
- formSubmitTypeInLocalEditMode: 'cover',
302
- // 本地编辑模式所用数据源
303
- localEditModeDataSource: [],
304
- // 本地编辑模式数据源是否已由外部加载
305
- isLocalDataSourceLoadedExternally: false,
306
- // 行选择模式
307
- rowSelectMode: false,
308
- // 行选择模式-允许选中行数量,0:任意数量行,大于0:指定值数量的行
309
- allowSelectRowNum: 0,
310
- // 头部附件的栅格配置名
311
- attachGrid: '',
312
- // 是否展示右侧工具栏
313
- showRightTools: true,
314
- // 是否展示左边按钮栏
315
- showLeftOperaBtn: true,
316
- // 加载数据方法 必须为 Promise 对象
317
- loadData: parameter => {
318
- // 取到表格携带的表单参数
319
- const requestParameters = Object.assign({}, parameter)
320
- // 取到父组件传入的表单参数
321
- const conditionParams = {}
322
- Object.assign(conditionParams, this.fixedQueryForm)
323
- Object.assign(conditionParams, this.form)
324
- // 如果传了燃气公司字段,则进行数据处理
325
- if (conditionParams.orgName) {
326
- requestParameters.orgName = conditionParams.orgName
327
- delete conditionParams.orgName
328
- }
329
- Object.keys(conditionParams).forEach(key => {
330
- if (Array.isArray(conditionParams[key])) {
331
- // 检查数组中是否包含 null
332
- const hasNull = conditionParams[key].every(item => item === '') || conditionParams[key].length === 0
333
- // 如果包含 null,则删除该属性
334
- if (hasNull) {
335
- delete conditionParams[key]
336
- }
337
- }
338
- })
339
- requestParameters.conditionParams = conditionParams
340
- requestParameters.queryParamsName = this.queryParamsName
341
- requestParameters.queryParams = this.queryParams && Object.keys(this.queryParams).length > 0 ? this.queryParams : undefined
342
- this.requestParameters = requestParameters
343
- // 加载数据
344
- return this.loadTableData(requestParameters)
345
- },
346
- requestParameters: {},
347
- rowKey: undefined,
348
- // x滚动条宽度
349
- scrollXWidth: 1600,
350
- // y滚动条高度
351
- scrollYHeight: 'calc(100vh - 31rem)',
352
- // 表格选择列Key集合
353
- selectedRowKeys: [],
354
- // 表格选择Row集合
355
- selectedRows: [],
356
- // 表格选择列Key集合
357
- innerSelectedRowKeys: [],
358
- // 表格选择Row集合
359
- innerSelectedRows: [],
360
- // 禁止表格选择Row集合
361
- selectedDisableRows: [],
362
- // 业务标题
363
- title: '',
364
- // 数据列
365
- tableColumns: [],
366
- // 查询用表单
367
- form: {},
368
- oldForm: {},
369
- // 是否允许修改
370
- isModify: false,
371
- // 是否允许删除
372
- isDelete: false,
373
- // 是否允许选择
374
- isChoose: false,
375
- // 选中用于修改的id
376
- selectId: undefined,
377
- // 是否显示展示列抽屉
378
- visible: false,
379
- // 编辑按钮加载状态
380
- editLoading: false,
381
- // 按钮状态
382
- buttonState: {},
383
- // eventBtnState
384
- eventState: {},
385
- // 自定义按钮数组
386
- editButtonStateData: [],
387
- // 按钮权限
388
- buttonPermissions: [],
389
- // 是否展示汇总
390
- showSummary: false,
391
- // 自定义汇总
392
- showCustomSummary: false,
393
- summaryData: [],
394
- // 图标样式
395
- iconStyle: {
396
- position: 'relative',
397
- top: '1px'
398
- },
399
- // 当前环境
400
- env: 'prod',
401
- // 预览模式(表格 or 看板)
402
- isTableMode: true,
403
- // 汇总抽屉是否显示
404
- summaryDrawerVisible: false,
405
- // 汇总更新标志
406
- summaryUpdate: false,
407
- customSummaryArray: [],
408
- formItems: [],
409
- // 是否为行编辑模式
410
- isEditMode: false,
411
- // 定义主键
412
- primaryKey: '',
413
- // 是否进行初始化查询
414
- createdQuery: false,
415
- // 允许看板模式
416
- allowedCardMode: false,
417
- // 看板模式配置
418
- cardModeConfig: undefined,
419
- // 暂存行编辑前数据 用于比较哪些变化了才需要保存
420
- editRowBeforeData: [],
421
- // 是否简易模式
422
- simpleMode: false,
423
- // crud打印模板配置
424
- printTemplate: false,
425
- queryParams: {},
426
- // 定义总行数
427
- totalCount: 0,
428
- user: {},
429
- chartsConfigArray: [],
430
- summaryDrawerWidth: 35,
431
- // 行选择模式
432
- selectRowMode: 'default',
433
- tableSize: 'default',
434
- clearSelectRowAfterQuery: false,
435
- selectedRowModalVisible: false
436
- }
437
- },
438
- props: {
439
- // 查询配置文件名
440
- queryParamsName: {
441
- type: String,
442
- default: () => {
443
- return ''
444
- }
445
- },
446
- // 查询配置文件名
447
- serviceName: {
448
- type: String,
449
- default: () => {
450
- return ''
451
- }
452
- },
453
- // 查询配置文件Json
454
- queryParamsJson: {
455
- type: Object,
456
- default: null
457
- },
458
- // 固定查询表单
459
- fixedQueryForm: {
460
- type: Object,
461
- default: () => {
462
- return {}
463
- }
464
- },
465
- // 数据只有一页时是否展示分页,true:展示,auto:隐藏
466
- showPagination: {
467
- type: Boolean,
468
- default: true
469
- },
470
- // 是否自定义删除功能
471
- customDelete: {
472
- type: Boolean,
473
- default: false
474
- },
475
- // 自适应底部边距
476
- extraHeight: {
477
- type: Number,
478
- default: 80
479
- }
480
- },
481
- computed: {
482
- ...mapState('setting', ['theme']),
483
- rowSelection () {
484
- return this.selectRowMode === 'disabled' ? undefined : {
485
- selectedRowKeys: this.innerSelectedRowKeys,
486
- onChange: this.onSelectChange,
487
- onSelect: this.selectRowMode === 'listView' ? this.onSelect : undefined,
488
- onSelectAll: this.selectRowMode === 'listView' ? this.onSelectAll : undefined,
489
- getCheckboxProps: record => ({
490
- props: {
491
- disabled: this.selectedDisableRows.includes(record[this.rowKey]), // Column configuration not to be checked
492
- name: record.name,
493
- },
494
- }),
495
- }
496
- },
497
- ...mapState('account', { currUser: 'user' }),
498
- ...mapState('setting', ['compatible'])
499
- },
500
- mounted () {
501
- window.addEventListener('resize', this.handleResize)
502
- },
503
- beforeDestroy () {
504
- // 销毁页面查询定时器
505
- if (this.queryTimer) {
506
- clearInterval(this.queryTimer)
507
- }
508
- window.removeEventListener('resize', this.handleResize)
509
- },
510
- methods: {
511
- showTempData () {
512
- this.selectedRowModalVisible = true
513
- this.$nextTick(() => {
514
- this.$refs.selectedDataTable.refresh(true)
515
- this.$refs.selectedDataTable.updateSelect(this.selectedRowKeys, this.selectedRows)
516
- })
517
- },
518
- customFunctionShow (customFunction, record, cIndex) {
519
- return executeStrFunctionByContext(this, customFunction, [record, cIndex])
520
- },
521
- getConfigByNameAsync,
522
- runLogic,
523
- executeStrFunctionByContext,
524
- columnClick (key, value, record) {
525
- this.$emit('columnClick', key, value, record)
526
- },
527
- gotoUserDetail (key, value, record) {
528
- this.$emit('gotoUserDetail', key, value, record)
529
- },
530
- // 打开行编辑
531
- openEditMode () {
532
- this.isEditMode = true
533
- this.editRowBeforeData = JSON.parse(JSON.stringify(this.getTableData()))
534
- },
535
- // 标记行保存
536
- editRowSave () {
537
- // 获取最新数据
538
- const editRowAfterData = this.getTableData()
539
- const changeData = getChangedData(this.editRowBeforeData, editRowAfterData)
540
- if (this.eventState?.customSave) {
541
- this.custom('customSave', {
542
- tableData: editRowAfterData,
543
- changeData
544
- })
545
- return
546
- }
547
- if (changeData.length === 0) {
548
- this.$message.info('没有数据发生变化')
549
- } else {
550
- Modal.confirm({
551
- title: '是否确认保存?',
552
- content: `此操作将保存当前行编辑的数据,共修改${changeData.length}条数据`,
553
- zIndex: 1001,
554
- onOk: () => {
555
- return new Promise((resolve, reject) => {
556
- const requestParameters = {
557
- queryParamsName: this.queryParamsName,
558
- changeData: changeData.map(h => getRealKeyData(h)),
559
- operaInfo: this.currUser.operaInfo
560
- }
561
- editRowSave(requestParameters, this.serviceName, this.env === 'dev').then(res => {
562
- this.$message.success('行内数据保存成功')
563
- this.isEditMode = false
564
- this.refresh()
565
- resolve(res)
566
- }).catch(e => {
567
- reject(e)
568
- this.$message.error('保存失败!')
569
- })
570
- })
571
- },
572
- onCancel () {
573
- }
574
- })
575
- }
576
- },
577
- importExcelOk (data) {
578
- this.refresh(true)
579
- this.$emit('importExcelOk', data)
580
- },
581
- /**
582
- * 行选择事件
583
- * @param row 选中行集合
584
- * @param attr 表单项属性
585
- */
586
- async rowChoose (row, attr, callback, record) {
587
- // 如果配置了自定义函数
588
- if (attr.dataChangeFunc) {
589
- await executeStrFunction(attr.dataChangeFunc, [record, this.setForm, {
590
- ...attr,
591
- selectRows: row
592
- }, util, this.getSelf(), this.mode, runLogic, getConfigByNameAsync])
593
- } else {
594
- // 默认填充选中行数据到当前表单
595
- setDataByRealKey(record, row[0])
596
- }
597
- if (callback) {
598
- callback()
599
- }
600
- },
601
- setForm (record, obj) {
602
- Object.assign(record, obj)
603
- this.$forceUpdate()
604
- },
605
- handleResize () {
606
- debounce(() => {
607
- this.setScrollYHeight({})
608
- }, 100)()
609
- },
610
- isInAModal () {
611
- let parent = this.$parent
612
- while (parent) {
613
- // 检查组件名称,这里假设a-modal组件的名称为AModal,根据实际情况可能需要调整
614
- if (parent.$options.name === 'AModal') {
615
- return true
616
- }
617
- parent = parent.$parent
618
- }
619
- return false
620
- },
621
- executeStrFunction,
622
- // 切换看板模式和表格模式
623
- changeViewMode () {
624
- this.isTableMode = !this.isTableMode
625
- // 看板切换回表格模式 刷新列表
626
- this.refresh(true)
627
- },
628
- /**
629
- * 初始化表格参数
630
- */
631
- init (params) {
632
- const {
633
- // 查询参数对象, 用于没有对应查询配置文件名时
634
- queryParams,
635
- tableColumns,
636
- attachGrid,
637
- buttonState,
638
- eventState = {},
639
- buttonPermissions,
640
- editButtonStateData = [],
641
- title,
642
- form,
643
- tableSummaryMap = {},
644
- customTableSummaryArray = [],
645
- viewMode,
646
- localEditMode,
647
- formSubmitTypeInLocalEditMode = 'cover',
648
- rowSelectMode,
649
- allowSelectRowNum = 0,
650
- formItems,
651
- env = 'prod',
652
- createdQuery = true,
653
- createdEditMode = false,
654
- primaryKey,
655
- allowedCardMode = false,
656
- simpleMode = false,
657
- showRightTools = true,
658
- cardModeConfig,
659
- summaryUpdate,
660
- summaryDrawerWidth = 35,
661
- chartsConfigArray = [],
662
- printTemplate = 'DEFAULT_CRUD_PRINT_TEMPLATE',
663
- selectRowMode = 'default',
664
- tableSize = 'default',
665
- clearSelectRowAfterQuery = false
666
- } = params
667
- this.showSummary = Object.keys(tableSummaryMap).length > 0
668
- if (this.showSummary) {
669
- Object.keys(tableSummaryMap).forEach(item => {
670
- this.summaryData.push({
671
- key: item,
672
- title: tableSummaryMap[item],
673
- value: ' ',
674
- loading: true,
675
- success: false
676
- })
677
- })
678
- }
679
- if (customTableSummaryArray.length > 0) {
680
- customTableSummaryArray.forEach(item => {
681
- this.summaryData.push({
682
- key: item.key,
683
- title: item.title,
684
- value: ' ',
685
- loading: true,
686
- success: false
687
- })
688
- })
689
- this.showCustomSummary = true
690
- this.customSummaryArray = customTableSummaryArray
691
- }
692
- this.queryParams = queryParams
693
- this.tableColumns = JSON.parse(JSON.stringify(tableColumns))
694
- if (this.tableColumns.length === 0) {
695
- return
696
- }
697
- this.attachGrid = attachGrid
698
- this.viewMode = viewMode
699
- this.localEditMode = localEditMode
700
- this.formSubmitTypeInLocalEditMode = formSubmitTypeInLocalEditMode
701
- this.rowSelectMode = rowSelectMode
702
- this.allowSelectRowNum = allowSelectRowNum
703
- this.simpleMode = simpleMode
704
- this.formItems = formItems
705
- this.user = this.currUser
706
- this.createdQuery = createdQuery
707
- this.primaryKey = primaryKey
708
- this.buttonState = buttonState
709
- this.eventState = eventState
710
- this.showRightTools = showRightTools
711
- this.printTemplate = printTemplate
712
- this.summaryDrawerWidth = summaryDrawerWidth
713
- this.chartsConfigArray = chartsConfigArray
714
- this.selectRowMode = selectRowMode
715
- this.tableSize = tableSize
716
- this.clearSelectRowAfterQuery = clearSelectRowAfterQuery
717
- if (this.chartsConfigArray.length > 0) {
718
- // 循环chartsConfigArray,将每个配置的数据请求参数赋值给requestParameters
719
- this.chartsConfigArray.forEach(item => {
720
- item.config.queryParams = JSON.parse(JSON.stringify(this.queryParams))
721
- item.config.queryParamsName = this.queryParamsName
722
- })
723
- }
724
- if (this.localEditMode) {
725
- this.localEditModeDataSource = []
726
- if (this.formSubmitTypeInLocalEditMode === 'append') {
727
- this.isLocalDataSourceLoadedExternally = true
728
- const defaultItem = {}
729
- defaultItem['序号'] = 0
730
- this.localEditModeDataSource.push(defaultItem)
731
- } else {
732
- this.isLocalDataSourceLoadedExternally = false
733
- }
734
- this.buttonState.import = false
735
- this.buttonState.export = false
736
- this.showRightTools = false
737
- }
738
- if (this.rowSelectMode) {
739
- this.buttonState = {
740
- choose: true
741
- }
742
- this.showRightTools = false
743
- }
744
- this.buttonPermissions = buttonPermissions
745
- this.editButtonStateData = editButtonStateData
746
- this.title = title
747
- this.env = env
748
- this.rowKey = this.getPrimaryKeyName()
749
- this.allowedCardMode = allowedCardMode
750
- this.cardModeConfig = cardModeConfig
751
- this.summaryUpdate = summaryUpdate
752
- this.isEditMode = createdEditMode
753
- let totalWidth = 0
754
- for (let i = 0; i < this.tableColumns.length; i++) {
755
- const item = this.tableColumns[i]
756
- // 设置操作列
757
- if (item.slotType === 'action') {
758
- item.fixed = 'right'
759
- item.width = 70
760
- }
761
- // 设置表格宽度
762
- if (item.width) {
763
- totalWidth = totalWidth + item.width
764
- } else {
765
- totalWidth = totalWidth + 180
766
- }
767
- }
768
- // 横向滚动长度大于所有宽度,才能实现固定表头
769
- this.scrollXWidth = totalWidth
770
- // 加载筛选列完成
771
- this.columnSelectLoaded = true
772
- this.setQueryForm(form || {})
773
- // 简易模式,并且是看板模式,默认直接进入看板模式
774
- if (this.allowedCardMode && this.simpleMode) {
775
- this.isTableMode = false
776
- }
777
- if (params.queryInterval) {
778
- this.queryTimer = setInterval(() => {
779
- this.refresh()
780
- }, params.queryInterval * 1000)
781
- }
782
- },
783
- // 操作面板按钮渲染
784
- buttonRendering (button) {
785
- if (!this.buttonPermissions) {
786
- return true
787
- }
788
- try {
789
- const existingItem = this.buttonPermissions.find(item => item.btnName === button)
790
- const rolestr = this.currUser.rolestr?.split(',')
791
- if (existingItem?.state) {
792
- const currUserRole = existingItem.roleStr
793
- return rolestr.some(item => currUserRole && currUserRole.includes(item))
794
- } else {
795
- return true
796
- }
797
- } catch (e) {
798
- console.error(e)
799
- return false
800
- }
801
- },
802
- // 防止查询多次点击处理
803
- loadTableData (requestParameters) {
804
- if (this.queryPromise) {
805
- return this.queryPromise
806
- }
807
- this.queryPromise = this.loadTableDataGen(requestParameters).finally(() => {
808
- this.queryPromise = undefined
809
- })
810
- return this.queryPromise
811
- },
812
- /**
813
- * 加载表格数据
814
- * @param requestParameters 请求参数
815
- */
816
- async loadTableDataGen (requestParameters) {
817
- let result
818
- if (this.localEditMode) {
819
- if (!this.isLocalDataSourceLoadedExternally && requestParameters?.conditionParams && Object.keys(requestParameters?.conditionParams).length > 0) {
820
- const result = await query(Object.assign(requestParameters, { userId: this.currUser?.id }),
821
- this.serviceName, this.env === 'dev')
822
- if (result.data) {
823
- let no = 0
824
- this.localEditModeDataSource = result.data.map(item => {
825
- item['序号'] = no
826
- no++
827
- return item
828
- })
829
- }
830
- this.isLocalDataSourceLoadedExternally = true
831
- }
832
- result = new Promise((resolve) => {
833
- resolve({
834
- data: this.localEditModeDataSource
835
- })
836
- })
837
- } else {
838
- result = query(Object.assign(requestParameters, { userId: this.currUser?.id }), this.serviceName, this.env === 'dev')
839
- result.then(res => {
840
- this.totalCount = res.totalCount || 0
841
- })
842
- }
843
-
844
- if (this.selectRowMode === 'listView' && !this.clearSelectRowAfterQuery) {
845
- this.$refs.table.updateSelect(this.selectedRowKeys, this.selectedRows)
846
- } else if (this.isTableMode && !this.simpleMode) {
847
- this.clearRowKeys()
848
- }
849
- this.$emit('afterQuery', result, requestParameters.conditionParams)
850
- return result
851
- },
852
- /**
853
- * 操作列事件
854
- * @param record 本条数据
855
- * @param actionType 操作类型
856
- * @param func 事件默认 action
857
- * @param index 行下标
858
- */
859
- action (record, actionType, func = 'action', index) {
860
- this.$emit('action', record, record[this.getPrimaryKeyName()], actionType, func, index)
861
- },
862
- // 看板点击事件
863
- handleCardEmit (data, eventName) {
864
- this.action(data, undefined, eventName)
865
- },
866
- /**
867
- * 选择列勾选改变事件
868
- * @param record 被选择的列数据
869
- * @param selected 是否选中
870
- * @param selectedRows 被选择的列集合
871
- * @param nativeEvent 原生事件
872
- */
873
- onSelect (record, selected, selectedRows, nativeEvent) {
874
- if (this.selectRowMode === 'listView') {
875
- // 获取主键数据
876
- const primaryData = record[this.primaryKey]
877
- // 取消勾选时
878
- if (!selected) {
879
- this.selectedRowKeys = this.selectedRowKeys.filter(item => item !== primaryData)
880
- this.selectedRows = this.selectedRows.filter(item => item[this.primaryKey] !== primaryData)
881
- }
882
- }
883
- },
884
- /**
885
- * 选择列全选事件
886
- * @param selected 是否选中
887
- * @param selectedRows 被选择的列集合
888
- * @param changeRows 改变的行集合
889
- */
890
- onSelectAll (selected, selectedRows, changeRows) {
891
- console.log('onSelectAll', selected, selectedRows, changeRows)
892
- if (this.selectRowMode === 'listView') {
893
- if (!selected) {
894
- // 获取所有改变的key
895
- const changeKeys = changeRows.map(item => item[this.primaryKey])
896
- this.selectedRowKeys = this.selectedRowKeys.filter(item => !changeKeys.includes(item))
897
- this.selectedRows = this.selectedRows.filter(item => !changeKeys.includes(item[this.primaryKey]))
898
- }
899
- }
900
- },
901
- /**
902
- * 选择列数据改变事件
903
- * @param selectedRowKeys 被选择的列Key集合
904
- * @param selectedRows 被选择的列集合
905
- */
906
- onSelectChange (selectedRowKeys, selectedRows) {
907
- this.innerSelectedRowKeys = selectedRowKeys
908
- this.innerSelectedRows = selectedRows
909
- if (this.selectRowMode === 'listView' && !this.clearSelectRowAfterQuery) {
910
- if (this.primaryKey) {
911
- // 找出被取消选中的行
912
- const deselectedKeys = this.selectedRowKeys.filter(key => !selectedRowKeys.includes(key))
913
- // 从已选中的行中移除被取消选中的行
914
- if (deselectedKeys.length > 0) {
915
- this.selectedRowKeys = this.selectedRowKeys.filter(key => !deselectedKeys.includes(key))
916
- this.selectedRows = this.selectedRows.filter(row => !deselectedKeys.includes(row[this.primaryKey]))
917
- }
918
- // 添加新选中的行(去重)
919
- const newSelectedKeys = selectedRowKeys.filter(key => !this.selectedRowKeys.includes(key))
920
- const newSelectedRows = selectedRows.filter(row => newSelectedKeys.includes(row[this.primaryKey]))
921
- this.selectedRowKeys = [...this.selectedRowKeys, ...newSelectedKeys]
922
- this.selectedRows = [...this.selectedRows, ...newSelectedRows]
923
- } else {
924
- // 如果没有主键,则直接使用当前选中的行
925
- this.selectedRowKeys = selectedRowKeys
926
- this.selectedRows = selectedRows
927
- }
928
- } else {
929
- this.selectedRowKeys = this.innerSelectedRowKeys
930
- this.selectedRows = this.innerSelectedRows
931
- }
932
- this.isModify = this.innerSelectedRowKeys.length === 1
933
- this.isDelete = this.innerSelectedRowKeys.length > 0
934
- this.isChoose = this.allowSelectRowNum === 0 ? this.innerSelectedRowKeys.length > 0 : this.innerSelectedRowKeys.length === this.allowSelectRowNum
935
- this.$emit('selectRow', this.selectedRowKeys, this.selectedRows)
936
- },
937
- /**
938
- * 清除表格选中项
939
- */
940
- clearRowKeys () {
941
- this.$refs.table.clearSelected()
942
- },
943
- /**
944
- * 为表格附加查询条件
945
- */
946
- setQueryForm (form = {}) {
947
- this.form = form
948
- if (this.createdQuery) {
949
- this.refresh(true)
950
- } else {
951
- this.createdQuery = true
952
- }
953
- },
954
- /**
955
- * 表格重新加载方法
956
- * 如果参数为 true, 则强制刷新到第一页
957
- */
958
- refresh (bool) {
959
- this.$nextTick(() => {
960
- this.$refs.table.refresh(bool)
961
- })
962
- },
963
- setScrollYHeight ({ extraHeight = this.extraHeight, id = this.uniqueId, type = '' }) {
964
- this.$nextTick(() => {
965
- setTimeout(() => {
966
- const curDocument = window?.rawDocument || document
967
- const innerHeight = window?.rawWindow?.innerHeight || window.innerHeight || 0
968
- if (typeof extraHeight == 'undefined') {
969
- // 默认底部分页32 + 边距48
970
- extraHeight = 48 + 32
971
- }
972
- let tHeader = null
973
- if (id) {
974
- tHeader = curDocument.getElementById(id) ? curDocument.getElementById(id).getElementsByClassName('ant-table-thead')[0] : null
975
- } else {
976
- tHeader = curDocument.getElementsByClassName('ant-table-thead')[0]
977
- }
978
- // 表格内容距离顶部的距离
979
- let tHeaderBottom = 0
980
- if (tHeader) {
981
- tHeaderBottom = tHeader.getBoundingClientRect().bottom
982
- }
983
- if (tHeaderBottom === 0) {
984
- this.scrollYHeight = 'calc(100vh - 31rem)'
985
- if (window.__MICRO_APP_ENVIRONMENT__) {
986
- this.scrollYHeight = 'calc(100vh - 28.5rem)'
987
- }
988
- return
989
- }
990
-
991
- // 判断是否在 modal 中
992
- if (this.isInAModal()) {
993
- let modalElement = null
994
- if (tHeader) {
995
- modalElement = tHeader.closest('.ant-modal-body')
996
- } else {
997
- modalElement = curDocument.querySelector('.ant-modal-body')
998
- }
999
- if (modalElement) {
1000
- const modalRect = modalElement.getBoundingClientRect()
1001
- // 48 是 modal 通常的边距 32 是分页
1002
- extraHeight = innerHeight - modalRect.bottom + 32 + 48
1003
- }
1004
- }
1005
- if (innerHeight - (tHeaderBottom + extraHeight) < 210) {
1006
- this.scrollYHeight = 'calc(100vh - 31rem)'
1007
- return
1008
- }
1009
- // 窗体高度-表格内容顶部的高度-表格内容底部的高度
1010
- // this.scrollYHeight = document.body.clientHeight - tHeaderBottom - extraHeight
1011
- this.scrollYHeight = `calc(100vh - ${tHeaderBottom + extraHeight}px)`
1012
- }, 60)
1013
- })
1014
- },
1015
- /**
1016
- * 获取主键列名称
1017
- */
1018
- getPrimaryKeyName () {
1019
- if (this.primaryKey) {
1020
- return this.primaryKey
1021
- }
1022
- const indexColumn = this.tableColumns.find(i => i?.slotType === 'index')
1023
- return indexColumn ? indexColumn.dataIndex : this.tableColumns[0].dataIndex
1024
- },
1025
- handleExport (type) {
1026
- this.$refs.exportExcel.handleExport(type, this.title)
1027
- },
1028
- handlePrint (type) {
1029
- const printData = {
1030
- title: this.title,
1031
- form: this.form,
1032
- operaInfo: this.currUser.operaInfo,
1033
- operaTime: moment().format('YYYY-MM-DD HH:mm:ss'),
1034
- summary: this.retrieveSummaryData
1035
- }
1036
- this.$refs.exportExcel.handlePrint(type, printData)
1037
- },
1038
- validateTableAndSyncData (currRow, defaultAppendRowData) {
1039
- let isLastRow = false
1040
- if (this.localEditModeDataSource.length === 0) {
1041
- isLastRow = true
1042
- } else if (currRow['序号'] === this.localEditModeDataSource[this.localEditModeDataSource.length - 1]['序号']) {
1043
- isLastRow = true
1044
- }
1045
- if (isLastRow) {
1046
- this.appendLocalData(defaultAppendRowData)
1047
- }
1048
- },
1049
- // 新增业务
1050
- add () {
1051
- if (this.eventState?.customAdd) {
1052
- this.custom('customAdd', {})
1053
- return
1054
- }
1055
- if (this.localEditMode && this.isEditMode) {
1056
- this.appendLocalData({})
1057
- } else {
1058
- this.$emit('add')
1059
- }
1060
- },
1061
- // 添加业务
1062
- move () {
1063
- this.$emit('move')
1064
- },
1065
- // 通用事件业务
1066
- custom (func) {
1067
- this.$emit('customEvent', func)
1068
- },
1069
- // 编辑业务
1070
- edit (id) {
1071
- this.editLoading = true
1072
- this.getEditData(id).then(modifyModelData => {
1073
- if (this.eventState?.customEdit) {
1074
- this.custom('customEdit', { id, modifyModelData })
1075
- return
1076
- }
1077
- this.$emit('edit', modifyModelData)
1078
- this.editLoading = false
1079
- })
1080
- },
1081
- // 行选择业务
1082
- choose () {
1083
- if (this.isChoose) {
1084
- // 如果配置了自定义函数
1085
- this.$emit('rowChoose', this.selectedRows)
1086
- } else {
1087
- this.$message.warning(this.allowSelectRowNum === 0 ? '请选择数据' : `请选择${this.allowSelectRowNum}条数据`)
1088
- }
1089
- },
1090
- // 自定义按钮点击
1091
- editButtonStateDataClick (index) {
1092
- this.$emit('editButtonStateDataClick', this.editButtonStateData[index].functionName, this.selectedRows)
1093
- },
1094
- // 获取被编辑的数据
1095
- getEditData (id) {
1096
- if (!id) {
1097
- this.selectId = this.selectedRowKeys[0]
1098
- } else {
1099
- this.selectId = id
1100
- }
1101
- const primaryKeyName = this.getPrimaryKeyName()
1102
- if (this.tableColumns[0].dataIndex !== primaryKeyName) {
1103
- this.selectId = this.selectedRows[0][primaryKeyName]
1104
- }
1105
- // 将更新需要的主键值加入到primaryKeyData中
1106
- const primaryKeyData = {}
1107
- primaryKeyData[primaryKeyName] = this.selectId
1108
- if (this.localEditMode) {
1109
- return new Promise((resolve) => {
1110
- const modifyData = this.getDataByRowKeyValue(this.selectId)
1111
- resolve({
1112
- data: modifyData,
1113
- primaryKeyData: primaryKeyData
1114
- })
1115
- })
1116
- }
1117
- const requestParameters = {
1118
- queryParamsName: this.queryParamsName,
1119
- queryParams: this.queryParams && Object.keys(this.queryParams).length > 0 ? this.queryParams : undefined,
1120
- conditionParams: {},
1121
- pageNo: 1,
1122
- pageSize: 1
1123
- }
1124
- requestParameters.conditionParams[primaryKeyName] = this.selectId
1125
- requestParameters.f_businessid = this.selectId
1126
- return queryWithResource(requestParameters, this.serviceName, this.env === 'dev').then(res => {
1127
- return { data: res.data[0], primaryKeyData: primaryKeyData, images: res.images, files: res.files }
1128
- })
1129
- },
1130
- // 删除业务
1131
- deleteItem () {
1132
- if (this.viewMode) {
1133
- this.$message.info('预览模式禁止删除')
1134
- return
1135
- }
1136
- Modal.confirm({
1137
- title: '提示',
1138
- content: '您本次要删除共' + this.selectedRowKeys.length + '条数据,确定操作吗?',
1139
- zIndex: 1001,
1140
- onOk: () => {
1141
- const requestParameters = {
1142
- queryParamsName: this.queryParamsName,
1143
- idList: this.selectedRowKeys
1144
- }
1145
- if (this.eventState?.customDelete) {
1146
- this.custom('customDelete', {
1147
- selectedRowKeys: this.selectedRowKeys,
1148
- selectedRows: this.selectedRows
1149
- })
1150
- return
1151
- }
1152
- return new Promise((resolve, reject) => {
1153
- if (this.localEditMode) {
1154
- this.localEditModeDataSource = this.getLocalData().filter(item => !this.selectedRowKeys.includes(item[this.rowKey]))
1155
- resolve(200)
1156
- this.$message.success('删除成功!')
1157
- this.refresh(true)
1158
- // afterDelete
1159
- this.$emit('afterDelete', requestParameters)
1160
- } else if (this.customDelete) {
1161
- this.$emit('del', this.selectedRows, resolve)
1162
- } else {
1163
- remove(requestParameters, this.serviceName, this.env === 'dev').then(res => {
1164
- resolve(res)
1165
- this.$message.success('删除成功!')
1166
- this.refresh(true)
1167
- // afterDelete
1168
- this.$emit('afterDelete', requestParameters)
1169
- }).catch(e => {
1170
- reject(e)
1171
- this.$message.error('删除失败!')
1172
- })
1173
- }
1174
- })
1175
- },
1176
- onCancel () {
1177
- }
1178
- })
1179
- },
1180
- // 导入业务
1181
- importData () {
1182
- this.$refs.importExcel.importExcelHandleOpen()
1183
- },
1184
- afterVisibleChange (val) {
1185
- if (val) {
1186
- this.retrieveSummaryData()
1187
- }
1188
- },
1189
- async retrieveSummaryData () {
1190
- const promises = []
1191
-
1192
- if (this.requestParameters.querySummary) {
1193
- const querySummaryPromise = querySummary(Object.assign(this.requestParameters, { userId: this.currUser?.id }), this.serviceName, this.env === 'dev')
1194
- .then(res => {
1195
- if (this.compatible === 'V3') {
1196
- res = res.data
1197
- }
1198
- if (res.length > 0) {
1199
- this.summaryData.forEach(item => {
1200
- res.forEach(summary => {
1201
- if (item.title === summary.title) {
1202
- item.value = summary.value
1203
- item.success = true
1204
- item.loading = false
1205
- }
1206
- })
1207
- })
1208
- }
1209
- })
1210
- promises.push(querySummaryPromise)
1211
- }
1212
-
1213
- if (this.showCustomSummary) {
1214
- this.customSummaryArray.forEach(item => {
1215
- const runLogicPromise = runLogic(item.source, Object.assign(this.requestParameters, { userId: this.currUser?.id }), this.serviceName, this.env === 'dev')
1216
- .then(res => {
1217
- this.summaryData.forEach(summary => {
1218
- if (item.key === summary.key) {
1219
- summary.value = res.value
1220
- summary.success = true
1221
- summary.loading = false
1222
- }
1223
- })
1224
- })
1225
- .catch(e => {
1226
- this.summaryData.forEach(summary => {
1227
- if (item.key === summary.key) {
1228
- summary.value = 0
1229
- summary.success = false
1230
- summary.loading = false
1231
- }
1232
- })
1233
- })
1234
- promises.push(runLogicPromise)
1235
- })
1236
- }
1237
-
1238
- await Promise.all(promises)
1239
- return this.summaryData
1240
- },
1241
- showDrawer () {
1242
- if (this.summaryUpdate) {
1243
- this.summaryData.forEach(item => {
1244
- item.loading = true
1245
- item.success = false
1246
- item.value = ' '
1247
- })
1248
- this.summaryDrawerVisible = true
1249
- } else {
1250
- this.$message.warning('请查询后再来查看')
1251
- }
1252
- },
1253
- onClose () {
1254
- this.summaryDrawerVisible = false
1255
- },
1256
- // 获取表格内所有数据
1257
- getTableData () {
1258
- return this.$refs.table.localDataSource
1259
- },
1260
- // 设置表格内数据
1261
- setTableData (data) {
1262
- if (this.localEditMode) {
1263
- // 本地编辑模式下,需要修改 localEditModeDataSource
1264
- this.localEditModeDataSource = data.map((item, index) => ({
1265
- ...item,
1266
- 序号: index + 1
1267
- }))
1268
- this.$nextTick(() => {
1269
- this.$refs.table?.refresh()
1270
- })
1271
- } else {
1272
- // 普通模式
1273
- this.$nextTick(() => {
1274
- if (this.$refs.table) {
1275
- this.$refs.table.setLocalDataSource(data)
1276
- }
1277
- })
1278
- }
1279
- },
1280
- // 获取所有本地数据
1281
- getLocalData () {
1282
- return this.localEditModeDataSource
1283
- },
1284
- // 获取指定rowKey的value的本地数据
1285
- getDataByRowKeyValue (rowKeyValue) {
1286
- return this.getLocalData().find(item => {
1287
- return item[this.rowKey] === rowKeyValue
1288
- })
1289
- },
1290
- // 修改本地数据
1291
- modifyLocalData (rowKeyValue, data) {
1292
- const modifyItem = this.getDataByRowKeyValue(rowKeyValue)
1293
- if (modifyItem) {
1294
- Object.assign(modifyItem, data)
1295
- }
1296
- },
1297
- // 追加本地数据
1298
- appendLocalData (item) {
1299
- if (this.localEditModeDataSource.length === 0) {
1300
- item['序号'] = 1
1301
- } else {
1302
- item['序号'] = this.localEditModeDataSource[this.localEditModeDataSource.length - 1]['序号'] + 1
1303
- }
1304
- this.localEditModeDataSource.push(item)
1305
- }
1306
- }
1307
- }
1308
- </script>
1309
- <style lang="less" scoped>
1310
-
1311
- .custom-chart-title {
1312
- font-size: 16px;
1313
- font-weight: 700;
1314
- margin-bottom: 8px;
1315
- }
1316
-
1317
- .custom-chart-desc {
1318
- font-size: 12px;
1319
- color: rgba(0, 0, 0, .45);
1320
- margin-bottom: 16px;
1321
- }
1322
-
1323
- :deep(.ant-table-thead > tr > th) {
1324
- font-weight: 600;
1325
- }
1326
-
1327
- :deep(.table-wrapper .ant-pagination) {
1328
- display: flex;
1329
- flex-direction: row;
1330
- align-items: center;
1331
- padding: 0;
1332
- }
1333
-
1334
- :deep(.table-wrapper .ant-pagination .ant-pagination-total-text) {
1335
- white-space: nowrap;
1336
- }
1337
-
1338
- :deep(.ant-table td) {
1339
- white-space: nowrap;
1340
- }
1341
-
1342
- .footer_sum_title {
1343
- color: @primary-color;
1344
- font-weight: bold;
1345
- }
1346
-
1347
- .footer_sum_item {
1348
- white-space: nowrap;
1349
- }
1350
-
1351
- .ant-btn-hover {
1352
- border-color: @primary-color;
1353
- color: @primary-color;
1354
- }
1355
-
1356
- .innerTable {
1357
- :deep(.ant-form-item) {
1358
- margin: 0;
1359
- }
1360
- }
1361
- </style>
1
+ <template>
2
+ <div v-show="tableColumns.length > 0">
3
+ <a-row :gutter="48">
4
+ <a-col v-show="showLeftOperaBtn">
5
+ <span :style="{ float: 'left', marginBottom: '8px' }">
6
+ <a-space>
7
+ <!-- <a-button v-if="eventState.customDelete" type="primary" @click="custom('customDelete')">-->
8
+ <!-- <a-icon type="delete"/>删除-->
9
+ <!-- </a-button>-->
10
+ <!-- <a-button v-if="eventState.customSave" type="primary" @click="custom('customSave')">-->
11
+ <!-- <a-icon type="save"/>保存-->
12
+ <!-- </a-button>-->
13
+ <slot name="leftButton" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
14
+ <a-button v-if="buttonState.add && buttonRendering('add')" type="primary" @click="add">
15
+ <a-icon type="plus"/>新增
16
+ </a-button>
17
+ <a-button v-if="buttonState.move && buttonRendering('move')" type="primary" @click="move">
18
+ <a-icon type="plus"/>添加
19
+ </a-button>
20
+ <a-button
21
+ v-if="buttonState.choose && buttonRendering('choose')"
22
+ :disabled="!isChoose"
23
+ type="primary"
24
+ @click="choose">
25
+ <a-icon type="check-square"/>选择
26
+ </a-button>
27
+ <a-button
28
+ v-if="buttonState.edit && buttonRendering('edit')"
29
+ :disabled="!isModify"
30
+ :loading="editLoading"
31
+ class="btn-success"
32
+ type="dashed"
33
+ @click="edit()">
34
+ <a-icon :style="iconStyle" type="form"/>修改
35
+ </a-button>
36
+ <template
37
+ v-if="buttonState.editRow && buttonRendering('editRow')">
38
+ <a-button
39
+ v-if="isEditMode"
40
+ class="ant-btn-hover"
41
+ @click="editRowSave">
42
+ <a-icon :style="iconStyle" type="save"/>保存
43
+ </a-button>
44
+ <a-button
45
+ v-else
46
+ @click="openEditMode">
47
+ <a-icon :style="iconStyle" type="edit"/>行编辑
48
+ </a-button>
49
+ </template>
50
+ <a-button
51
+ v-if="buttonState.delete && buttonRendering('delete')"
52
+ :disabled="!isDelete"
53
+ type="danger"
54
+ @click="deleteItem">
55
+ <a-icon :style="iconStyle" type="delete"/>删除
56
+ </a-button>
57
+ <a-button
58
+ v-if="buttonState.import && buttonRendering('import')"
59
+ type="dashed"
60
+ @click="importData">
61
+ <a-icon :style="iconStyle" type="import"/>导入
62
+ </a-button>
63
+ <a-dropdown v-if="!buttonState || buttonState.export && buttonRendering('export')">
64
+ <a-menu slot="overlay">
65
+ <a-menu-item :disabled="selectedRowKeys.length === 0" key="1" @click="handleExport('selected')"><a-icon
66
+ :style="iconStyle"
67
+ type="ordered-list"/>导出选中数据</a-menu-item>
68
+ <a-menu-item key="2" @click="handleExport('curPage')"><a-icon :style="iconStyle" type="snippets"/>导出本页数据</a-menu-item>
69
+ <a-menu-item key="3" @click="handleExport('exportByQuery')"><a-icon :style="iconStyle" type="download"/>导出所有符合条件的数据</a-menu-item>
70
+ </a-menu>
71
+ <a-button>导出 <a-icon type="down" :style="iconStyle"/> </a-button>
72
+ </a-dropdown>
73
+ <a-dropdown v-if="!buttonState || buttonState.print && buttonRendering('print')">
74
+ <a-menu slot="overlay">
75
+ <a-menu-item :disabled="selectedRowKeys.length === 0" key="1" @click="handlePrint('selected')"><a-icon
76
+ :style="iconStyle"
77
+ type="ordered-list"/>打印选中数据</a-menu-item>
78
+ <a-menu-item key="2" @click="handlePrint('curPage')"><a-icon :style="iconStyle" type="snippets"/>打印本页数据</a-menu-item>
79
+ <a-menu-item key="3" @click="handlePrint('exportByQuery')"><a-icon :style="iconStyle" type="download"/>打印所有符合条件的数据</a-menu-item>
80
+ </a-menu>
81
+ <a-button>打印 <a-icon type="printer" :style="iconStyle"/> </a-button>
82
+ </a-dropdown>
83
+ <!-- 遍历按钮配置数组,动态生成按钮 -->
84
+ <a-button
85
+ v-for="(button, index) in editButtonStateData"
86
+ :key="index"
87
+ :type="button.type || 'dashed'"
88
+ @click="editButtonStateDataClick(index)"
89
+ class="btn-success"
90
+ >
91
+ <a-icon type="dashed" :style="iconStyle"/>
92
+ {{ button.buttonName }}
93
+ </a-button>
94
+ <a-button
95
+ v-if="allowedCardMode && !simpleMode"
96
+ @click="changeViewMode"
97
+ :type="isTableMode ? '' : 'primary'">
98
+ 看板模式
99
+ </a-button>
100
+ <a-badge
101
+ v-if="selectRowMode === 'listView'"
102
+ :count="selectedRows.length"
103
+ :number-style="{ backgroundColor:theme.color }"
104
+ >
105
+ <a-button
106
+ type="dashed"
107
+ @click="showTempData">
108
+ <a-icon :style="iconStyle" type="monitor"/>已选择
109
+ </a-button>
110
+ </a-badge>
111
+ <!-- 头部附加栅格 -->
112
+ <x-report
113
+ v-if="attachGrid"
114
+ :env="env"
115
+ :isWidget="true"
116
+ :use-oss-for-img="false"
117
+ :config-name="attachGrid"
118
+ :show-img-in-cell="true"
119
+ :display-only="true"
120
+ :edit-mode="false"
121
+ :show-save-button="false"
122
+ :dont-format="true"/>
123
+
124
+ <slot name="button" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
125
+ </a-space>
126
+
127
+ </span>
128
+ </a-col>
129
+ <a-col v-show="showRightTools && !simpleMode">
130
+ <span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">
131
+ <a-button-group>
132
+ <slot name="rightBtnExpand" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
133
+ <a-tooltip title="汇总" placement="bottom">
134
+ <a-button @click="showDrawer">
135
+ <a-icon :style="iconStyle" type="project"/>
136
+ </a-button>
137
+ </a-tooltip>
138
+ <a-tooltip title="重新查询" placement="bottom">
139
+ <a-button @click="refresh(true)">
140
+ <a-icon :style="iconStyle" type="reload"/>
141
+ </a-button>
142
+ </a-tooltip>
143
+ <a-tooltip title="列展示/排序" placement="bottom">
144
+ <table-setting v-if="columnSelectLoaded" v-model="tableColumns"/>
145
+ </a-tooltip>
146
+ </a-button-group>
147
+ </span>
148
+ </a-col>
149
+ </a-row>
150
+ <!-- 如果当前是表格模式 -->
151
+ <template v-if="isTableMode">
152
+ <x-table-wrapper ref="table">
153
+ <template slot="footer">
154
+ <slot
155
+ name="footer"
156
+ :selectedRowKeys="selectedRowKeys"
157
+ :selectedRows="selectedRows"></slot>
158
+ </template>
159
+ </x-table-wrapper>
160
+ </template>
161
+ <!-- 如果当前是看板模式 -->
162
+ <template v-else>
163
+ <XDataCard
164
+ ref="table"
165
+ @cardEmit="handleCardEmit"
166
+ :tableColumns="tableColumns"
167
+ :card-config="cardModeConfig"
168
+ :show-pagination="!simpleMode"
169
+ :prePageSize="simpleMode ? 1000 : undefined"
170
+ :serviceName="serviceName"
171
+ :card-data="loadData"
172
+ :env="env"
173
+ :createdQuery="createdQuery"
174
+ :simple-mode="simpleMode"/>
175
+ </template>
176
+ <!-- 上传文件 -->
177
+ <a-drawer
178
+ title="汇总信息"
179
+ placement="right"
180
+ :closable="false"
181
+ :visible="summaryDrawerVisible"
182
+ :z-index="2000"
183
+ :width="`${summaryDrawerWidth}vw`"
184
+ :after-visible-change="afterVisibleChange"
185
+ @close="onClose"
186
+ >
187
+ <template>
188
+ <a-row>
189
+ <a-col :span="8" v-for="(f,index) in summaryData" :key="index">
190
+ <a-statistic
191
+ :title="f.title + ':'"
192
+ :value="f.value"
193
+ :precision="2">
194
+ <template #prefix>
195
+ <a-spin :spinning="f.loading">
196
+ </a-spin>
197
+ </template>
198
+ <template #suffix>
199
+ <a-icon
200
+ v-show="!f.loading"
201
+ :type="f.success !== false ? 'check-circle' : 'close-circle'"
202
+ :style="{color: f.success !== false ? 'green' : 'red'}"/>
203
+ </template>
204
+ </a-statistic>
205
+ </a-col>
206
+ <a-col
207
+ :span="item.span"
208
+ v-for="(item,index) in chartsConfigArray"
209
+ :key="index"
210
+ style="height: 20rem; margin-bottom: 3rem">
211
+ <div class="custom-chart-title" v-if="item.config.title">{{ item.config.title }}</div>
212
+ <div class="custom-chart-desc" v-if="item.config.description">{{ item.config.description }}</div>
213
+ <g2Charts
214
+ :key="index"
215
+ :chatsKey="index"
216
+ :is-dev="env === 'dev'"
217
+ :config="item.config"
218
+ :requestParameters="requestParameters"/>
219
+ </a-col>
220
+ </a-row>
221
+ </template>
222
+ </a-drawer>
223
+ <x-import-excel
224
+ ref="importExcel"
225
+ @ok="importExcelOk"
226
+ :title="title"
227
+ :service-name="serviceName"
228
+ :env="env"
229
+ :query-params-name="queryParamsName"
230
+ >
231
+ <template #importExcelSlot>
232
+ <slot name="importExcelSlot"></slot>
233
+ </template>
234
+ </x-import-excel>
235
+ <ExportExcel
236
+ ref="exportExcel"
237
+ />
238
+ <a-modal @cancel="$refs.table.refresh()" v-model="selectedRowModalVisible" width="80vw" title="已选中数据" :footer="null">
239
+ <x-table-wrapper ref="selectedDataTable" :load-selected-data="true"></x-table-wrapper>
240
+ </a-modal>
241
+ </div>
242
+ </template>
243
+ <script>
244
+ import { STable } from '@vue2-client/components'
245
+ import { getChangedData, setDataByRealKey } from '@vue2-client/utils/util'
246
+ import * as util from '@vue2-client/utils/util'
247
+ import TableSetting from '@vue2-client/components/TableSetting/TableSetting'
248
+ import {
249
+ query,
250
+ querySummary,
251
+ queryWithResource,
252
+ remove,
253
+ getConfigByNameAsync,
254
+ editRowSave,
255
+ runLogic
256
+ } from '@vue2-client/services/api/common'
257
+ import XImportExcel from '@vue2-client/base-client/components/common/XImportExcel'
258
+ import { Modal } from 'ant-design-vue'
259
+ import { mapState } from 'vuex'
260
+ import { executeStrFunction, executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
261
+ import debounce from 'lodash.debounce'
262
+ import XDataCard from '@vue2-client/base-client/components/common/XDataCard/XDataCard.vue'
263
+ import { getRealKeyData } from '@vue2-client/utils/formatter'
264
+ import ReportTableHome from '../../../../pages/report/ReportTableHome.vue'
265
+ import CustomFuncCel from '@vue2-client/base-client/components/common/XTable/CustomFuncCel.vue'
266
+ import ExportExcel from '@vue2-client/base-client/components/common/XTable/ExportExcel.vue'
267
+ import g2Charts from '@vue2-client/components/g2Charts/index.vue'
268
+ import moment from 'moment/moment'
269
+ import XTableWrapper from './XTableWrapper.vue'
270
+
271
+ export default {
272
+ name: 'XTable',
273
+ components: {
274
+ ExportExcel,
275
+ CustomFuncCel,
276
+ XDataCard,
277
+ TableSetting,
278
+ STable,
279
+ XImportExcel,
280
+ g2Charts,
281
+ XReport: () => import('@vue2-client/base-client/components/common/XReportGrid/XReport.vue'),
282
+ ReportTableHome,
283
+ XTableWrapper
284
+ },
285
+ inject: ['getSelf'],
286
+ provide () {
287
+ return {
288
+ tableContext: this
289
+ }
290
+ },
291
+ data () {
292
+ return {
293
+ uniqueId: `x-table-${this._uid}`, // 使用 _uid 生成唯一 ID
294
+ // 筛选列加载状态
295
+ columnSelectLoaded: false,
296
+ // 预览模式
297
+ viewMode: false,
298
+ // 本地编辑模式
299
+ localEditMode: false,
300
+ // 本地编辑表单提交方式
301
+ formSubmitTypeInLocalEditMode: 'cover',
302
+ // 本地编辑模式所用数据源
303
+ localEditModeDataSource: [],
304
+ // 本地编辑模式数据源是否已由外部加载
305
+ isLocalDataSourceLoadedExternally: false,
306
+ // 行选择模式
307
+ rowSelectMode: false,
308
+ // 行选择模式-允许选中行数量,0:任意数量行,大于0:指定值数量的行
309
+ allowSelectRowNum: 0,
310
+ // 头部附件的栅格配置名
311
+ attachGrid: '',
312
+ // 是否展示右侧工具栏
313
+ showRightTools: true,
314
+ // 是否展示左边按钮栏
315
+ showLeftOperaBtn: true,
316
+ // 加载数据方法 必须为 Promise 对象
317
+ loadData: parameter => {
318
+ // 取到表格携带的表单参数
319
+ const requestParameters = Object.assign({}, parameter)
320
+ // 取到父组件传入的表单参数
321
+ const conditionParams = {}
322
+ Object.assign(conditionParams, this.fixedQueryForm)
323
+ Object.assign(conditionParams, this.form)
324
+ // 如果传了燃气公司字段,则进行数据处理
325
+ if (conditionParams.orgName) {
326
+ requestParameters.orgName = conditionParams.orgName
327
+ delete conditionParams.orgName
328
+ }
329
+ Object.keys(conditionParams).forEach(key => {
330
+ if (Array.isArray(conditionParams[key])) {
331
+ // 检查数组中是否包含 null
332
+ const hasNull = conditionParams[key].every(item => item === '') || conditionParams[key].length === 0
333
+ // 如果包含 null,则删除该属性
334
+ if (hasNull) {
335
+ delete conditionParams[key]
336
+ }
337
+ }
338
+ })
339
+ requestParameters.conditionParams = conditionParams
340
+ requestParameters.queryParamsName = this.queryParamsName
341
+ requestParameters.queryParams = this.queryParams && Object.keys(this.queryParams).length > 0 ? this.queryParams : undefined
342
+ this.requestParameters = requestParameters
343
+ // 加载数据
344
+ return this.loadTableData(requestParameters)
345
+ },
346
+ requestParameters: {},
347
+ rowKey: undefined,
348
+ // x滚动条宽度
349
+ scrollXWidth: 1600,
350
+ // y滚动条高度
351
+ scrollYHeight: 'calc(100vh - 31rem)',
352
+ // 表格选择列Key集合
353
+ selectedRowKeys: [],
354
+ // 表格选择Row集合
355
+ selectedRows: [],
356
+ // 表格选择列Key集合
357
+ innerSelectedRowKeys: [],
358
+ // 表格选择Row集合
359
+ innerSelectedRows: [],
360
+ // 禁止表格选择Row集合
361
+ selectedDisableRows: [],
362
+ // 业务标题
363
+ title: '',
364
+ // 数据列
365
+ tableColumns: [],
366
+ // 查询用表单
367
+ form: {},
368
+ oldForm: {},
369
+ // 是否允许修改
370
+ isModify: false,
371
+ // 是否允许删除
372
+ isDelete: false,
373
+ // 是否允许选择
374
+ isChoose: false,
375
+ // 选中用于修改的id
376
+ selectId: undefined,
377
+ // 是否显示展示列抽屉
378
+ visible: false,
379
+ // 编辑按钮加载状态
380
+ editLoading: false,
381
+ // 按钮状态
382
+ buttonState: {},
383
+ // eventBtnState
384
+ eventState: {},
385
+ // 自定义按钮数组
386
+ editButtonStateData: [],
387
+ // 按钮权限
388
+ buttonPermissions: [],
389
+ // 是否展示汇总
390
+ showSummary: false,
391
+ // 自定义汇总
392
+ showCustomSummary: false,
393
+ summaryData: [],
394
+ // 图标样式
395
+ iconStyle: {
396
+ position: 'relative',
397
+ top: '1px'
398
+ },
399
+ // 当前环境
400
+ env: 'prod',
401
+ // 预览模式(表格 or 看板)
402
+ isTableMode: true,
403
+ // 汇总抽屉是否显示
404
+ summaryDrawerVisible: false,
405
+ // 汇总更新标志
406
+ summaryUpdate: false,
407
+ customSummaryArray: [],
408
+ formItems: [],
409
+ // 是否为行编辑模式
410
+ isEditMode: false,
411
+ // 定义主键
412
+ primaryKey: '',
413
+ // 是否进行初始化查询
414
+ createdQuery: false,
415
+ // 允许看板模式
416
+ allowedCardMode: false,
417
+ // 看板模式配置
418
+ cardModeConfig: undefined,
419
+ // 暂存行编辑前数据 用于比较哪些变化了才需要保存
420
+ editRowBeforeData: [],
421
+ // 是否简易模式
422
+ simpleMode: false,
423
+ // crud打印模板配置
424
+ printTemplate: false,
425
+ queryParams: {},
426
+ // 定义总行数
427
+ totalCount: 0,
428
+ user: {},
429
+ chartsConfigArray: [],
430
+ summaryDrawerWidth: 35,
431
+ // 行选择模式
432
+ selectRowMode: 'default',
433
+ tableSize: 'default',
434
+ clearSelectRowAfterQuery: false,
435
+ selectedRowModalVisible: false
436
+ }
437
+ },
438
+ props: {
439
+ // 查询配置文件名
440
+ queryParamsName: {
441
+ type: String,
442
+ default: () => {
443
+ return ''
444
+ }
445
+ },
446
+ // 查询配置文件名
447
+ serviceName: {
448
+ type: String,
449
+ default: () => {
450
+ return ''
451
+ }
452
+ },
453
+ // 查询配置文件Json
454
+ queryParamsJson: {
455
+ type: Object,
456
+ default: null
457
+ },
458
+ // 固定查询表单
459
+ fixedQueryForm: {
460
+ type: Object,
461
+ default: () => {
462
+ return {}
463
+ }
464
+ },
465
+ // 数据只有一页时是否展示分页,true:展示,auto:隐藏
466
+ showPagination: {
467
+ type: Boolean,
468
+ default: true
469
+ },
470
+ // 是否自定义删除功能
471
+ customDelete: {
472
+ type: Boolean,
473
+ default: false
474
+ },
475
+ // 自适应底部边距
476
+ extraHeight: {
477
+ type: Number,
478
+ default: 80
479
+ }
480
+ },
481
+ computed: {
482
+ ...mapState('setting', ['theme']),
483
+ rowSelection () {
484
+ return this.selectRowMode === 'disabled' ? undefined : {
485
+ selectedRowKeys: this.innerSelectedRowKeys,
486
+ onChange: this.onSelectChange,
487
+ onSelect: this.selectRowMode === 'listView' ? this.onSelect : undefined,
488
+ onSelectAll: this.selectRowMode === 'listView' ? this.onSelectAll : undefined,
489
+ getCheckboxProps: record => ({
490
+ props: {
491
+ disabled: this.selectedDisableRows.includes(record[this.rowKey]), // Column configuration not to be checked
492
+ name: record.name,
493
+ },
494
+ }),
495
+ }
496
+ },
497
+ ...mapState('account', { currUser: 'user' }),
498
+ ...mapState('setting', ['compatible'])
499
+ },
500
+ mounted () {
501
+ window.addEventListener('resize', this.handleResize)
502
+ },
503
+ beforeDestroy () {
504
+ // 销毁页面查询定时器
505
+ if (this.queryTimer) {
506
+ clearInterval(this.queryTimer)
507
+ }
508
+ window.removeEventListener('resize', this.handleResize)
509
+ },
510
+ methods: {
511
+ showTempData () {
512
+ this.selectedRowModalVisible = true
513
+ this.$nextTick(() => {
514
+ this.$refs.selectedDataTable.refresh(true)
515
+ this.$refs.selectedDataTable.updateSelect(this.selectedRowKeys, this.selectedRows)
516
+ })
517
+ },
518
+ customFunctionShow (customFunction, record, cIndex) {
519
+ return executeStrFunctionByContext(this, customFunction, [record, cIndex])
520
+ },
521
+ getConfigByNameAsync,
522
+ runLogic,
523
+ executeStrFunctionByContext,
524
+ columnClick (key, value, record) {
525
+ this.$emit('columnClick', key, value, record)
526
+ },
527
+ gotoUserDetail (key, value, record) {
528
+ this.$emit('gotoUserDetail', key, value, record)
529
+ },
530
+ // 打开行编辑
531
+ openEditMode () {
532
+ this.isEditMode = true
533
+ this.editRowBeforeData = JSON.parse(JSON.stringify(this.getTableData()))
534
+ },
535
+ // 标记行保存
536
+ editRowSave () {
537
+ // 获取最新数据
538
+ const editRowAfterData = this.getTableData()
539
+ const changeData = getChangedData(this.editRowBeforeData, editRowAfterData)
540
+ if (this.eventState?.customSave) {
541
+ this.custom('customSave', {
542
+ tableData: editRowAfterData,
543
+ changeData
544
+ })
545
+ return
546
+ }
547
+ if (changeData.length === 0) {
548
+ this.$message.info('没有数据发生变化')
549
+ } else {
550
+ Modal.confirm({
551
+ title: '是否确认保存?',
552
+ content: `此操作将保存当前行编辑的数据,共修改${changeData.length}条数据`,
553
+ zIndex: 1001,
554
+ onOk: () => {
555
+ return new Promise((resolve, reject) => {
556
+ const requestParameters = {
557
+ queryParamsName: this.queryParamsName,
558
+ changeData: changeData.map(h => getRealKeyData(h)),
559
+ operaInfo: this.currUser.operaInfo
560
+ }
561
+ editRowSave(requestParameters, this.serviceName, this.env === 'dev').then(res => {
562
+ this.$message.success('行内数据保存成功')
563
+ this.isEditMode = false
564
+ this.refresh()
565
+ resolve(res)
566
+ }).catch(e => {
567
+ reject(e)
568
+ this.$message.error('保存失败!')
569
+ })
570
+ })
571
+ },
572
+ onCancel () {
573
+ }
574
+ })
575
+ }
576
+ },
577
+ importExcelOk (data) {
578
+ this.refresh(true)
579
+ this.$emit('importExcelOk', data)
580
+ },
581
+ /**
582
+ * 行选择事件
583
+ * @param row 选中行集合
584
+ * @param attr 表单项属性
585
+ */
586
+ async rowChoose (row, attr, callback, record) {
587
+ // 如果配置了自定义函数
588
+ if (attr.dataChangeFunc) {
589
+ await executeStrFunction(attr.dataChangeFunc, [record, this.setForm, {
590
+ ...attr,
591
+ selectRows: row
592
+ }, util, this.getSelf(), this.mode, runLogic, getConfigByNameAsync])
593
+ } else {
594
+ // 默认填充选中行数据到当前表单
595
+ setDataByRealKey(record, row[0])
596
+ }
597
+ if (callback) {
598
+ callback()
599
+ }
600
+ },
601
+ setForm (record, obj) {
602
+ Object.assign(record, obj)
603
+ this.$forceUpdate()
604
+ },
605
+ handleResize () {
606
+ debounce(() => {
607
+ this.setScrollYHeight({})
608
+ }, 100)()
609
+ },
610
+ isInAModal () {
611
+ let parent = this.$parent
612
+ while (parent) {
613
+ // 检查组件名称,这里假设a-modal组件的名称为AModal,根据实际情况可能需要调整
614
+ if (parent.$options.name === 'AModal') {
615
+ return true
616
+ }
617
+ parent = parent.$parent
618
+ }
619
+ return false
620
+ },
621
+ executeStrFunction,
622
+ // 切换看板模式和表格模式
623
+ changeViewMode () {
624
+ this.isTableMode = !this.isTableMode
625
+ // 看板切换回表格模式 刷新列表
626
+ this.refresh(true)
627
+ },
628
+ /**
629
+ * 初始化表格参数
630
+ */
631
+ init (params) {
632
+ const {
633
+ // 查询参数对象, 用于没有对应查询配置文件名时
634
+ queryParams,
635
+ tableColumns,
636
+ attachGrid,
637
+ buttonState,
638
+ eventState = {},
639
+ buttonPermissions,
640
+ editButtonStateData = [],
641
+ title,
642
+ form,
643
+ tableSummaryMap = {},
644
+ customTableSummaryArray = [],
645
+ viewMode,
646
+ localEditMode,
647
+ formSubmitTypeInLocalEditMode = 'cover',
648
+ rowSelectMode,
649
+ allowSelectRowNum = 0,
650
+ formItems,
651
+ env = 'prod',
652
+ createdQuery = true,
653
+ createdEditMode = false,
654
+ primaryKey,
655
+ allowedCardMode = false,
656
+ simpleMode = false,
657
+ showRightTools = true,
658
+ cardModeConfig,
659
+ summaryUpdate,
660
+ summaryDrawerWidth = 35,
661
+ chartsConfigArray = [],
662
+ printTemplate = 'DEFAULT_CRUD_PRINT_TEMPLATE',
663
+ selectRowMode = 'default',
664
+ tableSize = 'default',
665
+ clearSelectRowAfterQuery = false
666
+ } = params
667
+ this.showSummary = Object.keys(tableSummaryMap).length > 0
668
+ if (this.showSummary) {
669
+ Object.keys(tableSummaryMap).forEach(item => {
670
+ this.summaryData.push({
671
+ key: item,
672
+ title: tableSummaryMap[item],
673
+ value: ' ',
674
+ loading: true,
675
+ success: false
676
+ })
677
+ })
678
+ }
679
+ if (customTableSummaryArray.length > 0) {
680
+ customTableSummaryArray.forEach(item => {
681
+ this.summaryData.push({
682
+ key: item.key,
683
+ title: item.title,
684
+ value: ' ',
685
+ loading: true,
686
+ success: false
687
+ })
688
+ })
689
+ this.showCustomSummary = true
690
+ this.customSummaryArray = customTableSummaryArray
691
+ }
692
+ this.queryParams = queryParams
693
+ this.tableColumns = JSON.parse(JSON.stringify(tableColumns))
694
+ if (this.tableColumns.length === 0) {
695
+ return
696
+ }
697
+ this.attachGrid = attachGrid
698
+ this.viewMode = viewMode
699
+ this.localEditMode = localEditMode
700
+ this.formSubmitTypeInLocalEditMode = formSubmitTypeInLocalEditMode
701
+ this.rowSelectMode = rowSelectMode
702
+ this.allowSelectRowNum = allowSelectRowNum
703
+ this.simpleMode = simpleMode
704
+ this.formItems = formItems
705
+ this.user = this.currUser
706
+ this.createdQuery = createdQuery
707
+ this.primaryKey = primaryKey
708
+ this.buttonState = buttonState
709
+ this.eventState = eventState
710
+ this.showRightTools = showRightTools
711
+ this.printTemplate = printTemplate
712
+ this.summaryDrawerWidth = summaryDrawerWidth
713
+ this.chartsConfigArray = chartsConfigArray
714
+ this.selectRowMode = selectRowMode
715
+ this.tableSize = tableSize
716
+ this.clearSelectRowAfterQuery = clearSelectRowAfterQuery
717
+ if (this.chartsConfigArray.length > 0) {
718
+ // 循环chartsConfigArray,将每个配置的数据请求参数赋值给requestParameters
719
+ this.chartsConfigArray.forEach(item => {
720
+ item.config.queryParams = JSON.parse(JSON.stringify(this.queryParams))
721
+ item.config.queryParamsName = this.queryParamsName
722
+ })
723
+ }
724
+ if (this.localEditMode) {
725
+ this.localEditModeDataSource = []
726
+ if (this.formSubmitTypeInLocalEditMode === 'append') {
727
+ this.isLocalDataSourceLoadedExternally = true
728
+ const defaultItem = {}
729
+ defaultItem['序号'] = 0
730
+ this.localEditModeDataSource.push(defaultItem)
731
+ } else {
732
+ this.isLocalDataSourceLoadedExternally = false
733
+ }
734
+ this.buttonState.import = false
735
+ this.buttonState.export = false
736
+ this.showRightTools = false
737
+ }
738
+ if (this.rowSelectMode) {
739
+ this.buttonState = {
740
+ choose: true
741
+ }
742
+ this.showRightTools = false
743
+ }
744
+ this.buttonPermissions = buttonPermissions
745
+ this.editButtonStateData = editButtonStateData
746
+ this.title = title
747
+ this.env = env
748
+ this.rowKey = this.getPrimaryKeyName()
749
+ this.allowedCardMode = allowedCardMode
750
+ this.cardModeConfig = cardModeConfig
751
+ this.summaryUpdate = summaryUpdate
752
+ this.isEditMode = createdEditMode
753
+ let totalWidth = 0
754
+ for (let i = 0; i < this.tableColumns.length; i++) {
755
+ const item = this.tableColumns[i]
756
+ // 设置操作列
757
+ if (item.slotType === 'action') {
758
+ item.fixed = 'right'
759
+ item.width = 70
760
+ }
761
+ // 设置表格宽度
762
+ if (item.width) {
763
+ totalWidth = totalWidth + item.width
764
+ } else {
765
+ totalWidth = totalWidth + 180
766
+ }
767
+ }
768
+ // 横向滚动长度大于所有宽度,才能实现固定表头
769
+ this.scrollXWidth = totalWidth
770
+ // 加载筛选列完成
771
+ this.columnSelectLoaded = true
772
+ this.setQueryForm(form || {})
773
+ // 简易模式,并且是看板模式,默认直接进入看板模式
774
+ if (this.allowedCardMode && this.simpleMode) {
775
+ this.isTableMode = false
776
+ }
777
+ if (params.queryInterval) {
778
+ this.queryTimer = setInterval(() => {
779
+ this.refresh()
780
+ }, params.queryInterval * 1000)
781
+ }
782
+ },
783
+ // 操作面板按钮渲染
784
+ buttonRendering (button) {
785
+ if (!this.buttonPermissions) {
786
+ return true
787
+ }
788
+ try {
789
+ const existingItem = this.buttonPermissions.find(item => item.btnName === button)
790
+ const rolestr = this.currUser.rolestr?.split(',')
791
+ if (existingItem?.state) {
792
+ const currUserRole = existingItem.roleStr
793
+ return rolestr.some(item => currUserRole && currUserRole.includes(item))
794
+ } else {
795
+ return true
796
+ }
797
+ } catch (e) {
798
+ console.error(e)
799
+ return false
800
+ }
801
+ },
802
+ // 防止查询多次点击处理
803
+ loadTableData (requestParameters) {
804
+ if (this.queryPromise) {
805
+ return this.queryPromise
806
+ }
807
+ this.queryPromise = this.loadTableDataGen(requestParameters).finally(() => {
808
+ this.queryPromise = undefined
809
+ })
810
+ return this.queryPromise
811
+ },
812
+ /**
813
+ * 加载表格数据
814
+ * @param requestParameters 请求参数
815
+ */
816
+ async loadTableDataGen (requestParameters) {
817
+ let result
818
+ if (this.localEditMode) {
819
+ if (!this.isLocalDataSourceLoadedExternally && requestParameters?.conditionParams && Object.keys(requestParameters?.conditionParams).length > 0) {
820
+ const result = await query(Object.assign(requestParameters, { userId: this.currUser?.id }),
821
+ this.serviceName, this.env === 'dev')
822
+ if (result.data) {
823
+ let no = 0
824
+ this.localEditModeDataSource = result.data.map(item => {
825
+ item['序号'] = no
826
+ no++
827
+ return item
828
+ })
829
+ }
830
+ this.isLocalDataSourceLoadedExternally = true
831
+ }
832
+ result = new Promise((resolve) => {
833
+ resolve({
834
+ data: this.localEditModeDataSource
835
+ })
836
+ })
837
+ } else {
838
+ result = query(Object.assign(requestParameters, { userId: this.currUser?.id }), this.serviceName, this.env === 'dev')
839
+ result.then(res => {
840
+ this.totalCount = res.totalCount || 0
841
+ })
842
+ }
843
+
844
+ if (this.selectRowMode === 'listView' && !this.clearSelectRowAfterQuery) {
845
+ this.$refs.table.updateSelect(this.selectedRowKeys, this.selectedRows)
846
+ } else if (this.isTableMode && !this.simpleMode) {
847
+ this.clearRowKeys()
848
+ }
849
+ this.$emit('afterQuery', result, requestParameters.conditionParams)
850
+ return result
851
+ },
852
+ /**
853
+ * 操作列事件
854
+ * @param record 本条数据
855
+ * @param actionType 操作类型
856
+ * @param func 事件默认 action
857
+ * @param index 行下标
858
+ */
859
+ action (record, actionType, func = 'action', index) {
860
+ this.$emit('action', record, record[this.getPrimaryKeyName()], actionType, func, index)
861
+ },
862
+ // 看板点击事件
863
+ handleCardEmit (data, eventName) {
864
+ this.action(data, undefined, eventName)
865
+ },
866
+ /**
867
+ * 选择列勾选改变事件
868
+ * @param record 被选择的列数据
869
+ * @param selected 是否选中
870
+ * @param selectedRows 被选择的列集合
871
+ * @param nativeEvent 原生事件
872
+ */
873
+ onSelect (record, selected, selectedRows, nativeEvent) {
874
+ if (this.selectRowMode === 'listView') {
875
+ // 获取主键数据
876
+ const primaryData = record[this.primaryKey]
877
+ // 取消勾选时
878
+ if (!selected) {
879
+ this.selectedRowKeys = this.selectedRowKeys.filter(item => item !== primaryData)
880
+ this.selectedRows = this.selectedRows.filter(item => item[this.primaryKey] !== primaryData)
881
+ }
882
+ }
883
+ },
884
+ /**
885
+ * 选择列全选事件
886
+ * @param selected 是否选中
887
+ * @param selectedRows 被选择的列集合
888
+ * @param changeRows 改变的行集合
889
+ */
890
+ onSelectAll (selected, selectedRows, changeRows) {
891
+ console.log('onSelectAll', selected, selectedRows, changeRows)
892
+ if (this.selectRowMode === 'listView') {
893
+ if (!selected) {
894
+ // 获取所有改变的key
895
+ const changeKeys = changeRows.map(item => item[this.primaryKey])
896
+ this.selectedRowKeys = this.selectedRowKeys.filter(item => !changeKeys.includes(item))
897
+ this.selectedRows = this.selectedRows.filter(item => !changeKeys.includes(item[this.primaryKey]))
898
+ }
899
+ }
900
+ },
901
+ /**
902
+ * 选择列数据改变事件
903
+ * @param selectedRowKeys 被选择的列Key集合
904
+ * @param selectedRows 被选择的列集合
905
+ */
906
+ onSelectChange (selectedRowKeys, selectedRows) {
907
+ this.innerSelectedRowKeys = selectedRowKeys
908
+ this.innerSelectedRows = selectedRows
909
+ if (this.selectRowMode === 'listView' && !this.clearSelectRowAfterQuery) {
910
+ if (this.primaryKey) {
911
+ // 找出被取消选中的行
912
+ const deselectedKeys = this.selectedRowKeys.filter(key => !selectedRowKeys.includes(key))
913
+ // 从已选中的行中移除被取消选中的行
914
+ if (deselectedKeys.length > 0) {
915
+ this.selectedRowKeys = this.selectedRowKeys.filter(key => !deselectedKeys.includes(key))
916
+ this.selectedRows = this.selectedRows.filter(row => !deselectedKeys.includes(row[this.primaryKey]))
917
+ }
918
+ // 添加新选中的行(去重)
919
+ const newSelectedKeys = selectedRowKeys.filter(key => !this.selectedRowKeys.includes(key))
920
+ const newSelectedRows = selectedRows.filter(row => newSelectedKeys.includes(row[this.primaryKey]))
921
+ this.selectedRowKeys = [...this.selectedRowKeys, ...newSelectedKeys]
922
+ this.selectedRows = [...this.selectedRows, ...newSelectedRows]
923
+ } else {
924
+ // 如果没有主键,则直接使用当前选中的行
925
+ this.selectedRowKeys = selectedRowKeys
926
+ this.selectedRows = selectedRows
927
+ }
928
+ } else {
929
+ this.selectedRowKeys = this.innerSelectedRowKeys
930
+ this.selectedRows = this.innerSelectedRows
931
+ }
932
+ this.isModify = this.innerSelectedRowKeys.length === 1
933
+ this.isDelete = this.innerSelectedRowKeys.length > 0
934
+ this.isChoose = this.allowSelectRowNum === 0 ? this.innerSelectedRowKeys.length > 0 : this.innerSelectedRowKeys.length === this.allowSelectRowNum
935
+ this.$emit('selectRow', this.selectedRowKeys, this.selectedRows)
936
+ },
937
+ /**
938
+ * 清除表格选中项
939
+ */
940
+ clearRowKeys () {
941
+ this.$refs.table.clearSelected()
942
+ },
943
+ /**
944
+ * 为表格附加查询条件
945
+ */
946
+ setQueryForm (form = {}) {
947
+ this.form = form
948
+ if (this.createdQuery) {
949
+ this.refresh(true)
950
+ } else {
951
+ this.createdQuery = true
952
+ }
953
+ },
954
+ /**
955
+ * 表格重新加载方法
956
+ * 如果参数为 true, 则强制刷新到第一页
957
+ */
958
+ refresh (bool) {
959
+ this.$nextTick(() => {
960
+ this.$refs.table.refresh(bool)
961
+ })
962
+ },
963
+ setScrollYHeight ({ extraHeight = this.extraHeight, id = this.uniqueId, type = '' }) {
964
+ this.$nextTick(() => {
965
+ setTimeout(() => {
966
+ const curDocument = window?.rawDocument || document
967
+ const innerHeight = window?.rawWindow?.innerHeight || window.innerHeight || 0
968
+ if (typeof extraHeight == 'undefined') {
969
+ // 默认底部分页32 + 边距48
970
+ extraHeight = 48 + 32
971
+ }
972
+ let tHeader = null
973
+ if (id) {
974
+ tHeader = curDocument.getElementById(id) ? curDocument.getElementById(id).getElementsByClassName('ant-table-thead')[0] : null
975
+ } else {
976
+ tHeader = curDocument.getElementsByClassName('ant-table-thead')[0]
977
+ }
978
+ // 表格内容距离顶部的距离
979
+ let tHeaderBottom = 0
980
+ if (tHeader) {
981
+ tHeaderBottom = tHeader.getBoundingClientRect().bottom
982
+ }
983
+ if (tHeaderBottom === 0) {
984
+ this.scrollYHeight = 'calc(100vh - 31rem)'
985
+ if (window.__MICRO_APP_ENVIRONMENT__) {
986
+ this.scrollYHeight = 'calc(100vh - 28.5rem)'
987
+ }
988
+ return
989
+ }
990
+
991
+ // 判断是否在 modal 中
992
+ if (this.isInAModal()) {
993
+ let modalElement = null
994
+ if (tHeader) {
995
+ modalElement = tHeader.closest('.ant-modal-body')
996
+ } else {
997
+ modalElement = curDocument.querySelector('.ant-modal-body')
998
+ }
999
+ if (modalElement) {
1000
+ const modalRect = modalElement.getBoundingClientRect()
1001
+ // 48 是 modal 通常的边距 32 是分页
1002
+ extraHeight = innerHeight - modalRect.bottom + 32 + 48
1003
+ }
1004
+ }
1005
+ if (innerHeight - (tHeaderBottom + extraHeight) < 210) {
1006
+ this.scrollYHeight = 'calc(100vh - 31rem)'
1007
+ return
1008
+ }
1009
+ // 窗体高度-表格内容顶部的高度-表格内容底部的高度
1010
+ // this.scrollYHeight = document.body.clientHeight - tHeaderBottom - extraHeight
1011
+ this.scrollYHeight = `calc(100vh - ${tHeaderBottom + extraHeight}px)`
1012
+ }, 60)
1013
+ })
1014
+ },
1015
+ /**
1016
+ * 获取主键列名称
1017
+ */
1018
+ getPrimaryKeyName () {
1019
+ if (this.primaryKey) {
1020
+ return this.primaryKey
1021
+ }
1022
+ const indexColumn = this.tableColumns.find(i => i?.slotType === 'index')
1023
+ return indexColumn ? indexColumn.dataIndex : this.tableColumns[0].dataIndex
1024
+ },
1025
+ handleExport (type) {
1026
+ this.$refs.exportExcel.handleExport(type, this.title)
1027
+ },
1028
+ handlePrint (type) {
1029
+ const printData = {
1030
+ title: this.title,
1031
+ form: this.form,
1032
+ operaInfo: this.currUser.operaInfo,
1033
+ operaTime: moment().format('YYYY-MM-DD HH:mm:ss'),
1034
+ summary: this.retrieveSummaryData
1035
+ }
1036
+ this.$refs.exportExcel.handlePrint(type, printData)
1037
+ },
1038
+ validateTableAndSyncData (currRow, defaultAppendRowData) {
1039
+ let isLastRow = false
1040
+ if (this.localEditModeDataSource.length === 0) {
1041
+ isLastRow = true
1042
+ } else if (currRow['序号'] === this.localEditModeDataSource[this.localEditModeDataSource.length - 1]['序号']) {
1043
+ isLastRow = true
1044
+ }
1045
+ if (isLastRow) {
1046
+ this.appendLocalData(defaultAppendRowData)
1047
+ }
1048
+ },
1049
+ // 新增业务
1050
+ add () {
1051
+ if (this.eventState?.customAdd) {
1052
+ this.custom('customAdd', {})
1053
+ return
1054
+ }
1055
+ if (this.localEditMode && this.isEditMode) {
1056
+ this.appendLocalData({})
1057
+ } else {
1058
+ this.$emit('add')
1059
+ }
1060
+ },
1061
+ // 添加业务
1062
+ move () {
1063
+ this.$emit('move')
1064
+ },
1065
+ // 通用事件业务
1066
+ custom (func) {
1067
+ this.$emit('customEvent', func)
1068
+ },
1069
+ // 编辑业务
1070
+ edit (id) {
1071
+ this.editLoading = true
1072
+ this.getEditData(id).then(modifyModelData => {
1073
+ if (this.eventState?.customEdit) {
1074
+ this.custom('customEdit', { id, modifyModelData })
1075
+ return
1076
+ }
1077
+ this.$emit('edit', modifyModelData)
1078
+ this.editLoading = false
1079
+ })
1080
+ },
1081
+ // 行选择业务
1082
+ choose () {
1083
+ if (this.isChoose) {
1084
+ // 如果配置了自定义函数
1085
+ this.$emit('rowChoose', this.selectedRows)
1086
+ } else {
1087
+ this.$message.warning(this.allowSelectRowNum === 0 ? '请选择数据' : `请选择${this.allowSelectRowNum}条数据`)
1088
+ }
1089
+ },
1090
+ // 自定义按钮点击
1091
+ editButtonStateDataClick (index) {
1092
+ this.$emit('editButtonStateDataClick', this.editButtonStateData[index].functionName, this.selectedRows)
1093
+ },
1094
+ // 获取被编辑的数据
1095
+ getEditData (id) {
1096
+ if (!id) {
1097
+ this.selectId = this.selectedRowKeys[0]
1098
+ } else {
1099
+ this.selectId = id
1100
+ }
1101
+ const primaryKeyName = this.getPrimaryKeyName()
1102
+ if (this.tableColumns[0].dataIndex !== primaryKeyName) {
1103
+ this.selectId = this.selectedRows[0][primaryKeyName]
1104
+ }
1105
+ // 将更新需要的主键值加入到primaryKeyData中
1106
+ const primaryKeyData = {}
1107
+ primaryKeyData[primaryKeyName] = this.selectId
1108
+ if (this.localEditMode) {
1109
+ return new Promise((resolve) => {
1110
+ const modifyData = this.getDataByRowKeyValue(this.selectId)
1111
+ resolve({
1112
+ data: modifyData,
1113
+ primaryKeyData: primaryKeyData
1114
+ })
1115
+ })
1116
+ }
1117
+ const requestParameters = {
1118
+ queryParamsName: this.queryParamsName,
1119
+ queryParams: this.queryParams && Object.keys(this.queryParams).length > 0 ? this.queryParams : undefined,
1120
+ conditionParams: {},
1121
+ pageNo: 1,
1122
+ pageSize: 1
1123
+ }
1124
+ requestParameters.conditionParams[primaryKeyName] = this.selectId
1125
+ requestParameters.f_businessid = this.selectId
1126
+ return queryWithResource(requestParameters, this.serviceName, this.env === 'dev').then(res => {
1127
+ return { data: res.data[0], primaryKeyData: primaryKeyData, images: res.images, files: res.files }
1128
+ })
1129
+ },
1130
+ // 删除业务
1131
+ deleteItem () {
1132
+ if (this.viewMode) {
1133
+ this.$message.info('预览模式禁止删除')
1134
+ return
1135
+ }
1136
+ Modal.confirm({
1137
+ title: '提示',
1138
+ content: '您本次要删除共' + this.selectedRowKeys.length + '条数据,确定操作吗?',
1139
+ zIndex: 1001,
1140
+ onOk: () => {
1141
+ const requestParameters = {
1142
+ queryParamsName: this.queryParamsName,
1143
+ idList: this.selectedRowKeys
1144
+ }
1145
+ if (this.eventState?.customDelete) {
1146
+ this.custom('customDelete', {
1147
+ selectedRowKeys: this.selectedRowKeys,
1148
+ selectedRows: this.selectedRows
1149
+ })
1150
+ return
1151
+ }
1152
+ return new Promise((resolve, reject) => {
1153
+ if (this.localEditMode) {
1154
+ this.localEditModeDataSource = this.getLocalData().filter(item => !this.selectedRowKeys.includes(item[this.rowKey]))
1155
+ resolve(200)
1156
+ this.$message.success('删除成功!')
1157
+ this.refresh(true)
1158
+ // afterDelete
1159
+ this.$emit('afterDelete', requestParameters)
1160
+ } else if (this.customDelete) {
1161
+ this.$emit('del', this.selectedRows, resolve)
1162
+ } else {
1163
+ remove(requestParameters, this.serviceName, this.env === 'dev').then(res => {
1164
+ resolve(res)
1165
+ this.$message.success('删除成功!')
1166
+ this.refresh(true)
1167
+ // afterDelete
1168
+ this.$emit('afterDelete', requestParameters)
1169
+ }).catch(e => {
1170
+ reject(e)
1171
+ this.$message.error('删除失败!')
1172
+ })
1173
+ }
1174
+ })
1175
+ },
1176
+ onCancel () {
1177
+ }
1178
+ })
1179
+ },
1180
+ // 导入业务
1181
+ importData () {
1182
+ this.$refs.importExcel.importExcelHandleOpen()
1183
+ },
1184
+ afterVisibleChange (val) {
1185
+ if (val) {
1186
+ this.retrieveSummaryData()
1187
+ }
1188
+ },
1189
+ async retrieveSummaryData () {
1190
+ const promises = []
1191
+
1192
+ if (this.requestParameters.querySummary) {
1193
+ const querySummaryPromise = querySummary(Object.assign(this.requestParameters, { userId: this.currUser?.id }), this.serviceName, this.env === 'dev')
1194
+ .then(res => {
1195
+ if (this.compatible === 'V3') {
1196
+ res = res.data
1197
+ }
1198
+ if (res.length > 0) {
1199
+ this.summaryData.forEach(item => {
1200
+ res.forEach(summary => {
1201
+ if (item.title === summary.title) {
1202
+ item.value = summary.value
1203
+ item.success = true
1204
+ item.loading = false
1205
+ }
1206
+ })
1207
+ })
1208
+ }
1209
+ })
1210
+ promises.push(querySummaryPromise)
1211
+ }
1212
+
1213
+ if (this.showCustomSummary) {
1214
+ this.customSummaryArray.forEach(item => {
1215
+ const runLogicPromise = runLogic(item.source, Object.assign(this.requestParameters, { userId: this.currUser?.id }), this.serviceName, this.env === 'dev')
1216
+ .then(res => {
1217
+ this.summaryData.forEach(summary => {
1218
+ if (item.key === summary.key) {
1219
+ summary.value = res.value
1220
+ summary.success = true
1221
+ summary.loading = false
1222
+ }
1223
+ })
1224
+ })
1225
+ .catch(e => {
1226
+ this.summaryData.forEach(summary => {
1227
+ if (item.key === summary.key) {
1228
+ summary.value = 0
1229
+ summary.success = false
1230
+ summary.loading = false
1231
+ }
1232
+ })
1233
+ })
1234
+ promises.push(runLogicPromise)
1235
+ })
1236
+ }
1237
+
1238
+ await Promise.all(promises)
1239
+ return this.summaryData
1240
+ },
1241
+ showDrawer () {
1242
+ if (this.summaryUpdate) {
1243
+ this.summaryData.forEach(item => {
1244
+ item.loading = true
1245
+ item.success = false
1246
+ item.value = ' '
1247
+ })
1248
+ this.summaryDrawerVisible = true
1249
+ } else {
1250
+ this.$message.warning('请查询后再来查看')
1251
+ }
1252
+ },
1253
+ onClose () {
1254
+ this.summaryDrawerVisible = false
1255
+ },
1256
+ // 获取表格内所有数据
1257
+ getTableData () {
1258
+ return this.$refs.table.localDataSource
1259
+ },
1260
+ // 设置表格内数据
1261
+ setTableData (data) {
1262
+ if (this.localEditMode) {
1263
+ // 本地编辑模式下,需要修改 localEditModeDataSource
1264
+ this.localEditModeDataSource = data.map((item, index) => ({
1265
+ ...item,
1266
+ 序号: index + 1
1267
+ }))
1268
+ this.$nextTick(() => {
1269
+ this.$refs.table?.refresh()
1270
+ })
1271
+ } else {
1272
+ // 普通模式
1273
+ this.$nextTick(() => {
1274
+ if (this.$refs.table) {
1275
+ this.$refs.table.setLocalDataSource(data)
1276
+ }
1277
+ })
1278
+ }
1279
+ },
1280
+ // 获取所有本地数据
1281
+ getLocalData () {
1282
+ return this.localEditModeDataSource
1283
+ },
1284
+ // 获取指定rowKey的value的本地数据
1285
+ getDataByRowKeyValue (rowKeyValue) {
1286
+ return this.getLocalData().find(item => {
1287
+ return item[this.rowKey] === rowKeyValue
1288
+ })
1289
+ },
1290
+ // 修改本地数据
1291
+ modifyLocalData (rowKeyValue, data) {
1292
+ const modifyItem = this.getDataByRowKeyValue(rowKeyValue)
1293
+ if (modifyItem) {
1294
+ Object.assign(modifyItem, data)
1295
+ }
1296
+ },
1297
+ // 追加本地数据
1298
+ appendLocalData (item) {
1299
+ if (this.localEditModeDataSource.length === 0) {
1300
+ item['序号'] = 1
1301
+ } else {
1302
+ item['序号'] = this.localEditModeDataSource[this.localEditModeDataSource.length - 1]['序号'] + 1
1303
+ }
1304
+ this.localEditModeDataSource.push(item)
1305
+ }
1306
+ }
1307
+ }
1308
+ </script>
1309
+ <style lang="less" scoped>
1310
+
1311
+ .custom-chart-title {
1312
+ font-size: 16px;
1313
+ font-weight: 700;
1314
+ margin-bottom: 8px;
1315
+ }
1316
+
1317
+ .custom-chart-desc {
1318
+ font-size: 12px;
1319
+ color: rgba(0, 0, 0, .45);
1320
+ margin-bottom: 16px;
1321
+ }
1322
+
1323
+ :deep(.ant-table-thead > tr > th) {
1324
+ font-weight: 600;
1325
+ }
1326
+
1327
+ :deep(.table-wrapper .ant-pagination) {
1328
+ display: flex;
1329
+ flex-direction: row;
1330
+ align-items: center;
1331
+ padding: 0;
1332
+ }
1333
+
1334
+ :deep(.table-wrapper .ant-pagination .ant-pagination-total-text) {
1335
+ white-space: nowrap;
1336
+ }
1337
+
1338
+ :deep(.ant-table td) {
1339
+ white-space: nowrap;
1340
+ }
1341
+
1342
+ .footer_sum_title {
1343
+ color: @primary-color;
1344
+ font-weight: bold;
1345
+ }
1346
+
1347
+ .footer_sum_item {
1348
+ white-space: nowrap;
1349
+ }
1350
+
1351
+ .ant-btn-hover {
1352
+ border-color: @primary-color;
1353
+ color: @primary-color;
1354
+ }
1355
+
1356
+ .innerTable {
1357
+ :deep(.ant-form-item) {
1358
+ margin: 0;
1359
+ }
1360
+ }
1361
+ </style>