refactor(window): 优化悬浮列表窗口的创建和关闭逻辑

- 简化 close_float_list_window 命令的返回值处理
- 清理 create_float_list_window_impl 中的多余空行
- 修复悬浮列表组件中全员静音状态的变量引用
- 移除样式文件中的多余空行
- 更新教师端会议页面中组件卸载生命周期为 onBeforeUnmount
- 在会议结束时确保关闭悬浮列表窗口
- 简化 Vite 配置中 VueDevTools 的配置选项
This commit is contained in:
2026-03-15 18:33:33 +08:00
parent bfaad97f61
commit d070314118
6 changed files with 8 additions and 15 deletions

View File

@ -15,8 +15,7 @@ pub async fn create_float_list_window(app: AppHandle, is_teacher_muted: bool) ->
/// 关闭悬浮列表窗口 /// 关闭悬浮列表窗口
#[tauri::command] #[tauri::command]
pub fn close_float_list_window(app: AppHandle) -> Result<String, String> { pub fn close_float_list_window(app: AppHandle) -> Result<String, String> {
close_float_list_window_impl(std::sync::Arc::new(app)) close_float_list_window_impl(std::sync::Arc::new(app)).map(|_| "success".to_string())
.map(|_| "success".to_string())
} }
/// 创建弹出框窗口 /// 创建弹出框窗口

View File

@ -7,7 +7,7 @@
<!-- 会议控制按钮 --> <!-- 会议控制按钮 -->
<div class="menu-item" @click="muteAllStudents()"> <div class="menu-item" @click="muteAllStudents()">
<div class="icon-wrapper"> <div class="icon-wrapper">
<icon-mdi-volume-high v-if="!isMuted" class="menu-icon"></icon-mdi-volume-high> <icon-mdi-volume-high v-if="!isAllMuted" class="menu-icon"></icon-mdi-volume-high>
<icon-mdi-volume-off v-else class="menu-icon muted"></icon-mdi-volume-off> <icon-mdi-volume-off v-else class="menu-icon muted"></icon-mdi-volume-off>
</div> </div>
<span class="menu-text" :class="{ 'text-muted': isAllMuted }">全员静音</span> <span class="menu-text" :class="{ 'text-muted': isAllMuted }">全员静音</span>

View File

@ -69,8 +69,6 @@ button:disabled {
opacity: 0.6; opacity: 0.6;
} }
fieldset { fieldset {
padding: 0.35em 0.75em 0.625em; padding: 0.35em 0.75em 0.625em;
} }

View File

@ -181,7 +181,7 @@
import IconMdiVolumeHigh from '~icons/mdi/volume-high'; import IconMdiVolumeHigh from '~icons/mdi/volume-high';
import IconMdiVolumeOff from '~icons/mdi/volume-off'; import IconMdiVolumeOff from '~icons/mdi/volume-off';
import { ElIcon, ElMessageBox, ElMessage as Toast } from 'element-plus'; import { ElIcon, ElMessageBox, ElMessage as Toast } from 'element-plus';
import { computed, onMounted, onUnmounted, ref, watchEffect } from 'vue'; import { computed, onBeforeUnmount, onMounted, ref, watchEffect } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useStreamType } from './useStreamType'; import { useStreamType } from './useStreamType';
import { usePermissions } from './usePermissions'; import { usePermissions } from './usePermissions';
@ -1001,6 +1001,7 @@
role.value = String(route.query.role) === 'student' ? 'student' : 'teacher'; role.value = String(route.query.role) === 'student' ? 'student' : 'teacher';
try { try {
await closeFloatListWindow();
// 使用 Hook 加入 WebSocket 房间获取房间数据 // 使用 Hook 加入 WebSocket 房间获取房间数据
const roomData = await meetingSocket.joinRoom(socket); const roomData = await meetingSocket.joinRoom(socket);
// 设置房间 ID用于权限管理中的控制消息发送 // 设置房间 ID用于权限管理中的控制消息发送
@ -1041,10 +1042,7 @@
/** /**
* 组件卸载生命周期钩子 * 组件卸载生命周期钩子
*/ */
onUnmounted(async () => { onBeforeUnmount(async () => {
if (isLeaving) {
return;
}
socket.off('message', onSocketMessage); socket.off('message', onSocketMessage);
// 关闭悬浮窗 // 关闭悬浮窗
await closeFloatListWindow(); await closeFloatListWindow();

View File

@ -37,9 +37,7 @@ export default defineConfig(async ({ command }: ConfigEnv): Promise<UserConfig>
base: './', // 基础路径 base: './', // 基础路径
plugins: [ plugins: [
VueDevTools({ VueDevTools({}),
appendTo: 'index.html',
}),
Vue({}), Vue({}),
// 自动导入API // 自动导入API