vue2-client 1.15.87 → 1.15.88

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 (377) hide show
  1. package/.editorconfig +9 -9
  2. package/.env +20 -20
  3. package/.env.development +1 -1
  4. package/.env.iot +19 -19
  5. package/.env.message +19 -19
  6. package/.env.revenue +19 -19
  7. package/.env.runtime +19 -19
  8. package/.eslintrc.json +5 -5
  9. package/CLAUDE.md +89 -89
  10. package/README.md +65 -65
  11. package/babel.config.js +21 -21
  12. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  13. package/docs/notice.md +22 -22
  14. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  15. package/jest.config.js +22 -22
  16. package/package.json +111 -111
  17. package/src/App.vue +196 -196
  18. package/src/ReportView.js +13 -13
  19. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  20. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  21. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  22. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  23. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  24. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  25. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  26. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  27. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  28. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  29. package/src/base-client/components/common/XAddForm/index.js +3 -3
  30. package/src/base-client/components/common/XAddForm/index.md +61 -61
  31. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  32. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  33. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  34. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  35. package/src/base-client/components/common/XBadge/index.js +3 -3
  36. package/src/base-client/components/common/XBadge/index.md +39 -39
  37. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  38. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  39. package/src/base-client/components/common/XCalendar/index.md +284 -284
  40. package/src/base-client/components/common/XCard/index.js +3 -3
  41. package/src/base-client/components/common/XCard/index.md +43 -43
  42. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  43. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  44. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  45. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  46. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  47. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  48. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  49. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  50. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  51. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  52. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1474
  53. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  54. package/src/base-client/components/common/XForm/demo.vue +105 -105
  55. package/src/base-client/components/common/XForm/index.js +3 -3
  56. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  57. package/src/base-client/components/common/XFormCol/index.js +3 -3
  58. package/src/base-client/components/common/XFormCol/index.md +35 -35
  59. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  60. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  61. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  62. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  63. package/src/base-client/components/common/XFormTable/index.js +3 -3
  64. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  65. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  66. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  67. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  68. package/src/base-client/components/common/XInput/index.js +3 -3
  69. package/src/base-client/components/common/XInput/index.md +97 -97
  70. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  71. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  72. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  73. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  74. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  75. package/src/base-client/components/common/XRate/demo.vue +102 -102
  76. package/src/base-client/components/common/XRate/index.vue +149 -149
  77. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  78. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  79. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  80. package/src/base-client/components/common/XReport/index.md +103 -103
  81. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  82. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  83. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  84. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  85. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  86. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  87. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  88. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  89. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  90. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  91. package/src/base-client/components/common/XTable/index.js +3 -3
  92. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  93. package/src/base-client/components/common/XTimeline/index.md +191 -191
  94. package/src/base-client/components/common/XTree/XTreePro.vue +452 -450
  95. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  96. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  97. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  98. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  99. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  100. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  101. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  102. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  103. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  104. package/src/base-client/components/his/XList/XList.vue +495 -495
  105. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  106. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  107. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  108. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  109. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  110. package/src/base-client/components/his/XRadio/index.md +234 -234
  111. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  112. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  113. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  114. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  115. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  116. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  117. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  118. package/src/base-client/components/his/XTitle/README.md +113 -113
  119. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  120. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  121. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  122. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  123. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  124. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  125. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  126. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  127. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  128. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  129. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  130. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  131. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  132. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  133. package/src/base-client/components/layout/XPageView/index.js +2 -2
  134. package/src/base-client/components/layout/XPageView/index.md +96 -96
  135. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  136. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  137. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  138. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  139. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  140. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  141. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  142. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  143. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  144. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  145. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  146. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  147. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  148. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  149. package/src/base-client/plugins/AppData.js +126 -126
  150. package/src/base-client/plugins/PagedList.js +177 -177
  151. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  152. package/src/base-client/plugins/authority-plugin.js +167 -167
  153. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  154. package/src/base-client/plugins/i18n-extend.js +32 -32
  155. package/src/base-client/plugins/moment.js +8 -8
  156. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  157. package/src/bootstrap.js +51 -51
  158. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  159. package/src/components/Ellipsis/index.js +3 -3
  160. package/src/components/Ellipsis/index.md +38 -38
  161. package/src/components/FileImageItem/FileItem.vue +320 -320
  162. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  163. package/src/components/FileImageItem/ImageItem.vue +107 -107
  164. package/src/components/FileImageItem/index.js +4 -4
  165. package/src/components/FilePreview/FilePreview.vue +181 -181
  166. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  167. package/src/components/FilePreview/index.js +3 -3
  168. package/src/components/HeightScanner/index.vue +615 -615
  169. package/src/components/STable/README.md +341 -341
  170. package/src/components/STable/index.js +558 -558
  171. package/src/components/TableSetting/TableSetting.vue +143 -143
  172. package/src/components/TableSetting/index.js +3 -3
  173. package/src/components/Trend/Trend.vue +41 -41
  174. package/src/components/Trend/index.js +3 -3
  175. package/src/components/Trend/index.less +41 -41
  176. package/src/components/Trend/index.md +45 -45
  177. package/src/components/_util/util.js +46 -46
  178. package/src/components/cache/AKeepAlive.js +179 -179
  179. package/src/components/exception/typeConfig.js +19 -19
  180. package/src/components/form/FormRow.vue +52 -52
  181. package/src/components/index.less +5 -5
  182. package/src/components/menu/Contextmenu.vue +84 -84
  183. package/src/components/menu/index.less +38 -38
  184. package/src/components/page/header/PageHeader.vue +64 -64
  185. package/src/components/page/header/index.less +40 -40
  186. package/src/components/result/Result.vue +77 -77
  187. package/src/components/setting/SettingItem.vue +26 -26
  188. package/src/components/setting/i18n.js +117 -117
  189. package/src/components/table/StandardTable.vue +141 -141
  190. package/src/components/table/advance/ActionColumns.vue +158 -158
  191. package/src/components/table/advance/ActionSize.vue +45 -45
  192. package/src/components/table/advance/AdvanceTable.vue +275 -275
  193. package/src/components/table/advance/SearchArea.vue +355 -355
  194. package/src/components/table/advance/index.js +2 -2
  195. package/src/components/table/api/ApiTable.vue +50 -50
  196. package/src/components/task/TaskGroup.vue +80 -80
  197. package/src/components/task/TaskItem.vue +26 -26
  198. package/src/components/tool/AvatarList.vue +68 -68
  199. package/src/components/tool/DetailList.vue +157 -157
  200. package/src/components/tool/Drawer.vue +142 -142
  201. package/src/components/tool/FooterToolBar.vue +30 -30
  202. package/src/components/tool/HeadInfo.vue +35 -35
  203. package/src/components/tool/TagSelect.vue +83 -83
  204. package/src/components/tool/TagSelectOption.vue +33 -33
  205. package/src/components/transition/PageToggleTransition.vue +97 -97
  206. package/src/config/default/admin.config.js +18 -18
  207. package/src/config/default/animate.config.js +21 -21
  208. package/src/config/default/index.js +6 -6
  209. package/src/config/index.js +3 -3
  210. package/src/config/replacer/index.js +10 -10
  211. package/src/config/replacer/resolve.config.js +67 -67
  212. package/src/expression/ExpressionRunner.js +26 -26
  213. package/src/expression/TestExpression.js +509 -509
  214. package/src/expression/core/Delegate.js +115 -115
  215. package/src/expression/core/Expression.js +1358 -1358
  216. package/src/expression/core/Program.js +932 -932
  217. package/src/expression/core/Token.js +27 -27
  218. package/src/expression/enums/ExpressionType.js +81 -81
  219. package/src/expression/enums/TokenType.js +11 -11
  220. package/src/expression/exception/BreakWayException.js +2 -2
  221. package/src/expression/exception/ContinueWayException.js +2 -2
  222. package/src/expression/exception/ExpressionException.js +28 -28
  223. package/src/expression/exception/ReturnWayException.js +14 -14
  224. package/src/expression/exception/ServiceException.js +22 -22
  225. package/src/expression/instances/LogicConsole.js +44 -44
  226. package/src/expression/ts/ExpressionRunner.ts +28 -28
  227. package/src/expression/ts/TestExpression.ts +509 -509
  228. package/src/expression/ts/core/Delegate.ts +114 -114
  229. package/src/expression/ts/core/Expression.ts +1309 -1309
  230. package/src/expression/ts/core/Program.ts +950 -950
  231. package/src/expression/ts/core/Token.ts +29 -29
  232. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  233. package/src/expression/ts/enums/TokenType.ts +13 -13
  234. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  235. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  236. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  237. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  238. package/src/expression/ts/exception/ServiceException.ts +22 -22
  239. package/src/expression/ts/instances/JSONArray.ts +48 -48
  240. package/src/expression/ts/instances/JSONObject.ts +109 -109
  241. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  242. package/src/layouts/AdminLayout.vue +176 -176
  243. package/src/layouts/BlankView.vue +79 -79
  244. package/src/layouts/ComponentLayoutOne.vue +47 -47
  245. package/src/layouts/GridView.vue +43 -43
  246. package/src/layouts/PageView.vue +55 -55
  247. package/src/layouts/footer/PageFooter.vue +49 -49
  248. package/src/layouts/header/HeaderAvatar.vue +64 -64
  249. package/src/layouts/header/HeaderSearch.vue +67 -67
  250. package/src/layouts/header/index.less +92 -92
  251. package/src/layouts/tabs/TabsView.vue +383 -383
  252. package/src/layouts/tabs/i18n.js +25 -25
  253. package/src/layouts/tabs/index.js +2 -2
  254. package/src/logic/LogicRunner.js +62 -62
  255. package/src/logic/TestLogic.js +13 -13
  256. package/src/logic/plugins/common/DateTools.js +35 -35
  257. package/src/logic/plugins/common/VueTools.js +30 -30
  258. package/src/logic/plugins/index.js +7 -7
  259. package/src/logic/ts/LogicRunner.ts +67 -67
  260. package/src/logic/ts/TestLogic.ts +13 -13
  261. package/src/main.js +33 -33
  262. package/src/mixins/formValidationMixin.js +46 -46
  263. package/src/mock/common/activityData.js +32 -32
  264. package/src/mock/common/index.js +89 -89
  265. package/src/mock/common/reportData.js +20 -20
  266. package/src/mock/common/tableData.js +118 -118
  267. package/src/mock/index.js +12 -12
  268. package/src/mock/project/index.js +17 -17
  269. package/src/mock/user/current.js +13 -13
  270. package/src/mock/user/login.js +39 -39
  271. package/src/mock/user/routes.js +61 -61
  272. package/src/mock/workplace/index.js +15 -15
  273. package/src/pages/LogicCallExample/index.vue +46 -46
  274. package/src/pages/ReportGrid/index.vue +76 -76
  275. package/src/pages/ReportView.vue +50 -50
  276. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  277. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  278. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  279. package/src/pages/WorkflowDetail/WorkflowDetail.vue +391 -391
  280. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  281. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  282. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  283. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  291. package/src/pages/XPageViewExample/index.vue +149 -149
  292. package/src/pages/addressSelect/addressDemo.vue +24 -24
  293. package/src/pages/addressSelect/index.vue +270 -270
  294. package/src/pages/dashboard/workplace/i18n.js +40 -40
  295. package/src/pages/dashboard/workplace/index.js +2 -2
  296. package/src/pages/dashboard/workplace/index.less +59 -59
  297. package/src/pages/exception/403.vue +21 -21
  298. package/src/pages/exception/404.vue +24 -24
  299. package/src/pages/exception/500.vue +21 -21
  300. package/src/pages/login/index.js +2 -2
  301. package/src/pages/report/ReportTableHome.vue +28 -28
  302. package/src/pages/resourceManage/depListManage.vue +23 -23
  303. package/src/pages/resourceManage/funListManage.vue +23 -23
  304. package/src/pages/resourceManage/index.js +15 -15
  305. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  306. package/src/pages/resourceManage/roleListManage.vue +23 -23
  307. package/src/pages/resourceManage/staffListManage.vue +23 -23
  308. package/src/pages/system/file/Info.vue +56 -56
  309. package/src/pages/system/file/index.vue +317 -317
  310. package/src/pages/system/settings/index.vue +126 -126
  311. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  312. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  313. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  314. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  315. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  316. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  317. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  318. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  319. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  320. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  321. package/src/pages/userInfoDetailManage/index.vue +290 -290
  322. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  323. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  324. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  325. package/src/plugins/HiPrintPlugin.js +164 -164
  326. package/src/router/async/router.map.js +126 -126
  327. package/src/router/guards.js +262 -262
  328. package/src/router/i18n.js +57 -57
  329. package/src/router.js +17 -17
  330. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  331. package/src/services/api/LogDetailsViewApi.js +10 -10
  332. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  333. package/src/services/api/logininfor/index.js +6 -6
  334. package/src/services/api/manage.js +8 -8
  335. package/src/services/api/restTools.js +215 -215
  336. package/src/services/api/workFlow.js +57 -57
  337. package/src/services/apiService.js +16 -16
  338. package/src/services/dataSource.js +12 -12
  339. package/src/services/index.js +7 -7
  340. package/src/services/user.js +92 -92
  341. package/src/services/v3Api.js +116 -116
  342. package/src/store/index.js +5 -5
  343. package/src/store/mutation-types.js +4 -4
  344. package/src/theme/antd/ant-menu.less +2 -2
  345. package/src/theme/antd/ant-message.less +3 -3
  346. package/src/theme/antd/ant-table.less +22 -22
  347. package/src/theme/antd/ant-time-picker.less +3 -3
  348. package/src/theme/antd/index.less +3 -3
  349. package/src/theme/default/color.less +43 -43
  350. package/src/theme/default/index.less +3 -3
  351. package/src/theme/default/nprogress.less +76 -76
  352. package/src/theme/global.less +279 -279
  353. package/src/theme/index.less +5 -5
  354. package/src/theme/reportTable.less +58 -58
  355. package/src/theme/theme.less +1 -1
  356. package/src/utils/EncryptUtil.js +162 -162
  357. package/src/utils/Objects.js +25 -25
  358. package/src/utils/axios-interceptors.js +100 -100
  359. package/src/utils/colors.js +107 -107
  360. package/src/utils/common.js +10 -10
  361. package/src/utils/excel/Blob.js +180 -180
  362. package/src/utils/excel/Export2Excel.js +141 -141
  363. package/src/utils/filter.js +21 -21
  364. package/src/utils/i18n.js +80 -80
  365. package/src/utils/indexedDB.js +549 -549
  366. package/src/utils/microAppUtils.js +49 -49
  367. package/src/utils/request.js +395 -395
  368. package/src/utils/routerUtil.js +553 -553
  369. package/src/utils/themeUtil.js +100 -100
  370. package/test/Tree.spec.js +168 -168
  371. package/test/myDialog.spec.js +47 -47
  372. package/test/request.test.js +17 -17
  373. package/test/util.test.js +53 -53
  374. package/test/v3Api.test.js +1984 -1984
  375. package/tests/unit/ReportTable.spec.js +16 -16
  376. package/vue.config.js +222 -222
  377. package/.claude/settings.local.json +0 -12
@@ -1,457 +1,457 @@
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
- function resetForm () {
99
- // 清空表单错误
100
- formErrors.value = {}
101
- const today = new Date().toISOString().split('T')[0]
102
- // 重置所有字段
103
- formData.id = props.id
104
- formData.name = ''
105
- formData.inDate = today
106
- formData.diag = ''
107
- formData.dept = ''
108
- formData.bed = ''
109
- formData.medicalNo = ''
110
- formData.begin = today
111
- formData.operateDate = ''
112
- formData.notes = ''
113
- formData.sex = ''
114
- formData.weight = ''
115
- formData.heart = ''
116
- formData.tempType = ''
117
- formData.temperature = ''
118
- formData.pulse = ''
119
- formData.breathing = ''
120
- formData.bloodPressure = ''
121
- formData.labels = ''
122
- formData.data1 = ''
123
- formData.data2 = ''
124
- formData.data3 = ''
125
- formData.data4 = ''
126
- formData.data5 = ''
127
- formData.data6 = ''
128
- formData.data7 = ''
129
- formData.data8 = ''
130
- formData.data9 = ''
131
- formData.pain = ''
132
- }
133
- // 处理JSON字符串数据
134
- const parseFormData = (data) => {
135
- if (!data) return null
136
- try {
137
- // 如果是字符串,尝试解析为JSON
138
- if (typeof data === 'string') {
139
- return JSON.parse(data)
140
- }
141
- // 如果已经是对象且有f_data字段,尝试解析f_data
142
- if (typeof data === 'object' && data.f_data) {
143
- return JSON.parse(data.f_data)
144
- }
145
- // 如果是普通对象,直接返回
146
- return data
147
- } catch (error) {
148
- console.error('解析数据失败:', error)
149
- return null
150
- }
151
- }
152
-
153
- // 初始化表单数据
154
- async function initFormData () {
155
- try {
156
- let parsedData = null
157
- let resultData = null
158
- try {
159
- // 尝试从服务器获取数据
160
- resultData = await runLogic('threeTestOrderDataLOGIC', { id: props.id }, 'af-his')
161
- console.log('体温单数据 = ', resultData)
162
- // 处理不同格式的返回数据
163
- if (resultData) {
164
- // 如果是数组,取第一项
165
- if (Array.isArray(resultData) && resultData.length > 0) {
166
- const firstItem = resultData[0]
167
-
168
- // 检查是否有f_data字段
169
- if (firstItem.f_data) {
170
- parsedData = parseFormData(firstItem.f_data)
171
- } else {
172
- // 可能整个对象就是数据
173
- parsedData = firstItem
174
- }
175
- } else if (typeof resultData === 'object') {
176
- if (resultData.f_data) {
177
- parsedData = parseFormData(resultData.f_data)
178
- } else { parsedData = resultData }
179
- }
180
- }
181
- } catch (error) {
182
- console.error('获取数据失败:', error)
183
- }
184
- // 如果解析成功且非创建模式,填充表单
185
- if (parsedData && props.modalType !== 'create') {
186
- console.log('解析后的数据:', parsedData)
187
- // 将解析后的数据填充到表单中
188
- Object.keys(parsedData).forEach(key => {
189
- if (key in formData) {
190
- formData[key] = parsedData[key]
191
- }
192
- })
193
- // 确保formData.id是正确设置的
194
- if (!formData.id && parsedData.id) {
195
- formData.id = parsedData.id
196
- }
197
- return
198
- } else if (props.modalType === 'create') {
199
- // 创建模式下重置表单
200
- resetForm()
201
- return
202
- }
203
- } catch (error) {
204
- console.error('初始化表单数据失败:', error)
205
- message.error('体温单数据加载失败,将使用默认值')
206
- }
207
- // 如果没有数据或解析失败,使用默认值
208
- resetForm()
209
- }
210
-
211
- // 关闭弹窗
212
- const closeModal = () => {
213
- // 关闭弹窗前清空表单数据
214
- resetForm()
215
- emit('update:visible', false)
216
- emit('cancel')
217
- }
218
-
219
- // 验证表单
220
- const validateForm = () => {
221
- const errors = {}
222
- let hasError = false
223
- // 通用字段验证
224
- const requiredFields = [
225
- { key: 'id', label: 'ID' },
226
- { key: 'name', label: '姓名' },
227
- { key: 'inDate', label: '入院日期' },
228
- { key: 'dept', label: '科室' },
229
- { key: 'bed', label: '床位' },
230
- { key: 'medicalNo', label: '病历号' },
231
- { key: 'begin', label: '开始日期' },
232
- { key: 'notes', label: '备注' },
233
- { key: 'heart', label: '心率' },
234
- { key: 'tempType', label: '体温类型' },
235
- { key: 'temperature', label: '体温' },
236
- { key: 'breath', label: '呼吸' },
237
- { key: 'labels', label: '标签' },
238
- { key: 'data1', label: '血压' },
239
- { key: 'data2', label: '入水量' },
240
- { key: 'data3', label: '出水量' },
241
- { key: 'data4', label: '大便次数' },
242
- { key: 'data5', label: '小便次数' },
243
- { key: 'diag', label: '诊断' },
244
- { key: 'operateDate', label: '手术日期' },
245
- { key: 'sphygmus', label: '脉搏' },
246
- { key: 'data6', label: '身高' },
247
- { key: 'data7', label: '体重' },
248
- { key: 'data8', label: '过敏药' },
249
- { key: 'data9', label: '其他数据' }
250
- ]
251
- // 检查每个必填字段
252
- requiredFields.forEach(field => {
253
- // 首先检查字段是否存在
254
- if (formData[field.key] === undefined || formData[field.key] === null) {
255
- errors[field.key] = `${field.label}不能为空`
256
- hasError = true
257
- return
258
- }
259
- // 将值转换为字符串后再检查是否为空
260
- const value = String(formData[field.key])
261
- if (value.trim() === '') {
262
- errors[field.key] = `${field.label}不能为空`
263
- hasError = true
264
- }
265
- })
266
-
267
- formErrors.value = errors
268
- if (hasError) {
269
- message.error('表单验证失败,请填写所有必填项')
270
- return false
271
- }
272
- return true
273
- }
274
-
275
- // 获取表单数据
276
- const getFormData = () => {
277
- const commonData = {
278
- id: formData.id || `VS${Date.now()}`,
279
- name: formData.name,
280
- inDate: formData.inDate,
281
- dept: formData.dept,
282
- bed: formData.bed,
283
- medicalNo: formData.medicalNo,
284
- begin: formData.begin,
285
- notes: formData.notes,
286
- heart: formData.heart,
287
- tempType: formData.tempType,
288
- temperature: formData.temperature,
289
- breath: formData.breath,
290
- labels: formData.labels,
291
- data1: formData.data1,
292
- data2: formData.data2,
293
- data3: formData.data3,
294
- data4: formData.data4,
295
- data5: formData.data5,
296
- data6: formData.data6,
297
- data7: formData.data7,
298
- data8: formData.data8,
299
- data9: formData.data9,
300
- pain: formData.pain,
301
- diag: formData.diag,
302
- operateDate: formData.operateDate,
303
- sphygmus: formData.sphygmus
304
- }
305
- return {
306
- ...commonData,
307
- type: 'normal'
308
- }
309
- }
310
-
311
- // 提交表单
312
- async function submitForm () {
313
- if (!props.editorReady) {
314
- message.error('体温单编辑器未加载完成,请等待或刷新页面')
315
- return
316
- }
317
- // 首先验证表单
318
- if (!validateForm()) {
319
- return
320
- }
321
- submitLoading.value = true
322
- try {
323
- const data = getFormData()
324
- emit('submit', data)
325
- // 关闭弹窗
326
- closeModal()
327
- } catch (err) {
328
- console.error('提交体温单数据出错:', err)
329
- message.error(`提交体温单数据失败: ${err.message || '未知错误'}`)
330
- } finally {
331
- submitLoading.value = false
332
- }
333
- }
334
- </script>
335
-
336
- <template>
337
- <a-modal
338
- :title="modalTitles[modalType]"
339
- :visible="visible"
340
- @cancel="closeModal"
341
- :width="700"
342
- :footer="null">
343
- <a-form :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
344
- <!-- 通用基础信息字段 -->
345
- <a-form-item label="ID" :validateStatus="formErrors.id ? 'error' : ''" :help="formErrors.id">
346
- <a-input v-model="formData.id" :placeholder="`请输入ID,如:AD20230001`" />
347
- </a-form-item>
348
- <a-form-item label="姓名" :validateStatus="formErrors.name ? 'error' : ''" :help="formErrors.name">
349
- <a-input v-model="formData.name" placeholder="请输入姓名,如:张三" />
350
- </a-form-item>
351
- <a-form-item label="入院日期" :validateStatus="formErrors.inDate ? 'error' : ''" :help="formErrors.inDate">
352
- <a-input v-model="formData.inDate" placeholder="请输入日期,如:2023-08-01" />
353
- </a-form-item>
354
- <a-form-item label="诊断" :validateStatus="formErrors.diag ? 'error' : ''" :help="formErrors.diag">
355
- <a-input v-model="formData.diag" placeholder="请输入诊断,如:新型冠状病毒肺炎" />
356
- </a-form-item>
357
- <!-- 通用字段 -->
358
- <a-form-item label="科室" :validateStatus="formErrors.dept ? 'error' : ''" :help="formErrors.dept">
359
- <a-input v-model="formData.dept" :placeholder="`请输入科室,如:呼吸内科`" />
360
- </a-form-item>
361
- <a-form-item label="床位" :validateStatus="formErrors.bed ? 'error' : ''" :help="formErrors.bed">
362
- <a-input v-model="formData.bed" placeholder="请输入床位,如:801" />
363
- </a-form-item>
364
- <a-form-item label="病历号" :validateStatus="formErrors.medicalNo ? 'error' : ''" :help="formErrors.medicalNo">
365
- <a-input v-model="formData.medicalNo" placeholder="请输入病历号,如:202300991" />
366
- </a-form-item>
367
- <a-form-item label="开始日期" :validateStatus="formErrors.begin ? 'error' : ''" :help="formErrors.begin">
368
- <a-input v-model="formData.begin" placeholder="请输入日期,如:2023-08-01" />
369
- </a-form-item>
370
- <a-form-item label="手术日期" :validateStatus="formErrors.operateDate ? 'error' : ''" :help="formErrors.operateDate">
371
- <a-input v-model="formData.operateDate" placeholder="请输入日期,如:2023-08-03" />
372
- </a-form-item>
373
- <!-- 备注字段 -->
374
- <a-form-item label="备注" :validateStatus="formErrors.notes ? 'error' : ''" :help="formErrors.notes">
375
- <a-input v-model="formData.notes" :placeholder="`请输入备注,如:${modalType === 'baby' ? '出生-十时二十分' : '入院-十时二十分,,转入ICU,,,,,,,手术'}`" />
376
- <div class="input-tip">格式:多个值用逗号分隔,对应不同日期</div>
377
- </a-form-item>
378
- <!-- 根据表单类型显示不同的数据字段 -->
379
- <a-form-item label="脉搏" :validateStatus="formErrors.sphygmus ? 'error' : ''" :help="formErrors.sphygmus">
380
- <a-input v-model="formData.sphygmus" placeholder="脉搏数据,如:112,110,109,103,108,85" />
381
- <div class="input-tip">格式:多个值用逗号分隔</div>
382
- </a-form-item>
383
- <!-- 生命体征数据字段 -->
384
- <a-form-item label="心率" :validateStatus="formErrors.heart ? 'error' : ''" :help="formErrors.heart">
385
- <a-input v-model="formData.heart" placeholder="心率数据,多个值用逗号分隔,如:112,120,118,111" />
386
- <div class="input-tip">格式:多个值用逗号分隔</div>
387
- </a-form-item>
388
- <a-form-item label="体温类型" :validateStatus="formErrors.tempType ? 'error' : ''" :help="formErrors.tempType">
389
- <a-input v-model="formData.tempType" placeholder="体温类型,如:0,1,2,3,0,1" />
390
- <div class="input-tip">格式:多个值用逗号分隔,0-3表示不同类型</div>
391
- </a-form-item>
392
- <a-form-item label="体温" :validateStatus="formErrors.temperature ? 'error' : ''" :help="formErrors.temperature">
393
- <a-input v-model="formData.temperature" :placeholder="`体温数据,如:38.7,38.9,38.5,39.1,38.5,38.5|37.1`" />
394
- <div class="input-tip">格式:多个值用逗号分隔<template v-if="modalType !== 'baby'">,|表示新一行数据</template></div>
395
- </a-form-item>
396
- <!-- 通用数据字段 -->
397
- <a-form-item label="呼吸" :validateStatus="formErrors.breath ? 'error' : ''" :help="formErrors.breath">
398
- <a-input v-model="formData.breath" placeholder="呼吸数据,如:30,30,R,,35,35" />
399
- <div class="input-tip">格式:多个值用逗号分隔,R表示异常</div>
400
- </a-form-item>
401
- <a-form-item label="标签" :validateStatus="formErrors.labels ? 'error' : ''" :help="formErrors.labels">
402
- <a-input v-model="formData.labels" :placeholder="`标签数据,如:血压(mmHg)|入水量(ml)|出水量(ml)|大便(次)|小便(次)${modalType === 'baby' ? '' : '|身高(cm)|体重(kg)|过敏药'}`" />
403
- <div class="input-tip">格式:多个标签用|分隔</div>
404
- </a-form-item>
405
- <!-- 通用数据字段 -->
406
- <a-form-item label="血压" :validateStatus="formErrors.data1 ? 'error' : ''" :help="formErrors.data1">
407
- <a-input v-model="formData.data1" placeholder="血压数据,如:120/85,121/84,,110/75" />
408
- <div class="input-tip">格式:多个值用逗号分隔</div>
409
- </a-form-item>
410
- <a-form-item label="入水量" :validateStatus="formErrors.data2 ? 'error' : ''" :help="formErrors.data2">
411
- <a-input v-model="formData.data2" placeholder="入水量数据,如:1180ml,,,500ml,,40ml" />
412
- <div class="input-tip">格式:多个值用逗号分隔</div>
413
- </a-form-item>
414
- <a-form-item label="出水量" :validateStatus="formErrors.data3 ? 'error' : ''" :help="formErrors.data3">
415
- <a-input v-model="formData.data3" placeholder="出水量数据,如:500ml,,,,500ml,,67ml" />
416
- <div class="input-tip">格式:多个值用逗号分隔</div>
417
- </a-form-item>
418
- <a-form-item label="大便次数" :validateStatus="formErrors.data4 ? 'error' : ''" :help="formErrors.data4">
419
- <a-input v-model="formData.data4" placeholder="大便次数数据,如:2,4,5,3,3,3,2,,2" />
420
- <div class="input-tip">格式:多个值用逗号分隔</div>
421
- </a-form-item>
422
- <a-form-item label="小便次数" :validateStatus="formErrors.data5 ? 'error' : ''" :help="formErrors.data5">
423
- <a-input v-model="formData.data5" placeholder="小便次数数据,如:2,4,5,3,3,3,2,,2" />
424
- <div class="input-tip">格式:多个值用逗号分隔</div>
425
- </a-form-item>
426
- <a-form-item label="身高" :validateStatus="formErrors.data6 ? 'error' : ''" :help="formErrors.data6">
427
- <a-input v-model="formData.data6" placeholder="身高数据,如:167cm,,,,,,,,,164cm" />
428
- <div class="input-tip">格式:多个值用逗号分隔</div>
429
- </a-form-item>
430
- <a-form-item label="体重" :validateStatus="formErrors.data7 ? 'error' : ''" :help="formErrors.data7">
431
- <a-input v-model="formData.data7" placeholder="体重数据,如:95kg,,,,,90kg" />
432
- <div class="input-tip">格式:多个值用逗号分隔</div>
433
- </a-form-item>
434
- <a-form-item label="过敏药" :validateStatus="formErrors.data8 ? 'error' : ''" :help="formErrors.data8">
435
- <a-input v-model="formData.data8" placeholder="过敏药数据,如:青霉素," />
436
- <div class="input-tip">格式:多个值用逗号分隔</div>
437
- </a-form-item>
438
- <a-form-item label="其他数据" :validateStatus="formErrors.data9 ? 'error' : ''" :help="formErrors.data9">
439
- <a-input v-model="formData.data9" placeholder="其他数据,如:测试," />
440
- <div class="input-tip">格式:多个值用逗号分隔</div>
441
- </a-form-item>
442
- <!-- 按钮 -->
443
- <a-form-item :wrapper-col="{ span: 18, offset: 6 }">
444
- <a-button type="primary" @click="submitForm" :loading="submitLoading" style="margin-right: 10px">确定</a-button>
445
- <a-button @click="closeModal">取消</a-button>
446
- </a-form-item>
447
- </a-form>
448
- </a-modal>
449
- </template>
450
-
451
- <style scoped>
452
- .input-tip {
453
- color: #999;
454
- font-size: 12px;
455
- margin-top: 4px;
456
- }
457
- </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
+ function resetForm () {
99
+ // 清空表单错误
100
+ formErrors.value = {}
101
+ const today = new Date().toISOString().split('T')[0]
102
+ // 重置所有字段
103
+ formData.id = props.id
104
+ formData.name = ''
105
+ formData.inDate = today
106
+ formData.diag = ''
107
+ formData.dept = ''
108
+ formData.bed = ''
109
+ formData.medicalNo = ''
110
+ formData.begin = today
111
+ formData.operateDate = ''
112
+ formData.notes = ''
113
+ formData.sex = ''
114
+ formData.weight = ''
115
+ formData.heart = ''
116
+ formData.tempType = ''
117
+ formData.temperature = ''
118
+ formData.pulse = ''
119
+ formData.breathing = ''
120
+ formData.bloodPressure = ''
121
+ formData.labels = ''
122
+ formData.data1 = ''
123
+ formData.data2 = ''
124
+ formData.data3 = ''
125
+ formData.data4 = ''
126
+ formData.data5 = ''
127
+ formData.data6 = ''
128
+ formData.data7 = ''
129
+ formData.data8 = ''
130
+ formData.data9 = ''
131
+ formData.pain = ''
132
+ }
133
+ // 处理JSON字符串数据
134
+ const parseFormData = (data) => {
135
+ if (!data) return null
136
+ try {
137
+ // 如果是字符串,尝试解析为JSON
138
+ if (typeof data === 'string') {
139
+ return JSON.parse(data)
140
+ }
141
+ // 如果已经是对象且有f_data字段,尝试解析f_data
142
+ if (typeof data === 'object' && data.f_data) {
143
+ return JSON.parse(data.f_data)
144
+ }
145
+ // 如果是普通对象,直接返回
146
+ return data
147
+ } catch (error) {
148
+ console.error('解析数据失败:', error)
149
+ return null
150
+ }
151
+ }
152
+
153
+ // 初始化表单数据
154
+ async function initFormData () {
155
+ try {
156
+ let parsedData = null
157
+ let resultData = null
158
+ try {
159
+ // 尝试从服务器获取数据
160
+ resultData = await runLogic('threeTestOrderDataLOGIC', { id: props.id }, 'af-his')
161
+ console.log('体温单数据 = ', resultData)
162
+ // 处理不同格式的返回数据
163
+ if (resultData) {
164
+ // 如果是数组,取第一项
165
+ if (Array.isArray(resultData) && resultData.length > 0) {
166
+ const firstItem = resultData[0]
167
+
168
+ // 检查是否有f_data字段
169
+ if (firstItem.f_data) {
170
+ parsedData = parseFormData(firstItem.f_data)
171
+ } else {
172
+ // 可能整个对象就是数据
173
+ parsedData = firstItem
174
+ }
175
+ } else if (typeof resultData === 'object') {
176
+ if (resultData.f_data) {
177
+ parsedData = parseFormData(resultData.f_data)
178
+ } else { parsedData = resultData }
179
+ }
180
+ }
181
+ } catch (error) {
182
+ console.error('获取数据失败:', error)
183
+ }
184
+ // 如果解析成功且非创建模式,填充表单
185
+ if (parsedData && props.modalType !== 'create') {
186
+ console.log('解析后的数据:', parsedData)
187
+ // 将解析后的数据填充到表单中
188
+ Object.keys(parsedData).forEach(key => {
189
+ if (key in formData) {
190
+ formData[key] = parsedData[key]
191
+ }
192
+ })
193
+ // 确保formData.id是正确设置的
194
+ if (!formData.id && parsedData.id) {
195
+ formData.id = parsedData.id
196
+ }
197
+ return
198
+ } else if (props.modalType === 'create') {
199
+ // 创建模式下重置表单
200
+ resetForm()
201
+ return
202
+ }
203
+ } catch (error) {
204
+ console.error('初始化表单数据失败:', error)
205
+ message.error('体温单数据加载失败,将使用默认值')
206
+ }
207
+ // 如果没有数据或解析失败,使用默认值
208
+ resetForm()
209
+ }
210
+
211
+ // 关闭弹窗
212
+ const closeModal = () => {
213
+ // 关闭弹窗前清空表单数据
214
+ resetForm()
215
+ emit('update:visible', false)
216
+ emit('cancel')
217
+ }
218
+
219
+ // 验证表单
220
+ const validateForm = () => {
221
+ const errors = {}
222
+ let hasError = false
223
+ // 通用字段验证
224
+ const requiredFields = [
225
+ { key: 'id', label: 'ID' },
226
+ { key: 'name', label: '姓名' },
227
+ { key: 'inDate', label: '入院日期' },
228
+ { key: 'dept', label: '科室' },
229
+ { key: 'bed', label: '床位' },
230
+ { key: 'medicalNo', label: '病历号' },
231
+ { key: 'begin', label: '开始日期' },
232
+ { key: 'notes', label: '备注' },
233
+ { key: 'heart', label: '心率' },
234
+ { key: 'tempType', label: '体温类型' },
235
+ { key: 'temperature', label: '体温' },
236
+ { key: 'breath', label: '呼吸' },
237
+ { key: 'labels', label: '标签' },
238
+ { key: 'data1', label: '血压' },
239
+ { key: 'data2', label: '入水量' },
240
+ { key: 'data3', label: '出水量' },
241
+ { key: 'data4', label: '大便次数' },
242
+ { key: 'data5', label: '小便次数' },
243
+ { key: 'diag', label: '诊断' },
244
+ { key: 'operateDate', label: '手术日期' },
245
+ { key: 'sphygmus', label: '脉搏' },
246
+ { key: 'data6', label: '身高' },
247
+ { key: 'data7', label: '体重' },
248
+ { key: 'data8', label: '过敏药' },
249
+ { key: 'data9', label: '其他数据' }
250
+ ]
251
+ // 检查每个必填字段
252
+ requiredFields.forEach(field => {
253
+ // 首先检查字段是否存在
254
+ if (formData[field.key] === undefined || formData[field.key] === null) {
255
+ errors[field.key] = `${field.label}不能为空`
256
+ hasError = true
257
+ return
258
+ }
259
+ // 将值转换为字符串后再检查是否为空
260
+ const value = String(formData[field.key])
261
+ if (value.trim() === '') {
262
+ errors[field.key] = `${field.label}不能为空`
263
+ hasError = true
264
+ }
265
+ })
266
+
267
+ formErrors.value = errors
268
+ if (hasError) {
269
+ message.error('表单验证失败,请填写所有必填项')
270
+ return false
271
+ }
272
+ return true
273
+ }
274
+
275
+ // 获取表单数据
276
+ const getFormData = () => {
277
+ const commonData = {
278
+ id: formData.id || `VS${Date.now()}`,
279
+ name: formData.name,
280
+ inDate: formData.inDate,
281
+ dept: formData.dept,
282
+ bed: formData.bed,
283
+ medicalNo: formData.medicalNo,
284
+ begin: formData.begin,
285
+ notes: formData.notes,
286
+ heart: formData.heart,
287
+ tempType: formData.tempType,
288
+ temperature: formData.temperature,
289
+ breath: formData.breath,
290
+ labels: formData.labels,
291
+ data1: formData.data1,
292
+ data2: formData.data2,
293
+ data3: formData.data3,
294
+ data4: formData.data4,
295
+ data5: formData.data5,
296
+ data6: formData.data6,
297
+ data7: formData.data7,
298
+ data8: formData.data8,
299
+ data9: formData.data9,
300
+ pain: formData.pain,
301
+ diag: formData.diag,
302
+ operateDate: formData.operateDate,
303
+ sphygmus: formData.sphygmus
304
+ }
305
+ return {
306
+ ...commonData,
307
+ type: 'normal'
308
+ }
309
+ }
310
+
311
+ // 提交表单
312
+ async function submitForm () {
313
+ if (!props.editorReady) {
314
+ message.error('体温单编辑器未加载完成,请等待或刷新页面')
315
+ return
316
+ }
317
+ // 首先验证表单
318
+ if (!validateForm()) {
319
+ return
320
+ }
321
+ submitLoading.value = true
322
+ try {
323
+ const data = getFormData()
324
+ emit('submit', data)
325
+ // 关闭弹窗
326
+ closeModal()
327
+ } catch (err) {
328
+ console.error('提交体温单数据出错:', err)
329
+ message.error(`提交体温单数据失败: ${err.message || '未知错误'}`)
330
+ } finally {
331
+ submitLoading.value = false
332
+ }
333
+ }
334
+ </script>
335
+
336
+ <template>
337
+ <a-modal
338
+ :title="modalTitles[modalType]"
339
+ :visible="visible"
340
+ @cancel="closeModal"
341
+ :width="700"
342
+ :footer="null">
343
+ <a-form :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
344
+ <!-- 通用基础信息字段 -->
345
+ <a-form-item label="ID" :validateStatus="formErrors.id ? 'error' : ''" :help="formErrors.id">
346
+ <a-input v-model="formData.id" :placeholder="`请输入ID,如:AD20230001`" />
347
+ </a-form-item>
348
+ <a-form-item label="姓名" :validateStatus="formErrors.name ? 'error' : ''" :help="formErrors.name">
349
+ <a-input v-model="formData.name" placeholder="请输入姓名,如:张三" />
350
+ </a-form-item>
351
+ <a-form-item label="入院日期" :validateStatus="formErrors.inDate ? 'error' : ''" :help="formErrors.inDate">
352
+ <a-input v-model="formData.inDate" placeholder="请输入日期,如:2023-08-01" />
353
+ </a-form-item>
354
+ <a-form-item label="诊断" :validateStatus="formErrors.diag ? 'error' : ''" :help="formErrors.diag">
355
+ <a-input v-model="formData.diag" placeholder="请输入诊断,如:新型冠状病毒肺炎" />
356
+ </a-form-item>
357
+ <!-- 通用字段 -->
358
+ <a-form-item label="科室" :validateStatus="formErrors.dept ? 'error' : ''" :help="formErrors.dept">
359
+ <a-input v-model="formData.dept" :placeholder="`请输入科室,如:呼吸内科`" />
360
+ </a-form-item>
361
+ <a-form-item label="床位" :validateStatus="formErrors.bed ? 'error' : ''" :help="formErrors.bed">
362
+ <a-input v-model="formData.bed" placeholder="请输入床位,如:801" />
363
+ </a-form-item>
364
+ <a-form-item label="病历号" :validateStatus="formErrors.medicalNo ? 'error' : ''" :help="formErrors.medicalNo">
365
+ <a-input v-model="formData.medicalNo" placeholder="请输入病历号,如:202300991" />
366
+ </a-form-item>
367
+ <a-form-item label="开始日期" :validateStatus="formErrors.begin ? 'error' : ''" :help="formErrors.begin">
368
+ <a-input v-model="formData.begin" placeholder="请输入日期,如:2023-08-01" />
369
+ </a-form-item>
370
+ <a-form-item label="手术日期" :validateStatus="formErrors.operateDate ? 'error' : ''" :help="formErrors.operateDate">
371
+ <a-input v-model="formData.operateDate" placeholder="请输入日期,如:2023-08-03" />
372
+ </a-form-item>
373
+ <!-- 备注字段 -->
374
+ <a-form-item label="备注" :validateStatus="formErrors.notes ? 'error' : ''" :help="formErrors.notes">
375
+ <a-input v-model="formData.notes" :placeholder="`请输入备注,如:${modalType === 'baby' ? '出生-十时二十分' : '入院-十时二十分,,转入ICU,,,,,,,手术'}`" />
376
+ <div class="input-tip">格式:多个值用逗号分隔,对应不同日期</div>
377
+ </a-form-item>
378
+ <!-- 根据表单类型显示不同的数据字段 -->
379
+ <a-form-item label="脉搏" :validateStatus="formErrors.sphygmus ? 'error' : ''" :help="formErrors.sphygmus">
380
+ <a-input v-model="formData.sphygmus" placeholder="脉搏数据,如:112,110,109,103,108,85" />
381
+ <div class="input-tip">格式:多个值用逗号分隔</div>
382
+ </a-form-item>
383
+ <!-- 生命体征数据字段 -->
384
+ <a-form-item label="心率" :validateStatus="formErrors.heart ? 'error' : ''" :help="formErrors.heart">
385
+ <a-input v-model="formData.heart" placeholder="心率数据,多个值用逗号分隔,如:112,120,118,111" />
386
+ <div class="input-tip">格式:多个值用逗号分隔</div>
387
+ </a-form-item>
388
+ <a-form-item label="体温类型" :validateStatus="formErrors.tempType ? 'error' : ''" :help="formErrors.tempType">
389
+ <a-input v-model="formData.tempType" placeholder="体温类型,如:0,1,2,3,0,1" />
390
+ <div class="input-tip">格式:多个值用逗号分隔,0-3表示不同类型</div>
391
+ </a-form-item>
392
+ <a-form-item label="体温" :validateStatus="formErrors.temperature ? 'error' : ''" :help="formErrors.temperature">
393
+ <a-input v-model="formData.temperature" :placeholder="`体温数据,如:38.7,38.9,38.5,39.1,38.5,38.5|37.1`" />
394
+ <div class="input-tip">格式:多个值用逗号分隔<template v-if="modalType !== 'baby'">,|表示新一行数据</template></div>
395
+ </a-form-item>
396
+ <!-- 通用数据字段 -->
397
+ <a-form-item label="呼吸" :validateStatus="formErrors.breath ? 'error' : ''" :help="formErrors.breath">
398
+ <a-input v-model="formData.breath" placeholder="呼吸数据,如:30,30,R,,35,35" />
399
+ <div class="input-tip">格式:多个值用逗号分隔,R表示异常</div>
400
+ </a-form-item>
401
+ <a-form-item label="标签" :validateStatus="formErrors.labels ? 'error' : ''" :help="formErrors.labels">
402
+ <a-input v-model="formData.labels" :placeholder="`标签数据,如:血压(mmHg)|入水量(ml)|出水量(ml)|大便(次)|小便(次)${modalType === 'baby' ? '' : '|身高(cm)|体重(kg)|过敏药'}`" />
403
+ <div class="input-tip">格式:多个标签用|分隔</div>
404
+ </a-form-item>
405
+ <!-- 通用数据字段 -->
406
+ <a-form-item label="血压" :validateStatus="formErrors.data1 ? 'error' : ''" :help="formErrors.data1">
407
+ <a-input v-model="formData.data1" placeholder="血压数据,如:120/85,121/84,,110/75" />
408
+ <div class="input-tip">格式:多个值用逗号分隔</div>
409
+ </a-form-item>
410
+ <a-form-item label="入水量" :validateStatus="formErrors.data2 ? 'error' : ''" :help="formErrors.data2">
411
+ <a-input v-model="formData.data2" placeholder="入水量数据,如:1180ml,,,500ml,,40ml" />
412
+ <div class="input-tip">格式:多个值用逗号分隔</div>
413
+ </a-form-item>
414
+ <a-form-item label="出水量" :validateStatus="formErrors.data3 ? 'error' : ''" :help="formErrors.data3">
415
+ <a-input v-model="formData.data3" placeholder="出水量数据,如:500ml,,,,500ml,,67ml" />
416
+ <div class="input-tip">格式:多个值用逗号分隔</div>
417
+ </a-form-item>
418
+ <a-form-item label="大便次数" :validateStatus="formErrors.data4 ? 'error' : ''" :help="formErrors.data4">
419
+ <a-input v-model="formData.data4" placeholder="大便次数数据,如:2,4,5,3,3,3,2,,2" />
420
+ <div class="input-tip">格式:多个值用逗号分隔</div>
421
+ </a-form-item>
422
+ <a-form-item label="小便次数" :validateStatus="formErrors.data5 ? 'error' : ''" :help="formErrors.data5">
423
+ <a-input v-model="formData.data5" placeholder="小便次数数据,如:2,4,5,3,3,3,2,,2" />
424
+ <div class="input-tip">格式:多个值用逗号分隔</div>
425
+ </a-form-item>
426
+ <a-form-item label="身高" :validateStatus="formErrors.data6 ? 'error' : ''" :help="formErrors.data6">
427
+ <a-input v-model="formData.data6" placeholder="身高数据,如:167cm,,,,,,,,,164cm" />
428
+ <div class="input-tip">格式:多个值用逗号分隔</div>
429
+ </a-form-item>
430
+ <a-form-item label="体重" :validateStatus="formErrors.data7 ? 'error' : ''" :help="formErrors.data7">
431
+ <a-input v-model="formData.data7" placeholder="体重数据,如:95kg,,,,,90kg" />
432
+ <div class="input-tip">格式:多个值用逗号分隔</div>
433
+ </a-form-item>
434
+ <a-form-item label="过敏药" :validateStatus="formErrors.data8 ? 'error' : ''" :help="formErrors.data8">
435
+ <a-input v-model="formData.data8" placeholder="过敏药数据,如:青霉素," />
436
+ <div class="input-tip">格式:多个值用逗号分隔</div>
437
+ </a-form-item>
438
+ <a-form-item label="其他数据" :validateStatus="formErrors.data9 ? 'error' : ''" :help="formErrors.data9">
439
+ <a-input v-model="formData.data9" placeholder="其他数据,如:测试," />
440
+ <div class="input-tip">格式:多个值用逗号分隔</div>
441
+ </a-form-item>
442
+ <!-- 按钮 -->
443
+ <a-form-item :wrapper-col="{ span: 18, offset: 6 }">
444
+ <a-button type="primary" @click="submitForm" :loading="submitLoading" style="margin-right: 10px">确定</a-button>
445
+ <a-button @click="closeModal">取消</a-button>
446
+ </a-form-item>
447
+ </a-form>
448
+ </a-modal>
449
+ </template>
450
+
451
+ <style scoped>
452
+ .input-tip {
453
+ color: #999;
454
+ font-size: 12px;
455
+ margin-top: 4px;
456
+ }
457
+ </style>