vue2-client 1.16.8 → 1.16.10

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 (324) 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/index.js +3 -3
  98. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  99. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  100. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  101. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  102. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  103. package/src/base-client/components/common/XAddReport/index.js +3 -3
  104. package/src/base-client/components/common/XAddReport/index.md +56 -56
  105. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  106. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  107. package/src/base-client/components/common/XButtons/index.js +3 -3
  108. package/src/base-client/components/common/XButtons/index.md +61 -61
  109. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  110. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  111. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  112. package/src/base-client/components/common/XDataCard/index.js +3 -3
  113. package/src/base-client/components/common/XDataCard/index.md +1 -1
  114. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  115. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  116. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  117. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  118. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  119. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  120. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  121. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  122. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  123. package/src/base-client/components/common/XForm/index.md +178 -178
  124. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  125. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  126. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  127. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  128. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  129. package/src/base-client/components/common/XFormTable/demo.vue +45 -16
  130. package/src/base-client/components/common/XFormTable/index.md +92 -92
  131. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  132. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  133. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  134. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  135. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  136. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  137. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  138. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  139. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  140. package/src/base-client/components/common/XPrint/index.vue +97 -97
  141. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  142. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  143. package/src/base-client/components/common/XReport/index.js +3 -3
  144. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  145. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  146. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  147. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  148. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  149. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  150. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  151. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  152. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  153. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  154. package/src/base-client/components/common/XStepView/index.js +3 -3
  155. package/src/base-client/components/common/XStepView/index.md +31 -31
  156. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  157. package/src/base-client/components/common/XTab/index.js +3 -3
  158. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  159. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  160. package/src/base-client/components/common/XTable/index.md +255 -255
  161. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  162. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  163. package/src/base-client/components/common/XTree/index.js +3 -3
  164. package/src/base-client/components/common/XTree/index.md +36 -36
  165. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  166. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  167. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  168. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  169. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  170. package/src/base-client/components/index.js +51 -51
  171. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  172. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  173. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  174. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  175. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  176. package/src/base-client/plugins/Config.js +19 -19
  177. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  178. package/src/base-client/plugins/Recording.js +258 -258
  179. package/src/base-client/plugins/index.js +23 -23
  180. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  181. package/src/components/Charts/Bar.vue +62 -62
  182. package/src/components/Charts/ChartCard.vue +134 -134
  183. package/src/components/Charts/Liquid.vue +67 -67
  184. package/src/components/Charts/MiniArea.vue +39 -39
  185. package/src/components/Charts/MiniBar.vue +39 -39
  186. package/src/components/Charts/MiniProgress.vue +75 -75
  187. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  188. package/src/components/Charts/Radar.vue +68 -68
  189. package/src/components/Charts/RankList.vue +77 -77
  190. package/src/components/Charts/TagCloud.vue +113 -113
  191. package/src/components/Charts/TransferBar.vue +64 -64
  192. package/src/components/Charts/Trend.vue +82 -82
  193. package/src/components/Charts/chart.less +12 -12
  194. package/src/components/Charts/smooth.area.less +13 -13
  195. package/src/components/CodeMirror/inedx.vue +118 -118
  196. package/src/components/CodeMirror/setting.js +40 -40
  197. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  198. package/src/components/NumberInfo/index.js +3 -3
  199. package/src/components/NumberInfo/index.less +54 -54
  200. package/src/components/NumberInfo/index.md +43 -43
  201. package/src/components/card/ChartCard.vue +79 -79
  202. package/src/components/chart/Bar.vue +60 -60
  203. package/src/components/chart/MiniArea.vue +67 -67
  204. package/src/components/chart/MiniBar.vue +59 -59
  205. package/src/components/chart/MiniProgress.vue +57 -57
  206. package/src/components/chart/Radar.vue +80 -80
  207. package/src/components/chart/RankingList.vue +60 -60
  208. package/src/components/chart/Trend.vue +79 -79
  209. package/src/components/chart/index.less +9 -9
  210. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  211. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  212. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  213. package/src/components/checkbox/index.js +9 -9
  214. package/src/components/exception/ExceptionPage.vue +70 -70
  215. package/src/components/g2Charts/constants.js +202 -202
  216. package/src/components/g2Charts/demo.vue +808 -808
  217. package/src/components/g2Charts/designer.vue +228 -228
  218. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  219. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  220. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  221. package/src/components/g2Charts/index.vue +397 -397
  222. package/src/components/index.js +36 -36
  223. package/src/components/input/IInput.vue +66 -66
  224. package/src/components/menu/SideMenu.vue +75 -75
  225. package/src/components/menu/menu.js +273 -273
  226. package/src/components/setting/Setting.vue +234 -234
  227. package/src/components/tool/AStepItem.vue +60 -60
  228. package/src/config/CreateQueryConfig.js +325 -325
  229. package/src/config/default/antd.config.js +89 -89
  230. package/src/config/default/setting.config.js +55 -55
  231. package/src/font-style/PingFangSC-Medium.subset.woff2 +0 -0
  232. package/src/font-style/PingFangSC-Semibold.subset.woff2 +0 -0
  233. package/src/font-style/common.txt +1 -1
  234. package/src/font-style/font.css +60 -60
  235. package/src/font-style//345/216/213/347/274/251/345/255/227/344/275/223.bat +1 -1
  236. package/src/layouts/CommonLayout.vue +56 -56
  237. package/src/layouts/PageLayout.vue +151 -151
  238. package/src/layouts/SinglePageView.vue +136 -136
  239. package/src/layouts/header/AdminHeader.vue +132 -132
  240. package/src/layouts/header/HeaderNotice.vue +177 -177
  241. package/src/layouts/header/InstitutionDetail.vue +181 -181
  242. package/src/layouts/tabs/TabsHead.vue +189 -189
  243. package/src/lib.js +1 -1
  244. package/src/mock/extend/index.js +84 -84
  245. package/src/mock/goods/index.js +108 -108
  246. package/src/pages/DefaultExample/index.vue +77 -77
  247. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  248. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  249. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  250. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  251. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  252. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  253. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  254. package/src/pages/DynamicStatistics/index.vue +282 -282
  255. package/src/pages/Example/childIndex.vue +15 -15
  256. package/src/pages/Example/index.vue +30 -30
  257. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  258. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  259. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  260. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  261. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  262. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  263. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  264. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  265. package/src/pages/Recording/index.vue +77 -77
  266. package/src/pages/ServiceReview/index.vue +284 -284
  267. package/src/pages/SubExample/index.vue +26 -26
  268. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  269. package/src/pages/XReportView/index.vue +64 -64
  270. package/src/pages/XTreeOneProExample/index.vue +67 -67
  271. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  272. package/src/pages/login/Login.vue +379 -379
  273. package/src/pages/login/LoginV3.vue +389 -389
  274. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  275. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  276. package/src/pages/report/ReportTable.js +124 -124
  277. package/src/pages/resourceManage/orgListManage.vue +98 -98
  278. package/src/pages/system/dictionary/index.vue +44 -44
  279. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  280. package/src/pages/system/monitor/operLog/index.vue +37 -37
  281. package/src/pages/system/settings/modifyPassword.vue +117 -117
  282. package/src/pages/system/ticket/index.vue +480 -480
  283. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  284. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  285. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  286. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  287. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  288. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  289. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  290. package/src/plugins/EventLogPlugin.js +33 -33
  291. package/src/plugins/FindParentsData.js +17 -17
  292. package/src/router/async/config.async.js +35 -35
  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 -346
  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/reg.js +95 -95
  318. package/src/utils/runEvalFunction.js +14 -14
  319. package/src/utils/theme-color-replacer-extend.js +92 -92
  320. package/src/utils/util.js +329 -329
  321. package/src/utils/waterMark.js +31 -31
  322. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  323. package/src/font-style/PingFangSC-Medium.woff2 +0 -0
  324. package/src/font-style/PingFangSC-Semibold.woff2 +0 -0
@@ -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