vue2-client 1.15.84 → 1.15.86

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/.claude/settings.local.json +12 -0
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.development +1 -1
  5. package/.env.iot +19 -19
  6. package/.env.message +19 -19
  7. package/.env.revenue +19 -19
  8. package/.env.runtime +19 -19
  9. package/.eslintrc.json +5 -5
  10. package/CLAUDE.md +89 -89
  11. package/README.md +65 -65
  12. package/babel.config.js +21 -21
  13. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  14. package/docs/notice.md +22 -22
  15. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  16. package/jest.config.js +22 -22
  17. package/package.json +111 -111
  18. package/src/App.vue +196 -196
  19. package/src/ReportView.js +13 -13
  20. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  21. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  22. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  23. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  24. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  25. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  26. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  27. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  28. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  29. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  30. package/src/base-client/components/common/XAddForm/index.js +3 -3
  31. package/src/base-client/components/common/XAddForm/index.md +61 -61
  32. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  33. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -40
  34. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  35. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  36. package/src/base-client/components/common/XBadge/index.js +3 -3
  37. package/src/base-client/components/common/XBadge/index.md +39 -39
  38. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  39. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  40. package/src/base-client/components/common/XCalendar/index.md +284 -284
  41. package/src/base-client/components/common/XCard/index.js +3 -3
  42. package/src/base-client/components/common/XCard/index.md +43 -43
  43. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  44. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  45. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  46. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  47. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  48. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  49. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  50. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  51. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  52. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  53. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1390
  54. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  55. package/src/base-client/components/common/XForm/demo.vue +105 -105
  56. package/src/base-client/components/common/XForm/index.js +3 -3
  57. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  58. package/src/base-client/components/common/XFormCol/index.js +3 -3
  59. package/src/base-client/components/common/XFormCol/index.md +35 -35
  60. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  61. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  62. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  63. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  64. package/src/base-client/components/common/XFormTable/index.js +3 -3
  65. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  66. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  67. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  68. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  69. package/src/base-client/components/common/XInput/index.js +3 -3
  70. package/src/base-client/components/common/XInput/index.md +97 -97
  71. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  72. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  73. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  74. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  75. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  76. package/src/base-client/components/common/XRate/demo.vue +102 -102
  77. package/src/base-client/components/common/XRate/index.vue +149 -149
  78. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  79. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  80. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  81. package/src/base-client/components/common/XReport/index.md +103 -103
  82. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  83. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  84. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  85. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  86. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  87. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  88. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  89. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  90. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  91. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  92. package/src/base-client/components/common/XTable/index.js +3 -3
  93. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  94. package/src/base-client/components/common/XTimeline/index.md +191 -191
  95. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  96. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  97. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  98. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  99. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  100. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  101. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  102. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  103. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  104. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  105. package/src/base-client/components/his/XList/XList.vue +495 -495
  106. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  107. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  108. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  109. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  110. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  111. package/src/base-client/components/his/XRadio/index.md +234 -234
  112. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  113. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  114. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  115. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  116. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  117. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  118. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  119. package/src/base-client/components/his/XTitle/README.md +113 -113
  120. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  121. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  122. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  123. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  124. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  125. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  126. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  127. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  128. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  129. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  130. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  131. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  132. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  133. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  134. package/src/base-client/components/layout/XPageView/index.js +2 -2
  135. package/src/base-client/components/layout/XPageView/index.md +96 -96
  136. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  137. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  138. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  139. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  140. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  141. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  142. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  143. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  144. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  145. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  146. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  147. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  148. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  149. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  150. package/src/base-client/plugins/AppData.js +126 -126
  151. package/src/base-client/plugins/PagedList.js +177 -177
  152. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -0
  153. package/src/base-client/plugins/authority-plugin.js +167 -167
  154. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  155. package/src/base-client/plugins/i18n-extend.js +32 -32
  156. package/src/base-client/plugins/moment.js +8 -8
  157. package/src/base-client/plugins/selectValueTypeHelper.js +281 -0
  158. package/src/bootstrap.js +51 -51
  159. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  160. package/src/components/Ellipsis/index.js +3 -3
  161. package/src/components/Ellipsis/index.md +38 -38
  162. package/src/components/FileImageItem/FileItem.vue +320 -320
  163. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  164. package/src/components/FileImageItem/ImageItem.vue +107 -107
  165. package/src/components/FileImageItem/index.js +4 -4
  166. package/src/components/FilePreview/FilePreview.vue +181 -181
  167. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  168. package/src/components/FilePreview/index.js +3 -3
  169. package/src/components/HeightScanner/index.vue +615 -615
  170. package/src/components/STable/README.md +341 -341
  171. package/src/components/STable/index.js +558 -558
  172. package/src/components/TableSetting/TableSetting.vue +143 -143
  173. package/src/components/TableSetting/index.js +3 -3
  174. package/src/components/Trend/Trend.vue +41 -41
  175. package/src/components/Trend/index.js +3 -3
  176. package/src/components/Trend/index.less +41 -41
  177. package/src/components/Trend/index.md +45 -45
  178. package/src/components/_util/util.js +46 -46
  179. package/src/components/cache/AKeepAlive.js +179 -179
  180. package/src/components/exception/typeConfig.js +19 -19
  181. package/src/components/form/FormRow.vue +52 -52
  182. package/src/components/index.less +5 -5
  183. package/src/components/menu/Contextmenu.vue +84 -84
  184. package/src/components/menu/index.less +38 -38
  185. package/src/components/page/header/PageHeader.vue +64 -64
  186. package/src/components/page/header/index.less +40 -40
  187. package/src/components/result/Result.vue +77 -77
  188. package/src/components/setting/SettingItem.vue +26 -26
  189. package/src/components/setting/i18n.js +117 -117
  190. package/src/components/table/StandardTable.vue +141 -141
  191. package/src/components/table/advance/ActionColumns.vue +158 -158
  192. package/src/components/table/advance/ActionSize.vue +45 -45
  193. package/src/components/table/advance/AdvanceTable.vue +275 -275
  194. package/src/components/table/advance/SearchArea.vue +355 -355
  195. package/src/components/table/advance/index.js +2 -2
  196. package/src/components/table/api/ApiTable.vue +50 -50
  197. package/src/components/task/TaskGroup.vue +80 -80
  198. package/src/components/task/TaskItem.vue +26 -26
  199. package/src/components/tool/AvatarList.vue +68 -68
  200. package/src/components/tool/DetailList.vue +157 -157
  201. package/src/components/tool/Drawer.vue +142 -142
  202. package/src/components/tool/FooterToolBar.vue +30 -30
  203. package/src/components/tool/HeadInfo.vue +35 -35
  204. package/src/components/tool/TagSelect.vue +83 -83
  205. package/src/components/tool/TagSelectOption.vue +33 -33
  206. package/src/components/transition/PageToggleTransition.vue +97 -97
  207. package/src/config/default/admin.config.js +18 -18
  208. package/src/config/default/animate.config.js +21 -21
  209. package/src/config/default/index.js +6 -6
  210. package/src/config/index.js +3 -3
  211. package/src/config/replacer/index.js +10 -10
  212. package/src/config/replacer/resolve.config.js +67 -67
  213. package/src/expression/ExpressionRunner.js +26 -26
  214. package/src/expression/TestExpression.js +509 -509
  215. package/src/expression/core/Delegate.js +115 -115
  216. package/src/expression/core/Expression.js +1358 -1358
  217. package/src/expression/core/Program.js +932 -932
  218. package/src/expression/core/Token.js +27 -27
  219. package/src/expression/enums/ExpressionType.js +81 -81
  220. package/src/expression/enums/TokenType.js +11 -11
  221. package/src/expression/exception/BreakWayException.js +2 -2
  222. package/src/expression/exception/ContinueWayException.js +2 -2
  223. package/src/expression/exception/ExpressionException.js +28 -28
  224. package/src/expression/exception/ReturnWayException.js +14 -14
  225. package/src/expression/exception/ServiceException.js +22 -22
  226. package/src/expression/instances/LogicConsole.js +44 -44
  227. package/src/expression/ts/ExpressionRunner.ts +28 -28
  228. package/src/expression/ts/TestExpression.ts +509 -509
  229. package/src/expression/ts/core/Delegate.ts +114 -114
  230. package/src/expression/ts/core/Expression.ts +1309 -1309
  231. package/src/expression/ts/core/Program.ts +950 -950
  232. package/src/expression/ts/core/Token.ts +29 -29
  233. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  234. package/src/expression/ts/enums/TokenType.ts +13 -13
  235. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  236. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  237. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  238. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  239. package/src/expression/ts/exception/ServiceException.ts +22 -22
  240. package/src/expression/ts/instances/JSONArray.ts +48 -48
  241. package/src/expression/ts/instances/JSONObject.ts +109 -109
  242. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  243. package/src/layouts/AdminLayout.vue +176 -176
  244. package/src/layouts/BlankView.vue +79 -79
  245. package/src/layouts/ComponentLayoutOne.vue +47 -47
  246. package/src/layouts/GridView.vue +43 -43
  247. package/src/layouts/PageView.vue +55 -55
  248. package/src/layouts/footer/PageFooter.vue +49 -49
  249. package/src/layouts/header/HeaderAvatar.vue +64 -64
  250. package/src/layouts/header/HeaderSearch.vue +67 -67
  251. package/src/layouts/header/index.less +92 -92
  252. package/src/layouts/tabs/TabsView.vue +383 -383
  253. package/src/layouts/tabs/i18n.js +25 -25
  254. package/src/layouts/tabs/index.js +2 -2
  255. package/src/logic/LogicRunner.js +62 -62
  256. package/src/logic/TestLogic.js +13 -13
  257. package/src/logic/plugins/common/DateTools.js +35 -35
  258. package/src/logic/plugins/common/VueTools.js +30 -30
  259. package/src/logic/plugins/index.js +7 -7
  260. package/src/logic/ts/LogicRunner.ts +67 -67
  261. package/src/logic/ts/TestLogic.ts +13 -13
  262. package/src/main.js +33 -33
  263. package/src/mixins/formValidationMixin.js +46 -46
  264. package/src/mock/common/activityData.js +32 -32
  265. package/src/mock/common/index.js +89 -89
  266. package/src/mock/common/reportData.js +20 -20
  267. package/src/mock/common/tableData.js +118 -118
  268. package/src/mock/index.js +12 -12
  269. package/src/mock/project/index.js +17 -17
  270. package/src/mock/user/current.js +13 -13
  271. package/src/mock/user/login.js +39 -39
  272. package/src/mock/user/routes.js +61 -61
  273. package/src/mock/workplace/index.js +15 -15
  274. package/src/pages/LogicCallExample/index.vue +46 -46
  275. package/src/pages/ReportGrid/index.vue +76 -76
  276. package/src/pages/ReportView.vue +50 -50
  277. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  278. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  279. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  280. package/src/pages/WorkflowDetail/WorkflowDetail.vue +391 -391
  281. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  282. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  283. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1765
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  291. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  292. package/src/pages/XPageViewExample/index.vue +149 -149
  293. package/src/pages/addressSelect/addressDemo.vue +24 -24
  294. package/src/pages/addressSelect/index.vue +270 -270
  295. package/src/pages/dashboard/workplace/i18n.js +40 -40
  296. package/src/pages/dashboard/workplace/index.js +2 -2
  297. package/src/pages/dashboard/workplace/index.less +59 -59
  298. package/src/pages/exception/403.vue +21 -21
  299. package/src/pages/exception/404.vue +24 -24
  300. package/src/pages/exception/500.vue +21 -21
  301. package/src/pages/login/index.js +2 -2
  302. package/src/pages/report/ReportTableHome.vue +28 -28
  303. package/src/pages/resourceManage/depListManage.vue +23 -23
  304. package/src/pages/resourceManage/funListManage.vue +23 -23
  305. package/src/pages/resourceManage/index.js +15 -15
  306. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  307. package/src/pages/resourceManage/roleListManage.vue +23 -23
  308. package/src/pages/resourceManage/staffListManage.vue +23 -23
  309. package/src/pages/system/file/Info.vue +56 -56
  310. package/src/pages/system/file/index.vue +317 -317
  311. package/src/pages/system/settings/index.vue +126 -126
  312. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  313. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  314. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  315. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  316. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  317. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  318. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  319. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  320. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  321. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  322. package/src/pages/userInfoDetailManage/index.vue +290 -290
  323. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  324. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  325. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  326. package/src/plugins/HiPrintPlugin.js +164 -164
  327. package/src/router/async/router.map.js +126 -126
  328. package/src/router/guards.js +262 -262
  329. package/src/router/i18n.js +57 -57
  330. package/src/router.js +17 -17
  331. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  332. package/src/services/api/LogDetailsViewApi.js +10 -10
  333. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  334. package/src/services/api/logininfor/index.js +6 -6
  335. package/src/services/api/manage.js +8 -8
  336. package/src/services/api/restTools.js +215 -215
  337. package/src/services/api/workFlow.js +57 -57
  338. package/src/services/apiService.js +16 -16
  339. package/src/services/dataSource.js +12 -12
  340. package/src/services/index.js +7 -7
  341. package/src/services/user.js +92 -92
  342. package/src/services/v3Api.js +116 -116
  343. package/src/store/index.js +5 -5
  344. package/src/store/mutation-types.js +4 -4
  345. package/src/theme/antd/ant-menu.less +2 -2
  346. package/src/theme/antd/ant-message.less +3 -3
  347. package/src/theme/antd/ant-table.less +22 -22
  348. package/src/theme/antd/ant-time-picker.less +3 -3
  349. package/src/theme/antd/index.less +3 -3
  350. package/src/theme/default/color.less +43 -43
  351. package/src/theme/default/index.less +3 -3
  352. package/src/theme/default/nprogress.less +76 -76
  353. package/src/theme/global.less +279 -279
  354. package/src/theme/index.less +5 -5
  355. package/src/theme/reportTable.less +58 -58
  356. package/src/theme/theme.less +1 -1
  357. package/src/utils/EncryptUtil.js +162 -162
  358. package/src/utils/Objects.js +25 -25
  359. package/src/utils/axios-interceptors.js +100 -100
  360. package/src/utils/colors.js +107 -107
  361. package/src/utils/common.js +10 -10
  362. package/src/utils/excel/Blob.js +180 -180
  363. package/src/utils/excel/Export2Excel.js +141 -141
  364. package/src/utils/filter.js +21 -21
  365. package/src/utils/i18n.js +80 -80
  366. package/src/utils/indexedDB.js +549 -549
  367. package/src/utils/microAppUtils.js +49 -49
  368. package/src/utils/request.js +395 -395
  369. package/src/utils/routerUtil.js +553 -553
  370. package/src/utils/themeUtil.js +100 -100
  371. package/test/Tree.spec.js +168 -168
  372. package/test/myDialog.spec.js +47 -47
  373. package/test/request.test.js +17 -17
  374. package/test/util.test.js +53 -53
  375. package/test/v3Api.test.js +1984 -1984
  376. package/tests/unit/ReportTable.spec.js +16 -16
  377. package/vue.config.js +222 -222
@@ -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>