fix(mobile): replace emoji glyphs with uni-icons and flex centering app-wide

- ChatComposer panel contract: callers now pass uni-icons type names
  (image/sound/list/help/checkmark) instead of emoji
- voice playback buttons: sound icon + pulse animation, no more 🔊/◼ chars
- practice recent list: rare symbols ⌕⌁◉ (tofu risk) -> wallet/gear/chatbubble
- sop resource icon ▶/文 -> 视/文 character badges
- back arrows: 22 char-based ← -> uni-icons back across 21 pages
- line-height centering -> flex in 8 spots (back buttons, media-remove,
  turn-voice capsule, option-marker, text-button, play-question)
This commit is contained in:
2026-07-19 20:16:05 +08:00
parent 925b48e436
commit c47bf748cb
25 changed files with 101 additions and 56 deletions
+3 -3
View File
@@ -1,7 +1,7 @@
<template>
<view class="page employee-page-shell exam-page">
<view class="subpage-header">
<button class="subpage-back-button" aria-label="返回学习" :disabled="submitting" @click="goBack">←</button>
<button class="subpage-back-button" aria-label="返回学习" :disabled="submitting" @click="goBack"><uni-icons type="back" size="20" color="#25282d" /></button>
<view class="subpage-heading">
<text class="employee-kicker">岗前 / 入职考试</text>
<text class="page-title">{{ exam?.title || '考试任务' }}</text>
@@ -39,7 +39,7 @@
:disabled="Boolean(result)"
@click="toggleOption(item, option)"
>
<text class="option-marker">{{ isSelected(item, option) ? '✓' : '' }}</text>
<text class="option-marker"><uni-icons v-if="isSelected(item, option)" type="checkmark" size="13" color="#e60012" /></text>
<text>{{ option }}</text>
</button>
</view>
@@ -178,7 +178,7 @@ onBeforeUnmount(() => speechController.destroy());
.option-list { display: grid; gap: 9px; }
.option-button { display: flex; gap: 10px; min-height: 48px; align-items: center; padding: 10px 12px; border: 1px solid var(--line); background: #fff; color: var(--ink); text-align: left; }
.option-button.selected { border-color: #ef9ca4; background: var(--employee-primary-soft); }
.option-marker { flex: 0 0 24px; height: 24px; border: 1px solid #c8d0db; border-radius: 50%; color: var(--brand); line-height: 22px; text-align: center; }
.option-marker { display: flex; flex: 0 0 24px; height: 24px; align-items: center; justify-content: center; border: 1px solid #c8d0db; border-radius: 50%; color: var(--brand); line-height: 1; text-align: center; }
.short-answer { min-height: 120px; }
.explanation { display: grid; gap: 6px; padding: 12px; border-radius: 10px; background: #f1f6fb; color: #435268; font-size: 13px; line-height: 1.6; }
.explanation-title { font-weight: 900; }