style(pc): replace emoji with Element Plus icons for consistency

- VoiceControls.vue: 🎤🔇🔊🔈🚪 → Microphone/Mute/Headset/SwitchButton
- GamesLibrary.vue: 🎮(无群组) → Monitor, 📦(空状态) → Box
  + brand color tint on empty-state icons

PC 占位图已与移动端共享 public/ 目录(自动一致);
其余 30 个文件的 el-icon 是桌面端 Element Plus 合理约定,保留不动。

build verified: vue-tsc + vite build pass
This commit is contained in:
锦麟 王
2026-06-18 15:28:02 +08:00
parent 7cd53ac420
commit 88ef615bc0
3 changed files with 240 additions and 6 deletions
@@ -1,5 +1,7 @@
<!-- src/components/voice/VoiceControls.vue -->
<script setup lang="ts">
import { Microphone, Mute, Headset, SwitchButton } from '@element-plus/icons-vue'
defineProps<{
micEnabled: boolean
speakerEnabled: boolean
@@ -20,7 +22,7 @@ const emit = defineEmits<{
:class="{ active: micEnabled, off: !micEnabled }"
@click="emit('toggleMic')"
>
<span class="ctrl-icon">{{ micEnabled ? '🎤' : '🔇' }}</span>
<el-icon class="ctrl-icon"><Microphone v-if="micEnabled" /><Mute v-else /></el-icon>
<span class="ctrl-label">麦克风</span>
</button>
@@ -29,12 +31,12 @@ const emit = defineEmits<{
:class="{ active: speakerEnabled, off: !speakerEnabled }"
@click="emit('toggleSpeaker')"
>
<span class="ctrl-icon">{{ speakerEnabled ? '🔊' : '🔈' }}</span>
<el-icon class="ctrl-icon"><Headset /></el-icon>
<span class="ctrl-label">扬声器</span>
</button>
<button class="ctrl-btn leave-btn" @click="emit('leave')">
<span class="ctrl-icon">🚪</span>
<el-icon class="ctrl-icon"><SwitchButton /></el-icon>
<span class="ctrl-label">离开</span>
</button>
</div>
@@ -80,6 +82,9 @@ const emit = defineEmits<{
.ctrl-icon {
font-size: 22px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.ctrl-label {
+6 -3
View File
@@ -9,7 +9,7 @@ import GameDetailDialog from '@/components/game/GameDetailDialog.vue'
import GameFormDialog from '@/components/game/GameFormDialog.vue'
import ImportGamesDialog from '@/components/game/ImportGamesDialog.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Close } from '@element-plus/icons-vue'
import { Close, Monitor, Box } from '@element-plus/icons-vue'
const groupStore = useGroupStore()
@@ -128,7 +128,7 @@ async function handleImportComplete() {
<div class="games-library">
<!-- 无群组引导 -->
<div v-if="!hasGroups" class="no-group">
<div class="no-group-icon">🎮</div>
<div class="no-group-icon"><el-icon :size="56"><Monitor /></el-icon></div>
<p class="no-group-text">还没有群组</p>
<p class="no-group-hint">先创建或加入一个群组然后就可以管理游戏库了</p>
</div>
@@ -175,7 +175,7 @@ async function handleImportComplete() {
<div v-if="loading" class="loading">加载中...</div>
<div v-else-if="games.length === 0" class="empty">
<div class="empty-icon">📦</div>
<div class="empty-icon"><el-icon :size="48"><Box /></el-icon></div>
<p class="empty-text">暂无游戏</p>
<p class="empty-hint">点击添加游戏导入开始管理游戏库</p>
</div>
@@ -216,6 +216,8 @@ async function handleImportComplete() {
.no-group-icon {
font-size: 48px;
margin-bottom: 16px;
color: var(--gg-primary);
opacity: 0.7;
}
.no-group-text {
@@ -317,6 +319,7 @@ async function handleImportComplete() {
.empty-icon {
font-size: 48px;
margin-bottom: 12px;
color: var(--gg-text-muted);
}
.empty-text {