feat: add guest mode and optimize login experience
针对微信审核要求新增游客浏览模式,用户可无需登录直接浏览应用内容,仅在使用发布、点赞、记录等需要身份的功能时才弹窗引导登录。具体修改包括: 1. 新增游客态判断工具函数与登录守卫逻辑 2. 为登录页添加游客直接进入入口 3. 为首页、酒友圈、个人页、动态页、记录页添加游客适配逻辑 4. 优化登录态失效处理逻辑,不再强制跳转登录页 5. 调整部分页面的返回逻辑适配分享直接进入场景 6. 为各页面添加游客引导UI与交互
This commit is contained in:
+22
-7
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user