fix+feat: 小程序登录按钮不渲染修复(isMiniApp编译期判定);静默登录ensureLogin——收藏/游客问答额度升级一键无感登录;版本v1.4.6
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "宇之然AI维度",
|
"name": "宇之然AI维度",
|
||||||
"appid": "wxdad62baf4ccd09e3",
|
"appid": "wxdad62baf4ccd09e3",
|
||||||
"versionName": "1.4.5",
|
"versionName": "1.4.6",
|
||||||
"versionCode": "100",
|
"versionCode": "100",
|
||||||
"description": "AI 知识探索社区 — 从5个维度系统理解人工智能",
|
"description": "AI 知识探索社区 — 从5个维度系统理解人工智能",
|
||||||
"uni-app": {
|
"uni-app": {
|
||||||
|
|||||||
@@ -208,8 +208,15 @@ function goLogin() {
|
|||||||
uni.navigateTo({ url: '/pages/login/login' })
|
uni.navigateTo({ url: '/pages/login/login' })
|
||||||
}
|
}
|
||||||
|
|
||||||
function onQuotaTap() {
|
async function onQuotaTap() {
|
||||||
if (isGuest.value) {
|
if (isGuest.value) {
|
||||||
|
// 静默登录一键升级(微信 code 换 token 无感),失败再显式引导
|
||||||
|
const ok = await userStore.ensureLogin()
|
||||||
|
if (ok) {
|
||||||
|
uni.showToast({ title: '已升级为登录用户,每天 5 次', icon: 'success' })
|
||||||
|
loadQuota()
|
||||||
|
return
|
||||||
|
}
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '游客体验',
|
title: '游客体验',
|
||||||
content: '每天可免费提问 3 次;登录后每天 5 次,答对检测题还能点亮知识星球',
|
content: '每天可免费提问 3 次;登录后每天 5 次,答对检测题还能点亮知识星球',
|
||||||
|
|||||||
@@ -229,6 +229,9 @@ function retryQuiz() {
|
|||||||
|
|
||||||
async function toggleCollect() {
|
async function toggleCollect() {
|
||||||
if (!userStore.isLoggedIn) {
|
if (!userStore.isLoggedIn) {
|
||||||
|
// 静默登录(微信 code 换 token,用户无感);失败再显式引导
|
||||||
|
const ok = await userStore.ensureLogin()
|
||||||
|
if (!ok) {
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '登录后收藏',
|
title: '登录后收藏',
|
||||||
content: '登录后即可收藏喜欢的 AI 知识',
|
content: '登录后即可收藏喜欢的 AI 知识',
|
||||||
@@ -242,6 +245,7 @@ async function toggleCollect() {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
if (isCollected.value) {
|
if (isCollected.value) {
|
||||||
await knowledgeApi.uncollect(detailId.value, userStore.token)
|
await knowledgeApi.uncollect(detailId.value, userStore.token)
|
||||||
|
|||||||
@@ -135,14 +135,12 @@ import { onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app'
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { useUserStore } from '@/stores/index'
|
import { useUserStore } from '@/stores/index'
|
||||||
|
|
||||||
const isMiniApp = ref(false)
|
// 编译期判定:MP-WEIXIN 构建即小程序(运行时系统信息与按钮显示无关,避免旧API字段缺失导致按钮不渲染)
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
try {
|
const isMiniApp = ref(true)
|
||||||
const sysInfo = uni.getSystemInfoSync()
|
// #endif
|
||||||
if (sysInfo && sysInfo.version && sysInfo.platform) {
|
// #ifndef MP-WEIXIN
|
||||||
isMiniApp.value = true
|
const isMiniApp = ref(false)
|
||||||
}
|
|
||||||
} catch (e) {}
|
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
const activeTab = ref('login')
|
const activeTab = ref('login')
|
||||||
|
|||||||
@@ -173,7 +173,19 @@ function goBack() {
|
|||||||
uni.navigateBack()
|
uni.navigateBack()
|
||||||
}
|
}
|
||||||
|
|
||||||
function onFavorite() {
|
async function onFavorite() {
|
||||||
|
// 静默登录后提示(收藏态由详情页统一管理)
|
||||||
|
const ok = await userStore.ensureLogin()
|
||||||
|
if (!ok) {
|
||||||
|
uni.showModal({
|
||||||
|
title: '登录后收藏',
|
||||||
|
content: '登录后即可收藏资讯',
|
||||||
|
confirmText: '去登录',
|
||||||
|
cancelText: '暂不',
|
||||||
|
success: (res) => { if (res.confirm) uni.navigateTo({ url: '/pages/login/login' }) }
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
isCollected.value = !isCollected.value
|
isCollected.value = !isCollected.value
|
||||||
uni.showToast({ title: isCollected.value ? '已收藏' : '已取消收藏', icon: 'none' })
|
uni.showToast({ title: isCollected.value ? '已收藏' : '已取消收藏', icon: 'none' })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,27 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 静默登录(微信小程序):code 换 token,用户无感知。
|
||||||
|
* 已登录直接返回 true;失败返回 false(调用方再引导显式登录)。
|
||||||
|
*/
|
||||||
|
async function ensureLogin() {
|
||||||
|
if (token.value) return true
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
try {
|
||||||
|
const loginRes = await new Promise((resolve, reject) => {
|
||||||
|
uni.login({ success: resolve, fail: reject })
|
||||||
|
})
|
||||||
|
if (!loginRes.code) return false
|
||||||
|
await login(loginRes.code, {})
|
||||||
|
return true
|
||||||
|
} catch (e) { return false }
|
||||||
|
// #endif
|
||||||
|
// #ifndef MP-WEIXIN
|
||||||
|
return false
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
|
||||||
async function h5Login(loginData) {
|
async function h5Login(loginData) {
|
||||||
const data = await authApi.h5Login(loginData)
|
const data = await authApi.h5Login(loginData)
|
||||||
token.value = data.token
|
token.value = data.token
|
||||||
@@ -110,6 +131,7 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
isSubscribed,
|
isSubscribed,
|
||||||
subscriptionLevel,
|
subscriptionLevel,
|
||||||
login,
|
login,
|
||||||
|
ensureLogin,
|
||||||
h5Login,
|
h5Login,
|
||||||
h5Register,
|
h5Register,
|
||||||
fetchMe,
|
fetchMe,
|
||||||
|
|||||||
Reference in New Issue
Block a user