Files
EchoChat/frontend/vite.config.js
bujinyuan 790996feaf feat(meeting): Task 15 UI 打磨 + 主持人四件套 + 媒体层稳定性回归修复
- Task 15 UI:6 项原创特色(说话者流光 / 柔性网格 / 自视频浮窗 / 静音氛围色 / 入会滑入 / NetworkBadge 3 条波浪)+ 说话者双源探测(RTP audioLevel + WebAudio RMS)+ 主持人四件套(静音/开麦/转让/踢出)
- 新增 SelfVideoFloat 浮窗组件 + 4 份 design-system 页面文档(home / preview / room / invite)
- 媒体回归补丁(手工联调触发):
  * 后端 signal_service 在 OnRoomJoin 追加 pushExistingRoomState → 向新加入者补发历史 producers + 历史成员 audio/video 状态
  * 新增 Redis Hash memberStateKey 持久化成员 audio/video enabled,OnMemberStateChanged 落盘、cleanupUserResources 清理
  * 前端 _broadcastSelfState 在本地音视频开关末尾同步 state.changed;_afterJoined 先 getRoom 再 room.join 修复后入者成员状态时序;_onMemberStateChanged 占位兜底
  * _cleanupRemoteProducer 改为按 producerId 精准清理(修复 "关音频误关视频")
  * _onRoomEnded + createAndEnter/joinAndEnter 强化 reset(修复重入会看不到自己画面)
  * mediasoup-client ensureSend/RecvTransport 引入 in-flight Promise 锁防并发重复建连
- 文档同步:CURRENT_STATUS.md / Task 15 plan / phase2e-2 implementation plan

Made-with: Cursor
2026-04-23 16:04:46 +08:00

41 lines
1.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import basicSsl from '@vitejs/plugin-basic-ssl'
// https://vitejs.dev/config/
//
// HTTPS 说明WebRTC 必需):
// 浏览器仅在 secure context 下开放 navigator.mediaDevicesgetUserMedia 等 API
// 手机通过局域网 IP http://192.168.x.x:5173 访问时 mediaDevices 会是 undefined。
// 因此 dev 默认开启自签 HTTPS同时把 /api 与 /ws 走同源代理转回后端 HTTP
// 这样浏览器只与 vite HTTPS 通信,前端代码无需关心后端是否 TLS。
//
// 代理目标由环境变量 VITE_DEV_BACKEND 控制,默认 http://localhost:8085
// 若后端跑在其他主机/端口(如 docker 主机)可自行覆盖。
const BACKEND = process.env.VITE_DEV_BACKEND || 'http://localhost:8085'
const BACKEND_WS = BACKEND.replace(/^http/, 'ws')
export default defineConfig({
plugins: [
uni(),
basicSsl(),
],
server: {
host: '0.0.0.0',
https: true,
proxy: {
'/api': {
target: BACKEND,
changeOrigin: true,
secure: false,
},
'/ws': {
target: BACKEND_WS,
changeOrigin: true,
ws: true,
secure: false,
},
},
},
})