vue2-client 1.17.44 → 1.17.45

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 (349) hide show
  1. package/.claude/settings.local.json +20 -20
  2. package/.cursorrules +19 -19
  3. package/.env.apply +19 -19
  4. package/.env.gaslink +19 -19
  5. package/.env.his +19 -19
  6. package/.env.liuli +20 -20
  7. package/.env.scada +19 -19
  8. package/.eslintrc.js +90 -90
  9. package/.serena/memories/code_style_conventions.md +217 -217
  10. package/.serena/memories/project_overview.md +54 -54
  11. package/.serena/memories/project_structure.md +329 -329
  12. package/.serena/memories/suggested_commands.md +127 -127
  13. package/.serena/memories/task_completion_checklist.md +183 -183
  14. package/.serena/memories/tech_stack.md +94 -94
  15. package/CHANGELOG.md +830 -830
  16. package/CLAUDE.md +97 -97
  17. package/Components.md +60 -60
  18. package/docs/LowCode/lowcode.md +155 -155
  19. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  20. package/docs/index.md +30 -30
  21. package/index.js +31 -31
  22. package/jest-transform-stub.js +8 -8
  23. package/jest.setup.js +7 -7
  24. package/jsconfig.json +19 -19
  25. package/package.json +1 -1
  26. package/public/his/editor/editor.html +51 -51
  27. package/public/his/editor/mock/bind_data.html +779 -779
  28. package/public/his/editor/mock/data_table.html +40 -40
  29. package/public/his/editor/mock/sign.html +75 -75
  30. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  31. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  32. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  33. package/public/his/editor/vender/date97/calendar.js +4 -4
  34. package/public/his/editor/vender/date97/lang/en.js +13 -13
  35. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  36. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  37. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  38. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  39. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  40. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  41. package/public/his/editor/vender/diff.js +1627 -1627
  42. package/public/his/editor/vender/editor.js +1 -1
  43. package/public/his/editor/vender/fabric.js +31187 -31187
  44. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  45. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  46. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  47. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  48. package/public/his/editor/vender/mui/mui.min.css +4 -4
  49. package/public/his/editor/vender/mui/mui.min.js +5 -5
  50. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  51. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  52. package/public/his/editor/vender/qrcode.js +7 -7
  53. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  54. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  55. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  56. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  57. package/public/his/editor/vender/validator.js +5094 -5094
  58. package/public/his/editor/vender/weui/weui.css +5659 -5659
  59. package/public/his/editor/vender/weui/weui.min.css +4 -4
  60. package/public/his/editor/vender/weui/weui.min.js +11 -11
  61. package/src/assets/img/paymentMethod/icon1.png +0 -0
  62. package/src/assets/img/paymentMethod/icon2.png +0 -0
  63. package/src/assets/img/paymentMethod/icon3.png +0 -0
  64. package/src/assets/img/paymentMethod/icon4.png +0 -0
  65. package/src/assets/img/paymentMethod/icon5.png +0 -0
  66. package/src/assets/img/paymentMethod/icon6.png +0 -0
  67. package/src/assets/img/paymentMethod/package.info +1 -1
  68. package/src/assets/img/querySlotDemo.svg +15 -15
  69. package/src/assets/svg/badtwo.svg +1 -1
  70. package/src/assets/svg/goodtwo.svg +1 -1
  71. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  72. package/src/base-client/components/AI/demo.vue +31 -31
  73. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  74. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  75. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  76. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  77. package/src/base-client/components/common/CitySelect/index.js +3 -3
  78. package/src/base-client/components/common/CitySelect/index.md +109 -109
  79. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  80. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  81. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  82. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  83. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  84. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  85. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  86. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  87. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  88. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  89. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  90. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  91. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  92. package/src/base-client/components/common/HIS/demo.vue +61 -61
  93. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  94. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  95. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  96. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  97. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  98. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  99. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  100. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  101. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  102. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  103. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  104. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  105. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  106. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  107. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  108. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  109. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  110. package/src/base-client/components/common/Recording/index.js +3 -3
  111. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  112. package/src/base-client/components/common/Tree/index.js +2 -2
  113. package/src/base-client/components/common/Upload/index.js +3 -3
  114. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  115. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  116. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +304 -304
  117. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  118. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  119. package/src/base-client/components/common/XAddReport/index.js +3 -3
  120. package/src/base-client/components/common/XAddReport/index.md +56 -56
  121. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  122. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  123. package/src/base-client/components/common/XButtons/index.js +3 -3
  124. package/src/base-client/components/common/XButtons/index.md +61 -61
  125. package/src/base-client/components/common/XCalendar/XCalendar.vue +4 -4
  126. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  127. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  128. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  129. package/src/base-client/components/common/XDataCard/index.js +3 -3
  130. package/src/base-client/components/common/XDataCard/index.md +1 -1
  131. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  132. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  133. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  134. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  135. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  136. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  137. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  138. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  139. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  140. package/src/base-client/components/common/XForm/index.md +178 -178
  141. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  142. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  143. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  144. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  145. package/src/base-client/components/common/XFormTable/XFormTable.vue +1093 -1093
  146. package/src/base-client/components/common/XFormTable/demo.vue +113 -113
  147. package/src/base-client/components/common/XFormTable/index.md +92 -92
  148. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  149. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  150. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  151. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  152. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  153. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  154. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  155. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  156. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  157. package/src/base-client/components/common/XPrint/index.vue +97 -97
  158. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  159. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  160. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  161. package/src/base-client/components/common/XReport/index.js +3 -3
  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/XReportTrGroup.vue +6 -3
  165. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  166. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  167. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  168. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  169. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  170. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  171. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  172. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  173. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  174. package/src/base-client/components/common/XStepView/index.js +3 -3
  175. package/src/base-client/components/common/XStepView/index.md +31 -31
  176. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  177. package/src/base-client/components/common/XTab/index.js +3 -3
  178. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  179. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  180. package/src/base-client/components/common/XTable/XTableWrapper.vue +732 -732
  181. package/src/base-client/components/common/XTable/index.md +255 -255
  182. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  183. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  184. package/src/base-client/components/common/XTree/index.js +3 -3
  185. package/src/base-client/components/common/XTree/index.md +36 -36
  186. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  187. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  188. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  189. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  190. package/src/base-client/components/his/HChart/HChart.vue +493 -493
  191. package/src/base-client/components/his/HChart/demo.vue +88 -88
  192. package/src/base-client/components/his/HChart/index.md +798 -798
  193. package/src/base-client/components/his/XCharge/XChargeDemo.vue +145 -145
  194. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  195. package/src/base-client/components/his/XIcon/XIcon.vue +73 -73
  196. package/src/base-client/components/his/XIcon/index.js +3 -3
  197. package/src/base-client/components/his/XIcon/index.md +177 -177
  198. package/src/base-client/components/index.js +51 -51
  199. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  200. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  201. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  202. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  203. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  204. package/src/base-client/plugins/Config.js +19 -19
  205. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  206. package/src/base-client/plugins/Recording.js +258 -258
  207. package/src/base-client/plugins/index.js +23 -23
  208. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  209. package/src/components/Charts/Bar.vue +62 -62
  210. package/src/components/Charts/ChartCard.vue +134 -134
  211. package/src/components/Charts/Liquid.vue +67 -67
  212. package/src/components/Charts/MiniArea.vue +39 -39
  213. package/src/components/Charts/MiniBar.vue +39 -39
  214. package/src/components/Charts/MiniProgress.vue +75 -75
  215. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  216. package/src/components/Charts/Radar.vue +68 -68
  217. package/src/components/Charts/RankList.vue +77 -77
  218. package/src/components/Charts/TagCloud.vue +113 -113
  219. package/src/components/Charts/TransferBar.vue +64 -64
  220. package/src/components/Charts/Trend.vue +82 -82
  221. package/src/components/Charts/chart.less +12 -12
  222. package/src/components/Charts/smooth.area.less +13 -13
  223. package/src/components/CodeMirror/inedx.vue +118 -118
  224. package/src/components/CodeMirror/setting.js +40 -40
  225. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  226. package/src/components/NumberInfo/index.js +3 -3
  227. package/src/components/NumberInfo/index.less +54 -54
  228. package/src/components/NumberInfo/index.md +43 -43
  229. package/src/components/card/ChartCard.vue +79 -79
  230. package/src/components/chart/Bar.vue +60 -60
  231. package/src/components/chart/MiniArea.vue +67 -67
  232. package/src/components/chart/MiniBar.vue +59 -59
  233. package/src/components/chart/MiniProgress.vue +57 -57
  234. package/src/components/chart/Radar.vue +80 -80
  235. package/src/components/chart/RankingList.vue +60 -60
  236. package/src/components/chart/Trend.vue +79 -79
  237. package/src/components/chart/index.less +9 -9
  238. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  239. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  240. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  241. package/src/components/checkbox/index.js +9 -9
  242. package/src/components/exception/ExceptionPage.vue +70 -70
  243. package/src/components/g2Charts/constants.js +202 -202
  244. package/src/components/g2Charts/demo.vue +808 -808
  245. package/src/components/g2Charts/designer.vue +228 -228
  246. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  247. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  248. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  249. package/src/components/g2Charts/index.vue +397 -397
  250. package/src/components/index.js +36 -36
  251. package/src/components/input/IInput.vue +66 -66
  252. package/src/components/menu/SideMenu.vue +75 -75
  253. package/src/components/menu/menu.js +273 -273
  254. package/src/components/setting/Setting.vue +234 -234
  255. package/src/components/tool/AStepItem.vue +60 -60
  256. package/src/config/CreateQueryConfig.js +325 -325
  257. package/src/config/default/antd.config.js +89 -89
  258. package/src/config/default/setting.config.js +55 -55
  259. package/src/font-style/font.css +60 -60
  260. package/src/layouts/CommonLayout.vue +56 -56
  261. package/src/layouts/PageLayout.vue +151 -151
  262. package/src/layouts/SinglePageView.vue +136 -136
  263. package/src/layouts/header/AdminHeader.vue +132 -132
  264. package/src/layouts/header/HeaderNotice.vue +177 -177
  265. package/src/layouts/header/InstitutionDetail.vue +181 -181
  266. package/src/layouts/tabs/TabsHead.vue +189 -189
  267. package/src/lib.js +1 -1
  268. package/src/mock/extend/index.js +84 -84
  269. package/src/mock/goods/index.js +108 -108
  270. package/src/pages/DefaultExample/index.vue +77 -77
  271. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  272. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  273. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  274. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  275. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  276. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  277. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  278. package/src/pages/DynamicStatistics/index.vue +282 -282
  279. package/src/pages/Example/childIndex.vue +15 -15
  280. package/src/pages/Example/index.vue +30 -30
  281. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  282. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  283. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  284. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  285. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  286. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  287. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  288. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  289. package/src/pages/Recording/index.vue +77 -77
  290. package/src/pages/ServiceReview/index.vue +284 -284
  291. package/src/pages/SubExample/index.vue +26 -26
  292. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  293. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1815 -1815
  294. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +1014 -1014
  295. package/src/pages/XReportView/index.vue +64 -64
  296. package/src/pages/XTreeOneProExample/index.vue +67 -67
  297. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  298. package/src/pages/login/Login.vue +379 -379
  299. package/src/pages/login/LoginV3.vue +389 -389
  300. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  301. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  302. package/src/pages/report/ReportTable.js +124 -124
  303. package/src/pages/resourceManage/orgListManage.vue +98 -98
  304. package/src/pages/system/dictionary/index.vue +44 -44
  305. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  306. package/src/pages/system/monitor/operLog/index.vue +37 -37
  307. package/src/pages/system/settings/modifyPassword.vue +117 -117
  308. package/src/pages/system/ticket/index.vue +480 -480
  309. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  310. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  311. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  312. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  313. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  314. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  315. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  316. package/src/plugins/EventLogPlugin.js +33 -33
  317. package/src/plugins/FindParentsData.js +17 -17
  318. package/src/services/DataModel.js +30 -30
  319. package/src/services/LodopFuncs.js +137 -137
  320. package/src/services/api/TicketDetailsViewApi.js +46 -46
  321. package/src/services/api/cas.js +79 -79
  322. package/src/services/api/entity.js +18 -18
  323. package/src/services/api/index.js +17 -17
  324. package/src/store/modules/account.js +121 -121
  325. package/src/store/modules/index.js +5 -5
  326. package/src/store/modules/lowCode.js +33 -33
  327. package/src/store/modules/setting.js +119 -119
  328. package/src/theme/default/style.less +58 -58
  329. package/src/theme/global.less +313 -313
  330. package/src/utils/authority-utils.js +85 -85
  331. package/src/utils/errorCode.js +6 -6
  332. package/src/utils/formatter.js +74 -74
  333. package/src/utils/htmlToPDF.js +108 -108
  334. package/src/utils/htmlToPDFApi.js +5 -5
  335. package/src/utils/login.js +188 -188
  336. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  337. package/src/utils/lowcode/lowcodeLog.js +29 -29
  338. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  339. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  340. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  341. package/src/utils/map-utils.js +47 -47
  342. package/src/utils/reg.js +95 -95
  343. package/src/utils/runEvalFunction.js +14 -14
  344. package/src/utils/theme-color-replacer-extend.js +92 -92
  345. package/src/utils/util.js +329 -329
  346. package/src/utils/waterMark.js +31 -31
  347. package/src-base-client/components/his/XCharge/README.md +0 -0
  348. package/src-base-client/components/his/XCharge/XCharge.vue +0 -0
  349. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,493 +1,493 @@
1
- <template>
2
- <div class="h-chart-configurable" :class="wrapperClassObject">
3
- <x-title v-if="chartTitle" v-bind="xTitleAttrs" :title="chartTitle" />
4
- <!-- 图表挂载容器 -->
5
- <div ref="chartRef" class="chart-canvas" :style="chartStyle"></div>
6
- </div>
7
- </template>
8
-
9
- <script setup>
10
- import { ref, watch, onMounted, computed, useAttrs, onBeforeUnmount, nextTick } from 'vue'
11
- import * as echarts from 'echarts/core'
12
- import { BarChart, LineChart, PieChart } from 'echarts/charts'
13
- import { TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'
14
- import { CanvasRenderer } from 'echarts/renderers'
15
- import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
16
- import XTitle from '../XTitle/XTitle.vue'
17
- // 注册常用图表类型,避免每次重复导入
18
- echarts.use([BarChart, LineChart, PieChart, TooltipComponent, LegendComponent, GridComponent, CanvasRenderer])
19
-
20
- const props = defineProps({
21
- // 配置名称(用于查询配置)
22
- queryParamsName: {
23
- type: String,
24
- default: ''
25
- },
26
- // 服务名
27
- serviceName: {
28
- type: String,
29
- default: 'af-his'
30
- },
31
- // 固定查询参数
32
- fixedQueryForm: {
33
- type: Object,
34
- default: () => ({ condition: '1=1' })
35
- },
36
- config: {
37
- type: Object,
38
- default: null
39
- }
40
- })
41
-
42
- const emit = defineEmits(['dataLoaded', 'error', 'update:fixedQueryForm'])
43
-
44
- const chartRef = ref(null)
45
- let chartInstance = null
46
- const chartConfig = ref(null)
47
- const chartData = ref([])
48
- const loading = ref(false)
49
- let resizeObserver = null
50
-
51
- // 记录上一次的 queryParamsName,用于比较变化
52
- const lastQueryParamsName = ref('')
53
-
54
- const chartTitle = computed(() => {
55
- if (props.config?.xtitle) return props.config.xtitle
56
- if (chartConfig.value?.xtitle) return chartConfig.value.xtitle
57
- return ''
58
- })
59
- const xTitleAttrs = computed(() => {
60
- if (props.config?.xtitleAttrs) return props.config.xtitleAttrs
61
- if (chartConfig.value?.xtitleAttrs) return chartConfig.value.xtitleAttrs
62
- return {}
63
- })
64
- const chartStyle = computed(() => {
65
- const target = props.config ?? chartConfig.value ?? {}
66
- if (target.style && typeof target.style === 'object') return target.style
67
- return {}
68
- })
69
-
70
- const attrs = useAttrs()
71
- const wrapperClassObject = computed(() => {
72
- const a = attrs
73
- const classes = {}
74
-
75
- // 通用布尔样式开关(以存在/空字符串/'true' 为真)
76
- const booleanStyleKeys = [
77
- 'show-border',
78
- 'border-hide-left',
79
- 'border-hide-right'
80
- ]
81
- for (const key of booleanStyleKeys) {
82
- const val = a[key]
83
- const truthy = val === true || val === '' || val === 'true'
84
- if (truthy) classes[`h-chart-${key}`] = true
85
- }
86
-
87
- return classes
88
- })
89
-
90
- // 常用图表预设,统一处理 dataset → ECharts option 的映射
91
- const presetResolvers = {
92
- bar: ({ dataset }) => ({
93
- animationDuration: 420,
94
- animationEasing: 'cubicOut',
95
- animationDelay: (_, idx) => idx * 60,
96
- tooltip: {
97
- trigger: 'axis',
98
- axisPointer: {
99
- type: 'shadow'
100
- }
101
- },
102
- xAxis: { type: 'category', data: dataset.map(item => item.label) },
103
- yAxis: { type: 'value' },
104
- series: [
105
- {
106
- type: 'bar',
107
- data: dataset.map(item => item.value),
108
- itemStyle: {
109
- color: '#3362DA',
110
- borderRadius: [4, 4, 0, 0]
111
- },
112
- emphasis: {
113
- itemStyle: {
114
- color: '#4C7CFF',
115
- shadowBlur: 18,
116
- shadowColor: 'rgba(76, 124, 255, 0.45)'
117
- }
118
- }
119
- }
120
- ]
121
- }),
122
- line: ({ dataset }) => ({
123
- animationDuration: 420,
124
- animationEasing: 'cubicOut',
125
- animationDelay: (_, idx) => idx * 50,
126
- tooltip: {
127
- trigger: 'axis',
128
- axisPointer: {
129
- type: 'line'
130
- }
131
- },
132
- xAxis: { type: 'category', data: dataset.map(item => item.label) },
133
- yAxis: { type: 'value' },
134
- series: [
135
- {
136
- type: 'line',
137
- smooth: true,
138
- data: dataset.map(item => item.value),
139
- lineStyle: {
140
- width: 3,
141
- color: '#28C8B5'
142
- },
143
- itemStyle: {
144
- color: '#28C8B5'
145
- },
146
- emphasis: {
147
- itemStyle: {
148
- color: '#4BE1CD',
149
- borderColor: '#D8FFF6',
150
- borderWidth: 6
151
- },
152
- lineStyle: {
153
- width: 4
154
- }
155
- },
156
- areaStyle: {
157
- opacity: 0.1,
158
- color: '#28C8B5'
159
- }
160
- }
161
- ]
162
- }),
163
- pie: ({ dataset }) => ({
164
- animationDuration: 420,
165
- animationEasing: 'cubicOut',
166
- tooltip: {
167
- trigger: 'item',
168
- formatter: '{a} <br/>{b}: {c} ({d}%)'
169
- },
170
- series: [
171
- {
172
- type: 'pie',
173
- radius: '55%',
174
- data: dataset.map(item => ({ name: item.label, value: item.value })),
175
- itemStyle: {
176
- borderColor: '#fff',
177
- borderWidth: 2
178
- },
179
- emphasis: {
180
- scale: true,
181
- scaleSize: 6,
182
- itemStyle: {
183
- shadowBlur: 16,
184
- shadowColor: 'rgba(0, 0, 0, 0.25)'
185
- },
186
- label: {
187
- show: true,
188
- fontWeight: 'bold'
189
- }
190
- }
191
- }
192
- ]
193
- })
194
- }
195
-
196
- // 数据转换:将后端返回的数据转换为图表需要的 dataset 格式
197
- const transformData = (rawData, dataMapping) => {
198
- // 增强数据提取:支持从包装对象中提取数组
199
- let dataArray = rawData
200
-
201
- // 如果 rawData 是对象但不是数组,尝试提取数组数据
202
- if (rawData && typeof rawData === 'object' && !Array.isArray(rawData)) {
203
- // 尝试常见的包装字段
204
- dataArray = rawData.data || rawData.result || rawData.list || rawData.items || rawData.records
205
-
206
- // 如果还是找不到数组,检查是否所有值都是数组
207
- if (!Array.isArray(dataArray)) {
208
- const arrayValues = Object.values(rawData).filter(val => Array.isArray(val))
209
- if (arrayValues.length === 1) {
210
- dataArray = arrayValues[0]
211
- }
212
- }
213
- }
214
-
215
- // 最终检查:必须是数组
216
- if (!dataArray || !Array.isArray(dataArray)) {
217
- console.warn('HChart: transformData 接收到的数据不是数组格式:', rawData)
218
- return []
219
- }
220
-
221
- // 如果配置了数据映射规则,使用映射规则
222
- if (dataMapping) {
223
- const { labelField = 'label', valueField = 'value' } = dataMapping
224
- return dataArray.map(item => ({
225
- label: item[labelField] || item.name || item.label || '',
226
- value: Number(item[valueField] || item.value || 0)
227
- }))
228
- }
229
-
230
- // 默认处理:尝试自动识别
231
- return dataArray.map(item => {
232
- if (typeof item === 'object' && item !== null) {
233
- return {
234
- label: item.label || item.name || item.text || item.x || String(item[Object.keys(item)[0]] || ''),
235
- value: Number(item.value || item.count || item.y || item[Object.keys(item)[1]] || 0)
236
- }
237
- }
238
- return { label: String(item), value: 0 }
239
- })
240
- }
241
-
242
- // 获取配置和数据
243
- const fetchConfigAndData = async () => {
244
- if (!props.queryParamsName && !props.config) {
245
- console.warn('HChart: queryParamsName 或 config 必须提供一个')
246
- return
247
- }
248
-
249
- try {
250
- loading.value = true
251
-
252
- // 如果直接提供了 config,直接使用
253
- if (props.config) {
254
- chartConfig.value = props.config
255
- console.log('44444444444444444444444444444444')
256
- await loadChartData(props.config)
257
- return
258
- }
259
-
260
- // 否则通过 queryParamsName 查询配置
261
- getConfigByName(props.queryParamsName, props.serviceName, async (res) => {
262
- if (!res) {
263
- console.error('HChart: 未能获取到配置内容')
264
- emit('error', new Error('未能获取到配置内容'))
265
- return
266
- }
267
-
268
- chartConfig.value = res
269
- console.log('3333333333333333333333333')
270
- await loadChartData(res)
271
- })
272
- } catch (error) {
273
- console.error('HChart: 获取配置或数据时发生错误:', error)
274
- emit('error', error)
275
- } finally {
276
- loading.value = false
277
- }
278
- }
279
-
280
- // 加载图表数据
281
- const loadChartData = async (config) => {
282
- if (!config) return
283
-
284
- try {
285
- // 如果配置中直接提供了 dataset,直接使用
286
- if (config.dataset && Array.isArray(config.dataset)) {
287
- chartData.value = config.dataset
288
- renderChart()
289
- console.log('1111111111111111111111111')
290
- emit('dataLoaded', chartData.value)
291
- return
292
- }
293
-
294
- // 如果配置中提供了 data(logicName),通过 runLogic 获取数据
295
- if (config.data) {
296
- const result = await runLogic(config.data, props.fixedQueryForm, props.serviceName)
297
-
298
- // 转换数据格式
299
- const transformedData = transformData(result, config.dataMapping)
300
- if (transformedData.length === 0) {
301
- console.warn('HChart: 数据转换后为空数组,原始数据:', result)
302
- }
303
- chartData.value = transformedData
304
- renderChart()
305
- console.log('22222222222222222222222222')
306
- emit('dataLoaded', transformedData)
307
- } else {
308
- // 没有数据源,使用空数据
309
- chartData.value = []
310
- renderChart()
311
- }
312
- } catch (error) {
313
- console.error('HChart: 加载数据时发生错误:', error)
314
- emit('error', error)
315
- }
316
- }
317
-
318
- // 渲染图表
319
- const renderChart = () => {
320
- if (!chartRef.value) return
321
- nextTick(() => {
322
- if (!chartInstance) {
323
- chartInstance = echarts.init(chartRef.value)
324
- // 监听窗口大小变化
325
- resizeObserver = new ResizeObserver(() => {
326
- chartInstance?.resize()
327
- })
328
- resizeObserver.observe(chartRef.value)
329
- }
330
-
331
- const config = chartConfig.value || props.config
332
- if (!config || !config.type) return
333
-
334
- const resolver = presetResolvers[config.type]
335
- if (!resolver) {
336
- console.warn(`HChart: 不支持的图表类型 ${config.type}`)
337
- return
338
- }
339
-
340
- const preset = resolver({ dataset: chartData.value })
341
- // 深度合并 series 配置
342
- let finalOptions = {
343
- legend: config.legend || {},
344
- grid: config.grid || {},
345
- ...preset
346
- }
347
-
348
- // 如果 options 中有 series,进行深度合并
349
- if (config.options?.series && preset.series) {
350
- // 分离需要特殊处理的配置项
351
- const { xAxis: customXAxis, yAxis: customYAxis, series: customSeries, ...restOptions } = config.options
352
-
353
- finalOptions = {
354
- ...finalOptions,
355
- ...restOptions,
356
- // 对于有 xAxis 的图表类型(bar, line),智能合并 xAxis
357
- ...(preset.xAxis && {
358
- xAxis: {
359
- ...preset.xAxis,
360
- ...customXAxis,
361
- // 如果用户配置的 data 为空数组或未定义,使用预设的 data
362
- data: (customXAxis?.data && customXAxis.data.length > 0)
363
- ? customXAxis.data
364
- : preset.xAxis.data
365
- }
366
- }),
367
- // 对于有 yAxis 的图表类型,合并 yAxis
368
- ...(preset.yAxis && {
369
- yAxis: {
370
- ...preset.yAxis,
371
- ...customYAxis
372
- }
373
- }),
374
- series: [
375
- {
376
- ...preset.series[0],
377
- ...customSeries[0],
378
- // 确保 data 来自预设(从 logic 获取的数据)
379
- data: preset.series[0].data
380
- }
381
- ]
382
- }
383
- } else {
384
- // 没有自定义 series 的情况
385
- const { xAxis: customXAxis, yAxis: customYAxis, ...restOptions } = config.options || {}
386
-
387
- finalOptions = {
388
- ...finalOptions,
389
- ...restOptions,
390
- // 对于有 xAxis 的图表类型,智能合并
391
- ...(preset.xAxis && {
392
- xAxis: {
393
- ...preset.xAxis,
394
- ...customXAxis,
395
- // 如果用户配置的 data 为空数组或未定义,使用预设的 data
396
- data: (customXAxis?.data && customXAxis.data.length > 0)
397
- ? customXAxis.data
398
- : preset.xAxis.data
399
- }
400
- }),
401
- // 对于有 yAxis 的图表类型,合并 yAxis
402
- ...(preset.yAxis && {
403
- yAxis: {
404
- ...preset.yAxis,
405
- ...customYAxis
406
- }
407
- })
408
- }
409
- }
410
- chartInstance.setOption(finalOptions, true)
411
- })
412
- }
413
-
414
- // 监听 queryParamsName 变化,只有在名称变化时才重新获取配置
415
- watch(
416
- () => props.queryParamsName,
417
- (newName, oldName) => {
418
- if (newName !== oldName) {
419
- console.log('99999999999999999999999999')
420
- fetchConfigAndData()
421
- }
422
- }
423
- )
424
-
425
- // 暴露给外部的方法
426
- const refresh = () => {
427
- console.log('88888888888888888888888888')
428
- fetchConfigAndData()
429
- }
430
-
431
- const reload = (newQueryForm) => {
432
- if (newQueryForm) {
433
- emit('update:fixedQueryForm', { ...props.fixedQueryForm, ...newQueryForm })
434
- } else {
435
- console.log('7777777777777777777777777')
436
- fetchConfigAndData()
437
- }
438
- }
439
-
440
- defineExpose({
441
- refresh,
442
- reload,
443
- chartInstance
444
- })
445
-
446
- onMounted(() => {
447
- // 初始化时记录 queryParamsName
448
- lastQueryParamsName.value = props.queryParamsName
449
- console.log('66666666666666666666666666666')
450
- fetchConfigAndData()
451
- })
452
-
453
- onBeforeUnmount(() => {
454
- // 清理图表实例和观察器
455
- if (chartInstance) {
456
- chartInstance.dispose()
457
- chartInstance = null
458
- }
459
- if (resizeObserver) {
460
- resizeObserver.disconnect()
461
- resizeObserver = null
462
- }
463
- })
464
- </script>
465
-
466
- <style scoped lang="less">
467
- .h-chart-configurable {
468
- display: flex;
469
- flex-direction: column;
470
- transition: transform 0.22s ease, box-shadow 0.22s ease;
471
-
472
- &.h-chart-show-border {
473
- border: 1px solid #E5E9F0;
474
- }
475
- &.h-chart-border-hide-right {
476
- border-right: 0px;
477
- }
478
- &.h-chart-border-hide-left {
479
- border-left: 0px;
480
- }
481
- }
482
-
483
- .h-chart-configurable.hoverable:hover {
484
- transform: translateY(-4px);
485
- box-shadow: 0 12px 28px rgba(0, 0, 0, 0.12);
486
- }
487
-
488
- .chart-canvas {
489
- width: 100%;
490
- margin-top: 10px;
491
- min-height: 280px;
492
- }
493
- </style>
1
+ <template>
2
+ <div class="h-chart-configurable" :class="wrapperClassObject">
3
+ <x-title v-if="chartTitle" v-bind="xTitleAttrs" :title="chartTitle" />
4
+ <!-- 图表挂载容器 -->
5
+ <div ref="chartRef" class="chart-canvas" :style="chartStyle"></div>
6
+ </div>
7
+ </template>
8
+
9
+ <script setup>
10
+ import { ref, watch, onMounted, computed, useAttrs, onBeforeUnmount, nextTick } from 'vue'
11
+ import * as echarts from 'echarts/core'
12
+ import { BarChart, LineChart, PieChart } from 'echarts/charts'
13
+ import { TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'
14
+ import { CanvasRenderer } from 'echarts/renderers'
15
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
16
+ import XTitle from '../XTitle/XTitle.vue'
17
+ // 注册常用图表类型,避免每次重复导入
18
+ echarts.use([BarChart, LineChart, PieChart, TooltipComponent, LegendComponent, GridComponent, CanvasRenderer])
19
+
20
+ const props = defineProps({
21
+ // 配置名称(用于查询配置)
22
+ queryParamsName: {
23
+ type: String,
24
+ default: ''
25
+ },
26
+ // 服务名
27
+ serviceName: {
28
+ type: String,
29
+ default: 'af-his'
30
+ },
31
+ // 固定查询参数
32
+ fixedQueryForm: {
33
+ type: Object,
34
+ default: () => ({ condition: '1=1' })
35
+ },
36
+ config: {
37
+ type: Object,
38
+ default: null
39
+ }
40
+ })
41
+
42
+ const emit = defineEmits(['dataLoaded', 'error', 'update:fixedQueryForm'])
43
+
44
+ const chartRef = ref(null)
45
+ let chartInstance = null
46
+ const chartConfig = ref(null)
47
+ const chartData = ref([])
48
+ const loading = ref(false)
49
+ let resizeObserver = null
50
+
51
+ // 记录上一次的 queryParamsName,用于比较变化
52
+ const lastQueryParamsName = ref('')
53
+
54
+ const chartTitle = computed(() => {
55
+ if (props.config?.xtitle) return props.config.xtitle
56
+ if (chartConfig.value?.xtitle) return chartConfig.value.xtitle
57
+ return ''
58
+ })
59
+ const xTitleAttrs = computed(() => {
60
+ if (props.config?.xtitleAttrs) return props.config.xtitleAttrs
61
+ if (chartConfig.value?.xtitleAttrs) return chartConfig.value.xtitleAttrs
62
+ return {}
63
+ })
64
+ const chartStyle = computed(() => {
65
+ const target = props.config ?? chartConfig.value ?? {}
66
+ if (target.style && typeof target.style === 'object') return target.style
67
+ return {}
68
+ })
69
+
70
+ const attrs = useAttrs()
71
+ const wrapperClassObject = computed(() => {
72
+ const a = attrs
73
+ const classes = {}
74
+
75
+ // 通用布尔样式开关(以存在/空字符串/'true' 为真)
76
+ const booleanStyleKeys = [
77
+ 'show-border',
78
+ 'border-hide-left',
79
+ 'border-hide-right'
80
+ ]
81
+ for (const key of booleanStyleKeys) {
82
+ const val = a[key]
83
+ const truthy = val === true || val === '' || val === 'true'
84
+ if (truthy) classes[`h-chart-${key}`] = true
85
+ }
86
+
87
+ return classes
88
+ })
89
+
90
+ // 常用图表预设,统一处理 dataset → ECharts option 的映射
91
+ const presetResolvers = {
92
+ bar: ({ dataset }) => ({
93
+ animationDuration: 420,
94
+ animationEasing: 'cubicOut',
95
+ animationDelay: (_, idx) => idx * 60,
96
+ tooltip: {
97
+ trigger: 'axis',
98
+ axisPointer: {
99
+ type: 'shadow'
100
+ }
101
+ },
102
+ xAxis: { type: 'category', data: dataset.map(item => item.label) },
103
+ yAxis: { type: 'value' },
104
+ series: [
105
+ {
106
+ type: 'bar',
107
+ data: dataset.map(item => item.value),
108
+ itemStyle: {
109
+ color: '#3362DA',
110
+ borderRadius: [4, 4, 0, 0]
111
+ },
112
+ emphasis: {
113
+ itemStyle: {
114
+ color: '#4C7CFF',
115
+ shadowBlur: 18,
116
+ shadowColor: 'rgba(76, 124, 255, 0.45)'
117
+ }
118
+ }
119
+ }
120
+ ]
121
+ }),
122
+ line: ({ dataset }) => ({
123
+ animationDuration: 420,
124
+ animationEasing: 'cubicOut',
125
+ animationDelay: (_, idx) => idx * 50,
126
+ tooltip: {
127
+ trigger: 'axis',
128
+ axisPointer: {
129
+ type: 'line'
130
+ }
131
+ },
132
+ xAxis: { type: 'category', data: dataset.map(item => item.label) },
133
+ yAxis: { type: 'value' },
134
+ series: [
135
+ {
136
+ type: 'line',
137
+ smooth: true,
138
+ data: dataset.map(item => item.value),
139
+ lineStyle: {
140
+ width: 3,
141
+ color: '#28C8B5'
142
+ },
143
+ itemStyle: {
144
+ color: '#28C8B5'
145
+ },
146
+ emphasis: {
147
+ itemStyle: {
148
+ color: '#4BE1CD',
149
+ borderColor: '#D8FFF6',
150
+ borderWidth: 6
151
+ },
152
+ lineStyle: {
153
+ width: 4
154
+ }
155
+ },
156
+ areaStyle: {
157
+ opacity: 0.1,
158
+ color: '#28C8B5'
159
+ }
160
+ }
161
+ ]
162
+ }),
163
+ pie: ({ dataset }) => ({
164
+ animationDuration: 420,
165
+ animationEasing: 'cubicOut',
166
+ tooltip: {
167
+ trigger: 'item',
168
+ formatter: '{a} <br/>{b}: {c} ({d}%)'
169
+ },
170
+ series: [
171
+ {
172
+ type: 'pie',
173
+ radius: '55%',
174
+ data: dataset.map(item => ({ name: item.label, value: item.value })),
175
+ itemStyle: {
176
+ borderColor: '#fff',
177
+ borderWidth: 2
178
+ },
179
+ emphasis: {
180
+ scale: true,
181
+ scaleSize: 6,
182
+ itemStyle: {
183
+ shadowBlur: 16,
184
+ shadowColor: 'rgba(0, 0, 0, 0.25)'
185
+ },
186
+ label: {
187
+ show: true,
188
+ fontWeight: 'bold'
189
+ }
190
+ }
191
+ }
192
+ ]
193
+ })
194
+ }
195
+
196
+ // 数据转换:将后端返回的数据转换为图表需要的 dataset 格式
197
+ const transformData = (rawData, dataMapping) => {
198
+ // 增强数据提取:支持从包装对象中提取数组
199
+ let dataArray = rawData
200
+
201
+ // 如果 rawData 是对象但不是数组,尝试提取数组数据
202
+ if (rawData && typeof rawData === 'object' && !Array.isArray(rawData)) {
203
+ // 尝试常见的包装字段
204
+ dataArray = rawData.data || rawData.result || rawData.list || rawData.items || rawData.records
205
+
206
+ // 如果还是找不到数组,检查是否所有值都是数组
207
+ if (!Array.isArray(dataArray)) {
208
+ const arrayValues = Object.values(rawData).filter(val => Array.isArray(val))
209
+ if (arrayValues.length === 1) {
210
+ dataArray = arrayValues[0]
211
+ }
212
+ }
213
+ }
214
+
215
+ // 最终检查:必须是数组
216
+ if (!dataArray || !Array.isArray(dataArray)) {
217
+ console.warn('HChart: transformData 接收到的数据不是数组格式:', rawData)
218
+ return []
219
+ }
220
+
221
+ // 如果配置了数据映射规则,使用映射规则
222
+ if (dataMapping) {
223
+ const { labelField = 'label', valueField = 'value' } = dataMapping
224
+ return dataArray.map(item => ({
225
+ label: item[labelField] || item.name || item.label || '',
226
+ value: Number(item[valueField] || item.value || 0)
227
+ }))
228
+ }
229
+
230
+ // 默认处理:尝试自动识别
231
+ return dataArray.map(item => {
232
+ if (typeof item === 'object' && item !== null) {
233
+ return {
234
+ label: item.label || item.name || item.text || item.x || String(item[Object.keys(item)[0]] || ''),
235
+ value: Number(item.value || item.count || item.y || item[Object.keys(item)[1]] || 0)
236
+ }
237
+ }
238
+ return { label: String(item), value: 0 }
239
+ })
240
+ }
241
+
242
+ // 获取配置和数据
243
+ const fetchConfigAndData = async () => {
244
+ if (!props.queryParamsName && !props.config) {
245
+ console.warn('HChart: queryParamsName 或 config 必须提供一个')
246
+ return
247
+ }
248
+
249
+ try {
250
+ loading.value = true
251
+
252
+ // 如果直接提供了 config,直接使用
253
+ if (props.config) {
254
+ chartConfig.value = props.config
255
+ console.log('44444444444444444444444444444444')
256
+ await loadChartData(props.config)
257
+ return
258
+ }
259
+
260
+ // 否则通过 queryParamsName 查询配置
261
+ getConfigByName(props.queryParamsName, props.serviceName, async (res) => {
262
+ if (!res) {
263
+ console.error('HChart: 未能获取到配置内容')
264
+ emit('error', new Error('未能获取到配置内容'))
265
+ return
266
+ }
267
+
268
+ chartConfig.value = res
269
+ console.log('3333333333333333333333333')
270
+ await loadChartData(res)
271
+ })
272
+ } catch (error) {
273
+ console.error('HChart: 获取配置或数据时发生错误:', error)
274
+ emit('error', error)
275
+ } finally {
276
+ loading.value = false
277
+ }
278
+ }
279
+
280
+ // 加载图表数据
281
+ const loadChartData = async (config) => {
282
+ if (!config) return
283
+
284
+ try {
285
+ // 如果配置中直接提供了 dataset,直接使用
286
+ if (config.dataset && Array.isArray(config.dataset)) {
287
+ chartData.value = config.dataset
288
+ renderChart()
289
+ console.log('1111111111111111111111111')
290
+ emit('dataLoaded', chartData.value)
291
+ return
292
+ }
293
+
294
+ // 如果配置中提供了 data(logicName),通过 runLogic 获取数据
295
+ if (config.data) {
296
+ const result = await runLogic(config.data, props.fixedQueryForm, props.serviceName)
297
+
298
+ // 转换数据格式
299
+ const transformedData = transformData(result, config.dataMapping)
300
+ if (transformedData.length === 0) {
301
+ console.warn('HChart: 数据转换后为空数组,原始数据:', result)
302
+ }
303
+ chartData.value = transformedData
304
+ renderChart()
305
+ console.log('22222222222222222222222222')
306
+ emit('dataLoaded', transformedData)
307
+ } else {
308
+ // 没有数据源,使用空数据
309
+ chartData.value = []
310
+ renderChart()
311
+ }
312
+ } catch (error) {
313
+ console.error('HChart: 加载数据时发生错误:', error)
314
+ emit('error', error)
315
+ }
316
+ }
317
+
318
+ // 渲染图表
319
+ const renderChart = () => {
320
+ if (!chartRef.value) return
321
+ nextTick(() => {
322
+ if (!chartInstance) {
323
+ chartInstance = echarts.init(chartRef.value)
324
+ // 监听窗口大小变化
325
+ resizeObserver = new ResizeObserver(() => {
326
+ chartInstance?.resize()
327
+ })
328
+ resizeObserver.observe(chartRef.value)
329
+ }
330
+
331
+ const config = chartConfig.value || props.config
332
+ if (!config || !config.type) return
333
+
334
+ const resolver = presetResolvers[config.type]
335
+ if (!resolver) {
336
+ console.warn(`HChart: 不支持的图表类型 ${config.type}`)
337
+ return
338
+ }
339
+
340
+ const preset = resolver({ dataset: chartData.value })
341
+ // 深度合并 series 配置
342
+ let finalOptions = {
343
+ legend: config.legend || {},
344
+ grid: config.grid || {},
345
+ ...preset
346
+ }
347
+
348
+ // 如果 options 中有 series,进行深度合并
349
+ if (config.options?.series && preset.series) {
350
+ // 分离需要特殊处理的配置项
351
+ const { xAxis: customXAxis, yAxis: customYAxis, series: customSeries, ...restOptions } = config.options
352
+
353
+ finalOptions = {
354
+ ...finalOptions,
355
+ ...restOptions,
356
+ // 对于有 xAxis 的图表类型(bar, line),智能合并 xAxis
357
+ ...(preset.xAxis && {
358
+ xAxis: {
359
+ ...preset.xAxis,
360
+ ...customXAxis,
361
+ // 如果用户配置的 data 为空数组或未定义,使用预设的 data
362
+ data: (customXAxis?.data && customXAxis.data.length > 0)
363
+ ? customXAxis.data
364
+ : preset.xAxis.data
365
+ }
366
+ }),
367
+ // 对于有 yAxis 的图表类型,合并 yAxis
368
+ ...(preset.yAxis && {
369
+ yAxis: {
370
+ ...preset.yAxis,
371
+ ...customYAxis
372
+ }
373
+ }),
374
+ series: [
375
+ {
376
+ ...preset.series[0],
377
+ ...customSeries[0],
378
+ // 确保 data 来自预设(从 logic 获取的数据)
379
+ data: preset.series[0].data
380
+ }
381
+ ]
382
+ }
383
+ } else {
384
+ // 没有自定义 series 的情况
385
+ const { xAxis: customXAxis, yAxis: customYAxis, ...restOptions } = config.options || {}
386
+
387
+ finalOptions = {
388
+ ...finalOptions,
389
+ ...restOptions,
390
+ // 对于有 xAxis 的图表类型,智能合并
391
+ ...(preset.xAxis && {
392
+ xAxis: {
393
+ ...preset.xAxis,
394
+ ...customXAxis,
395
+ // 如果用户配置的 data 为空数组或未定义,使用预设的 data
396
+ data: (customXAxis?.data && customXAxis.data.length > 0)
397
+ ? customXAxis.data
398
+ : preset.xAxis.data
399
+ }
400
+ }),
401
+ // 对于有 yAxis 的图表类型,合并 yAxis
402
+ ...(preset.yAxis && {
403
+ yAxis: {
404
+ ...preset.yAxis,
405
+ ...customYAxis
406
+ }
407
+ })
408
+ }
409
+ }
410
+ chartInstance.setOption(finalOptions, true)
411
+ })
412
+ }
413
+
414
+ // 监听 queryParamsName 变化,只有在名称变化时才重新获取配置
415
+ watch(
416
+ () => props.queryParamsName,
417
+ (newName, oldName) => {
418
+ if (newName !== oldName) {
419
+ console.log('99999999999999999999999999')
420
+ fetchConfigAndData()
421
+ }
422
+ }
423
+ )
424
+
425
+ // 暴露给外部的方法
426
+ const refresh = () => {
427
+ console.log('88888888888888888888888888')
428
+ fetchConfigAndData()
429
+ }
430
+
431
+ const reload = (newQueryForm) => {
432
+ if (newQueryForm) {
433
+ emit('update:fixedQueryForm', { ...props.fixedQueryForm, ...newQueryForm })
434
+ } else {
435
+ console.log('7777777777777777777777777')
436
+ fetchConfigAndData()
437
+ }
438
+ }
439
+
440
+ defineExpose({
441
+ refresh,
442
+ reload,
443
+ chartInstance
444
+ })
445
+
446
+ onMounted(() => {
447
+ // 初始化时记录 queryParamsName
448
+ lastQueryParamsName.value = props.queryParamsName
449
+ console.log('66666666666666666666666666666')
450
+ fetchConfigAndData()
451
+ })
452
+
453
+ onBeforeUnmount(() => {
454
+ // 清理图表实例和观察器
455
+ if (chartInstance) {
456
+ chartInstance.dispose()
457
+ chartInstance = null
458
+ }
459
+ if (resizeObserver) {
460
+ resizeObserver.disconnect()
461
+ resizeObserver = null
462
+ }
463
+ })
464
+ </script>
465
+
466
+ <style scoped lang="less">
467
+ .h-chart-configurable {
468
+ display: flex;
469
+ flex-direction: column;
470
+ transition: transform 0.22s ease, box-shadow 0.22s ease;
471
+
472
+ &.h-chart-show-border {
473
+ border: 1px solid #E5E9F0;
474
+ }
475
+ &.h-chart-border-hide-right {
476
+ border-right: 0px;
477
+ }
478
+ &.h-chart-border-hide-left {
479
+ border-left: 0px;
480
+ }
481
+ }
482
+
483
+ .h-chart-configurable.hoverable:hover {
484
+ transform: translateY(-4px);
485
+ box-shadow: 0 12px 28px rgba(0, 0, 0, 0.12);
486
+ }
487
+
488
+ .chart-canvas {
489
+ width: 100%;
490
+ margin-top: 10px;
491
+ min-height: 280px;
492
+ }
493
+ </style>