chore(deps): 更新项目依赖包版本

- 升级 webpack-cli 从 6.0.1 到 7.0.0 版本
- 更新 @discoveryjs/json-ext 从 0.6.3 到 1.0.0 版本
- 升级 commander 从 12.1.0 到 14.0.3 版本
- 更新 stylelint-order 从 8.0.0 到 8.1.0 版本
- 升级 vite-plugin-vue-devtools 从 8.0.7 到 8.1.0 版本
- 更新 @vue/devtools-core 从 8.0.7 到 8.1.0 版本
- 升级 @vue/devtools-kit 和 @vue/devtools-shared 到 8.1.0 版本
- 更新 @vue/shared 从 3.5.29 到 3.5.30 版本
- 优化会议房间学生端视频播放逻辑,添加 nextTick 等待 DOM 更新
- 重构声网会议初始化逻辑,清理旧客户端监听器防止重复注册
- 修改远程视频播放策略,移除自动播放改为业务层手动控制
This commit is contained in:
2026-03-14 11:11:36 +08:00
parent 69fa8df1ad
commit 1c64968b5e
6 changed files with 100 additions and 112 deletions

View File

@ -72,6 +72,6 @@
"typescript": "^5.9.3", "typescript": "^5.9.3",
"typescript-eslint": "^8.57.0", "typescript-eslint": "^8.57.0",
"webpack": "^5.105.4", "webpack": "^5.105.4",
"webpack-cli": "^6.0.1" "webpack-cli": "^7.0.0"
} }
} }

114
node_api/pnpm-lock.yaml generated
View File

@ -101,7 +101,7 @@ importers:
version: 10.0.1(eslint@10.0.3) version: 10.0.1(eslint@10.0.3)
'@nestjs/cli': '@nestjs/cli':
specifier: ^11.0.16 specifier: ^11.0.16
version: 11.0.16(@swc/core@1.15.18)(@types/node@25.5.0)(webpack-cli@6.0.1) version: 11.0.16(@swc/core@1.15.18)(@types/node@25.5.0)(webpack-cli@7.0.0)
'@swc/core': '@swc/core':
specifier: ^1.15.18 specifier: ^1.15.18
version: 1.15.18 version: 1.15.18
@ -152,10 +152,10 @@ importers:
version: 8.57.0(eslint@10.0.3)(typescript@5.9.3) version: 8.57.0(eslint@10.0.3)(typescript@5.9.3)
webpack: webpack:
specifier: ^5.105.4 specifier: ^5.105.4
version: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1) version: 5.105.4(@swc/core@1.15.18)(webpack-cli@7.0.0)
webpack-cli: webpack-cli:
specifier: ^6.0.1 specifier: ^7.0.0
version: 6.0.1(webpack@5.105.4) version: 7.0.0(webpack@5.105.4)
packages: packages:
@ -205,8 +205,8 @@ packages:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'} engines: {node: '>=0.1.90'}
'@discoveryjs/json-ext@0.6.3': '@discoveryjs/json-ext@1.0.0':
resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} resolution: {integrity: sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==}
engines: {node: '>=14.17.0'} engines: {node: '>=14.17.0'}
'@es-joy/jsdoccomment@0.84.0': '@es-joy/jsdoccomment@0.84.0':
@ -1043,31 +1043,6 @@ packages:
'@webassemblyjs/wast-printer@1.14.1': '@webassemblyjs/wast-printer@1.14.1':
resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
'@webpack-cli/configtest@3.0.1':
resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==}
engines: {node: '>=18.12.0'}
peerDependencies:
webpack: ^5.82.0
webpack-cli: 6.x.x
'@webpack-cli/info@3.0.1':
resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==}
engines: {node: '>=18.12.0'}
peerDependencies:
webpack: ^5.82.0
webpack-cli: 6.x.x
'@webpack-cli/serve@3.0.1':
resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==}
engines: {node: '>=18.12.0'}
peerDependencies:
webpack: ^5.82.0
webpack-cli: 6.x.x
webpack-dev-server: '*'
peerDependenciesMeta:
webpack-dev-server:
optional: true
'@xtuc/ieee754@1.2.0': '@xtuc/ieee754@1.2.0':
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
@ -1337,9 +1312,9 @@ packages:
colorette@2.0.20: colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
commander@12.1.0: commander@14.0.3:
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
engines: {node: '>=18'} engines: {node: '>=20'}
commander@2.20.3: commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@ -2836,14 +2811,14 @@ packages:
wcwidth@1.0.1: wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
webpack-cli@6.0.1: webpack-cli@7.0.0:
resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} resolution: {integrity: sha512-NbM62WodkUPXQGR/Ip3pSFsFUKJSseDIFr2H5Z1+4fHwB9X4cO10knPShIopFqAHZa8a5Q8pdtmtE6C12/mlMQ==}
engines: {node: '>=18.12.0'} engines: {node: '>=20.9.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
webpack: ^5.82.0 webpack: ^5.101.0
webpack-bundle-analyzer: '*' webpack-bundle-analyzer: ^4.0.0 || ^5.0.0
webpack-dev-server: '*' webpack-dev-server: ^5.0.0
peerDependenciesMeta: peerDependenciesMeta:
webpack-bundle-analyzer: webpack-bundle-analyzer:
optional: true optional: true
@ -2998,7 +2973,7 @@ snapshots:
'@colors/colors@1.5.0': '@colors/colors@1.5.0':
optional: true optional: true
'@discoveryjs/json-ext@0.6.3': {} '@discoveryjs/json-ext@1.0.0': {}
'@es-joy/jsdoccomment@0.84.0': '@es-joy/jsdoccomment@0.84.0':
dependencies: dependencies:
@ -3382,7 +3357,7 @@ snapshots:
'@mikro-orm/core': 7.0.1 '@mikro-orm/core': 7.0.1
kysely: 0.28.11 kysely: 0.28.11
'@nestjs/cli@11.0.16(@swc/core@1.15.18)(@types/node@25.5.0)(webpack-cli@6.0.1)': '@nestjs/cli@11.0.16(@swc/core@1.15.18)(@types/node@25.5.0)(webpack-cli@7.0.0)':
dependencies: dependencies:
'@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
'@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
@ -3393,14 +3368,14 @@ snapshots:
chokidar: 4.0.3 chokidar: 4.0.3
cli-table3: 0.6.5 cli-table3: 0.6.5
commander: 4.1.1 commander: 4.1.1
fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1)) fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0))
glob: 13.0.0 glob: 13.0.0
node-emoji: 1.11.0 node-emoji: 1.11.0
ora: 5.4.1 ora: 5.4.1
tsconfig-paths: 4.2.0 tsconfig-paths: 4.2.0
tsconfig-paths-webpack-plugin: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0
typescript: 5.9.3 typescript: 5.9.3
webpack: 5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1) webpack: 5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0)
webpack-node-externals: 3.0.0 webpack-node-externals: 3.0.0
optionalDependencies: optionalDependencies:
'@swc/core': 1.15.18 '@swc/core': 1.15.18
@ -3813,21 +3788,6 @@ snapshots:
'@webassemblyjs/ast': 1.14.1 '@webassemblyjs/ast': 1.14.1
'@xtuc/long': 4.2.2 '@xtuc/long': 4.2.2
'@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.105.4)':
dependencies:
webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack@5.105.4)
'@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.105.4)':
dependencies:
webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack@5.105.4)
'@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.105.4)':
dependencies:
webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1)
webpack-cli: 6.0.1(webpack@5.105.4)
'@xtuc/ieee754@1.2.0': {} '@xtuc/ieee754@1.2.0': {}
'@xtuc/long@4.2.2': {} '@xtuc/long@4.2.2': {}
@ -4088,7 +4048,7 @@ snapshots:
colorette@2.0.20: {} colorette@2.0.20: {}
commander@12.1.0: {} commander@14.0.3: {}
commander@2.20.3: {} commander@2.20.3: {}
@ -4526,7 +4486,7 @@ snapshots:
flatted@3.4.1: {} flatted@3.4.1: {}
fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1)): fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0)):
dependencies: dependencies:
'@babel/code-frame': 7.29.0 '@babel/code-frame': 7.29.0
chalk: 4.1.2 chalk: 4.1.2
@ -4541,7 +4501,7 @@ snapshots:
semver: 7.7.4 semver: 7.7.4
tapable: 2.3.0 tapable: 2.3.0
typescript: 5.9.3 typescript: 5.9.3
webpack: 5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1) webpack: 5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0)
formstream@1.5.2: formstream@1.5.2:
dependencies: dependencies:
@ -5441,13 +5401,13 @@ snapshots:
is-type-of: 1.4.0 is-type-of: 1.4.0
sdk-base: 3.6.0 sdk-base: 3.6.0
terser-webpack-plugin@5.4.0(@swc/core@1.15.18)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1)): terser-webpack-plugin@5.4.0(@swc/core@1.15.18)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0)):
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.31 '@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1 jest-worker: 27.5.1
schema-utils: 4.3.3 schema-utils: 4.3.3
terser: 5.46.0 terser: 5.46.0
webpack: 5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1) webpack: 5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0)
optionalDependencies: optionalDependencies:
'@swc/core': 1.15.18 '@swc/core': 1.15.18
@ -5457,7 +5417,7 @@ snapshots:
jest-worker: 27.5.1 jest-worker: 27.5.1
schema-utils: 4.3.3 schema-utils: 4.3.3
terser: 5.46.0 terser: 5.46.0
webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1) webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@7.0.0)
optionalDependencies: optionalDependencies:
'@swc/core': 1.15.18 '@swc/core': 1.15.18
@ -5518,7 +5478,7 @@ snapshots:
semver: 7.7.4 semver: 7.7.4
source-map: 0.7.6 source-map: 0.7.6
typescript: 5.9.3 typescript: 5.9.3
webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1) webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@7.0.0)
tsconfig-paths-webpack-plugin@4.2.0: tsconfig-paths-webpack-plugin@4.2.0:
dependencies: dependencies:
@ -5627,21 +5587,17 @@ snapshots:
dependencies: dependencies:
defaults: 1.0.4 defaults: 1.0.4
webpack-cli@6.0.1(webpack@5.105.4): webpack-cli@7.0.0(webpack@5.105.4):
dependencies: dependencies:
'@discoveryjs/json-ext': 0.6.3 '@discoveryjs/json-ext': 1.0.0
'@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.4) commander: 14.0.3
'@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.4)
'@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.4)
colorette: 2.0.20
commander: 12.1.0
cross-spawn: 7.0.6 cross-spawn: 7.0.6
envinfo: 7.21.0 envinfo: 7.21.0
fastest-levenshtein: 1.0.16 fastest-levenshtein: 1.0.16
import-local: 3.2.0 import-local: 3.2.0
interpret: 3.1.1 interpret: 3.1.1
rechoir: 0.8.0 rechoir: 0.8.0
webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1) webpack: 5.105.4(@swc/core@1.15.18)(webpack-cli@7.0.0)
webpack-merge: 6.0.1 webpack-merge: 6.0.1
webpack-merge@6.0.1: webpack-merge@6.0.1:
@ -5654,7 +5610,7 @@ snapshots:
webpack-sources@3.3.4: {} webpack-sources@3.3.4: {}
webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1): webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0):
dependencies: dependencies:
'@types/eslint-scope': 3.7.7 '@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8 '@types/estree': 1.0.8
@ -5678,17 +5634,17 @@ snapshots:
neo-async: 2.6.2 neo-async: 2.6.2
schema-utils: 4.3.3 schema-utils: 4.3.3
tapable: 2.3.0 tapable: 2.3.0
terser-webpack-plugin: 5.4.0(@swc/core@1.15.18)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@6.0.1)) terser-webpack-plugin: 5.4.0(@swc/core@1.15.18)(webpack@5.104.1(@swc/core@1.15.18)(webpack-cli@7.0.0))
watchpack: 2.5.1 watchpack: 2.5.1
webpack-sources: 3.3.4 webpack-sources: 3.3.4
optionalDependencies: optionalDependencies:
webpack-cli: 6.0.1(webpack@5.105.4) webpack-cli: 7.0.0(webpack@5.105.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/core' - '@swc/core'
- esbuild - esbuild
- uglify-js - uglify-js
webpack@5.105.4(@swc/core@1.15.18)(webpack-cli@6.0.1): webpack@5.105.4(@swc/core@1.15.18)(webpack-cli@7.0.0):
dependencies: dependencies:
'@types/eslint-scope': 3.7.7 '@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8 '@types/estree': 1.0.8
@ -5716,7 +5672,7 @@ snapshots:
watchpack: 2.5.1 watchpack: 2.5.1
webpack-sources: 3.3.4 webpack-sources: 3.3.4
optionalDependencies: optionalDependencies:
webpack-cli: 6.0.1(webpack@5.105.4) webpack-cli: 7.0.0(webpack@5.105.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/core' - '@swc/core'
- esbuild - esbuild

View File

@ -120,7 +120,7 @@
"stylelint": "^17.4.0", "stylelint": "^17.4.0",
"stylelint-config-html": "^1.1.0", "stylelint-config-html": "^1.1.0",
"stylelint-config-recommended-scss": "^17.0.0", "stylelint-config-recommended-scss": "^17.0.0",
"stylelint-order": "^8.0.0", "stylelint-order": "^8.1.0",
"stylelint-scss": "^7.0.0", "stylelint-scss": "^7.0.0",
"typescript": "~5.9.3", "typescript": "~5.9.3",
"typescript-eslint": "^8.57.0", "typescript-eslint": "^8.57.0",
@ -130,7 +130,7 @@
"vite-auto-deploy": "^2.0.34", "vite-auto-deploy": "^2.0.34",
"vite-plugin-banner": "^0.8.1", "vite-plugin-banner": "^0.8.1",
"vite-plugin-image-optimizer": "^2.0.3", "vite-plugin-image-optimizer": "^2.0.3",
"vite-plugin-vue-devtools": "^8.0.7", "vite-plugin-vue-devtools": "^8.1.0",
"vue-eslint-parser": "^10.4.0", "vue-eslint-parser": "^10.4.0",
"vue-tsc": "^3.2.5" "vue-tsc": "^3.2.5"
}, },

59
pnpm-lock.yaml generated
View File

@ -262,8 +262,8 @@ importers:
specifier: ^17.0.0 specifier: ^17.0.0
version: 17.0.0(postcss@8.5.8)(stylelint@17.4.0(typescript@5.9.3)) version: 17.0.0(postcss@8.5.8)(stylelint@17.4.0(typescript@5.9.3))
stylelint-order: stylelint-order:
specifier: ^8.0.0 specifier: ^8.1.0
version: 8.0.0(stylelint@17.4.0(typescript@5.9.3)) version: 8.1.0(stylelint@17.4.0(typescript@5.9.3))
stylelint-scss: stylelint-scss:
specifier: ^7.0.0 specifier: ^7.0.0
version: 7.0.0(stylelint@17.4.0(typescript@5.9.3)) version: 7.0.0(stylelint@17.4.0(typescript@5.9.3))
@ -292,8 +292,8 @@ importers:
specifier: ^2.0.3 specifier: ^2.0.3
version: 2.0.3(sharp@0.34.5)(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)) version: 2.0.3(sharp@0.34.5)(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))
vite-plugin-vue-devtools: vite-plugin-vue-devtools:
specifier: ^8.0.7 specifier: ^8.1.0
version: 8.0.7(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)) version: 8.1.0(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
vue-eslint-parser: vue-eslint-parser:
specifier: ^10.4.0 specifier: ^10.4.0
version: 10.4.0(eslint@10.0.3(jiti@2.6.1)) version: 10.4.0(eslint@10.0.3(jiti@2.6.1))
@ -1441,8 +1441,8 @@ packages:
'@vue/devtools-api@8.0.7': '@vue/devtools-api@8.0.7':
resolution: {integrity: sha512-tc1TXAxclsn55JblLkFVcIRG7MeSJC4fWsPjfM7qu/IcmPUYnQ5Q8vzWwBpyDY24ZjmZTUCCwjRSNbx58IhlAA==} resolution: {integrity: sha512-tc1TXAxclsn55JblLkFVcIRG7MeSJC4fWsPjfM7qu/IcmPUYnQ5Q8vzWwBpyDY24ZjmZTUCCwjRSNbx58IhlAA==}
'@vue/devtools-core@8.0.7': '@vue/devtools-core@8.1.0':
resolution: {integrity: sha512-PmpiPxvg3Of80ODHVvyckxwEW1Z02VIAvARIZS1xegINn3VuNQLm9iHUmKD+o6cLkMNWV8OG8x7zo0kgydZgdg==} resolution: {integrity: sha512-LvD1VgDpoHmYL00IgKRLKktF6SsPAb0yaV8wB8q2jRwsAWvqhS8+vsMLEGKNs7uoKyymXhT92dhxgf/wir6YGQ==}
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
@ -1452,12 +1452,18 @@ packages:
'@vue/devtools-kit@8.0.7': '@vue/devtools-kit@8.0.7':
resolution: {integrity: sha512-H6esJGHGl5q0E9iV3m2EoBQHJ+V83WMW83A0/+Fn95eZ2iIvdsq4+UCS6yT/Fdd4cGZSchx/MdWDreM3WqMsDw==} resolution: {integrity: sha512-H6esJGHGl5q0E9iV3m2EoBQHJ+V83WMW83A0/+Fn95eZ2iIvdsq4+UCS6yT/Fdd4cGZSchx/MdWDreM3WqMsDw==}
'@vue/devtools-kit@8.1.0':
resolution: {integrity: sha512-/NZlS4WtGIB54DA/z10gzk+n/V7zaqSzYZOVlg2CfdnpIKdB61bd7JDIMxf/zrtX41zod8E2/bbEBoW/d7x70Q==}
'@vue/devtools-shared@7.7.9': '@vue/devtools-shared@7.7.9':
resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
'@vue/devtools-shared@8.0.7': '@vue/devtools-shared@8.0.7':
resolution: {integrity: sha512-CgAb9oJH5NUmbQRdYDj/1zMiaICYSLtm+B1kxcP72LBrifGAjUmt8bx52dDH1gWRPlQgxGPqpAMKavzVirAEhA==} resolution: {integrity: sha512-CgAb9oJH5NUmbQRdYDj/1zMiaICYSLtm+B1kxcP72LBrifGAjUmt8bx52dDH1gWRPlQgxGPqpAMKavzVirAEhA==}
'@vue/devtools-shared@8.1.0':
resolution: {integrity: sha512-h8uCb4Qs8UT8VdTT5yjY6tOJ//qH7EpxToixR0xqejR55t5OdISIg7AJ7eBkhBs8iu1qG5gY3QQNN1DF1EelAA==}
'@vue/language-core@3.2.5': '@vue/language-core@3.2.5':
resolution: {integrity: sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==} resolution: {integrity: sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==}
@ -4194,8 +4200,8 @@ packages:
peerDependencies: peerDependencies:
stylelint: ^17.0.0 stylelint: ^17.0.0
stylelint-order@8.0.0: stylelint-order@8.1.0:
resolution: {integrity: sha512-1oAwPRz6Ba8u9LPjgvdbeMjZszHhjY6DBBK+xMlS3IC89GdTsvAPpGYvW+dkn6pxc4ZaI1S959g4c8CftZbhIg==} resolution: {integrity: sha512-ao2+VzToCqbAVGaEYEeSR2zNurvQx+86Kw1d0//kZDx3zlyjvb24dE4J0e4HQgOTruOwZpfaHHRtK58+lrsTAQ==}
engines: {node: '>=20.19.0'} engines: {node: '>=20.19.0'}
peerDependencies: peerDependencies:
stylelint: ^16.18.0 || ^17.0.0 stylelint: ^16.18.0 || ^17.0.0
@ -4538,11 +4544,11 @@ packages:
peerDependencies: peerDependencies:
vite: '>=2.0.0' vite: '>=2.0.0'
vite-plugin-vue-devtools@8.0.7: vite-plugin-vue-devtools@8.1.0:
resolution: {integrity: sha512-BWj/ykGpqVAJVdPyHmSTUm44buz3jPv+6jnvuFdQSRH0kAgP1cEIE4doHiFyqHXOmuB5EQVR/nh2g9YRiRNs9g==} resolution: {integrity: sha512-4AvNRePfni3+PqOunACmAImC6SJVpUv6f7/g4oakyre9hYdEMrvDYlNmTZQsJPzVLMcGzn1FvSEqJ/n4HQ9cDg==}
engines: {node: '>=v14.21.3'} engines: {node: '>=v14.21.3'}
peerDependencies: peerDependencies:
vite: ^6.0.0 || ^7.0.0-0 || ^8.0.0-0 vite: ^6.0.0 || ^7.0.0 || ^8.0.0
vite-plugin-vue-inspector@5.3.2: vite-plugin-vue-inspector@5.3.2:
resolution: {integrity: sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==} resolution: {integrity: sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==}
@ -5865,7 +5871,7 @@ snapshots:
'@babel/types': 7.29.0 '@babel/types': 7.29.0
'@vue/babel-helper-vue-transform-on': 1.5.0 '@vue/babel-helper-vue-transform-on': 1.5.0
'@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.0) '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.0)
'@vue/shared': 3.5.29 '@vue/shared': 3.5.30
optionalDependencies: optionalDependencies:
'@babel/core': 7.29.0 '@babel/core': 7.29.0
transitivePeerDependencies: transitivePeerDependencies:
@ -5878,7 +5884,7 @@ snapshots:
'@babel/helper-module-imports': 7.28.6 '@babel/helper-module-imports': 7.28.6
'@babel/helper-plugin-utils': 7.28.6 '@babel/helper-plugin-utils': 7.28.6
'@babel/parser': 7.29.0 '@babel/parser': 7.29.0
'@vue/compiler-sfc': 3.5.29 '@vue/compiler-sfc': 3.5.30
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -5950,10 +5956,10 @@ snapshots:
dependencies: dependencies:
'@vue/devtools-kit': 8.0.7 '@vue/devtools-kit': 8.0.7
'@vue/devtools-core@8.0.7(vue@3.5.30(typescript@5.9.3))': '@vue/devtools-core@8.1.0(vue@3.5.30(typescript@5.9.3))':
dependencies: dependencies:
'@vue/devtools-kit': 8.0.7 '@vue/devtools-kit': 8.1.0
'@vue/devtools-shared': 8.0.7 '@vue/devtools-shared': 8.1.0
vue: 3.5.30(typescript@5.9.3) vue: 3.5.30(typescript@5.9.3)
'@vue/devtools-kit@7.7.9': '@vue/devtools-kit@7.7.9':
@ -5973,12 +5979,21 @@ snapshots:
hookable: 5.5.3 hookable: 5.5.3
perfect-debounce: 2.1.0 perfect-debounce: 2.1.0
'@vue/devtools-kit@8.1.0':
dependencies:
'@vue/devtools-shared': 8.1.0
birpc: 2.9.0
hookable: 5.5.3
perfect-debounce: 2.1.0
'@vue/devtools-shared@7.7.9': '@vue/devtools-shared@7.7.9':
dependencies: dependencies:
rfdc: 1.4.1 rfdc: 1.4.1
'@vue/devtools-shared@8.0.7': {} '@vue/devtools-shared@8.0.7': {}
'@vue/devtools-shared@8.1.0': {}
'@vue/language-core@3.2.5': '@vue/language-core@3.2.5':
dependencies: dependencies:
'@volar/language-core': 2.4.28 '@volar/language-core': 2.4.28
@ -8902,7 +8917,7 @@ snapshots:
dependencies: dependencies:
stylelint: 17.4.0(typescript@5.9.3) stylelint: 17.4.0(typescript@5.9.3)
stylelint-order@8.0.0(stylelint@17.4.0(typescript@5.9.3)): stylelint-order@8.1.0(stylelint@17.4.0(typescript@5.9.3)):
dependencies: dependencies:
postcss: 8.5.8 postcss: 8.5.8
postcss-sorting: 10.0.0(postcss@8.5.8) postcss-sorting: 10.0.0(postcss@8.5.8)
@ -9367,11 +9382,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite-plugin-vue-devtools@8.0.7(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)): vite-plugin-vue-devtools@8.1.0(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
dependencies: dependencies:
'@vue/devtools-core': 8.0.7(vue@3.5.30(typescript@5.9.3)) '@vue/devtools-core': 8.1.0(vue@3.5.30(typescript@5.9.3))
'@vue/devtools-kit': 8.0.7 '@vue/devtools-kit': 8.1.0
'@vue/devtools-shared': 8.0.7 '@vue/devtools-shared': 8.1.0
sirv: 3.0.2 sirv: 3.0.2
vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2) vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)
vite-plugin-inspect: 11.3.3(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)) vite-plugin-inspect: 11.3.3(vite@8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2))
@ -9389,7 +9404,7 @@ snapshots:
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
'@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0) '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0)
'@vue/compiler-dom': 3.5.29 '@vue/compiler-dom': 3.5.30
kolorist: 1.8.0 kolorist: 1.8.0
magic-string: 0.30.21 magic-string: 0.30.21
vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2) vite: 8.0.0(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(yaml@2.8.2)

View File

@ -539,9 +539,6 @@
if (typeof screenUid === 'number') { if (typeof screenUid === 'number') {
screenShareStreamUid.value = screenUid; screenShareStreamUid.value = screenUid;
Toast.info?.(`用户 ${targetUid} 开始投屏`); Toast.info?.(`用户 ${targetUid} 开始投屏`);
setTimeout(() => {
ensurePrimaryVideoPlaying(primaryUid.value);
}, 300);
} }
break; break;
} }
@ -573,6 +570,12 @@
screenShareOwnerUid.value = roomData.screenShareOwnerUid; screenShareOwnerUid.value = roomData.screenShareOwnerUid;
} }
await meeting.initAndJoin(roomData); await meeting.initAndJoin(roomData);
// 等待 DOM 更新后再尝试播放视频
await nextTick();
setTimeout(() => {
ensurePrimaryVideoPlaying(primaryUid.value);
ensurePrimaryVideoPlaying(secondaryUid.value);
}, 500);
initSelfWindowPosition(); initSelfWindowPosition();
}) })
.catch((e: unknown) => { .catch((e: unknown) => {
@ -632,6 +635,12 @@
} }
if (classStatus.value === 'in_class') { if (classStatus.value === 'in_class') {
await meeting.initAndJoin(roomData); await meeting.initAndJoin(roomData);
// 等待 DOM 更新后再尝试播放视频
await nextTick();
setTimeout(() => {
ensurePrimaryVideoPlaying(primaryUid.value);
ensurePrimaryVideoPlaying(secondaryUid.value);
}, 500);
initSelfWindowPosition(); initSelfWindowPosition();
} else { } else {
Toast.info?.('等待老师上课...'); Toast.info?.('等待老师上课...');

View File

@ -209,6 +209,11 @@ export function useAgoraMeeting(
*/ */
function initClient(): void { function initClient(): void {
try { try {
// ✅ 先清理旧 client 的监听器,防止重复注册
if (client.value) {
client.value.removeAllListeners?.();
}
client.value = AgoraRTC.createClient({ mode: 'rtc', codec: 'vp8' }); client.value = AgoraRTC.createClient({ mode: 'rtc', codec: 'vp8' });
if (tokenManagerRef.value) { if (tokenManagerRef.value) {
tokenManagerRef.value.bindClient(client.value); tokenManagerRef.value.bindClient(client.value);
@ -216,9 +221,9 @@ export function useAgoraMeeting(
/** /**
* 播放远程视频到指定播放器 * 播放远程视频到指定播放器
* @param user - 远程用户 * @deprecated 学生端使用 autoPlayRemoteVideo=false由业务层自行处理
* @param playerId - 播放器元素 ID
*/ */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const playRemoteVideo = (user: IAgoraRTCRemoteUser, playerId: string) => { const playRemoteVideo = (user: IAgoraRTCRemoteUser, playerId: string) => {
console.log(`【声网】准备播放远程视频 ${playerId}:`, user.uid); console.log(`【声网】准备播放远程视频 ${playerId}:`, user.uid);
setTimeout(() => { setTimeout(() => {
@ -251,12 +256,12 @@ export function useAgoraMeeting(
} }
console.log('【声网】订阅成功:', user.uid, '类型:', mediaType, isMainVideo ? '主视频 (高流)' : '小视频 (低流)'); console.log('【声网】订阅成功:', user.uid, '类型:', mediaType, isMainVideo ? '主视频 (高流)' : '小视频 (低流)');
// 播放远程视频到普通播放器(默认使用 player-${uid},可通过 options 关闭) // 播放远程视频到普通播放器(默认使用 player-${uid},可通过 options 关闭)
if (mediaType === 'video' && (options?.autoPlayRemoteVideo ?? true)) { if (mediaType === 'video' && (options?.autoPlayRemoteVideo ?? true)) {
playRemoteVideo(user, `player-${user.uid}`); playRemoteVideo(user, `player-${user.uid}`);
} }
// 播放远程音频(声网音频轨道需要手动播放) // 播放远程音频(声网音频轨道需要手动播放)
if (mediaType === 'audio') { if (mediaType === 'audio') {
console.log('【声网】收到远程音频audioTrack:', user.audioTrack); console.log('【声网】收到远程音频audioTrack:', user.audioTrack);
if (user.audioTrack) { if (user.audioTrack) {
@ -271,8 +276,11 @@ export function useAgoraMeeting(
} }
} }
if (!remoteUsers.value.find((u) => u.uid === user.uid)) { // ✅ 只在第一次添加用户到 remoteUsers防止网络波动导致的重复触发
const isNewUser = !remoteUsers.value.find((u) => u.uid === user.uid);
if (isNewUser) {
remoteUsers.value.push(user); remoteUsers.value.push(user);
console.log('[声网] 新用户加入,当前用户数:', remoteUsers.value.length);
} }
callbacks?.onUserPublished?.(user, mediaType); callbacks?.onUserPublished?.(user, mediaType);
}); });