diff --git a/src/components/call/CallWindow.vue b/src/components/call/CallWindow.vue index b740e64..7ff3caa 100644 --- a/src/components/call/CallWindow.vue +++ b/src/components/call/CallWindow.vue @@ -281,6 +281,7 @@ watch(() => props.remoteStream, (stream) => { position: absolute; inset: 0; overflow: hidden; + background: #0f172a; // 设计稿: 来电背景 .blur-img { width: 100%; @@ -294,7 +295,35 @@ watch(() => props.remoteStream, (stream) => { .blur-overlay { position: absolute; inset: 0; - background: linear-gradient(180deg, rgba(0,0,0,0.4) 0%, transparent 30%, rgba(0,0,0,0.9) 100%); + background: rgba(15, 23, 42, 0.8); // 设计稿: bg-[#0f172a]/80 + backdrop-filter: blur(48px); + -webkit-backdrop-filter: blur(48px); + } + + // 设计稿: 呼吸光球动画 + &::before, &::after { + content: ''; + position: absolute; + width: 600rpx; + height: 600rpx; + border-radius: 50%; + filter: blur(160rpx); + opacity: 0.4; + animation: glow-breathe 8s ease-in-out infinite; + } + + &::before { + top: 10%; + left: -100rpx; + background: #9333ea; // purple-600 + animation-delay: 0s; + } + + &::after { + bottom: 10%; + right: -100rpx; + background: #2563eb; // blue-600 + animation-delay: 4s; } } @@ -366,23 +395,36 @@ watch(() => props.remoteStream, (stream) => { position: relative; margin-bottom: 48rpx; + // 设计稿: 头像波纹效果 .avatar-ring { position: absolute; + inset: -20rpx; border-radius: 50%; - border: 2rpx solid rgba(255, 255, 255, 0.1); + border: 2rpx solid rgba(255, 255, 255, 0.3); // 设计稿: border-white/30 + + &.ring-1 { + animation: ripple 2s cubic-bezier(0, 0, 0.2, 1) infinite; + } + + &.ring-2 { + animation: ripple 2s cubic-bezier(0, 0, 0.2, 1) infinite; + animation-delay: 1s; + } &.ring-ping { inset: -4rpx; - border: 2rpx solid rgba(255, 255, 255, 0.2); + border: 2rpx solid rgba(255, 255, 255, 0.3); animation: ping 2s cubic-bezier(0, 0, 0.2, 1) infinite; } } .avatar-container { + position: relative; border: 4rpx solid rgba(255, 255, 255, 0.1); border-radius: 50%; padding: 4rpx; box-shadow: 0 40rpx 100rpx rgba(0, 0, 0, 0.4); + z-index: 1; } } @@ -527,4 +569,16 @@ watch(() => props.remoteStream, (stream) => { from { transform: translateY(40rpx); opacity: 0; } to { transform: translateY(0); opacity: 1; } } + +// 设计稿: 呼吸光球动画 +@keyframes glow-breathe { + 0%, 100% { transform: scale(1); opacity: 0.3; } + 50% { transform: scale(1.2); opacity: 0.5; } +} + +// 设计稿: 头像波纹动画 +@keyframes ripple { + 0% { transform: scale(1); opacity: 0.4; } + 100% { transform: scale(2.5); opacity: 0; } +} diff --git a/src/components/common/AppDrawer.vue b/src/components/common/AppDrawer.vue index 55b7b27..6757934 100644 --- a/src/components/common/AppDrawer.vue +++ b/src/components/common/AppDrawer.vue @@ -15,15 +15,12 @@ - - - {{ (user?.name || '?').charAt(0) }} - {{ user?.name || '请登录' }} {{ user?.desc || '编辑个签,展示你的独特个性' }} @@ -66,6 +63,7 @@ import { computed } from 'vue' import { useAuthStore } from '@/stores' import { useTheme } from '@/composables/useTheme' import { resolveImageUrl } from '@/utils/image' +import AppAvatar from '@/components/common/AppAvatar.vue' interface Props { modelValue: boolean diff --git a/src/components/common/AppTabBar.vue b/src/components/common/AppTabBar.vue index ac852ef..18fbb51 100644 --- a/src/components/common/AppTabBar.vue +++ b/src/components/common/AppTabBar.vue @@ -50,6 +50,18 @@ + + + {{ tab.label }} @@ -74,11 +86,12 @@ const { isDark } = useTheme() const conversationStore = useConversationStore() const unreadCount = computed(() => conversationStore.totalUnread) -// 底部导航只有3个: 消息/联系人/发现 (无"我的") +// 底部导航4个: 消息/联系人/发现/我的 const tabs = [ { name: 'messages', label: '消息', path: '/pages/index/index' }, { name: 'contacts', label: '联系人', path: '/pages/contact/index' }, - { name: 'moments', label: '发现', path: '/pages/moment/index' } + { name: 'moments', label: '发现', path: '/pages/moment/index' }, + { name: 'profile', label: '我的', path: '/pages/profile/index' } ] function switchTab(name: string) { diff --git a/src/pages/chat/index.vue b/src/pages/chat/index.vue index dfbeef6..fbf679a 100644 --- a/src/pages/chat/index.vue +++ b/src/pages/chat/index.vue @@ -75,15 +75,12 @@ - - - {{ msg.isSelf ? (currentUser?.name?.charAt(0) || '?') : (getMessageSenderName(msg)?.charAt(0) || '?') }} - diff --git a/src/pages/contact/add.vue b/src/pages/contact/add.vue index 6e460e6..e2d296f 100644 --- a/src/pages/contact/add.vue +++ b/src/pages/contact/add.vue @@ -1,112 +1,65 @@ + diff --git a/src/pages/contact/detail.vue b/src/pages/contact/detail.vue index d527fb0..d64d773 100644 --- a/src/pages/contact/detail.vue +++ b/src/pages/contact/detail.vue @@ -191,25 +191,33 @@ async function deleteFriend() { try { await messageBox.confirm({ title: '提示'