feat: add guest mode and optimize login experience

针对微信审核要求新增游客浏览模式,用户可无需登录直接浏览应用内容,仅在使用发布、点赞、记录等需要身份的功能时才弹窗引导登录。具体修改包括:
1. 新增游客态判断工具函数与登录守卫逻辑
2. 为登录页添加游客直接进入入口
3. 为首页、酒友圈、个人页、动态页、记录页添加游客适配逻辑
4. 优化登录态失效处理逻辑,不再强制跳转登录页
5. 调整部分页面的返回逻辑适配分享直接进入场景
6. 为各页面添加游客引导UI与交互
This commit is contained in:
cg
2026-09-10 21:43:46 +08:00
parent 26b7111af0
commit dd3c670021
9 changed files with 307 additions and 46 deletions
+22 -7
View File
@@ -63,10 +63,10 @@
<EmptyState
v-if="!feeds.length && !loading"
icon="🍻"
title="还没有动态"
desc="发布你的第一条饮酒动态吧"
actionText="发动态"
@action="goPublish"
:title="isGuest ? '登录后查看酒友动态' : '还没有动态'"
:desc="isGuest ? '浏览酒友分享、发布你的饮酒记录' : '发布你的第一条饮酒动态吧'"
:actionText="isGuest ? '去登录' : '发动态'"
@action="isGuest ? goLogin : goPublish"
/>
</view>
</scroll-view>
@@ -78,7 +78,7 @@ import FeedCard from '../../components/FeedCard.vue'
import FriendItem from '../../components/FriendItem.vue'
import EventCard from '../../components/EventCard.vue'
import EmptyState from '../../components/EmptyState.vue'
import { GetCircleFeeds, LikeFeed, UnlikeFeed, DeleteFeed, GetFriends, GetFriendRequests, GetEvents, DeleteEvent, GetUnreadCount } from '../../common/api'
import { GetCircleFeeds, LikeFeed, UnlikeFeed, DeleteFeed, GetFriends, GetFriendRequests, GetEvents, DeleteEvent, GetUnreadCount, isLoggedIn, requireLogin } from '../../common/api'
import wsManager from '../../common/websocket'
import { getMyInviteCode } from '../../common/invite'
import themeMixin from '../../common/theme-mixin'
@@ -114,11 +114,20 @@ export default {
// 我的邀请码(分享时携带,一次性)
inviteCode: '',
// 当前登录用户ID(用于判断动态是否为自己发布)
myUserId: ''
myUserId: '',
// 游客标记:游客可浏览页面,互动时再引导登录
isGuest: false
}
},
onShow() {
this.loadFeeds(true)
this.isGuest = !isLoggedIn()
if (this.isGuest) {
// 游客态不发起鉴权请求,展示空态与登录引导
this.feeds = []
this.loading = false
} else {
this.loadFeeds(true)
}
// 消息入口已隐藏,未读角标暂不展示,空转请求先停掉(恢复入口时打开)
// this.loadUnread()
// this.bindWsEvents()
@@ -212,6 +221,7 @@ export default {
}
},
async handleLike(feed) {
if (!requireLogin()) return
feed.liked = !feed.liked
feed.likes += feed.liked ? 1 : -1
try {
@@ -266,8 +276,13 @@ export default {
})
},
goPublish() {
if (!requireLogin()) return
uni.navigateTo({ url: '/pages/circle-publish/circle-publish' })
},
// 游客在空态点击"去登录"
goLogin() {
uni.navigateTo({ url: '/pages/login/login' })
},
// === 酒友 ===
async loadFriends() {
try {