vue2-client 1.15.128 → 1.15.129

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 (323) hide show
  1. package/.claude/settings.local.json +13 -13
  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/CHANGELOG.md +824 -824
  10. package/Components.md +60 -60
  11. package/docs/LowCode/lowcode.md +155 -155
  12. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  13. package/docs/index.md +30 -30
  14. package/index.js +31 -31
  15. package/jest-transform-stub.js +8 -8
  16. package/jest.setup.js +7 -7
  17. package/jsconfig.json +19 -19
  18. package/package.json +1 -1
  19. package/public/his/editor/editor.html +51 -51
  20. package/public/his/editor/mock/bind_data.html +779 -779
  21. package/public/his/editor/mock/data_table.html +40 -40
  22. package/public/his/editor/mock/sign.html +75 -75
  23. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  24. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  25. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  26. package/public/his/editor/vender/date97/calendar.js +4 -4
  27. package/public/his/editor/vender/date97/lang/en.js +13 -13
  28. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  29. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  30. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  31. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  32. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  33. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  34. package/public/his/editor/vender/diff.js +1627 -1627
  35. package/public/his/editor/vender/editor.js +1 -1
  36. package/public/his/editor/vender/fabric.js +31187 -31187
  37. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  38. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  39. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  40. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  41. package/public/his/editor/vender/mui/mui.min.css +4 -4
  42. package/public/his/editor/vender/mui/mui.min.js +5 -5
  43. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  44. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  45. package/public/his/editor/vender/qrcode.js +7 -7
  46. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  47. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  48. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  49. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  50. package/public/his/editor/vender/validator.js +5094 -5094
  51. package/public/his/editor/vender/weui/weui.css +5659 -5659
  52. package/public/his/editor/vender/weui/weui.min.css +4 -4
  53. package/public/his/editor/vender/weui/weui.min.js +11 -11
  54. package/src/assets/img/querySlotDemo.svg +15 -15
  55. package/src/assets/svg/badtwo.svg +1 -1
  56. package/src/assets/svg/goodtwo.svg +1 -1
  57. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  58. package/src/base-client/components/AI/demo.vue +31 -31
  59. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  60. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  61. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  62. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  63. package/src/base-client/components/common/CitySelect/index.js +3 -3
  64. package/src/base-client/components/common/CitySelect/index.md +109 -109
  65. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  66. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  67. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  68. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  69. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  70. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  71. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  72. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  73. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  74. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  75. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  76. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  77. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  78. package/src/base-client/components/common/HIS/HButtons/HButtons.vue +101 -719
  79. package/src/base-client/components/common/HIS/HFormTable/HFormTable.vue +109 -2
  80. package/src/base-client/components/common/HIS/HTab/HTab.vue +126 -80
  81. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  82. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  83. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  84. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  85. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  86. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  87. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  88. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  89. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  90. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  91. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  92. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  93. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  94. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  95. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  96. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  97. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  98. package/src/base-client/components/common/Recording/index.js +3 -3
  99. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  100. package/src/base-client/components/common/Tree/index.js +2 -2
  101. package/src/base-client/components/common/Upload/index.js +3 -3
  102. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  103. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  104. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  105. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  106. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  107. package/src/base-client/components/common/XAddReport/index.js +3 -3
  108. package/src/base-client/components/common/XAddReport/index.md +56 -56
  109. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  110. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  111. package/src/base-client/components/common/XButtons/index.js +3 -3
  112. package/src/base-client/components/common/XButtons/index.md +61 -61
  113. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  114. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  115. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  116. package/src/base-client/components/common/XDataCard/index.js +3 -3
  117. package/src/base-client/components/common/XDataCard/index.md +1 -1
  118. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  119. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  120. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  121. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  122. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  123. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  124. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  125. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  126. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  127. package/src/base-client/components/common/XForm/index.md +178 -178
  128. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  129. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  130. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  131. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  132. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  133. package/src/base-client/components/common/XFormTable/index.md +92 -92
  134. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  135. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  136. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  137. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  138. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  139. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  140. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  141. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  142. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  143. package/src/base-client/components/common/XPrint/index.vue +97 -97
  144. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  145. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  146. package/src/base-client/components/common/XReport/index.js +3 -3
  147. package/src/base-client/components/common/XReport/print.js +186 -186
  148. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  149. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  150. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  151. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  152. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  153. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  154. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  155. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  156. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  157. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  158. package/src/base-client/components/common/XStepView/index.js +3 -3
  159. package/src/base-client/components/common/XStepView/index.md +31 -31
  160. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  161. package/src/base-client/components/common/XTab/index.js +3 -3
  162. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  163. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  164. package/src/base-client/components/common/XTable/index.md +255 -255
  165. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  166. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  167. package/src/base-client/components/common/XTree/index.js +3 -3
  168. package/src/base-client/components/common/XTree/index.md +36 -36
  169. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  170. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  171. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  172. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  173. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  174. package/src/base-client/components/index.js +51 -51
  175. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  176. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  177. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  178. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  179. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  180. package/src/base-client/plugins/Config.js +19 -19
  181. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  182. package/src/base-client/plugins/Recording.js +258 -258
  183. package/src/base-client/plugins/index.js +23 -23
  184. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  185. package/src/components/Charts/Bar.vue +62 -62
  186. package/src/components/Charts/ChartCard.vue +134 -134
  187. package/src/components/Charts/Liquid.vue +67 -67
  188. package/src/components/Charts/MiniArea.vue +39 -39
  189. package/src/components/Charts/MiniBar.vue +39 -39
  190. package/src/components/Charts/MiniProgress.vue +75 -75
  191. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  192. package/src/components/Charts/Radar.vue +68 -68
  193. package/src/components/Charts/RankList.vue +77 -77
  194. package/src/components/Charts/TagCloud.vue +113 -113
  195. package/src/components/Charts/TransferBar.vue +64 -64
  196. package/src/components/Charts/Trend.vue +82 -82
  197. package/src/components/Charts/chart.less +12 -12
  198. package/src/components/Charts/smooth.area.less +13 -13
  199. package/src/components/CodeMirror/inedx.vue +118 -118
  200. package/src/components/CodeMirror/setting.js +40 -40
  201. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  202. package/src/components/NumberInfo/index.js +3 -3
  203. package/src/components/NumberInfo/index.less +54 -54
  204. package/src/components/NumberInfo/index.md +43 -43
  205. package/src/components/card/ChartCard.vue +79 -79
  206. package/src/components/chart/Bar.vue +60 -60
  207. package/src/components/chart/MiniArea.vue +67 -67
  208. package/src/components/chart/MiniBar.vue +59 -59
  209. package/src/components/chart/MiniProgress.vue +57 -57
  210. package/src/components/chart/Radar.vue +80 -80
  211. package/src/components/chart/RankingList.vue +60 -60
  212. package/src/components/chart/Trend.vue +79 -79
  213. package/src/components/chart/index.less +9 -9
  214. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  215. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  216. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  217. package/src/components/checkbox/index.js +9 -9
  218. package/src/components/exception/ExceptionPage.vue +70 -70
  219. package/src/components/g2Charts/constants.js +202 -202
  220. package/src/components/g2Charts/demo.vue +808 -808
  221. package/src/components/g2Charts/designer.vue +228 -228
  222. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  223. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  224. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  225. package/src/components/g2Charts/index.vue +397 -397
  226. package/src/components/index.js +36 -36
  227. package/src/components/input/IInput.vue +66 -66
  228. package/src/components/menu/SideMenu.vue +75 -75
  229. package/src/components/menu/menu.js +273 -273
  230. package/src/components/setting/Setting.vue +234 -234
  231. package/src/components/tool/AStepItem.vue +60 -60
  232. package/src/config/CreateQueryConfig.js +325 -325
  233. package/src/config/default/antd.config.js +89 -89
  234. package/src/config/default/setting.config.js +55 -55
  235. package/src/font-style/font.css +4 -4
  236. package/src/layouts/CommonLayout.vue +56 -56
  237. package/src/layouts/PageLayout.vue +151 -151
  238. package/src/layouts/SinglePageView.vue +136 -136
  239. package/src/layouts/header/AdminHeader.vue +132 -132
  240. package/src/layouts/header/HeaderNotice.vue +177 -177
  241. package/src/layouts/header/InstitutionDetail.vue +181 -181
  242. package/src/layouts/tabs/TabsHead.vue +189 -189
  243. package/src/lib.js +1 -1
  244. package/src/mock/extend/index.js +84 -84
  245. package/src/mock/goods/index.js +108 -108
  246. package/src/pages/DefaultExample/index.vue +77 -77
  247. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  248. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  249. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  250. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  251. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  252. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  253. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  254. package/src/pages/DynamicStatistics/index.vue +282 -282
  255. package/src/pages/Example/childIndex.vue +15 -15
  256. package/src/pages/Example/index.vue +30 -30
  257. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  258. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  259. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  260. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  261. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  262. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  263. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  264. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  265. package/src/pages/Recording/index.vue +77 -77
  266. package/src/pages/ServiceReview/index.vue +284 -284
  267. package/src/pages/SubExample/index.vue +26 -26
  268. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  269. package/src/pages/XReportView/index.vue +64 -64
  270. package/src/pages/XTreeOneProExample/index.vue +67 -67
  271. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  272. package/src/pages/login/Login.vue +379 -379
  273. package/src/pages/login/LoginV3.vue +389 -389
  274. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  275. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  276. package/src/pages/report/ReportTable.js +124 -124
  277. package/src/pages/resourceManage/orgListManage.vue +98 -98
  278. package/src/pages/system/dictionary/index.vue +44 -44
  279. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  280. package/src/pages/system/monitor/operLog/index.vue +37 -37
  281. package/src/pages/system/settings/modifyPassword.vue +117 -117
  282. package/src/pages/system/ticket/index.vue +480 -480
  283. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  284. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  285. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  286. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  287. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  288. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  289. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  290. package/src/plugins/EventLogPlugin.js +33 -33
  291. package/src/plugins/FindParentsData.js +17 -17
  292. package/src/router/async/config.async.js +35 -35
  293. package/src/router/index.js +27 -27
  294. package/src/services/DataModel.js +30 -30
  295. package/src/services/LodopFuncs.js +137 -137
  296. package/src/services/api/TicketDetailsViewApi.js +46 -46
  297. package/src/services/api/cas.js +79 -79
  298. package/src/services/api/common.js +346 -346
  299. package/src/services/api/entity.js +18 -18
  300. package/src/services/api/index.js +17 -17
  301. package/src/store/modules/account.js +115 -115
  302. package/src/store/modules/index.js +5 -5
  303. package/src/store/modules/lowCode.js +33 -33
  304. package/src/store/modules/setting.js +119 -119
  305. package/src/theme/default/style.less +58 -58
  306. package/src/utils/authority-utils.js +85 -85
  307. package/src/utils/errorCode.js +6 -6
  308. package/src/utils/formatter.js +74 -74
  309. package/src/utils/htmlToPDF.js +108 -108
  310. package/src/utils/htmlToPDFApi.js +5 -5
  311. package/src/utils/login.js +188 -188
  312. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  313. package/src/utils/lowcode/lowcodeLog.js +29 -29
  314. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  315. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  316. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  317. package/src/utils/map-utils.js +47 -47
  318. package/src/utils/reg.js +95 -95
  319. package/src/utils/runEvalFunction.js +14 -14
  320. package/src/utils/theme-color-replacer-extend.js +92 -92
  321. package/src/utils/util.js +329 -329
  322. package/src/utils/waterMark.js +31 -31
  323. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,14 +1,118 @@
1
1
  <script setup lang="ts">
2
2
  import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'
3
+ import { ref, onMounted, onUpdated, getCurrentInstance, watch, nextTick } from 'vue'
3
4
 
4
- // 只定义HFormTable特有的属性
5
5
  defineProps({
6
- // HFormTable特有的属性
7
6
  tableStyle: {
8
7
  type: String,
9
8
  default: 'formtable-col1'
10
9
  }
11
10
  })
11
+
12
+ const xFormTableRef = ref(null)
13
+ const instance = getCurrentInstance()
14
+
15
+ // 防抖控制
16
+ let syncTimeout = null
17
+ function debounceSync (callback, delay = 100) {
18
+ if (syncTimeout) clearTimeout(syncTimeout)
19
+ syncTimeout = setTimeout(callback, delay)
20
+ }
21
+
22
+ // 方法缓存,避免重复挂载
23
+ const syncedMethods = new WeakMap()
24
+
25
+ function syncChildRefs () {
26
+ if (!instance || !instance.proxy || !xFormTableRef.value) return
27
+ const proxy = instance.proxy
28
+ const target = proxy.$refs
29
+ const childRefs = xFormTableRef.value.$refs
30
+ if (!childRefs) return
31
+
32
+ Object.entries(childRefs).forEach(([key, value]) => {
33
+ const v = Array.isArray(value) ? value[0] : value
34
+ if (target[key] !== v) target[key] = v
35
+ })
36
+ if (target.xFormTableRef !== xFormTableRef.value) target.xFormTableRef = xFormTableRef.value
37
+ }
38
+
39
+ function getAllFunctionNames (obj) {
40
+ if (!obj) return []
41
+ const names = new Set()
42
+ let current = obj
43
+ while (current && current !== Object.prototype) {
44
+ Object.getOwnPropertyNames(current).forEach(name => {
45
+ if (typeof obj[name] === 'function' && name !== 'constructor') names.add(name)
46
+ })
47
+ current = Object.getPrototypeOf(current)
48
+ }
49
+ return Array.from(names)
50
+ }
51
+
52
+ function syncChildMethods () {
53
+ if (!instance || !instance.proxy || !xFormTableRef.value) return
54
+ const proxy = instance.proxy
55
+ const inner = xFormTableRef.value
56
+ const cached = syncedMethods.get(inner) || new Set()
57
+
58
+ getAllFunctionNames(inner).forEach(name => {
59
+ if (cached.has(name) || proxy[name]) return
60
+ proxy[name] = function () {
61
+ if (xFormTableRef.value && typeof xFormTableRef.value[name] === 'function') {
62
+ return xFormTableRef.value[name].apply(xFormTableRef.value, arguments)
63
+ }
64
+ }
65
+ cached.add(name)
66
+ })
67
+ syncedMethods.set(inner, cached)
68
+ }
69
+
70
+ function syncAll () {
71
+ syncChildRefs()
72
+ syncChildMethods()
73
+ }
74
+
75
+ // 子组件生命周期事件回调,确保及时同步
76
+ function onInnerMounted () { nextTick(function () { debounceSync(syncAll) }) }
77
+ function onInnerUpdated () { nextTick(function () { debounceSync(syncChildRefs) }) }
78
+
79
+ // 生命周期与监听
80
+ onMounted(() => nextTick(() => debounceSync(syncAll)))
81
+ onUpdated(() => nextTick(() => debounceSync(syncAll)))
82
+
83
+ watch(() => xFormTableRef.value && xFormTableRef.value.$refs, () => nextTick(() => debounceSync(syncChildRefs)), { deep: true, flush: 'post' })
84
+ watch(() => xFormTableRef.value, () => nextTick(() => debounceSync(syncChildMethods)), { flush: 'post' })
85
+
86
+ // 常用方法显式代理(API更清晰)
87
+ function createMethodProxy (methodName) {
88
+ return function () {
89
+ const inst = xFormTableRef.value
90
+ if (inst && typeof inst[methodName] === 'function') return inst[methodName].apply(inst, arguments)
91
+ }
92
+ }
93
+
94
+ const COMMON_METHODS = [
95
+ 'reload', 'init', 'doSearch', 'resetForm', 'refreshTable',
96
+ 'clearRowKeys', 'update', 'setTableData'
97
+ ]
98
+
99
+ defineExpose({
100
+ getXFormTableInstance: () => xFormTableRef.value,
101
+ // 显式常用方法
102
+ ...COMMON_METHODS.reduce((acc, m) => {
103
+ acc[m] = createMethodProxy(m)
104
+ return acc
105
+ }, {}),
106
+ // 便捷:获取内部表格/表单ref
107
+ getTableRef: () => {
108
+ const refs = xFormTableRef.value && xFormTableRef.value.$refs
109
+ return (refs && (refs.table || refs.xTable)) || undefined
110
+ },
111
+ getFormRef: () => {
112
+ const refs = xFormTableRef.value && xFormTableRef.value.$refs
113
+ return (refs && (refs.form || refs.xForm)) || undefined
114
+ }
115
+ })
12
116
  </script>
13
117
 
14
118
  <template>
@@ -19,8 +123,11 @@ defineProps({
19
123
  ]"
20
124
  >
21
125
  <x-form-table
126
+ ref="xFormTableRef"
22
127
  v-bind="$attrs"
23
128
  v-on="$listeners"
129
+ @hook:mounted="onInnerMounted"
130
+ @hook:updated="onInnerUpdated"
24
131
  >
25
132
  <template v-for="(_, name) in $slots" #[name]="slotData">
26
133
  <slot :name="name" v-bind="slotData" />
@@ -1,51 +1,134 @@
1
1
  <script setup lang="ts">
2
2
  import XTab from '@vue2-client/base-client/components/common/XTab/XTab.vue'
3
- import { ref } from 'vue'
3
+ import { ref, onMounted, onUpdated, getCurrentInstance, watch, nextTick } from 'vue'
4
4
 
5
5
  defineProps({
6
- // HTab特有的属性
7
6
  hasTopMargin: {
8
7
  type: Boolean,
9
8
  default: true
10
9
  }
11
10
  })
12
11
 
13
- // 创建对XTab组件的引用
14
- const xTabRef = ref()
12
+ const emit = defineEmits(['ready'])
15
13
 
16
- // 暴露方法给父组件使用
17
- defineExpose({
18
- // 为了兼容性,保留getXTabInstance方法
19
- getXTabInstance: () => xTabRef.value,
14
+ const xTabRef = ref(null)
15
+ const instance = getCurrentInstance()
20
16
 
21
- // 直接暴露常用方法,方便调用
22
- tabPaneChange: function () {
23
- if (xTabRef.value) {
24
- return xTabRef.value.tabPaneChange.apply(xTabRef.value, arguments)
25
- }
26
- },
27
- initConfig: function () {
28
- if (xTabRef.value) {
29
- return xTabRef.value.initConfig()
30
- }
31
- },
32
- getConfig: function () {
33
- if (xTabRef.value) {
34
- return xTabRef.value.getConfig()
17
+ // 就绪承诺
18
+ let _resolveReady = null
19
+ let _readyPromise = null
20
+ function resetReady () {
21
+ _readyPromise = new Promise(function (resolve) { _resolveReady = resolve })
22
+ }
23
+ resetReady()
24
+ function markReady () {
25
+ if (_resolveReady) { _resolveReady(); _resolveReady = null }
26
+ emit('ready')
27
+ }
28
+
29
+ // 防抖控制
30
+ let syncTimeout = null
31
+ function debounceSync (callback, delay = 100) {
32
+ if (syncTimeout) clearTimeout(syncTimeout)
33
+ syncTimeout = setTimeout(callback, delay)
34
+ }
35
+
36
+ // 方法缓存
37
+ const syncedMethods = new WeakMap()
38
+
39
+ function getAllFunctionNames (obj) {
40
+ if (!obj) return []
41
+ const names = new Set()
42
+ let current = obj
43
+ while (current && current !== Object.prototype) {
44
+ Object.getOwnPropertyNames(current).forEach(name => {
45
+ if (typeof obj[name] === 'function' && name !== 'constructor') names.add(name)
46
+ })
47
+ current = Object.getPrototypeOf(current)
48
+ }
49
+ return Array.from(names)
50
+ }
51
+
52
+ function syncChildMethods () {
53
+ if (!instance || !instance.proxy || !xTabRef.value) return
54
+ const proxy = instance.proxy
55
+ const inner = xTabRef.value
56
+ const cached = syncedMethods.get(inner) || new Set()
57
+ getAllFunctionNames(inner).forEach(name => {
58
+ if (cached.has(name) || proxy[name]) return
59
+ proxy[name] = function () {
60
+ if (xTabRef.value && typeof xTabRef.value[name] === 'function') {
61
+ return xTabRef.value[name].apply(xTabRef.value, arguments)
62
+ }
35
63
  }
36
- },
37
- // 暴露XTab的属性访问方法
38
- getActiveKey: function () {
39
- return xTabRef.value && xTabRef.value.activeKey
40
- },
41
-
42
- getConfigData: function () {
43
- return xTabRef.value && xTabRef.value.config
44
- },
45
-
46
- getShowTabBar: function () {
47
- return xTabRef.value && xTabRef.value.showTabBar
64
+ cached.add(name)
65
+ })
66
+ syncedMethods.set(inner, cached)
67
+ }
68
+
69
+ // 访问时动态合并 $refs:原始 + 子组件(拍平数组)+ xTabRef
70
+ function installRefsGetter () {
71
+ if (!instance || !instance.proxy) return
72
+ const proxy = instance.proxy
73
+ const baseRefs = proxy.$refs
74
+ if (!baseRefs) return
75
+ try {
76
+ Object.defineProperty(proxy, '$refs', {
77
+ configurable: true,
78
+ get () {
79
+ const merged = {}
80
+ // 基础 refs
81
+ if (baseRefs) {
82
+ Object.keys(baseRefs).forEach(function (k) { merged[k] = baseRefs[k] })
83
+ }
84
+ // 子组件 refs
85
+ const child = xTabRef.value && xTabRef.value.$refs
86
+ if (child) {
87
+ Object.keys(child).forEach(function (k) {
88
+ const v = Array.isArray(child[k]) ? child[k][0] : child[k]
89
+ merged[k] = v
90
+ })
91
+ }
92
+ // xTabRef 本身
93
+ merged.xTabRef = xTabRef.value
94
+ return merged
95
+ }
96
+ })
97
+ } catch (e) {
98
+ // 忽略 defineProperty 失败,保持原逻辑
99
+ }
100
+ }
101
+
102
+ function syncAll () {
103
+ syncChildMethods()
104
+ markReady()
105
+ }
106
+
107
+ // 生命周期与监听
108
+ onMounted(() => nextTick(() => {
109
+ installRefsGetter()
110
+ debounceSync(function () { syncAll() })
111
+ }))
112
+ onUpdated(() => nextTick(() => debounceSync(function () { syncAll() })))
113
+ watch(() => xTabRef.value, () => nextTick(() => { resetReady(); debounceSync(function () { syncAll() }) }), { flush: 'post' })
114
+
115
+ // 常用方法显式代理
116
+ function createMethodProxy (methodName) {
117
+ return function () {
118
+ const inst = xTabRef.value
119
+ if (inst && typeof inst[methodName] === 'function') return inst[methodName].apply(inst, arguments)
48
120
  }
121
+ }
122
+
123
+ const COMMON_METHODS = ['tabPaneChange', 'initConfig', 'getConfig']
124
+
125
+ defineExpose({
126
+ getXTabInstance: () => xTabRef.value,
127
+ whenReady: () => _readyPromise,
128
+ ...COMMON_METHODS.reduce((acc, m) => { acc[m] = createMethodProxy(m); return acc }, {}),
129
+ getActiveKey: () => xTabRef.value && xTabRef.value.activeKey,
130
+ getConfigData: () => xTabRef.value && xTabRef.value.config,
131
+ getShowTabBar: () => xTabRef.value && xTabRef.value.showTabBar,
49
132
  })
50
133
  </script>
51
134
 
@@ -65,16 +148,9 @@ defineExpose({
65
148
 
66
149
  <style scoped lang="less">
67
150
  .h-tab-wrapper {
68
- // 基础样式
69
- :deep(.ant-tabs-tab-next) {
70
- display: none;
71
- }
72
-
151
+ :deep(.ant-tabs-tab-next) { display: none; }
73
152
  :deep(.ant-tabs-nav) {
74
- .ant-tabs-tab-next-icon {
75
- display: none;
76
- }
77
-
153
+ .ant-tabs-tab-next-icon { display: none; }
78
154
  .ant-tabs-tab {
79
155
  background-color: transparent;
80
156
  border-radius: 6px 6px 0 0;
@@ -88,7 +164,6 @@ defineExpose({
88
164
  height: 32px;
89
165
  text-align: center;
90
166
  }
91
-
92
167
  .ant-tabs-tab-active {
93
168
  background-color: #0057FE;
94
169
  color: #ffffff;
@@ -98,43 +173,14 @@ defineExpose({
98
173
  text-align: center;
99
174
  }
100
175
  }
101
-
102
- :deep(.ant-tabs-bar) {
103
- border-bottom: 2px solid #0057FE;
104
- }
105
-
106
- :deep(.ant-tabs-tab-arrow-show) {
107
- display: none;
108
- }
109
-
110
- :deep(.ant-tabs-ink-bar) {
111
- background-color: transparent;
112
- bottom: -1px;
113
- display: none;
114
- height: 0;
115
- }
116
-
117
- :deep(.ant-tabs-tab-prev-icon-target) {
118
- display: none;
119
- }
120
-
121
- // 带顶部边距的样式
176
+ :deep(.ant-tabs-bar) { border-bottom: 2px solid #0057FE; }
177
+ :deep(.ant-tabs-tab-arrow-show) { display: none; }
178
+ :deep(.ant-tabs-ink-bar) { background-color: transparent; bottom: -1px; display: none; height: 0; }
179
+ :deep(.ant-tabs-tab-prev-icon-target) { display: none; }
122
180
  &.h-tab-has-top-margin {
123
- :deep(.ant-tabs-nav) {
124
- margin-top: 6px;
125
- }
126
-
127
- :deep(.ant-tabs-bar) {
128
- margin: 0 6px;
129
- }
130
-
131
- :deep(.ant-card-body) {
132
- padding: 6px 0;
133
-
134
- .ant-card-body {
135
- padding: 6px;
136
- }
137
- }
181
+ :deep(.ant-tabs-nav) { margin-top: 6px; }
182
+ :deep(.ant-tabs-bar) { margin: 0 6px; }
183
+ :deep(.ant-card-body) { padding: 6px 0; .ant-card-body { padding: 6px; } }
138
184
  }
139
185
  }
140
186
  </style>