vue2-client 1.16.26 → 1.16.28

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