vue2-client 1.16.25 → 1.16.26

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 (332) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.apply +19 -19
  3. package/.env.gaslink +19 -19
  4. package/.env.his +19 -19
  5. package/.env.liuli +20 -20
  6. package/.env.scada +19 -19
  7. package/.eslintrc.js +90 -90
  8. package/CHANGELOG.md +824 -824
  9. package/Components.md +60 -60
  10. package/docs/LowCode/lowcode.md +155 -155
  11. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  12. package/docs/index.md +30 -30
  13. package/index.js +31 -31
  14. package/jest-transform-stub.js +8 -8
  15. package/jest.setup.js +7 -7
  16. package/jsconfig.json +19 -19
  17. package/package.json +1 -1
  18. package/public/his/editor/editor.html +51 -51
  19. package/public/his/editor/mock/bind_data.html +779 -779
  20. package/public/his/editor/mock/data_table.html +40 -40
  21. package/public/his/editor/mock/sign.html +75 -75
  22. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  23. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  24. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  25. package/public/his/editor/vender/date97/calendar.js +4 -4
  26. package/public/his/editor/vender/date97/lang/en.js +13 -13
  27. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  28. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  29. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  30. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  31. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  32. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  33. package/public/his/editor/vender/diff.js +1627 -1627
  34. package/public/his/editor/vender/editor.js +1 -1
  35. package/public/his/editor/vender/fabric.js +31187 -31187
  36. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  37. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  38. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  39. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  40. package/public/his/editor/vender/mui/mui.min.css +4 -4
  41. package/public/his/editor/vender/mui/mui.min.js +5 -5
  42. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  43. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  44. package/public/his/editor/vender/qrcode.js +7 -7
  45. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  46. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  47. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  48. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  49. package/public/his/editor/vender/validator.js +5094 -5094
  50. package/public/his/editor/vender/weui/weui.css +5659 -5659
  51. package/public/his/editor/vender/weui/weui.min.css +4 -4
  52. package/public/his/editor/vender/weui/weui.min.js +11 -11
  53. package/src/assets/img/paymentMethod/icon1.png +0 -0
  54. package/src/assets/img/paymentMethod/icon2.png +0 -0
  55. package/src/assets/img/paymentMethod/icon3.png +0 -0
  56. package/src/assets/img/paymentMethod/icon4.png +0 -0
  57. package/src/assets/img/paymentMethod/icon5.png +0 -0
  58. package/src/assets/img/paymentMethod/icon6.png +0 -0
  59. package/src/assets/img/querySlotDemo.svg +15 -15
  60. package/src/assets/svg/badtwo.svg +1 -1
  61. package/src/assets/svg/goodtwo.svg +1 -1
  62. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  63. package/src/base-client/components/AI/demo.vue +31 -31
  64. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  65. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  66. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  67. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  68. package/src/base-client/components/common/CitySelect/CitySelect.vue +1 -1
  69. package/src/base-client/components/common/CitySelect/index.js +3 -3
  70. package/src/base-client/components/common/CitySelect/index.md +109 -109
  71. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  72. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  73. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  74. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  75. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  76. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  77. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  78. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  79. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  80. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  81. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  82. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  83. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  84. package/src/base-client/components/common/HIS/HForm/HForm.vue +133 -0
  85. package/src/base-client/components/common/HIS/HForm/index.js +3 -0
  86. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  87. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  88. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  89. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  90. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  91. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  92. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  93. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  94. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  95. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  96. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  97. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  98. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  99. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  100. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  101. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  102. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  103. package/src/base-client/components/common/Recording/index.js +3 -3
  104. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  105. package/src/base-client/components/common/Tree/index.js +2 -2
  106. package/src/base-client/components/common/Upload/index.js +3 -3
  107. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  108. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  109. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  110. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  111. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  112. package/src/base-client/components/common/XAddReport/index.js +3 -3
  113. package/src/base-client/components/common/XAddReport/index.md +56 -56
  114. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  115. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  116. package/src/base-client/components/common/XButtons/index.js +3 -3
  117. package/src/base-client/components/common/XButtons/index.md +61 -61
  118. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  119. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  120. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  121. package/src/base-client/components/common/XDataCard/index.js +3 -3
  122. package/src/base-client/components/common/XDataCard/index.md +1 -1
  123. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  124. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  125. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  126. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  127. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  128. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  129. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  130. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  131. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  132. package/src/base-client/components/common/XForm/index.md +178 -178
  133. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  134. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  135. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  136. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  137. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  138. package/src/base-client/components/common/XFormTable/index.md +92 -92
  139. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  140. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  141. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  142. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  143. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  144. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  145. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  146. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  147. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  148. package/src/base-client/components/common/XPrint/index.vue +97 -97
  149. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  150. package/src/base-client/components/common/XReport/XReportHospitalizationDemo.vue +45 -0
  151. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  152. package/src/base-client/components/common/XReport/index.js +3 -3
  153. package/src/base-client/components/common/XReport/print.js +186 -186
  154. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  155. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +4 -1
  156. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  157. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  158. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  159. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  160. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  161. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  162. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  163. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  164. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  165. package/src/base-client/components/common/XStepView/index.js +3 -3
  166. package/src/base-client/components/common/XStepView/index.md +31 -31
  167. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  168. package/src/base-client/components/common/XTab/index.js +3 -3
  169. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  170. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  171. package/src/base-client/components/common/XTable/index.md +255 -255
  172. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  173. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  174. package/src/base-client/components/common/XTree/index.js +3 -3
  175. package/src/base-client/components/common/XTree/index.md +36 -36
  176. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  177. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  178. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  179. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  180. package/src/base-client/components/his/XCharge/testConfig.js +149 -0
  181. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  182. package/src/base-client/components/index.js +51 -51
  183. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  184. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  185. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  186. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  187. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  188. package/src/base-client/plugins/Config.js +19 -19
  189. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  190. package/src/base-client/plugins/Recording.js +258 -258
  191. package/src/base-client/plugins/index.js +23 -23
  192. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  193. package/src/components/Charts/Bar.vue +62 -62
  194. package/src/components/Charts/ChartCard.vue +134 -134
  195. package/src/components/Charts/Liquid.vue +67 -67
  196. package/src/components/Charts/MiniArea.vue +39 -39
  197. package/src/components/Charts/MiniBar.vue +39 -39
  198. package/src/components/Charts/MiniProgress.vue +75 -75
  199. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  200. package/src/components/Charts/Radar.vue +68 -68
  201. package/src/components/Charts/RankList.vue +77 -77
  202. package/src/components/Charts/TagCloud.vue +113 -113
  203. package/src/components/Charts/TransferBar.vue +64 -64
  204. package/src/components/Charts/Trend.vue +82 -82
  205. package/src/components/Charts/chart.less +12 -12
  206. package/src/components/Charts/smooth.area.less +13 -13
  207. package/src/components/CodeMirror/inedx.vue +118 -118
  208. package/src/components/CodeMirror/setting.js +40 -40
  209. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  210. package/src/components/NumberInfo/index.js +3 -3
  211. package/src/components/NumberInfo/index.less +54 -54
  212. package/src/components/NumberInfo/index.md +43 -43
  213. package/src/components/card/ChartCard.vue +79 -79
  214. package/src/components/chart/Bar.vue +60 -60
  215. package/src/components/chart/MiniArea.vue +67 -67
  216. package/src/components/chart/MiniBar.vue +59 -59
  217. package/src/components/chart/MiniProgress.vue +57 -57
  218. package/src/components/chart/Radar.vue +80 -80
  219. package/src/components/chart/RankingList.vue +60 -60
  220. package/src/components/chart/Trend.vue +79 -79
  221. package/src/components/chart/index.less +9 -9
  222. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  223. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  224. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  225. package/src/components/checkbox/index.js +9 -9
  226. package/src/components/exception/ExceptionPage.vue +70 -70
  227. package/src/components/g2Charts/constants.js +202 -202
  228. package/src/components/g2Charts/demo.vue +808 -808
  229. package/src/components/g2Charts/designer.vue +228 -228
  230. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  231. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  232. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  233. package/src/components/g2Charts/index.vue +397 -397
  234. package/src/components/index.js +36 -36
  235. package/src/components/input/IInput.vue +66 -66
  236. package/src/components/menu/SideMenu.vue +75 -75
  237. package/src/components/menu/menu.js +273 -273
  238. package/src/components/setting/Setting.vue +234 -234
  239. package/src/components/tool/AStepItem.vue +60 -60
  240. package/src/config/CreateQueryConfig.js +325 -325
  241. package/src/config/default/antd.config.js +89 -89
  242. package/src/config/default/setting.config.js +55 -55
  243. package/src/font-style/font.css +60 -60
  244. package/src/layouts/CommonLayout.vue +56 -56
  245. package/src/layouts/PageLayout.vue +151 -151
  246. package/src/layouts/SinglePageView.vue +136 -136
  247. package/src/layouts/header/AdminHeader.vue +132 -132
  248. package/src/layouts/header/HeaderNotice.vue +177 -177
  249. package/src/layouts/header/InstitutionDetail.vue +181 -181
  250. package/src/layouts/tabs/TabsHead.vue +189 -189
  251. package/src/lib.js +1 -1
  252. package/src/mock/extend/index.js +84 -84
  253. package/src/mock/goods/index.js +108 -108
  254. package/src/pages/DefaultExample/index.vue +77 -77
  255. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  256. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  257. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  258. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  259. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  260. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  261. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  262. package/src/pages/DynamicStatistics/index.vue +282 -282
  263. package/src/pages/Example/childIndex.vue +15 -15
  264. package/src/pages/Example/index.vue +30 -30
  265. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  266. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  267. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  268. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  269. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  270. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  271. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  272. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  273. package/src/pages/Recording/index.vue +77 -77
  274. package/src/pages/ServiceReview/index.vue +284 -284
  275. package/src/pages/SubExample/index.vue +26 -26
  276. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  277. package/src/pages/XReportView/index.vue +64 -64
  278. package/src/pages/XTreeOneProExample/index.vue +67 -67
  279. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  280. package/src/pages/login/Login.vue +379 -379
  281. package/src/pages/login/LoginV3.vue +389 -389
  282. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  283. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  284. package/src/pages/report/ReportTable.js +124 -124
  285. package/src/pages/resourceManage/orgListManage.vue +98 -98
  286. package/src/pages/system/dictionary/index.vue +44 -44
  287. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  288. package/src/pages/system/monitor/operLog/index.vue +37 -37
  289. package/src/pages/system/settings/modifyPassword.vue +117 -117
  290. package/src/pages/system/ticket/index.vue +480 -480
  291. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  292. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  293. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  294. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  295. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  296. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  297. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  298. package/src/plugins/EventLogPlugin.js +33 -33
  299. package/src/plugins/FindParentsData.js +17 -17
  300. package/src/router/async/config.async.js +35 -35
  301. package/src/router/async/router.map.js +3 -1
  302. package/src/router/index.js +27 -27
  303. package/src/services/DataModel.js +30 -30
  304. package/src/services/LodopFuncs.js +137 -137
  305. package/src/services/api/TicketDetailsViewApi.js +46 -46
  306. package/src/services/api/cas.js +79 -79
  307. package/src/services/api/common.js +347 -346
  308. package/src/services/api/entity.js +18 -18
  309. package/src/services/api/index.js +17 -17
  310. package/src/store/modules/account.js +115 -115
  311. package/src/store/modules/index.js +5 -5
  312. package/src/store/modules/lowCode.js +33 -33
  313. package/src/store/modules/setting.js +119 -119
  314. package/src/theme/default/style.less +58 -58
  315. package/src/utils/authority-utils.js +85 -85
  316. package/src/utils/errorCode.js +6 -6
  317. package/src/utils/formatter.js +74 -74
  318. package/src/utils/htmlToPDF.js +108 -108
  319. package/src/utils/htmlToPDFApi.js +5 -5
  320. package/src/utils/login.js +188 -188
  321. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  322. package/src/utils/lowcode/lowcodeLog.js +29 -29
  323. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  324. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  325. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  326. package/src/utils/map-utils.js +47 -47
  327. package/src/utils/reg.js +95 -95
  328. package/src/utils/runEvalFunction.js +14 -14
  329. package/src/utils/theme-color-replacer-extend.js +92 -92
  330. package/src/utils/util.js +329 -329
  331. package/src/utils/waterMark.js +31 -31
  332. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,258 +1,258 @@
1
- // recordingPlugin.js
2
- export default {
3
- install (Vue) {
4
- Vue.prototype.$recording = {
5
- isRecording: false, // 标识是否正在录音
6
- mediaRecorder: null, // MediaRecorder 实例
7
- audioChunks: [], // 存储录音数据块
8
- audioUrl: null, // 录音生成的 URL
9
- inputData: '',
10
- audioContext: null,
11
- audioStream: null,
12
- ws: null,
13
- resolvePromise: null, // 用于保存 Promise 的 resolve 函数
14
-
15
- async startRecording () {
16
- this.inputData = ''
17
- this.audioChunks = []
18
-
19
- const url = 'ws://192.168.50.67:30288/websocket/bash' // WebSocket地址
20
- this.setupWebSocket(url)
21
-
22
- // 等待 WebSocket 连接成功
23
- const result = await this.waitForWebSocketConnection()
24
-
25
- if (result) {
26
- return {
27
- code: 500,
28
- msg: result
29
- }
30
- }
31
-
32
- this.isRecording = true
33
-
34
- // 初始化 AudioContext
35
- this.audioContext = new (window.AudioContext || window.webkitAudioContext)()
36
-
37
- if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
38
- this.ws.close()
39
- return {
40
- code: 500,
41
- msg: '录音软件不支持您的浏览器!请使用现代浏览器或确保您正在使用 HTTPS。'
42
- }
43
- }
44
- // 获取麦克风输入流
45
- this.audioStream = await navigator.mediaDevices.getUserMedia({ audio: true })
46
-
47
- // 设置音频处理流程
48
- this.setupAudioProcessing()
49
-
50
- return {
51
- code: 200,
52
- msg: '开始录音'
53
- }
54
- },
55
-
56
- setupWebSocket (url) {
57
- this.ws = new WebSocket(url)
58
-
59
- this.ws.onmessage = (event) => {
60
- const data = JSON.parse(event.data)
61
- console.log('Result:', data.result)
62
- if (data.result !== undefined) {
63
- this.inputData += data.result
64
- }
65
- if (!this.isRecording) {
66
- this.ws.close()
67
- }
68
- }
69
-
70
- this.ws.onclose = () => {
71
- console.log('WebSocket closed.')
72
- this.resRecordingData()
73
- this.resolvePromise(this.inputData)
74
- }
75
- this.ws.onerror = (error) => console.error('WebSocket error:', error)
76
- },
77
-
78
- waitForWebSocketConnection () {
79
- return new Promise((resolve) => {
80
- this.ws.onopen = () => {
81
- console.log('WebSocket 连接成功')
82
- resolve()
83
- }
84
-
85
- this.ws.onerror = (error) => {
86
- resolve('WebSocket 连接失败: ' + error.message)
87
- }
88
- })
89
- },
90
-
91
- setupAudioProcessing () {
92
- try {
93
- const source = this.audioContext.createMediaStreamSource(this.audioStream)
94
- const processor = this.audioContext.createScriptProcessor(4096, 1, 1)
95
-
96
- processor.onaudioprocess = (e) => {
97
- // if (!this.isRecording) return
98
-
99
- const inputData = e.inputBuffer.getChannelData(0)
100
-
101
- // Resample to 16000 Hz if needed
102
- const resampledData = this.resample(inputData, this.audioContext.sampleRate, 16000)
103
-
104
- this.audioChunks.push(new Float32Array(resampledData))
105
-
106
- // Convert to 16-bit PCM and send via WebSocket
107
- const byteArray = this.convertTo16BitPCM(resampledData)
108
-
109
- const finalData = new Uint8Array(1 + byteArray.length) // 创建最终数据数组
110
- finalData[0] = 1 // 第一个字节为类型,值为1
111
- finalData.set(byteArray, 1) // 设置实际数据
112
-
113
- this.ws.send(finalData) // 发送最终数据
114
- }
115
-
116
- source.connect(processor)
117
- processor.connect(this.audioContext.destination)
118
- return {
119
- code: 200,
120
- msg: '录音初始化成功'
121
- }
122
- } catch (error) {
123
- console.error('Error setting up audio processing:', error)
124
- return {
125
- code: 500,
126
- msg: '录音初始化出错:' + error.message
127
- }
128
- }
129
- },
130
-
131
- stopRecording () {
132
- console.log('停止录音')
133
-
134
- // 停止麦克风流
135
- if (this.audioStream) {
136
- this.audioStream.getTracks().forEach((track) => track.stop())
137
- }
138
-
139
- if (this.audioContext) {
140
- this.audioContext.close()
141
- }
142
-
143
- // 发送结束信号
144
- const endSignal = new Uint8Array(1) // 创建一个长度为1的Uint8Array
145
- endSignal[0] = 2 // 直接发送类型,值为2
146
- this.ws.send(endSignal) // 发送结束信号
147
-
148
- this.isRecording = false
149
-
150
- return {
151
- code: 200,
152
- msg: '录音已停止'
153
- }
154
- },
155
-
156
- saveAudioFile () {
157
- const audioBuffer = this.mergeAudioChunks(this.audioChunks)
158
-
159
- // 转换为 WAV 格式
160
- const wavBlob = this.encodeWAV(audioBuffer, 16000)
161
-
162
- // 创建下载链接并触发下载
163
- const url = URL.createObjectURL(wavBlob)
164
- const a = document.createElement('a')
165
- a.style.display = 'none'
166
- a.href = url
167
- a.download = 'recording.wav'
168
- document.body.appendChild(a)
169
- a.click()
170
- window.URL.revokeObjectURL(url)
171
- },
172
-
173
- mergeAudioChunks (chunks) {
174
- const length = chunks.reduce((sum, chunk) => sum + chunk.length, 0)
175
- const result = new Float32Array(length)
176
- let offset = 0
177
- for (const chunk of chunks) {
178
- result.set(chunk, offset)
179
- offset += chunk.length
180
- }
181
- return result
182
- },
183
-
184
- encodeWAV (samples, sampleRate) {
185
- const buffer = new ArrayBuffer(44 + samples.length * 2)
186
- const view = new DataView(buffer)
187
-
188
- const writeString = (view, offset, string) => {
189
- for (let i = 0; i < string.length; i++) {
190
- view.setUint8(offset + i, string.charCodeAt(i))
191
- }
192
- }
193
-
194
- writeString(view, 0, 'RIFF')
195
- view.setUint32(4, 36 + samples.length * 2, true)
196
- writeString(view, 8, 'WAVE')
197
-
198
- writeString(view, 12, 'fmt ')
199
- view.setUint32(16, 16, true)
200
- view.setUint16(20, 1, true)
201
- view.setUint16(22, 1, true)
202
- view.setUint32(24, sampleRate, true)
203
- view.setUint32(28, sampleRate * 2, true)
204
- view.setUint16(32, 2, true)
205
- view.setUint16(34, 16, true)
206
-
207
- writeString(view, 36, 'data')
208
- view.setUint32(40, samples.length * 2, true)
209
-
210
- let offset = 44
211
- for (let i = 0; i < samples.length; i++) {
212
- const s = Math.max(-1, Math.min(1, samples[i]))
213
- view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true)
214
- offset += 2
215
- }
216
-
217
- return new Blob([buffer], { type: 'audio/wav' })
218
- },
219
-
220
- resample (data, inputSampleRate, outputSampleRate) {
221
- if (inputSampleRate === outputSampleRate) {
222
- return data
223
- }
224
- const sampleRateRatio = inputSampleRate / outputSampleRate
225
- const newLength = Math.round(data.length / sampleRateRatio)
226
- const resampledData = new Float32Array(newLength)
227
- for (let i = 0; i < newLength; i++) {
228
- const index = Math.round(i * sampleRateRatio)
229
- resampledData[i] = data[index]
230
- }
231
- return resampledData
232
- },
233
-
234
- convertTo16BitPCM (data) {
235
- const output = new Int16Array(data.length)
236
- for (let i = 0; i < data.length; i++) {
237
- output[i] = Math.max(-1, Math.min(1, data[i])) * 0x7fff
238
- }
239
- return new Uint8Array(output.buffer)
240
- },
241
-
242
- async getRecordingData () {
243
- return new Promise((resolve) => {
244
- this.resolvePromise = resolve
245
-
246
- if (!this.ws) {
247
- // 如果 WebSocket 未初始化,直接拒绝
248
- console.log('错误结束')
249
- resolve(this.inputData)
250
- }
251
- })
252
- },
253
-
254
- resRecordingData () {
255
- }
256
- }
257
- }
258
- }
1
+ // recordingPlugin.js
2
+ export default {
3
+ install (Vue) {
4
+ Vue.prototype.$recording = {
5
+ isRecording: false, // 标识是否正在录音
6
+ mediaRecorder: null, // MediaRecorder 实例
7
+ audioChunks: [], // 存储录音数据块
8
+ audioUrl: null, // 录音生成的 URL
9
+ inputData: '',
10
+ audioContext: null,
11
+ audioStream: null,
12
+ ws: null,
13
+ resolvePromise: null, // 用于保存 Promise 的 resolve 函数
14
+
15
+ async startRecording () {
16
+ this.inputData = ''
17
+ this.audioChunks = []
18
+
19
+ const url = 'ws://192.168.50.67:30288/websocket/bash' // WebSocket地址
20
+ this.setupWebSocket(url)
21
+
22
+ // 等待 WebSocket 连接成功
23
+ const result = await this.waitForWebSocketConnection()
24
+
25
+ if (result) {
26
+ return {
27
+ code: 500,
28
+ msg: result
29
+ }
30
+ }
31
+
32
+ this.isRecording = true
33
+
34
+ // 初始化 AudioContext
35
+ this.audioContext = new (window.AudioContext || window.webkitAudioContext)()
36
+
37
+ if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
38
+ this.ws.close()
39
+ return {
40
+ code: 500,
41
+ msg: '录音软件不支持您的浏览器!请使用现代浏览器或确保您正在使用 HTTPS。'
42
+ }
43
+ }
44
+ // 获取麦克风输入流
45
+ this.audioStream = await navigator.mediaDevices.getUserMedia({ audio: true })
46
+
47
+ // 设置音频处理流程
48
+ this.setupAudioProcessing()
49
+
50
+ return {
51
+ code: 200,
52
+ msg: '开始录音'
53
+ }
54
+ },
55
+
56
+ setupWebSocket (url) {
57
+ this.ws = new WebSocket(url)
58
+
59
+ this.ws.onmessage = (event) => {
60
+ const data = JSON.parse(event.data)
61
+ console.log('Result:', data.result)
62
+ if (data.result !== undefined) {
63
+ this.inputData += data.result
64
+ }
65
+ if (!this.isRecording) {
66
+ this.ws.close()
67
+ }
68
+ }
69
+
70
+ this.ws.onclose = () => {
71
+ console.log('WebSocket closed.')
72
+ this.resRecordingData()
73
+ this.resolvePromise(this.inputData)
74
+ }
75
+ this.ws.onerror = (error) => console.error('WebSocket error:', error)
76
+ },
77
+
78
+ waitForWebSocketConnection () {
79
+ return new Promise((resolve) => {
80
+ this.ws.onopen = () => {
81
+ console.log('WebSocket 连接成功')
82
+ resolve()
83
+ }
84
+
85
+ this.ws.onerror = (error) => {
86
+ resolve('WebSocket 连接失败: ' + error.message)
87
+ }
88
+ })
89
+ },
90
+
91
+ setupAudioProcessing () {
92
+ try {
93
+ const source = this.audioContext.createMediaStreamSource(this.audioStream)
94
+ const processor = this.audioContext.createScriptProcessor(4096, 1, 1)
95
+
96
+ processor.onaudioprocess = (e) => {
97
+ // if (!this.isRecording) return
98
+
99
+ const inputData = e.inputBuffer.getChannelData(0)
100
+
101
+ // Resample to 16000 Hz if needed
102
+ const resampledData = this.resample(inputData, this.audioContext.sampleRate, 16000)
103
+
104
+ this.audioChunks.push(new Float32Array(resampledData))
105
+
106
+ // Convert to 16-bit PCM and send via WebSocket
107
+ const byteArray = this.convertTo16BitPCM(resampledData)
108
+
109
+ const finalData = new Uint8Array(1 + byteArray.length) // 创建最终数据数组
110
+ finalData[0] = 1 // 第一个字节为类型,值为1
111
+ finalData.set(byteArray, 1) // 设置实际数据
112
+
113
+ this.ws.send(finalData) // 发送最终数据
114
+ }
115
+
116
+ source.connect(processor)
117
+ processor.connect(this.audioContext.destination)
118
+ return {
119
+ code: 200,
120
+ msg: '录音初始化成功'
121
+ }
122
+ } catch (error) {
123
+ console.error('Error setting up audio processing:', error)
124
+ return {
125
+ code: 500,
126
+ msg: '录音初始化出错:' + error.message
127
+ }
128
+ }
129
+ },
130
+
131
+ stopRecording () {
132
+ console.log('停止录音')
133
+
134
+ // 停止麦克风流
135
+ if (this.audioStream) {
136
+ this.audioStream.getTracks().forEach((track) => track.stop())
137
+ }
138
+
139
+ if (this.audioContext) {
140
+ this.audioContext.close()
141
+ }
142
+
143
+ // 发送结束信号
144
+ const endSignal = new Uint8Array(1) // 创建一个长度为1的Uint8Array
145
+ endSignal[0] = 2 // 直接发送类型,值为2
146
+ this.ws.send(endSignal) // 发送结束信号
147
+
148
+ this.isRecording = false
149
+
150
+ return {
151
+ code: 200,
152
+ msg: '录音已停止'
153
+ }
154
+ },
155
+
156
+ saveAudioFile () {
157
+ const audioBuffer = this.mergeAudioChunks(this.audioChunks)
158
+
159
+ // 转换为 WAV 格式
160
+ const wavBlob = this.encodeWAV(audioBuffer, 16000)
161
+
162
+ // 创建下载链接并触发下载
163
+ const url = URL.createObjectURL(wavBlob)
164
+ const a = document.createElement('a')
165
+ a.style.display = 'none'
166
+ a.href = url
167
+ a.download = 'recording.wav'
168
+ document.body.appendChild(a)
169
+ a.click()
170
+ window.URL.revokeObjectURL(url)
171
+ },
172
+
173
+ mergeAudioChunks (chunks) {
174
+ const length = chunks.reduce((sum, chunk) => sum + chunk.length, 0)
175
+ const result = new Float32Array(length)
176
+ let offset = 0
177
+ for (const chunk of chunks) {
178
+ result.set(chunk, offset)
179
+ offset += chunk.length
180
+ }
181
+ return result
182
+ },
183
+
184
+ encodeWAV (samples, sampleRate) {
185
+ const buffer = new ArrayBuffer(44 + samples.length * 2)
186
+ const view = new DataView(buffer)
187
+
188
+ const writeString = (view, offset, string) => {
189
+ for (let i = 0; i < string.length; i++) {
190
+ view.setUint8(offset + i, string.charCodeAt(i))
191
+ }
192
+ }
193
+
194
+ writeString(view, 0, 'RIFF')
195
+ view.setUint32(4, 36 + samples.length * 2, true)
196
+ writeString(view, 8, 'WAVE')
197
+
198
+ writeString(view, 12, 'fmt ')
199
+ view.setUint32(16, 16, true)
200
+ view.setUint16(20, 1, true)
201
+ view.setUint16(22, 1, true)
202
+ view.setUint32(24, sampleRate, true)
203
+ view.setUint32(28, sampleRate * 2, true)
204
+ view.setUint16(32, 2, true)
205
+ view.setUint16(34, 16, true)
206
+
207
+ writeString(view, 36, 'data')
208
+ view.setUint32(40, samples.length * 2, true)
209
+
210
+ let offset = 44
211
+ for (let i = 0; i < samples.length; i++) {
212
+ const s = Math.max(-1, Math.min(1, samples[i]))
213
+ view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true)
214
+ offset += 2
215
+ }
216
+
217
+ return new Blob([buffer], { type: 'audio/wav' })
218
+ },
219
+
220
+ resample (data, inputSampleRate, outputSampleRate) {
221
+ if (inputSampleRate === outputSampleRate) {
222
+ return data
223
+ }
224
+ const sampleRateRatio = inputSampleRate / outputSampleRate
225
+ const newLength = Math.round(data.length / sampleRateRatio)
226
+ const resampledData = new Float32Array(newLength)
227
+ for (let i = 0; i < newLength; i++) {
228
+ const index = Math.round(i * sampleRateRatio)
229
+ resampledData[i] = data[index]
230
+ }
231
+ return resampledData
232
+ },
233
+
234
+ convertTo16BitPCM (data) {
235
+ const output = new Int16Array(data.length)
236
+ for (let i = 0; i < data.length; i++) {
237
+ output[i] = Math.max(-1, Math.min(1, data[i])) * 0x7fff
238
+ }
239
+ return new Uint8Array(output.buffer)
240
+ },
241
+
242
+ async getRecordingData () {
243
+ return new Promise((resolve) => {
244
+ this.resolvePromise = resolve
245
+
246
+ if (!this.ws) {
247
+ // 如果 WebSocket 未初始化,直接拒绝
248
+ console.log('错误结束')
249
+ resolve(this.inputData)
250
+ }
251
+ })
252
+ },
253
+
254
+ resRecordingData () {
255
+ }
256
+ }
257
+ }
258
+ }
@@ -1,23 +1,23 @@
1
- import GetLoginInfoService from '@vue2-client/base-client/plugins/GetLoginInfoService'
2
- import GetAppDataService from '@vue2-client/base-client/plugins/AppData'
3
- import getConfig from '@vue2-client/base-client/plugins/Config'
4
- import moment from '@vue2-client/base-client/plugins/moment'
5
- import recording from '@vue2-client/base-client/plugins/Recording'
6
-
7
- import VueI18nPlugin from './i18n-extend'
8
- import AuthorityPlugin from './authority-plugin'
9
- import TabsPagePlugin from './tabs-page-plugin'
10
-
11
- const Plugins = {
12
- install: function (Vue) {
13
- Vue.use(GetLoginInfoService)
14
- Vue.use(GetAppDataService)
15
- Vue.use(getConfig)
16
- Vue.use(moment)
17
- Vue.use(VueI18nPlugin)
18
- Vue.use(AuthorityPlugin)
19
- Vue.use(TabsPagePlugin)
20
- Vue.use(recording)
21
- }
22
- }
23
- export default Plugins
1
+ import GetLoginInfoService from '@vue2-client/base-client/plugins/GetLoginInfoService'
2
+ import GetAppDataService from '@vue2-client/base-client/plugins/AppData'
3
+ import getConfig from '@vue2-client/base-client/plugins/Config'
4
+ import moment from '@vue2-client/base-client/plugins/moment'
5
+ import recording from '@vue2-client/base-client/plugins/Recording'
6
+
7
+ import VueI18nPlugin from './i18n-extend'
8
+ import AuthorityPlugin from './authority-plugin'
9
+ import TabsPagePlugin from './tabs-page-plugin'
10
+
11
+ const Plugins = {
12
+ install: function (Vue) {
13
+ Vue.use(GetLoginInfoService)
14
+ Vue.use(GetAppDataService)
15
+ Vue.use(getConfig)
16
+ Vue.use(moment)
17
+ Vue.use(VueI18nPlugin)
18
+ Vue.use(AuthorityPlugin)
19
+ Vue.use(TabsPagePlugin)
20
+ Vue.use(recording)
21
+ }
22
+ }
23
+ export default Plugins
@@ -1,39 +1,39 @@
1
- const TabsPagePlugin = {
2
- install (Vue) {
3
- Vue.mixin({
4
- methods: {
5
- $closePage (closeRoute, nextRoute) {
6
- const event = new CustomEvent('page:close', { detail: { closeRoute, nextRoute } })
7
- window.dispatchEvent(event)
8
- },
9
- $refreshPage (route) {
10
- const path = typeof route === 'object' ? route.path : route
11
- const event = new CustomEvent('page:refresh', { detail: { pageKey: path } })
12
- window.dispatchEvent(event)
13
- },
14
- $openPage (route, title) {
15
- this.$setPageTitle(route, title)
16
- this.$router.push(route)
17
- },
18
- $setPageTitle (route, title) {
19
- if (title) {
20
- // let path = typeof route === 'object' ? route.path : route
21
- // path = path && path.split('?')[0]
22
- const path = typeof route === 'object' ? this.$router.resolve(route).route.fullPath : route
23
- this.$store.commit('setting/setCustomTitle', { path, title })
24
- }
25
- }
26
- },
27
- computed: {
28
- customTitle () {
29
- const customTitles = this.$store.state.setting.customTitles
30
- // const path = this.$route.path.split('?')[0]
31
- const custom = customTitles.find(item => item.path === this.$route.fullPath)
32
- return custom && custom.title
33
- }
34
- }
35
- })
36
- }
37
- }
38
-
39
- export default TabsPagePlugin
1
+ const TabsPagePlugin = {
2
+ install (Vue) {
3
+ Vue.mixin({
4
+ methods: {
5
+ $closePage (closeRoute, nextRoute) {
6
+ const event = new CustomEvent('page:close', { detail: { closeRoute, nextRoute } })
7
+ window.dispatchEvent(event)
8
+ },
9
+ $refreshPage (route) {
10
+ const path = typeof route === 'object' ? route.path : route
11
+ const event = new CustomEvent('page:refresh', { detail: { pageKey: path } })
12
+ window.dispatchEvent(event)
13
+ },
14
+ $openPage (route, title) {
15
+ this.$setPageTitle(route, title)
16
+ this.$router.push(route)
17
+ },
18
+ $setPageTitle (route, title) {
19
+ if (title) {
20
+ // let path = typeof route === 'object' ? route.path : route
21
+ // path = path && path.split('?')[0]
22
+ const path = typeof route === 'object' ? this.$router.resolve(route).route.fullPath : route
23
+ this.$store.commit('setting/setCustomTitle', { path, title })
24
+ }
25
+ }
26
+ },
27
+ computed: {
28
+ customTitle () {
29
+ const customTitles = this.$store.state.setting.customTitles
30
+ // const path = this.$route.path.split('?')[0]
31
+ const custom = customTitles.find(item => item.path === this.$route.fullPath)
32
+ return custom && custom.title
33
+ }
34
+ }
35
+ })
36
+ }
37
+ }
38
+
39
+ export default TabsPagePlugin