vue2-client 1.17.42 → 1.17.44

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 (348) 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/package.info +1 -1
  62. package/src/assets/img/querySlotDemo.svg +15 -15
  63. package/src/assets/svg/badtwo.svg +1 -1
  64. package/src/assets/svg/goodtwo.svg +1 -1
  65. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  66. package/src/base-client/components/AI/demo.vue +31 -31
  67. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  68. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  69. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  70. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  71. package/src/base-client/components/common/CitySelect/index.js +3 -3
  72. package/src/base-client/components/common/CitySelect/index.md +109 -109
  73. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  74. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  75. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  76. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  77. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  78. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  79. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  80. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  81. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  82. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  83. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  84. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  85. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  86. package/src/base-client/components/common/HIS/demo.vue +61 -61
  87. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  88. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  89. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  90. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  91. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  92. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  93. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  94. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  95. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  96. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  97. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  98. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  99. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  100. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  101. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  102. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  103. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  104. package/src/base-client/components/common/Recording/index.js +3 -3
  105. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  106. package/src/base-client/components/common/Tree/index.js +2 -2
  107. package/src/base-client/components/common/Upload/index.js +3 -3
  108. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  109. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  110. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +304 -304
  111. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  112. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  113. package/src/base-client/components/common/XAddReport/index.js +3 -3
  114. package/src/base-client/components/common/XAddReport/index.md +56 -56
  115. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  116. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  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/XCalendar/XCalendar.vue +4 -4
  120. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  121. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  122. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  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/XStatusButton.vue +54 -54
  134. package/src/base-client/components/common/XForm/index.md +178 -178
  135. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  136. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  137. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  138. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  139. package/src/base-client/components/common/XFormTable/XFormTable.vue +1093 -1093
  140. package/src/base-client/components/common/XFormTable/demo.vue +113 -113
  141. package/src/base-client/components/common/XFormTable/index.md +92 -92
  142. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  143. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  144. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  145. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  146. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  147. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  148. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  149. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  150. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  151. package/src/base-client/components/common/XPrint/index.vue +97 -97
  152. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  153. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  154. package/src/base-client/components/common/XReport/index.js +3 -3
  155. package/src/base-client/components/common/XReport/print.js +186 -186
  156. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  157. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  158. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  159. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  160. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  161. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  162. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  163. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  164. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  165. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  166. package/src/base-client/components/common/XStepView/index.js +3 -3
  167. package/src/base-client/components/common/XStepView/index.md +31 -31
  168. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  169. package/src/base-client/components/common/XTab/index.js +3 -3
  170. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  171. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  172. package/src/base-client/components/common/XTable/XTableWrapper.vue +732 -706
  173. package/src/base-client/components/common/XTable/index.md +255 -255
  174. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  175. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  176. package/src/base-client/components/common/XTree/index.js +3 -3
  177. package/src/base-client/components/common/XTree/index.md +36 -36
  178. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  179. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  180. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  181. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  182. package/src/base-client/components/his/HChart/HChart.vue +493 -493
  183. package/src/base-client/components/his/HChart/demo.vue +88 -88
  184. package/src/base-client/components/his/HChart/index.md +798 -798
  185. package/src/base-client/components/his/XCharge/XChargeDemo.vue +145 -145
  186. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  187. package/src/base-client/components/his/XIcon/XIcon.vue +73 -73
  188. package/src/base-client/components/his/XIcon/index.js +3 -3
  189. package/src/base-client/components/his/XIcon/index.md +177 -177
  190. package/src/base-client/components/index.js +51 -51
  191. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  192. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  193. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  194. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  195. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  196. package/src/base-client/plugins/Config.js +19 -19
  197. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  198. package/src/base-client/plugins/Recording.js +258 -258
  199. package/src/base-client/plugins/index.js +23 -23
  200. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  201. package/src/components/Charts/Bar.vue +62 -62
  202. package/src/components/Charts/ChartCard.vue +134 -134
  203. package/src/components/Charts/Liquid.vue +67 -67
  204. package/src/components/Charts/MiniArea.vue +39 -39
  205. package/src/components/Charts/MiniBar.vue +39 -39
  206. package/src/components/Charts/MiniProgress.vue +75 -75
  207. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  208. package/src/components/Charts/Radar.vue +68 -68
  209. package/src/components/Charts/RankList.vue +77 -77
  210. package/src/components/Charts/TagCloud.vue +113 -113
  211. package/src/components/Charts/TransferBar.vue +64 -64
  212. package/src/components/Charts/Trend.vue +82 -82
  213. package/src/components/Charts/chart.less +12 -12
  214. package/src/components/Charts/smooth.area.less +13 -13
  215. package/src/components/CodeMirror/inedx.vue +118 -118
  216. package/src/components/CodeMirror/setting.js +40 -40
  217. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  218. package/src/components/NumberInfo/index.js +3 -3
  219. package/src/components/NumberInfo/index.less +54 -54
  220. package/src/components/NumberInfo/index.md +43 -43
  221. package/src/components/card/ChartCard.vue +79 -79
  222. package/src/components/chart/Bar.vue +60 -60
  223. package/src/components/chart/MiniArea.vue +67 -67
  224. package/src/components/chart/MiniBar.vue +59 -59
  225. package/src/components/chart/MiniProgress.vue +57 -57
  226. package/src/components/chart/Radar.vue +80 -80
  227. package/src/components/chart/RankingList.vue +60 -60
  228. package/src/components/chart/Trend.vue +79 -79
  229. package/src/components/chart/index.less +9 -9
  230. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  231. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  232. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  233. package/src/components/checkbox/index.js +9 -9
  234. package/src/components/exception/ExceptionPage.vue +70 -70
  235. package/src/components/g2Charts/constants.js +202 -202
  236. package/src/components/g2Charts/demo.vue +808 -808
  237. package/src/components/g2Charts/designer.vue +228 -228
  238. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  239. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  240. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  241. package/src/components/g2Charts/index.vue +397 -397
  242. package/src/components/index.js +36 -36
  243. package/src/components/input/IInput.vue +66 -66
  244. package/src/components/menu/SideMenu.vue +75 -75
  245. package/src/components/menu/menu.js +273 -273
  246. package/src/components/setting/Setting.vue +234 -234
  247. package/src/components/tool/AStepItem.vue +60 -60
  248. package/src/config/CreateQueryConfig.js +325 -325
  249. package/src/config/default/antd.config.js +89 -89
  250. package/src/config/default/setting.config.js +55 -55
  251. package/src/font-style/font.css +60 -60
  252. package/src/layouts/CommonLayout.vue +56 -56
  253. package/src/layouts/PageLayout.vue +151 -151
  254. package/src/layouts/SinglePageView.vue +136 -136
  255. package/src/layouts/header/AdminHeader.vue +132 -132
  256. package/src/layouts/header/HeaderNotice.vue +177 -177
  257. package/src/layouts/header/InstitutionDetail.vue +181 -181
  258. package/src/layouts/tabs/TabsHead.vue +189 -189
  259. package/src/lib.js +1 -1
  260. package/src/mock/extend/index.js +84 -84
  261. package/src/mock/goods/index.js +108 -108
  262. package/src/pages/DefaultExample/index.vue +77 -77
  263. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  264. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  265. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  266. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  267. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  268. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  269. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  270. package/src/pages/DynamicStatistics/index.vue +282 -282
  271. package/src/pages/Example/childIndex.vue +15 -15
  272. package/src/pages/Example/index.vue +30 -30
  273. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  274. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  275. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  276. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  277. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  278. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  279. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  280. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  281. package/src/pages/Recording/index.vue +77 -77
  282. package/src/pages/ServiceReview/index.vue +284 -284
  283. package/src/pages/SubExample/index.vue +26 -26
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1815 -1815
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +1014 -1014
  287. package/src/pages/XReportView/index.vue +64 -64
  288. package/src/pages/XTreeOneProExample/index.vue +67 -67
  289. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  290. package/src/pages/login/Login.vue +379 -379
  291. package/src/pages/login/LoginV3.vue +389 -389
  292. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  293. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  294. package/src/pages/report/ReportTable.js +124 -124
  295. package/src/pages/resourceManage/orgListManage.vue +98 -98
  296. package/src/pages/system/dictionary/index.vue +44 -44
  297. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  298. package/src/pages/system/monitor/operLog/index.vue +37 -37
  299. package/src/pages/system/settings/modifyPassword.vue +117 -117
  300. package/src/pages/system/ticket/index.vue +480 -480
  301. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  302. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  303. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  304. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  305. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  306. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  307. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  308. package/src/plugins/EventLogPlugin.js +33 -33
  309. package/src/plugins/FindParentsData.js +17 -17
  310. package/src/services/DataModel.js +30 -30
  311. package/src/services/LodopFuncs.js +137 -137
  312. package/src/services/api/TicketDetailsViewApi.js +46 -46
  313. package/src/services/api/cas.js +79 -79
  314. package/src/services/api/entity.js +18 -18
  315. package/src/services/api/index.js +17 -17
  316. package/src/store/modules/account.js +121 -121
  317. package/src/store/modules/index.js +5 -5
  318. package/src/store/modules/lowCode.js +33 -33
  319. package/src/store/modules/setting.js +119 -119
  320. package/src/theme/default/style.less +58 -58
  321. package/src/theme/global.less +313 -311
  322. package/src/utils/authority-utils.js +85 -85
  323. package/src/utils/errorCode.js +6 -6
  324. package/src/utils/formatter.js +74 -74
  325. package/src/utils/htmlToPDF.js +108 -108
  326. package/src/utils/htmlToPDFApi.js +5 -5
  327. package/src/utils/login.js +188 -188
  328. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  329. package/src/utils/lowcode/lowcodeLog.js +29 -29
  330. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  331. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  332. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  333. package/src/utils/map-utils.js +47 -47
  334. package/src/utils/reg.js +95 -95
  335. package/src/utils/runEvalFunction.js +14 -14
  336. package/src/utils/theme-color-replacer-extend.js +92 -92
  337. package/src/utils/util.js +329 -329
  338. package/src/utils/waterMark.js +31 -31
  339. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  340. package/src/assets/img/paymentMethod/icon1.png +0 -0
  341. package/src/assets/img/paymentMethod/icon2.png +0 -0
  342. package/src/assets/img/paymentMethod/icon3.png +0 -0
  343. package/src/assets/img/paymentMethod/icon4.png +0 -0
  344. package/src/assets/img/paymentMethod/icon5.png +0 -0
  345. package/src/assets/img/paymentMethod/icon6.png +0 -0
  346. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +0 -45
  347. package/src-base-client/components/his/XCharge/README.md +0 -0
  348. package/src-base-client/components/his/XCharge/XCharge.vue +0 -0
@@ -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>