vue2-client 1.14.56 → 1.14.58

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 (368) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.gaslink +19 -19
  3. package/.env.his +19 -19
  4. package/.env.liuli +19 -19
  5. package/.env.scada +19 -19
  6. package/.eslintrc.js +90 -90
  7. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  8. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  9. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  10. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  11. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  12. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  13. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  14. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  15. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  16. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  17. package/CHANGELOG.md +824 -824
  18. package/Components.md +60 -60
  19. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +36 -0
  20. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -45
  21. package/docs/LowCode/lowcode.md +155 -155
  22. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  23. package/docs/index.md +30 -30
  24. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +2 -1
  25. package/index.js +31 -31
  26. package/jest-transform-stub.js +8 -8
  27. package/jest.setup.js +7 -7
  28. package/jsconfig.json +19 -19
  29. package/package.json +1 -1
  30. package/public/his/editor/editor.html +51 -51
  31. package/public/his/editor/mock/bind_data.html +779 -779
  32. package/public/his/editor/mock/data_table.html +40 -40
  33. package/public/his/editor/mock/sign.html +75 -75
  34. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  35. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  36. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  37. package/public/his/editor/vender/date97/calendar.js +4 -4
  38. package/public/his/editor/vender/date97/lang/en.js +13 -13
  39. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  40. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  41. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  42. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  43. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  44. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  45. package/public/his/editor/vender/diff.js +1627 -1627
  46. package/public/his/editor/vender/editor.js +1 -1
  47. package/public/his/editor/vender/fabric.js +31187 -31187
  48. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  49. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  50. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  51. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  52. package/public/his/editor/vender/mui/mui.min.css +4 -4
  53. package/public/his/editor/vender/mui/mui.min.js +5 -5
  54. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  55. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  56. package/public/his/editor/vender/qrcode.js +7 -7
  57. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  58. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  59. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  60. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  61. package/public/his/editor/vender/validator.js +5094 -5094
  62. package/public/his/editor/vender/weui/weui.css +5659 -5659
  63. package/public/his/editor/vender/weui/weui.min.css +4 -4
  64. package/public/his/editor/vender/weui/weui.min.js +11 -11
  65. package/public/index.html +27 -27
  66. package/src/ReportView.js +19 -19
  67. package/src/assets/img/querySlotDemo.svg +15 -15
  68. package/src/assets/svg/badtwo.svg +1 -1
  69. package/src/assets/svg/goodtwo.svg +1 -1
  70. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  71. package/src/base-client/components/AI/demo.vue +31 -31
  72. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  73. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  74. package/src/base-client/components/common/AMisRender/index.js +3 -3
  75. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  76. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  77. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  78. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  79. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  80. package/src/base-client/components/common/CitySelect/index.js +3 -3
  81. package/src/base-client/components/common/CitySelect/index.md +109 -109
  82. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  83. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  84. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  85. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  86. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  87. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  88. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  89. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  90. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  91. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  92. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  93. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  94. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  95. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  96. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  97. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  98. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  99. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  100. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  101. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  102. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  103. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  104. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  105. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  106. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  107. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  108. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  109. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  110. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  111. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  112. package/src/base-client/components/common/Recording/index.js +3 -3
  113. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  114. package/src/base-client/components/common/Tree/index.js +2 -2
  115. package/src/base-client/components/common/Upload/index.js +3 -3
  116. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  117. package/src/base-client/components/common/XAddNativeForm/demo.vue +5 -2
  118. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  119. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  120. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  121. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  122. package/src/base-client/components/common/XAddReport/index.js +3 -3
  123. package/src/base-client/components/common/XAddReport/index.md +56 -56
  124. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  125. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  126. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  127. package/src/base-client/components/common/XButtons/index.js +3 -3
  128. package/src/base-client/components/common/XButtons/index.md +61 -61
  129. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  130. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  131. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  132. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  133. package/src/base-client/components/common/XDataCard/index.js +3 -3
  134. package/src/base-client/components/common/XDataCard/index.md +1 -1
  135. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  136. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  137. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  138. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  139. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  140. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  141. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  142. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  143. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  144. package/src/base-client/components/common/XForm/index.md +178 -178
  145. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  146. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  147. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  148. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  149. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  150. package/src/base-client/components/common/XFormTable/index.md +92 -92
  151. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +167 -167
  152. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  153. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  154. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  155. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  156. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  157. package/src/base-client/components/common/XPrint/PrintBill.vue +302 -302
  158. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  159. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  160. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  161. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  162. package/src/base-client/components/common/XPrint/index.vue +97 -97
  163. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  164. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  165. package/src/base-client/components/common/XReport/index.js +3 -3
  166. package/src/base-client/components/common/XReport/index.md +44 -44
  167. package/src/base-client/components/common/XReport/print.js +186 -186
  168. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  169. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  170. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  171. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  172. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  173. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  174. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  175. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  176. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  177. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  178. package/src/base-client/components/common/XStepView/index.js +3 -3
  179. package/src/base-client/components/common/XStepView/index.md +31 -31
  180. package/src/base-client/components/common/XTab/XTab.vue +3 -3
  181. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  182. package/src/base-client/components/common/XTab/index.js +3 -3
  183. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  184. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  185. package/src/base-client/components/common/XTable/index.md +255 -255
  186. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  187. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  188. package/src/base-client/components/common/XTree/index.js +3 -3
  189. package/src/base-client/components/common/XTree/index.md +36 -36
  190. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  191. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  192. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  193. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  194. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  195. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  196. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  197. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  198. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  199. package/src/base-client/components/his/threeTestOrders/textBox.vue +463 -463
  200. package/src/base-client/components/index.js +51 -51
  201. package/src/base-client/components/layout/XPageView/XErrorView.vue +11 -11
  202. package/src/base-client/components/layout/XPageView/XPageView.vue +155 -155
  203. package/src/base-client/components/layout/XPageView/index.js +3 -3
  204. package/src/base-client/components/layout/XPageView/index.md +38 -38
  205. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  206. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  207. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  208. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  209. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  210. package/src/base-client/plugins/Config.js +19 -19
  211. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  212. package/src/base-client/plugins/Recording.js +258 -258
  213. package/src/base-client/plugins/index.js +23 -23
  214. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  215. package/src/components/Charts/Bar.vue +62 -62
  216. package/src/components/Charts/ChartCard.vue +134 -134
  217. package/src/components/Charts/Liquid.vue +67 -67
  218. package/src/components/Charts/MiniArea.vue +39 -39
  219. package/src/components/Charts/MiniBar.vue +39 -39
  220. package/src/components/Charts/MiniProgress.vue +75 -75
  221. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  222. package/src/components/Charts/Radar.vue +68 -68
  223. package/src/components/Charts/RankList.vue +77 -77
  224. package/src/components/Charts/TagCloud.vue +113 -113
  225. package/src/components/Charts/TransferBar.vue +64 -64
  226. package/src/components/Charts/Trend.vue +82 -82
  227. package/src/components/Charts/chart.less +12 -12
  228. package/src/components/Charts/smooth.area.less +13 -13
  229. package/src/components/CodeMirror/inedx.vue +118 -118
  230. package/src/components/CodeMirror/setting.js +40 -40
  231. package/src/components/HeightScanner/index.vue +571 -571
  232. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  233. package/src/components/NumberInfo/index.js +3 -3
  234. package/src/components/NumberInfo/index.less +54 -54
  235. package/src/components/NumberInfo/index.md +43 -43
  236. package/src/components/card/ChartCard.vue +79 -79
  237. package/src/components/chart/Bar.vue +60 -60
  238. package/src/components/chart/MiniArea.vue +67 -67
  239. package/src/components/chart/MiniBar.vue +59 -59
  240. package/src/components/chart/MiniProgress.vue +57 -57
  241. package/src/components/chart/Radar.vue +80 -80
  242. package/src/components/chart/RankingList.vue +60 -60
  243. package/src/components/chart/Trend.vue +79 -79
  244. package/src/components/chart/index.less +9 -9
  245. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  246. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  247. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  248. package/src/components/checkbox/index.js +9 -9
  249. package/src/components/exception/ExceptionPage.vue +70 -70
  250. package/src/components/g2Charts/constants.js +202 -202
  251. package/src/components/g2Charts/demo.vue +808 -808
  252. package/src/components/g2Charts/designer.vue +228 -228
  253. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  254. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  255. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  256. package/src/components/g2Charts/index.vue +397 -397
  257. package/src/components/index.js +36 -36
  258. package/src/components/input/IInput.vue +66 -66
  259. package/src/components/menu/SideMenu.vue +75 -75
  260. package/src/components/menu/menu.js +273 -273
  261. package/src/components/setting/Setting.vue +234 -234
  262. package/src/components/tool/AStepItem.vue +60 -60
  263. package/src/config/CreateQueryConfig.js +325 -325
  264. package/src/config/default/antd.config.js +89 -89
  265. package/src/config/default/setting.config.js +55 -55
  266. package/src/font-style/font.css +4 -4
  267. package/src/layouts/CommonLayout.vue +56 -56
  268. package/src/layouts/PageLayout.vue +151 -151
  269. package/src/layouts/SinglePageView.vue +136 -136
  270. package/src/layouts/header/AdminHeader.vue +132 -132
  271. package/src/layouts/header/HeaderNotice.vue +177 -177
  272. package/src/layouts/header/InstitutionDetail.vue +181 -181
  273. package/src/layouts/tabs/TabsHead.vue +189 -189
  274. package/src/layouts/tabs/TabsView.vue +389 -389
  275. package/src/lib.js +1 -1
  276. package/src/main.js +34 -34
  277. package/src/mock/extend/index.js +84 -84
  278. package/src/mock/goods/index.js +108 -108
  279. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  280. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  281. package/src/pages/DefaultExample/index.vue +77 -77
  282. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  283. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  284. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  285. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  286. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  287. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  288. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  289. package/src/pages/DynamicStatistics/index.vue +282 -282
  290. package/src/pages/Example/childIndex.vue +15 -15
  291. package/src/pages/Example/index.vue +30 -30
  292. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  293. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  294. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  295. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  296. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  297. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  298. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  299. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  300. package/src/pages/Recording/index.vue +77 -77
  301. package/src/pages/ServiceReview/index.vue +284 -284
  302. package/src/pages/SubExample/index.vue +26 -26
  303. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  304. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  305. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  306. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +233 -233
  307. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +261 -261
  308. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  309. package/src/pages/XPageViewExample/index.vue +38 -38
  310. package/src/pages/XReportView/index.vue +64 -64
  311. package/src/pages/XTreeOneProExample/index.vue +67 -67
  312. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  313. package/src/pages/login/Login.vue +378 -378
  314. package/src/pages/login/LoginV3.vue +389 -389
  315. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  316. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  317. package/src/pages/report/ReportTable.js +124 -124
  318. package/src/pages/resourceManage/orgListManage.vue +98 -98
  319. package/src/pages/system/dictionary/index.vue +44 -44
  320. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  321. package/src/pages/system/monitor/operLog/index.vue +37 -37
  322. package/src/pages/system/settings/modifyPassword.vue +117 -117
  323. package/src/pages/system/ticket/index.vue +480 -480
  324. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  325. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  326. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  327. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  328. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  329. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  330. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  331. package/src/plugins/EventLogPlugin.js +33 -33
  332. package/src/plugins/FindParentsData.js +17 -17
  333. package/src/router/async/config.async.js +35 -35
  334. package/src/router/async/router.map.js +2 -2
  335. package/src/router/index.js +27 -27
  336. package/src/router.js +19 -19
  337. package/src/services/DataModel.js +30 -30
  338. package/src/services/LodopFuncs.js +137 -137
  339. package/src/services/api/TicketDetailsViewApi.js +46 -46
  340. package/src/services/api/cas.js +79 -79
  341. package/src/services/api/common.js +346 -346
  342. package/src/services/api/entity.js +18 -18
  343. package/src/services/api/index.js +17 -17
  344. package/src/services/api/workFlow.js +61 -61
  345. package/src/store/modules/account.js +115 -115
  346. package/src/store/modules/index.js +5 -5
  347. package/src/store/modules/lowCode.js +33 -33
  348. package/src/store/modules/setting.js +119 -119
  349. package/src/theme/default/style.less +58 -58
  350. package/src/theme/global.less +159 -159
  351. package/src/utils/authority-utils.js +85 -85
  352. package/src/utils/errorCode.js +6 -6
  353. package/src/utils/formatter.js +74 -74
  354. package/src/utils/htmlToPDF.js +108 -108
  355. package/src/utils/htmlToPDFApi.js +5 -5
  356. package/src/utils/login.js +188 -188
  357. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  358. package/src/utils/lowcode/lowcodeLog.js +29 -29
  359. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  360. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  361. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  362. package/src/utils/map-utils.js +47 -47
  363. package/src/utils/reg.js +95 -95
  364. package/src/utils/runEvalFunction.js +14 -14
  365. package/src/utils/theme-color-replacer-extend.js +92 -92
  366. package/src/utils/util.js +329 -329
  367. package/src/utils/waterMark.js +31 -31
  368. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,463 +1,463 @@
1
- <script setup>
2
- import { ref, reactive, watch } from 'vue'
3
- import { message } from 'ant-design-vue'
4
- import { runLogic } from '@vue2-client/services/api/common'
5
-
6
- // 定义组件属性
7
- const props = defineProps({
8
- visible: Boolean,
9
- id: {
10
- type: Number,
11
- default: 180
12
- },
13
- modalType: {
14
- type: String,
15
- default: 'create',
16
- validator: (value) => ['create', 'update'].includes(value)
17
- },
18
- editorReady: {
19
- type: Boolean,
20
- default: false
21
- }
22
- })
23
-
24
- // 定义组件事件
25
- const emit = defineEmits(['update:visible', 'submit', 'cancel'])
26
-
27
- // 常量
28
- const modalTitles = {
29
- create: '创建体温单',
30
- update: '更新体温单'
31
- }
32
-
33
- // 响应式状态
34
- const submitLoading = ref(false)
35
- const formErrors = ref({})
36
-
37
- // 表单数据
38
- const formData = reactive({
39
- id: '',
40
- name: '',
41
- inDate: '',
42
- diag: '',
43
- dept: '',
44
- bed: '',
45
- medicalNo: '',
46
- begin: '',
47
- operateDate: '',
48
- notes: '',
49
- sex: '男',
50
- weight: '',
51
- heart: '',
52
- tempType: '',
53
- temperature: '',
54
- breath: '',
55
- sphygmus: '',
56
- physicalcool: '',
57
- labels: '',
58
- data1: '',
59
- data2: '',
60
- data3: '',
61
- data4: '',
62
- data5: '',
63
- data6: '',
64
- data7: '',
65
- data8: '',
66
- data9: '',
67
- pain: ''
68
- })
69
-
70
- // 监听 props 变化初始化表单
71
- watch(() => props.visible, (newVal, oldVal) => {
72
- if (newVal) {
73
- // 如果是从关闭状态变为打开状态,重置表单错误
74
- formErrors.value = {}
75
-
76
- // 无论何种模式,都先尝试从服务加载数据
77
- initFormData()
78
- } else if (oldVal && !newVal) {
79
- // 当弹窗关闭时,清空表单数据,为下次打开做准备
80
- resetForm()
81
- }
82
- }, { immediate: true })
83
-
84
- watch(() => props.modalType, (newVal) => {
85
- if (props.visible) {
86
- // 无论何种模式,都先尝试从服务加载数据
87
- initFormData()
88
- }
89
- })
90
-
91
- watch(() => props.id, (newVal) => {
92
- if (newVal) {
93
- formData.id = newVal
94
- }
95
- }, { immediate: true })
96
-
97
- // 重置表单为默认值
98
- const resetForm = () => {
99
- // 清空表单错误
100
- formErrors.value = {}
101
-
102
- const today = new Date().toISOString().split('T')[0]
103
-
104
- // 重置所有字段
105
- formData.id = props.id
106
- formData.name = ''
107
- formData.inDate = today
108
- formData.diag = ''
109
- formData.dept = ''
110
- formData.bed = ''
111
- formData.medicalNo = ''
112
- formData.begin = today
113
- formData.operateDate = ''
114
- formData.notes = ''
115
- formData.sex = ''
116
- formData.weight = ''
117
- formData.heart = ''
118
- formData.tempType = ''
119
- formData.temperature = ''
120
- formData.pulse = ''
121
- formData.breathing = ''
122
- formData.bloodPressure = ''
123
- formData.labels = ''
124
- formData.data1 = ''
125
- formData.data2 = ''
126
- formData.data3 = ''
127
- formData.data4 = ''
128
- formData.data5 = ''
129
- formData.data6 = ''
130
- formData.data7 = ''
131
- formData.data8 = ''
132
- formData.data9 = ''
133
- formData.pain = ''
134
- }
135
-
136
- // 处理JSON字符串数据
137
- const parseFormData = (data) => {
138
- if (!data) return null
139
- try {
140
- // 如果是字符串,尝试解析为JSON
141
- if (typeof data === 'string') {
142
- return JSON.parse(data)
143
- }
144
- // 如果已经是对象且有f_data字段,尝试解析f_data
145
- if (typeof data === 'object' && data.f_data) {
146
- return JSON.parse(data.f_data)
147
- }
148
- // 如果是普通对象,直接返回
149
- return data
150
- } catch (error) {
151
- console.error('解析数据失败:', error)
152
- return null
153
- }
154
- }
155
-
156
- // 初始化表单数据
157
- const initFormData = async () => {
158
- try {
159
- let parsedData = null
160
- let resultData = null
161
- try {
162
- // 尝试从服务器获取数据
163
- resultData = await runLogic('threeTestOrderDataLOGIC', { id: props.id }, 'af-his')
164
- console.log('体温单数据 = ', resultData)
165
- // 处理不同格式的返回数据
166
- if (resultData) {
167
- // 如果是数组,取第一项
168
- if (Array.isArray(resultData) && resultData.length > 0) {
169
- const firstItem = resultData[0]
170
-
171
- // 检查是否有f_data字段
172
- if (firstItem.f_data) {
173
- parsedData = parseFormData(firstItem.f_data)
174
- } else {
175
- // 可能整个对象就是数据
176
- parsedData = firstItem
177
- }
178
- } else if (typeof resultData === 'object') {
179
- if (resultData.f_data) {
180
- parsedData = parseFormData(resultData.f_data)
181
- } else { parsedData = resultData }
182
- }
183
- }
184
- } catch (error) {
185
- console.error('获取数据失败:', error)
186
- }
187
- // 如果解析成功且非创建模式,填充表单
188
- if (parsedData && props.modalType !== 'create') {
189
- console.log('解析后的数据:', parsedData)
190
- // 将解析后的数据填充到表单中
191
- Object.keys(parsedData).forEach(key => {
192
- if (key in formData) {
193
- formData[key] = parsedData[key]
194
- }
195
- })
196
- // 确保formData.id是正确设置的
197
- if (!formData.id && parsedData.id) {
198
- formData.id = parsedData.id
199
- }
200
- return
201
- } else if (props.modalType === 'create') {
202
- // 创建模式下重置表单
203
- resetForm()
204
- return
205
- }
206
- } catch (error) {
207
- console.error('初始化表单数据失败:', error)
208
- message.error('体温单数据加载失败,将使用默认值')
209
- }
210
- // 如果没有数据或解析失败,使用默认值
211
- resetForm()
212
- }
213
-
214
- // 关闭弹窗
215
- const closeModal = () => {
216
- // 关闭弹窗前清空表单数据
217
- resetForm()
218
- emit('update:visible', false)
219
- emit('cancel')
220
- }
221
-
222
- // 验证表单
223
- const validateForm = () => {
224
- const errors = {}
225
- let hasError = false
226
- // 通用字段验证
227
- const requiredFields = [
228
- { key: 'id', label: 'ID' },
229
- { key: 'name', label: '姓名' },
230
- { key: 'inDate', label: '入院日期' },
231
- { key: 'dept', label: '科室' },
232
- { key: 'bed', label: '床位' },
233
- { key: 'medicalNo', label: '病历号' },
234
- { key: 'begin', label: '开始日期' },
235
- { key: 'notes', label: '备注' },
236
- { key: 'heart', label: '心率' },
237
- { key: 'tempType', label: '体温类型' },
238
- { key: 'temperature', label: '体温' },
239
- { key: 'breath', label: '呼吸' },
240
- { key: 'labels', label: '标签' },
241
- { key: 'data1', label: '血压' },
242
- { key: 'data2', label: '入水量' },
243
- { key: 'data3', label: '出水量' },
244
- { key: 'data4', label: '大便次数' },
245
- { key: 'data5', label: '小便次数' }
246
- ]
247
- // 成人特有字段
248
- requiredFields.push(
249
- { key: 'diag', label: '诊断' },
250
- { key: 'operateDate', label: '手术日期' },
251
- { key: 'sphygmus', label: '脉搏' },
252
- { key: 'data6', label: '身高' },
253
- { key: 'data7', label: '体重' },
254
- { key: 'data8', label: '过敏药' },
255
- { key: 'data9', label: '其他数据' }
256
- )
257
- // 检查每个必填字段
258
- requiredFields.forEach(field => {
259
- // 首先检查字段是否存在
260
- if (formData[field.key] === undefined || formData[field.key] === null) {
261
- errors[field.key] = `${field.label}不能为空`
262
- hasError = true
263
- return
264
- }
265
- // 将值转换为字符串后再检查是否为空
266
- const value = String(formData[field.key])
267
- if (value.trim() === '') {
268
- errors[field.key] = `${field.label}不能为空`
269
- hasError = true
270
- }
271
- })
272
-
273
- formErrors.value = errors
274
- if (hasError) {
275
- message.error('表单验证失败,请填写所有必填项')
276
- return false
277
- }
278
- return true
279
- }
280
-
281
- // 获取表单数据
282
- const getFormData = () => {
283
- const commonData = {
284
- id: formData.id || `VS${Date.now()}`,
285
- name: formData.name,
286
- inDate: formData.inDate,
287
- dept: formData.dept,
288
- bed: formData.bed,
289
- medicalNo: formData.medicalNo,
290
- begin: formData.begin,
291
- notes: formData.notes,
292
- heart: formData.heart,
293
- tempType: formData.tempType,
294
- temperature: formData.temperature,
295
- breath: formData.breath,
296
- labels: formData.labels,
297
- data1: formData.data1,
298
- data2: formData.data2,
299
- data3: formData.data3,
300
- data4: formData.data4,
301
- data5: formData.data5,
302
- data6: formData.data6,
303
- data7: formData.data7,
304
- data8: formData.data8,
305
- data9: formData.data9,
306
- pain: formData.pain,
307
- diag: formData.diag,
308
- operateDate: formData.operateDate,
309
- sphygmus: formData.sphygmus
310
- }
311
- return {
312
- ...commonData,
313
- type: 'normal'
314
- }
315
- }
316
-
317
- // 提交表单
318
- const submitForm = async () => {
319
- if (!props.editorReady) {
320
- message.error('体温单编辑器未加载完成,请等待或刷新页面')
321
- return
322
- }
323
- // 首先验证表单
324
- if (!validateForm()) {
325
- return
326
- }
327
- submitLoading.value = true
328
- try {
329
- const data = getFormData()
330
- emit('submit', data)
331
- // 关闭弹窗
332
- closeModal()
333
- } catch (err) {
334
- console.error('提交体温单数据出错:', err)
335
- message.error(`提交体温单数据失败: ${err.message || '未知错误'}`)
336
- } finally {
337
- submitLoading.value = false
338
- }
339
- }
340
- </script>
341
-
342
- <template>
343
- <a-modal
344
- :title="modalTitles[modalType]"
345
- :visible="visible"
346
- @cancel="closeModal"
347
- :width="700"
348
- :footer="null">
349
- <a-form :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
350
- <!-- 通用基础信息字段 -->
351
- <a-form-item label="ID" :validateStatus="formErrors.id ? 'error' : ''" :help="formErrors.id">
352
- <a-input v-model="formData.id" :placeholder="`请输入ID,如:AD20230001`" />
353
- </a-form-item>
354
- <a-form-item label="姓名" :validateStatus="formErrors.name ? 'error' : ''" :help="formErrors.name">
355
- <a-input v-model="formData.name" placeholder="请输入姓名,如:张三" />
356
- </a-form-item>
357
- <a-form-item label="入院日期" :validateStatus="formErrors.inDate ? 'error' : ''" :help="formErrors.inDate">
358
- <a-input v-model="formData.inDate" placeholder="请输入日期,如:2023-08-01" />
359
- </a-form-item>
360
- <a-form-item label="诊断" :validateStatus="formErrors.diag ? 'error' : ''" :help="formErrors.diag">
361
- <a-input v-model="formData.diag" placeholder="请输入诊断,如:新型冠状病毒肺炎" />
362
- </a-form-item>
363
- <!-- 通用字段 -->
364
- <a-form-item label="科室" :validateStatus="formErrors.dept ? 'error' : ''" :help="formErrors.dept">
365
- <a-input v-model="formData.dept" :placeholder="`请输入科室,如:呼吸内科`" />
366
- </a-form-item>
367
- <a-form-item label="床位" :validateStatus="formErrors.bed ? 'error' : ''" :help="formErrors.bed">
368
- <a-input v-model="formData.bed" placeholder="请输入床位,如:801" />
369
- </a-form-item>
370
- <a-form-item label="病历号" :validateStatus="formErrors.medicalNo ? 'error' : ''" :help="formErrors.medicalNo">
371
- <a-input v-model="formData.medicalNo" placeholder="请输入病历号,如:202300991" />
372
- </a-form-item>
373
- <a-form-item label="开始日期" :validateStatus="formErrors.begin ? 'error' : ''" :help="formErrors.begin">
374
- <a-input v-model="formData.begin" placeholder="请输入日期,如:2023-08-01" />
375
- </a-form-item>
376
- <a-form-item label="手术日期" :validateStatus="formErrors.operateDate ? 'error' : ''" :help="formErrors.operateDate">
377
- <a-input v-model="formData.operateDate" placeholder="请输入日期,如:2023-08-03" />
378
- </a-form-item>
379
- <!-- 备注字段 -->
380
- <a-form-item label="备注" :validateStatus="formErrors.notes ? 'error' : ''" :help="formErrors.notes">
381
- <a-input v-model="formData.notes" :placeholder="`请输入备注,如:${modalType === 'baby' ? '出生-十时二十分' : '入院-十时二十分,,转入ICU,,,,,,,手术'}`" />
382
- <div class="input-tip">格式:多个值用逗号分隔,对应不同日期</div>
383
- </a-form-item>
384
- <!-- 根据表单类型显示不同的数据字段 -->
385
- <a-form-item label="脉搏" :validateStatus="formErrors.sphygmus ? 'error' : ''" :help="formErrors.sphygmus">
386
- <a-input v-model="formData.sphygmus" placeholder="脉搏数据,如:112,110,109,103,108,85" />
387
- <div class="input-tip">格式:多个值用逗号分隔</div>
388
- </a-form-item>
389
- <!-- 生命体征数据字段 -->
390
- <a-form-item label="心率" :validateStatus="formErrors.heart ? 'error' : ''" :help="formErrors.heart">
391
- <a-input v-model="formData.heart" placeholder="心率数据,多个值用逗号分隔,如:112,120,118,111" />
392
- <div class="input-tip">格式:多个值用逗号分隔</div>
393
- </a-form-item>
394
- <a-form-item label="体温类型" :validateStatus="formErrors.tempType ? 'error' : ''" :help="formErrors.tempType">
395
- <a-input v-model="formData.tempType" placeholder="体温类型,如:0,1,2,3,0,1" />
396
- <div class="input-tip">格式:多个值用逗号分隔,0-3表示不同类型</div>
397
- </a-form-item>
398
- <a-form-item label="体温" :validateStatus="formErrors.temperature ? 'error' : ''" :help="formErrors.temperature">
399
- <a-input v-model="formData.temperature" :placeholder="`体温数据,如:38.7,38.9,38.5,39.1,38.5,38.5|37.1`" />
400
- <div class="input-tip">格式:多个值用逗号分隔<template v-if="modalType !== 'baby'">,|表示新一行数据</template></div>
401
- </a-form-item>
402
- <!-- 通用数据字段 -->
403
- <a-form-item label="呼吸" :validateStatus="formErrors.breath ? 'error' : ''" :help="formErrors.breath">
404
- <a-input v-model="formData.breath" placeholder="呼吸数据,如:30,30,R,,35,35" />
405
- <div class="input-tip">格式:多个值用逗号分隔,R表示异常</div>
406
- </a-form-item>
407
- <a-form-item label="标签" :validateStatus="formErrors.labels ? 'error' : ''" :help="formErrors.labels">
408
- <a-input v-model="formData.labels" :placeholder="`标签数据,如:血压(mmHg)|入水量(ml)|出水量(ml)|大便(次)|小便(次)${modalType === 'baby' ? '' : '|身高(cm)|体重(kg)|过敏药'}`" />
409
- <div class="input-tip">格式:多个标签用|分隔</div>
410
- </a-form-item>
411
- <!-- 通用数据字段 -->
412
- <a-form-item label="血压" :validateStatus="formErrors.data1 ? 'error' : ''" :help="formErrors.data1">
413
- <a-input v-model="formData.data1" placeholder="血压数据,如:120/85,121/84,,110/75" />
414
- <div class="input-tip">格式:多个值用逗号分隔</div>
415
- </a-form-item>
416
- <a-form-item label="入水量" :validateStatus="formErrors.data2 ? 'error' : ''" :help="formErrors.data2">
417
- <a-input v-model="formData.data2" placeholder="入水量数据,如:1180ml,,,500ml,,40ml" />
418
- <div class="input-tip">格式:多个值用逗号分隔</div>
419
- </a-form-item>
420
- <a-form-item label="出水量" :validateStatus="formErrors.data3 ? 'error' : ''" :help="formErrors.data3">
421
- <a-input v-model="formData.data3" placeholder="出水量数据,如:500ml,,,,500ml,,67ml" />
422
- <div class="input-tip">格式:多个值用逗号分隔</div>
423
- </a-form-item>
424
- <a-form-item label="大便次数" :validateStatus="formErrors.data4 ? 'error' : ''" :help="formErrors.data4">
425
- <a-input v-model="formData.data4" placeholder="大便次数数据,如:2,4,5,3,3,3,2,,2" />
426
- <div class="input-tip">格式:多个值用逗号分隔</div>
427
- </a-form-item>
428
- <a-form-item label="小便次数" :validateStatus="formErrors.data5 ? 'error' : ''" :help="formErrors.data5">
429
- <a-input v-model="formData.data5" placeholder="小便次数数据,如:2,4,5,3,3,3,2,,2" />
430
- <div class="input-tip">格式:多个值用逗号分隔</div>
431
- </a-form-item>
432
- <a-form-item label="身高" :validateStatus="formErrors.data6 ? 'error' : ''" :help="formErrors.data6">
433
- <a-input v-model="formData.data6" placeholder="身高数据,如:167cm,,,,,,,,,164cm" />
434
- <div class="input-tip">格式:多个值用逗号分隔</div>
435
- </a-form-item>
436
- <a-form-item label="体重" :validateStatus="formErrors.data7 ? 'error' : ''" :help="formErrors.data7">
437
- <a-input v-model="formData.data7" placeholder="体重数据,如:95kg,,,,,90kg" />
438
- <div class="input-tip">格式:多个值用逗号分隔</div>
439
- </a-form-item>
440
- <a-form-item label="过敏药" :validateStatus="formErrors.data8 ? 'error' : ''" :help="formErrors.data8">
441
- <a-input v-model="formData.data8" placeholder="过敏药数据,如:青霉素," />
442
- <div class="input-tip">格式:多个值用逗号分隔</div>
443
- </a-form-item>
444
- <a-form-item label="其他数据" :validateStatus="formErrors.data9 ? 'error' : ''" :help="formErrors.data9">
445
- <a-input v-model="formData.data9" placeholder="其他数据,如:测试," />
446
- <div class="input-tip">格式:多个值用逗号分隔</div>
447
- </a-form-item>
448
- <!-- 按钮 -->
449
- <a-form-item :wrapper-col="{ span: 18, offset: 6 }">
450
- <a-button type="primary" @click="submitForm" :loading="submitLoading" style="margin-right: 10px">确定</a-button>
451
- <a-button @click="closeModal">取消</a-button>
452
- </a-form-item>
453
- </a-form>
454
- </a-modal>
455
- </template>
456
-
457
- <style scoped>
458
- .input-tip {
459
- color: #999;
460
- font-size: 12px;
461
- margin-top: 4px;
462
- }
463
- </style>
1
+ <script setup>
2
+ import { ref, reactive, watch } from 'vue'
3
+ import { message } from 'ant-design-vue'
4
+ import { runLogic } from '@vue2-client/services/api/common'
5
+
6
+ // 定义组件属性
7
+ const props = defineProps({
8
+ visible: Boolean,
9
+ id: {
10
+ type: Number,
11
+ default: 180
12
+ },
13
+ modalType: {
14
+ type: String,
15
+ default: 'create',
16
+ validator: (value) => ['create', 'update'].includes(value)
17
+ },
18
+ editorReady: {
19
+ type: Boolean,
20
+ default: false
21
+ }
22
+ })
23
+
24
+ // 定义组件事件
25
+ const emit = defineEmits(['update:visible', 'submit', 'cancel'])
26
+
27
+ // 常量
28
+ const modalTitles = {
29
+ create: '创建体温单',
30
+ update: '更新体温单'
31
+ }
32
+
33
+ // 响应式状态
34
+ const submitLoading = ref(false)
35
+ const formErrors = ref({})
36
+
37
+ // 表单数据
38
+ const formData = reactive({
39
+ id: '',
40
+ name: '',
41
+ inDate: '',
42
+ diag: '',
43
+ dept: '',
44
+ bed: '',
45
+ medicalNo: '',
46
+ begin: '',
47
+ operateDate: '',
48
+ notes: '',
49
+ sex: '男',
50
+ weight: '',
51
+ heart: '',
52
+ tempType: '',
53
+ temperature: '',
54
+ breath: '',
55
+ sphygmus: '',
56
+ physicalcool: '',
57
+ labels: '',
58
+ data1: '',
59
+ data2: '',
60
+ data3: '',
61
+ data4: '',
62
+ data5: '',
63
+ data6: '',
64
+ data7: '',
65
+ data8: '',
66
+ data9: '',
67
+ pain: ''
68
+ })
69
+
70
+ // 监听 props 变化初始化表单
71
+ watch(() => props.visible, (newVal, oldVal) => {
72
+ if (newVal) {
73
+ // 如果是从关闭状态变为打开状态,重置表单错误
74
+ formErrors.value = {}
75
+
76
+ // 无论何种模式,都先尝试从服务加载数据
77
+ initFormData()
78
+ } else if (oldVal && !newVal) {
79
+ // 当弹窗关闭时,清空表单数据,为下次打开做准备
80
+ resetForm()
81
+ }
82
+ }, { immediate: true })
83
+
84
+ watch(() => props.modalType, (newVal) => {
85
+ if (props.visible) {
86
+ // 无论何种模式,都先尝试从服务加载数据
87
+ initFormData()
88
+ }
89
+ })
90
+
91
+ watch(() => props.id, (newVal) => {
92
+ if (newVal) {
93
+ formData.id = newVal
94
+ }
95
+ }, { immediate: true })
96
+
97
+ // 重置表单为默认值
98
+ const resetForm = () => {
99
+ // 清空表单错误
100
+ formErrors.value = {}
101
+
102
+ const today = new Date().toISOString().split('T')[0]
103
+
104
+ // 重置所有字段
105
+ formData.id = props.id
106
+ formData.name = ''
107
+ formData.inDate = today
108
+ formData.diag = ''
109
+ formData.dept = ''
110
+ formData.bed = ''
111
+ formData.medicalNo = ''
112
+ formData.begin = today
113
+ formData.operateDate = ''
114
+ formData.notes = ''
115
+ formData.sex = ''
116
+ formData.weight = ''
117
+ formData.heart = ''
118
+ formData.tempType = ''
119
+ formData.temperature = ''
120
+ formData.pulse = ''
121
+ formData.breathing = ''
122
+ formData.bloodPressure = ''
123
+ formData.labels = ''
124
+ formData.data1 = ''
125
+ formData.data2 = ''
126
+ formData.data3 = ''
127
+ formData.data4 = ''
128
+ formData.data5 = ''
129
+ formData.data6 = ''
130
+ formData.data7 = ''
131
+ formData.data8 = ''
132
+ formData.data9 = ''
133
+ formData.pain = ''
134
+ }
135
+
136
+ // 处理JSON字符串数据
137
+ const parseFormData = (data) => {
138
+ if (!data) return null
139
+ try {
140
+ // 如果是字符串,尝试解析为JSON
141
+ if (typeof data === 'string') {
142
+ return JSON.parse(data)
143
+ }
144
+ // 如果已经是对象且有f_data字段,尝试解析f_data
145
+ if (typeof data === 'object' && data.f_data) {
146
+ return JSON.parse(data.f_data)
147
+ }
148
+ // 如果是普通对象,直接返回
149
+ return data
150
+ } catch (error) {
151
+ console.error('解析数据失败:', error)
152
+ return null
153
+ }
154
+ }
155
+
156
+ // 初始化表单数据
157
+ const initFormData = async () => {
158
+ try {
159
+ let parsedData = null
160
+ let resultData = null
161
+ try {
162
+ // 尝试从服务器获取数据
163
+ resultData = await runLogic('threeTestOrderDataLOGIC', { id: props.id }, 'af-his')
164
+ console.log('体温单数据 = ', resultData)
165
+ // 处理不同格式的返回数据
166
+ if (resultData) {
167
+ // 如果是数组,取第一项
168
+ if (Array.isArray(resultData) && resultData.length > 0) {
169
+ const firstItem = resultData[0]
170
+
171
+ // 检查是否有f_data字段
172
+ if (firstItem.f_data) {
173
+ parsedData = parseFormData(firstItem.f_data)
174
+ } else {
175
+ // 可能整个对象就是数据
176
+ parsedData = firstItem
177
+ }
178
+ } else if (typeof resultData === 'object') {
179
+ if (resultData.f_data) {
180
+ parsedData = parseFormData(resultData.f_data)
181
+ } else { parsedData = resultData }
182
+ }
183
+ }
184
+ } catch (error) {
185
+ console.error('获取数据失败:', error)
186
+ }
187
+ // 如果解析成功且非创建模式,填充表单
188
+ if (parsedData && props.modalType !== 'create') {
189
+ console.log('解析后的数据:', parsedData)
190
+ // 将解析后的数据填充到表单中
191
+ Object.keys(parsedData).forEach(key => {
192
+ if (key in formData) {
193
+ formData[key] = parsedData[key]
194
+ }
195
+ })
196
+ // 确保formData.id是正确设置的
197
+ if (!formData.id && parsedData.id) {
198
+ formData.id = parsedData.id
199
+ }
200
+ return
201
+ } else if (props.modalType === 'create') {
202
+ // 创建模式下重置表单
203
+ resetForm()
204
+ return
205
+ }
206
+ } catch (error) {
207
+ console.error('初始化表单数据失败:', error)
208
+ message.error('体温单数据加载失败,将使用默认值')
209
+ }
210
+ // 如果没有数据或解析失败,使用默认值
211
+ resetForm()
212
+ }
213
+
214
+ // 关闭弹窗
215
+ const closeModal = () => {
216
+ // 关闭弹窗前清空表单数据
217
+ resetForm()
218
+ emit('update:visible', false)
219
+ emit('cancel')
220
+ }
221
+
222
+ // 验证表单
223
+ const validateForm = () => {
224
+ const errors = {}
225
+ let hasError = false
226
+ // 通用字段验证
227
+ const requiredFields = [
228
+ { key: 'id', label: 'ID' },
229
+ { key: 'name', label: '姓名' },
230
+ { key: 'inDate', label: '入院日期' },
231
+ { key: 'dept', label: '科室' },
232
+ { key: 'bed', label: '床位' },
233
+ { key: 'medicalNo', label: '病历号' },
234
+ { key: 'begin', label: '开始日期' },
235
+ { key: 'notes', label: '备注' },
236
+ { key: 'heart', label: '心率' },
237
+ { key: 'tempType', label: '体温类型' },
238
+ { key: 'temperature', label: '体温' },
239
+ { key: 'breath', label: '呼吸' },
240
+ { key: 'labels', label: '标签' },
241
+ { key: 'data1', label: '血压' },
242
+ { key: 'data2', label: '入水量' },
243
+ { key: 'data3', label: '出水量' },
244
+ { key: 'data4', label: '大便次数' },
245
+ { key: 'data5', label: '小便次数' }
246
+ ]
247
+ // 成人特有字段
248
+ requiredFields.push(
249
+ { key: 'diag', label: '诊断' },
250
+ { key: 'operateDate', label: '手术日期' },
251
+ { key: 'sphygmus', label: '脉搏' },
252
+ { key: 'data6', label: '身高' },
253
+ { key: 'data7', label: '体重' },
254
+ { key: 'data8', label: '过敏药' },
255
+ { key: 'data9', label: '其他数据' }
256
+ )
257
+ // 检查每个必填字段
258
+ requiredFields.forEach(field => {
259
+ // 首先检查字段是否存在
260
+ if (formData[field.key] === undefined || formData[field.key] === null) {
261
+ errors[field.key] = `${field.label}不能为空`
262
+ hasError = true
263
+ return
264
+ }
265
+ // 将值转换为字符串后再检查是否为空
266
+ const value = String(formData[field.key])
267
+ if (value.trim() === '') {
268
+ errors[field.key] = `${field.label}不能为空`
269
+ hasError = true
270
+ }
271
+ })
272
+
273
+ formErrors.value = errors
274
+ if (hasError) {
275
+ message.error('表单验证失败,请填写所有必填项')
276
+ return false
277
+ }
278
+ return true
279
+ }
280
+
281
+ // 获取表单数据
282
+ const getFormData = () => {
283
+ const commonData = {
284
+ id: formData.id || `VS${Date.now()}`,
285
+ name: formData.name,
286
+ inDate: formData.inDate,
287
+ dept: formData.dept,
288
+ bed: formData.bed,
289
+ medicalNo: formData.medicalNo,
290
+ begin: formData.begin,
291
+ notes: formData.notes,
292
+ heart: formData.heart,
293
+ tempType: formData.tempType,
294
+ temperature: formData.temperature,
295
+ breath: formData.breath,
296
+ labels: formData.labels,
297
+ data1: formData.data1,
298
+ data2: formData.data2,
299
+ data3: formData.data3,
300
+ data4: formData.data4,
301
+ data5: formData.data5,
302
+ data6: formData.data6,
303
+ data7: formData.data7,
304
+ data8: formData.data8,
305
+ data9: formData.data9,
306
+ pain: formData.pain,
307
+ diag: formData.diag,
308
+ operateDate: formData.operateDate,
309
+ sphygmus: formData.sphygmus
310
+ }
311
+ return {
312
+ ...commonData,
313
+ type: 'normal'
314
+ }
315
+ }
316
+
317
+ // 提交表单
318
+ const submitForm = async () => {
319
+ if (!props.editorReady) {
320
+ message.error('体温单编辑器未加载完成,请等待或刷新页面')
321
+ return
322
+ }
323
+ // 首先验证表单
324
+ if (!validateForm()) {
325
+ return
326
+ }
327
+ submitLoading.value = true
328
+ try {
329
+ const data = getFormData()
330
+ emit('submit', data)
331
+ // 关闭弹窗
332
+ closeModal()
333
+ } catch (err) {
334
+ console.error('提交体温单数据出错:', err)
335
+ message.error(`提交体温单数据失败: ${err.message || '未知错误'}`)
336
+ } finally {
337
+ submitLoading.value = false
338
+ }
339
+ }
340
+ </script>
341
+
342
+ <template>
343
+ <a-modal
344
+ :title="modalTitles[modalType]"
345
+ :visible="visible"
346
+ @cancel="closeModal"
347
+ :width="700"
348
+ :footer="null">
349
+ <a-form :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
350
+ <!-- 通用基础信息字段 -->
351
+ <a-form-item label="ID" :validateStatus="formErrors.id ? 'error' : ''" :help="formErrors.id">
352
+ <a-input v-model="formData.id" :placeholder="`请输入ID,如:AD20230001`" />
353
+ </a-form-item>
354
+ <a-form-item label="姓名" :validateStatus="formErrors.name ? 'error' : ''" :help="formErrors.name">
355
+ <a-input v-model="formData.name" placeholder="请输入姓名,如:张三" />
356
+ </a-form-item>
357
+ <a-form-item label="入院日期" :validateStatus="formErrors.inDate ? 'error' : ''" :help="formErrors.inDate">
358
+ <a-input v-model="formData.inDate" placeholder="请输入日期,如:2023-08-01" />
359
+ </a-form-item>
360
+ <a-form-item label="诊断" :validateStatus="formErrors.diag ? 'error' : ''" :help="formErrors.diag">
361
+ <a-input v-model="formData.diag" placeholder="请输入诊断,如:新型冠状病毒肺炎" />
362
+ </a-form-item>
363
+ <!-- 通用字段 -->
364
+ <a-form-item label="科室" :validateStatus="formErrors.dept ? 'error' : ''" :help="formErrors.dept">
365
+ <a-input v-model="formData.dept" :placeholder="`请输入科室,如:呼吸内科`" />
366
+ </a-form-item>
367
+ <a-form-item label="床位" :validateStatus="formErrors.bed ? 'error' : ''" :help="formErrors.bed">
368
+ <a-input v-model="formData.bed" placeholder="请输入床位,如:801" />
369
+ </a-form-item>
370
+ <a-form-item label="病历号" :validateStatus="formErrors.medicalNo ? 'error' : ''" :help="formErrors.medicalNo">
371
+ <a-input v-model="formData.medicalNo" placeholder="请输入病历号,如:202300991" />
372
+ </a-form-item>
373
+ <a-form-item label="开始日期" :validateStatus="formErrors.begin ? 'error' : ''" :help="formErrors.begin">
374
+ <a-input v-model="formData.begin" placeholder="请输入日期,如:2023-08-01" />
375
+ </a-form-item>
376
+ <a-form-item label="手术日期" :validateStatus="formErrors.operateDate ? 'error' : ''" :help="formErrors.operateDate">
377
+ <a-input v-model="formData.operateDate" placeholder="请输入日期,如:2023-08-03" />
378
+ </a-form-item>
379
+ <!-- 备注字段 -->
380
+ <a-form-item label="备注" :validateStatus="formErrors.notes ? 'error' : ''" :help="formErrors.notes">
381
+ <a-input v-model="formData.notes" :placeholder="`请输入备注,如:${modalType === 'baby' ? '出生-十时二十分' : '入院-十时二十分,,转入ICU,,,,,,,手术'}`" />
382
+ <div class="input-tip">格式:多个值用逗号分隔,对应不同日期</div>
383
+ </a-form-item>
384
+ <!-- 根据表单类型显示不同的数据字段 -->
385
+ <a-form-item label="脉搏" :validateStatus="formErrors.sphygmus ? 'error' : ''" :help="formErrors.sphygmus">
386
+ <a-input v-model="formData.sphygmus" placeholder="脉搏数据,如:112,110,109,103,108,85" />
387
+ <div class="input-tip">格式:多个值用逗号分隔</div>
388
+ </a-form-item>
389
+ <!-- 生命体征数据字段 -->
390
+ <a-form-item label="心率" :validateStatus="formErrors.heart ? 'error' : ''" :help="formErrors.heart">
391
+ <a-input v-model="formData.heart" placeholder="心率数据,多个值用逗号分隔,如:112,120,118,111" />
392
+ <div class="input-tip">格式:多个值用逗号分隔</div>
393
+ </a-form-item>
394
+ <a-form-item label="体温类型" :validateStatus="formErrors.tempType ? 'error' : ''" :help="formErrors.tempType">
395
+ <a-input v-model="formData.tempType" placeholder="体温类型,如:0,1,2,3,0,1" />
396
+ <div class="input-tip">格式:多个值用逗号分隔,0-3表示不同类型</div>
397
+ </a-form-item>
398
+ <a-form-item label="体温" :validateStatus="formErrors.temperature ? 'error' : ''" :help="formErrors.temperature">
399
+ <a-input v-model="formData.temperature" :placeholder="`体温数据,如:38.7,38.9,38.5,39.1,38.5,38.5|37.1`" />
400
+ <div class="input-tip">格式:多个值用逗号分隔<template v-if="modalType !== 'baby'">,|表示新一行数据</template></div>
401
+ </a-form-item>
402
+ <!-- 通用数据字段 -->
403
+ <a-form-item label="呼吸" :validateStatus="formErrors.breath ? 'error' : ''" :help="formErrors.breath">
404
+ <a-input v-model="formData.breath" placeholder="呼吸数据,如:30,30,R,,35,35" />
405
+ <div class="input-tip">格式:多个值用逗号分隔,R表示异常</div>
406
+ </a-form-item>
407
+ <a-form-item label="标签" :validateStatus="formErrors.labels ? 'error' : ''" :help="formErrors.labels">
408
+ <a-input v-model="formData.labels" :placeholder="`标签数据,如:血压(mmHg)|入水量(ml)|出水量(ml)|大便(次)|小便(次)${modalType === 'baby' ? '' : '|身高(cm)|体重(kg)|过敏药'}`" />
409
+ <div class="input-tip">格式:多个标签用|分隔</div>
410
+ </a-form-item>
411
+ <!-- 通用数据字段 -->
412
+ <a-form-item label="血压" :validateStatus="formErrors.data1 ? 'error' : ''" :help="formErrors.data1">
413
+ <a-input v-model="formData.data1" placeholder="血压数据,如:120/85,121/84,,110/75" />
414
+ <div class="input-tip">格式:多个值用逗号分隔</div>
415
+ </a-form-item>
416
+ <a-form-item label="入水量" :validateStatus="formErrors.data2 ? 'error' : ''" :help="formErrors.data2">
417
+ <a-input v-model="formData.data2" placeholder="入水量数据,如:1180ml,,,500ml,,40ml" />
418
+ <div class="input-tip">格式:多个值用逗号分隔</div>
419
+ </a-form-item>
420
+ <a-form-item label="出水量" :validateStatus="formErrors.data3 ? 'error' : ''" :help="formErrors.data3">
421
+ <a-input v-model="formData.data3" placeholder="出水量数据,如:500ml,,,,500ml,,67ml" />
422
+ <div class="input-tip">格式:多个值用逗号分隔</div>
423
+ </a-form-item>
424
+ <a-form-item label="大便次数" :validateStatus="formErrors.data4 ? 'error' : ''" :help="formErrors.data4">
425
+ <a-input v-model="formData.data4" placeholder="大便次数数据,如:2,4,5,3,3,3,2,,2" />
426
+ <div class="input-tip">格式:多个值用逗号分隔</div>
427
+ </a-form-item>
428
+ <a-form-item label="小便次数" :validateStatus="formErrors.data5 ? 'error' : ''" :help="formErrors.data5">
429
+ <a-input v-model="formData.data5" placeholder="小便次数数据,如:2,4,5,3,3,3,2,,2" />
430
+ <div class="input-tip">格式:多个值用逗号分隔</div>
431
+ </a-form-item>
432
+ <a-form-item label="身高" :validateStatus="formErrors.data6 ? 'error' : ''" :help="formErrors.data6">
433
+ <a-input v-model="formData.data6" placeholder="身高数据,如:167cm,,,,,,,,,164cm" />
434
+ <div class="input-tip">格式:多个值用逗号分隔</div>
435
+ </a-form-item>
436
+ <a-form-item label="体重" :validateStatus="formErrors.data7 ? 'error' : ''" :help="formErrors.data7">
437
+ <a-input v-model="formData.data7" placeholder="体重数据,如:95kg,,,,,90kg" />
438
+ <div class="input-tip">格式:多个值用逗号分隔</div>
439
+ </a-form-item>
440
+ <a-form-item label="过敏药" :validateStatus="formErrors.data8 ? 'error' : ''" :help="formErrors.data8">
441
+ <a-input v-model="formData.data8" placeholder="过敏药数据,如:青霉素," />
442
+ <div class="input-tip">格式:多个值用逗号分隔</div>
443
+ </a-form-item>
444
+ <a-form-item label="其他数据" :validateStatus="formErrors.data9 ? 'error' : ''" :help="formErrors.data9">
445
+ <a-input v-model="formData.data9" placeholder="其他数据,如:测试," />
446
+ <div class="input-tip">格式:多个值用逗号分隔</div>
447
+ </a-form-item>
448
+ <!-- 按钮 -->
449
+ <a-form-item :wrapper-col="{ span: 18, offset: 6 }">
450
+ <a-button type="primary" @click="submitForm" :loading="submitLoading" style="margin-right: 10px">确定</a-button>
451
+ <a-button @click="closeModal">取消</a-button>
452
+ </a-form-item>
453
+ </a-form>
454
+ </a-modal>
455
+ </template>
456
+
457
+ <style scoped>
458
+ .input-tip {
459
+ color: #999;
460
+ font-size: 12px;
461
+ margin-top: 4px;
462
+ }
463
+ </style>