refactor(mini): 个人中心改为登录+二级菜单结构
Publish Mini Program Dev Version / publish (push) Successful in 1m8s
Publish Mini Program Dev Version / publish (push) Successful in 1m8s
- 个人中心仅保留登录管理、我的数据/功能菜单与关于信息 - 新增偏好设置二级页 preferences(原偏好设置统一收敛至此) - 新增我的收藏二级页 bookmarks,支持删除与跳转日详情 - 生辰管理拆分为二级页 birth-profiles,未登录时提示引导登录 - 八字页入口改为直达生辰管理页;修复 fortune 非 tabBar 页误用 switchTab
This commit is contained in:
+17
-159
@@ -7,140 +7,33 @@ Page({
|
||||
userInfo: null,
|
||||
loggedIn: false,
|
||||
logging: false,
|
||||
weekStartDay: 0,
|
||||
ziHourSect: 'lateZiNextDay',
|
||||
solarTime: true,
|
||||
showBuddhist: false,
|
||||
highlightLunar: true,
|
||||
bookmarks: [],
|
||||
// 生辰档案
|
||||
profiles: [],
|
||||
activeProfileId: '',
|
||||
// 菜单角标
|
||||
profileCount: 0,
|
||||
maxFree: birthProfile.MAX_PROFILES,
|
||||
canAdd: true,
|
||||
showAddForm: false,
|
||||
formName: '',
|
||||
formGender: 'male',
|
||||
formDate: '1990-01-01',
|
||||
formTime: '12:00',
|
||||
bookmarkCount: 0,
|
||||
version: versionInfo.version,
|
||||
buildNumber: versionInfo.buildNumber,
|
||||
buildTime: versionInfo.buildTime,
|
||||
commitSha: versionInfo.commitSha
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.loadSettings();
|
||||
this.loadBookmarks();
|
||||
},
|
||||
|
||||
onShow() {
|
||||
this.loadBookmarks();
|
||||
this.loadProfiles();
|
||||
this.refreshUser();
|
||||
this.refreshCounts();
|
||||
},
|
||||
|
||||
loadSettings() {
|
||||
const settings = wx.getStorageSync('lunar-settings') || {};
|
||||
this.setData({
|
||||
weekStartDay: settings.weekStartDay || 0,
|
||||
ziHourSect: settings.ziHourSect || 'lateZiNextDay',
|
||||
solarTime: settings.solarTime !== false,
|
||||
showBuddhist: settings.showBuddhist === true,
|
||||
highlightLunar: settings.highlightLunar !== false
|
||||
});
|
||||
refreshUser() {
|
||||
const token = wx.getStorageSync('token');
|
||||
const userInfo = wx.getStorageSync('lunar-user-info');
|
||||
this.setData({ loggedIn: !!token, userInfo: userInfo || null });
|
||||
},
|
||||
|
||||
saveSettings() {
|
||||
const { weekStartDay, ziHourSect, solarTime, showBuddhist, highlightLunar } = this.data;
|
||||
wx.setStorageSync('lunar-settings', { weekStartDay, ziHourSect, solarTime, showBuddhist, highlightLunar });
|
||||
},
|
||||
|
||||
loadBookmarks() {
|
||||
refreshCounts() {
|
||||
const bookmarks = wx.getStorageSync('lunar-bookmarks') || [];
|
||||
this.setData({ bookmarks });
|
||||
},
|
||||
|
||||
// ==================== 生辰档案 ====================
|
||||
|
||||
loadProfiles() {
|
||||
const render = () => {
|
||||
const profiles = birthProfile.getProfiles();
|
||||
const active = birthProfile.getActiveProfile();
|
||||
this.setData({
|
||||
profiles,
|
||||
activeProfileId: active ? active.id : '',
|
||||
canAdd: profiles.length < this.data.maxFree
|
||||
});
|
||||
};
|
||||
// 已登录时先从服务端同步,失败静默回退本地
|
||||
if (birthProfile.isLoggedIn()) {
|
||||
birthProfile.syncFromServer().then(render).catch(render);
|
||||
} else {
|
||||
render();
|
||||
}
|
||||
},
|
||||
|
||||
toggleAddForm() {
|
||||
if (!this.data.showAddForm && !this.data.canAdd) {
|
||||
wx.showToast({ title: `最多可免费绑定 ${this.data.maxFree} 个生辰`, icon: 'none' });
|
||||
return;
|
||||
}
|
||||
this.setData({ showAddForm: !this.data.showAddForm });
|
||||
},
|
||||
|
||||
onFormName(e) {
|
||||
this.setData({ formName: e.detail.value });
|
||||
},
|
||||
|
||||
setFormGender(e) {
|
||||
this.setData({ formGender: e.currentTarget.dataset.g });
|
||||
},
|
||||
|
||||
onFormDate(e) {
|
||||
this.setData({ formDate: e.detail.value });
|
||||
},
|
||||
|
||||
onFormTime(e) {
|
||||
this.setData({ formTime: e.detail.value });
|
||||
},
|
||||
|
||||
submitProfile() {
|
||||
const { formName, formGender, formDate, formTime } = this.data;
|
||||
if (!formDate || !formTime) {
|
||||
wx.showToast({ title: '请选择出生日期和时间', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
const result = birthProfile.addProfile({
|
||||
name: formName.trim() || '未命名',
|
||||
gender: formGender,
|
||||
birthday: formDate,
|
||||
birthTime: formTime
|
||||
});
|
||||
if (!result.ok) {
|
||||
wx.showToast({ title: result.msg, icon: 'none' });
|
||||
return;
|
||||
}
|
||||
// 已登录时推送到服务端(静默失败,不影响本地)
|
||||
birthProfile.pushProfileToServer(result.profile);
|
||||
this.setData({ showAddForm: false, formName: '' });
|
||||
wx.showToast({ title: '绑定成功', icon: 'success' });
|
||||
this.loadProfiles();
|
||||
},
|
||||
|
||||
removeProfile(e) {
|
||||
const id = e.currentTarget.dataset.id;
|
||||
const profile = this.data.profiles.find(p => p.id === id);
|
||||
if (!profile) return;
|
||||
wx.showModal({
|
||||
title: '删除生辰',
|
||||
content: `确定删除「${profile.name}」的生辰信息吗?`,
|
||||
success: (res) => {
|
||||
if (!res.confirm) return;
|
||||
birthProfile.removeProfile(id);
|
||||
birthProfile.removeProfileFromServer(profile);
|
||||
wx.showToast({ title: '已删除', icon: 'success' });
|
||||
this.loadProfiles();
|
||||
}
|
||||
const profiles = birthProfile.getProfiles();
|
||||
this.setData({
|
||||
bookmarkCount: bookmarks.length,
|
||||
profileCount: profiles.length
|
||||
});
|
||||
},
|
||||
|
||||
@@ -166,8 +59,8 @@ Page({
|
||||
wx.setStorageSync('lunar-user-info', res.data.user);
|
||||
this.setData({ userInfo: res.data.user, loggedIn: true, logging: false });
|
||||
wx.showToast({ title: '登录成功', icon: 'success' });
|
||||
// 登录后同步服务端生辰档案
|
||||
this.loadProfiles();
|
||||
// 登录后拉取云端生辰档案,保证菜单计数准确
|
||||
birthProfile.syncFromServer().then(() => this.refreshCounts()).catch(() => {});
|
||||
} else {
|
||||
this.setData({ logging: false });
|
||||
wx.showToast({ title: (res && res.msg) || '登录失败', icon: 'none' });
|
||||
@@ -198,45 +91,10 @@ Page({
|
||||
});
|
||||
},
|
||||
|
||||
// ==================== 偏好设置 ====================
|
||||
|
||||
setWeekStart(e) {
|
||||
this.setData({ weekStartDay: Number(e.currentTarget.dataset.v) });
|
||||
this.saveSettings();
|
||||
},
|
||||
|
||||
setZiSect(e) {
|
||||
this.setData({ ziHourSect: e.currentTarget.dataset.v });
|
||||
this.saveSettings();
|
||||
},
|
||||
|
||||
onSolarTimeChange(e) {
|
||||
this.setData({ solarTime: e.detail.value });
|
||||
this.saveSettings();
|
||||
},
|
||||
|
||||
onBuddhistChange(e) {
|
||||
this.setData({ showBuddhist: e.detail.value });
|
||||
this.saveSettings();
|
||||
},
|
||||
|
||||
onHighlightLunarChange(e) {
|
||||
this.setData({ highlightLunar: e.detail.value });
|
||||
this.saveSettings();
|
||||
},
|
||||
|
||||
removeBookmark(e) {
|
||||
const date = e.currentTarget.dataset.date;
|
||||
let bookmarks = this.data.bookmarks.filter(b => b.date !== date);
|
||||
wx.setStorageSync('lunar-bookmarks', bookmarks);
|
||||
this.setData({ bookmarks });
|
||||
wx.showToast({ title: '已删除', icon: 'success' });
|
||||
},
|
||||
|
||||
navTo(e) {
|
||||
const url = e.currentTarget.dataset.url;
|
||||
// tabBar 页面必须用 switchTab 打开
|
||||
const tabPages = ['/pages/home/home', '/pages/wish-tree/wish-tree', '/pages/bazi/bazi', '/pages/wiki/wiki', '/pages/settings/settings', '/pages/fortune/fortune'];
|
||||
const tabPages = ['/pages/home/home', '/pages/wish-tree/wish-tree', '/pages/bazi/bazi', '/pages/wiki/wiki', '/pages/settings/settings'];
|
||||
if (tabPages.includes(url)) {
|
||||
wx.switchTab({ url });
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user