精简「我的」页面菜单 + 数据库去重 + 内容上传接口

- 移除扫一扫/提现记录/设置独立菜单项,设置功能整合到页面内
- 新增绑定微信号、清缓存、退出登录的内联设置区
- 添加 content_upload.py:Skill 可直接调用上传内容到数据库
- 数据库已去重(196→69条)并添加唯一索引防止再次重复

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
卡若
2026-02-21 14:04:55 +08:00
parent 0e4baa4b7f
commit 934f7c7988
4 changed files with 399 additions and 23 deletions

View File

@@ -33,13 +33,10 @@ Page({
// 最近阅读
recentChapters: [],
// 菜单列表:扫一扫整合在「我的」内;提现记录与设置合并为「设置与提现」入口
menuList: [
{ id: 'scan', title: '扫一扫', icon: '📷', iconBg: 'brand' },
{ id: 'orders', title: '我的订单', icon: '📦', count: 0 },
{ id: 'referral', title: '推广中心', icon: '🎁', badge: '' },
{ id: 'about', title: '关于作者', icon: '👤', iconBg: 'brand' },
{ id: 'settings', title: '设置与提现', icon: '⚙️', iconBg: 'gray' }
{ id: 'about', title: '关于作者', icon: '👤', iconBg: 'brand' }
],
// 登录弹窗
@@ -282,32 +279,15 @@ Page({
handleMenuTap(e) {
const id = e.currentTarget.dataset.id
if (!this.data.isLoggedIn && id !== 'about' && id !== 'scan') {
if (!this.data.isLoggedIn && id !== 'about') {
this.showLogin()
return
}
// 扫一扫:在「我的」内直接调起扫码
if (id === 'scan') {
wx.scanCode({
onlyFromCamera: false,
scanType: ['qrCode', 'barCode'],
success: (res) => {
wx.showToast({ title: '已识别', icon: 'success' })
if (res.result) {
wx.setClipboardData({ data: res.result })
}
},
fail: () => {}
})
return
}
const routes = {
orders: '/pages/purchases/purchases',
referral: '/pages/referral/referral',
about: '/pages/about/about',
settings: '/pages/settings/settings'
about: '/pages/about/about'
}
if (routes[id]) {
@@ -315,6 +295,55 @@ Page({
}
},
// 绑定微信号
bindWechat() {
wx.showModal({
title: '绑定微信号',
editable: true,
placeholderText: '请输入微信号',
success: async (res) => {
if (res.confirm && res.content) {
const wechat = res.content.trim()
if (!wechat) return
try {
wx.setStorageSync('user_wechat', wechat)
const userInfo = this.data.userInfo
userInfo.wechat = wechat
this.setData({ userInfo, userWechat: wechat })
app.globalData.userInfo = userInfo
wx.setStorageSync('userInfo', userInfo)
await app.request('/api/user/update', {
method: 'POST',
data: { userId: userInfo.id, wechat }
})
wx.showToast({ title: '绑定成功', icon: 'success' })
} catch (e) {
console.log('绑定微信号失败', e)
wx.showToast({ title: '已保存到本地', icon: 'success' })
}
}
}
})
},
// 清除缓存
clearCache() {
wx.showModal({
title: '清除缓存',
content: '确定要清除本地缓存吗?不会影响账号数据',
success: (res) => {
if (res.confirm) {
const userInfo = wx.getStorageSync('userInfo')
const token = wx.getStorageSync('token')
wx.clearStorageSync()
if (userInfo) wx.setStorageSync('userInfo', userInfo)
if (token) wx.setStorageSync('token', token)
wx.showToast({ title: '缓存已清除', icon: 'success' })
}
}
})
},
// 跳转到阅读页
goToRead(e) {
const id = e.currentTarget.dataset.id

View File

@@ -107,6 +107,30 @@
</view>
</view>
</view>
<!-- 账号设置 -->
<view class="settings-card card">
<view class="card-title">
<text class="title-icon">⚙️</text>
<text>账号设置</text>
</view>
<view class="settings-list">
<view class="settings-item" bindtap="bindWechat">
<text class="settings-label">绑定微信号</text>
<view class="settings-right">
<text class="settings-value">{{userWechat || '未绑定'}}</text>
<text class="menu-arrow">→</text>
</view>
</view>
<view class="settings-item" bindtap="clearCache">
<text class="settings-label">清除缓存</text>
<text class="menu-arrow">→</text>
</view>
<view class="settings-item logout-item" bindtap="handleLogout">
<text class="settings-label logout-text">退出登录</text>
</view>
</view>
</view>
</view>
<!-- 足迹内容 -->

View File

@@ -994,3 +994,51 @@
font-size: 28rpx;
color: #FFD700;
}
/* 账号设置 */
.settings-card {
margin-top: 24rpx;
}
.settings-list {
margin-top: 16rpx;
}
.settings-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 28rpx 0;
border-bottom: 1rpx solid rgba(255, 255, 255, 0.06);
}
.settings-item:last-child {
border-bottom: none;
}
.settings-label {
font-size: 28rpx;
color: rgba(255, 255, 255, 0.85);
}
.settings-right {
display: flex;
align-items: center;
gap: 12rpx;
}
.settings-value {
font-size: 26rpx;
color: rgba(255, 255, 255, 0.4);
}
.logout-item {
justify-content: center;
margin-top: 16rpx;
border-bottom: none;
}
.logout-text {
color: #ff4d4f;
font-size: 28rpx;
}