Skip to content

Feat/UI redesign p3#22

Closed
ailuckly wants to merge 4 commits into
developfrom
feat/ui-redesign-p3
Closed

Feat/UI redesign p3#22
ailuckly wants to merge 4 commits into
developfrom
feat/ui-redesign-p3

Conversation

@ailuckly
Copy link
Copy Markdown
Owner

@ailuckly ailuckly commented May 5, 2026

📌 变更内容

  • 如:新增用户登录 API
  • 如:修复登录失败时错误提示

✅ 测试验证

  • 本地运行通过
  • 自测通过
  • CI 流水线通过

PR 提交规范提醒:

  • 确保提交主题信息符合约定式提交规范 (feat/fix/docs/style/refactor/test/chore)
  • 确保代码已经通过本地测试
  • 确保没有提交敏感信息(密码、密钥等)

Critical:
- PostgreSQL JDBC driver: 42.6.0 → 42.7.4
  Fixes SQL injection via line comment generation (CVE-2024-1597)

High (resolved via npm audit fix):
- vocata-web: vite, rollup, lodash-es, flatted, immutable, minimatch
  (0 vulnerabilities after fix)
- vocata-admin: vite, rollup, axios, lodash, lodash-es, tar, flatted,
  immutable (0 vulnerabilities after fix)

Both package-lock.json files regenerated to clear stale transitive
dependency references that were triggering GitHub Dependabot alerts.
VoiceCallPanel: full redesign to immersive fullscreen mode
- Fixed position overlay (z-index 9999) with blurred character
  avatar background (filter: blur(40px) brightness(0.3))
- Center: large 160px avatar with dual pulse-ring animation on
  speaking state, status text + character name below
- Subtitles: toggleable (CC button), user messages as right-aligned
  bubbles, AI messages as left-aligned text with speaker label
- Controls: CC toggle, mute (inverts on muted), hangup (red, 76px,
  rotated phone icon), all with backdrop-filter blur
- Transitions: slide-up enter, fade for subtitles
- New prop: characterAvatar for background + avatar display

ChatPage: added VoiceTranscriptItem type import for voice panel
Ignore local agent/worktree directories, Python virtual environments, backend IDE/build artifacts, and generated avatar assets so they do not leak into PRs.
Handle missing qiniu.region values by using the Qiniu SDK auto region instead of dereferencing null.

Add a focused regression test that constructs UploadManager without an explicit region.
Copilot AI review requested due to automatic review settings May 5, 2026 06:56
@ailuckly ailuckly closed this May 5, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the UI redesign by introducing an immersive full-screen voice-call panel and improving how live voice transcripts are surfaced during a call, while also hardening backend Qiniu region configuration and updating dependency lockfiles/ignores.

Changes:

  • Redesign VoiceCallPanel into an immersive full-screen “voice mode” with subtitles toggle and new controls.
  • Enhance ChatPage voice transcript rendering to include live STT text and streaming AI content.
  • Backend: default Qiniu region to autoRegion() when missing and add a regression test; bump PostgreSQL driver version; update web lockfile and repo .gitignore.

Reviewed changes

Copilot reviewed 5 out of 8 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
vocata-web/src/views/ChatPage.vue Passes character avatar into voice panel; augments visible voice transcripts with live STT + streaming AI text.
vocata-web/src/components/chat/VoiceCallPanel.vue Replaces compact panel with immersive full-screen voice UI, blurred background, subtitles, and controls.
vocata-web/package-lock.json Updates resolved dependency versions for the web app.
vocata-server/src/main/java/com/vocata/file/config/QiniuConfig.java Falls back to Region.autoRegion() when region is not configured.
vocata-server/src/test/java/com/vocata/file/config/QiniuConfigTest.java Adds a test covering missing-region fallback behavior.
vocata-server/pom.xml Bumps PostgreSQL JDBC driver property version.
.gitignore Ignores additional local workspace artifacts and generated avatar assets.
Files not reviewed (1)
  • vocata-web/package-lock.json: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

<div class="avatar-container" :class="{ 'is-speaking': speaking, 'is-muted': muted }">
<div class="pulse-ring"></div>
<div class="pulse-ring delay-1"></div>
<img :src="characterAvatar" class="character-avatar" alt="Character Avatar" />
Comment on lines +41 to +66
<button
class="control-btn cc-btn"
:class="{ 'is-active': showSubtitles }"
@click="showSubtitles = !showSubtitles"
title="切换字幕"
>
<span class="voice-call-panel__speaker">{{ entry.speaker === 'user' ? '我' : characterName }}</span>
<span class="voice-call-panel__text">{{ entry.text }}</span>
</div>
<span class="cc-text">CC</span>
</button>

<button
class="control-btn mute-btn"
:class="{ 'is-muted': muted }"
@click="$emit('mute')"
:title="muted ? '取消静音' : '静音'"
>
<el-icon v-if="muted"><MicrophoneOff /></el-icon>
<el-icon v-else><Microphone /></el-icon>
</button>

<button
class="control-btn hangup-btn"
@click="$emit('hangup')"
title="结束通话"
>
<el-icon><PhoneFilled /></el-icon>
</button>
<!-- Main Visual Array -->
<div class="voice-center">
<!-- Avatar Ring that pulses -->
<div class="avatar-container" :class="{ 'is-speaking': speaking, 'is-muted': muted }">
Comment on lines +354 to +367

if (currentSTTText.value) {
list.push({
speaker: 'user',
text: currentSTTText.value,
timestamp: Number.MAX_SAFE_INTEGER - 1
})
}

if (currentStreamingMessage.value && currentStreamingMessage.value.content) {
list.push({
speaker: 'ai',
text: currentStreamingMessage.value.content,
timestamp: Number.MAX_SAFE_INTEGER
Comment on lines +5 to +8
<div
class="immersive-bg"
:style="{ backgroundImage: `url(${characterAvatar || '/default-bg.png'})` }"
></div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants