feat: 微信分享钩子全页面接入 + 订阅信息结构化映射 + JWT 错误处理加强

- client: 全部页面接入 onShareAppMessage/onShareTimeline 分享钩子
- client: login 页增强、profile 订阅展示优化
- client/stores: 订阅字段扁平结构映射为 subInfo(plan/expiresAt/startDate)
- server: auth 路由 JWT 无效/过期统一返回 401 未授权响应
- server: models/tests 同步更新
This commit is contained in:
Yuzhiran Dev
2026-09-04 11:47:29 +08:00
parent de8ca9c420
commit 66de1dc396
37 changed files with 2138 additions and 1830 deletions
+32 -6
View File
@@ -1,7 +1,11 @@
<template>
<view class="page-settings page-layout">
<view class="status-bar-placeholder"></view>
<text class="page-title">设置</text>
<view class="nav-bar">
<view class="nav-back" @click="goBack">‹</view>
<text class="page-title">设置</text>
<view class="nav-placeholder"></view>
</view>
<!-- 偏好设置 -->
<view class="section-title">偏好设置</view>
@@ -60,6 +64,8 @@
</template>
<script setup>
import { onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app'
import { ref, onMounted } from 'vue'
const pushOn = ref(true)
@@ -131,18 +137,20 @@ function showContact() {
}
function showAgreement() {
uni.showModal({
title: '用户协议 / 隐私政策',
content: '暂无内容',
showCancel: false
})
uni.navigateTo({ url: '/pages/agreement/agreement?type=terms' })
}
function goBack() {
uni.navigateBack()
}
// 微信小程序分享
// #ifdef MP-WEIXIN
onShareAppMessage(() => ({
title: 'AI 维度 - 你的AI知识助手',
path: '/pages/index/index'
}))
// #endif
</script>
<style lang="scss" scoped>
@@ -152,6 +160,24 @@ onShareAppMessage(() => ({
background: var(--bg-primary);
}
.nav-bar {
display: flex;
align-items: center;
justify-content: space-between;
height: 44px;
}
.nav-back {
font-size: 28px;
color: var(--text-primary);
padding: 0 8px;
line-height: 1;
}
.nav-placeholder {
width: 30px;
}
.status-bar-placeholder { height: 44px; }
.page-title {