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:
@@ -8,6 +8,9 @@
|
|||||||
"pages/divination/divination",
|
"pages/divination/divination",
|
||||||
"pages/solar-terms/solar-terms",
|
"pages/solar-terms/solar-terms",
|
||||||
"pages/settings/settings",
|
"pages/settings/settings",
|
||||||
|
"pages/preferences/preferences",
|
||||||
|
"pages/bookmarks/bookmarks",
|
||||||
|
"pages/birth-profiles/birth-profiles",
|
||||||
"pages/wish-tree/wish-tree",
|
"pages/wish-tree/wish-tree",
|
||||||
"pages/wish-detail/wish-detail",
|
"pages/wish-detail/wish-detail",
|
||||||
"pages/wiki/wiki"
|
"pages/wiki/wiki"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const GLOSSARY = [
|
|||||||
{ term: '空亡', desc: '六十甲子分为六旬,每旬十个干支配十二地支,余下两个地支无天干相配,称为该旬"空亡"。这是干支纪法本身的结构性概念,此处仅作历法知识展示。' },
|
{ term: '空亡', desc: '六十甲子分为六旬,每旬十个干支配十二地支,余下两个地支无天干相配,称为该旬"空亡"。这是干支纪法本身的结构性概念,此处仅作历法知识展示。' },
|
||||||
{ term: '大运', desc: '传统上以月柱为基础、按十年一换的节奏推演出的干支序列,用来描述人生不同阶段的节律。属于传统民俗推演方法,供文化了解。' },
|
{ term: '大运', desc: '传统上以月柱为基础、按十年一换的节奏推演出的干支序列,用来描述人生不同阶段的节律。属于传统民俗推演方法,供文化了解。' },
|
||||||
{ term: '流年', desc: '即每一年的干支(如 2026 年为丙午年)。传统做法将流年与本命干支对照,观察逐年的变化关系。' },
|
{ term: '流年', desc: '即每一年的干支(如 2026 年为丙午年)。传统做法将流年与本命干支对照,观察逐年的变化关系。' },
|
||||||
{ term: '子时流派', desc: '子时(23:00-01:00)横跨两天,晚子时(23:00-24:00)出生者的日柱按当天还是次日起算,历代流派说法不一。可在"我的-偏好设置"中选择。' }
|
{ term: '子时流派', desc: '子时(23:00-01:00)横跨两天,晚子时(23:00-24:00)出生者的日柱按当天还是次日起算,历代流派说法不一。可在"我的-设置"中选择。' }
|
||||||
];
|
];
|
||||||
|
|
||||||
/** 根据出生信息构建排盘展示数据 */
|
/** 根据出生信息构建排盘展示数据 */
|
||||||
@@ -144,10 +144,10 @@ Page({
|
|||||||
},
|
},
|
||||||
|
|
||||||
goSettings() {
|
goSettings() {
|
||||||
wx.switchTab({ url: '/pages/settings/settings' });
|
wx.navigateTo({ url: '/pages/birth-profiles/birth-profiles' });
|
||||||
},
|
},
|
||||||
|
|
||||||
goFortune() {
|
goFortune() {
|
||||||
wx.switchTab({ url: '/pages/fortune/fortune' });
|
wx.navigateTo({ url: '/pages/fortune/fortune' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
const birthProfile = require('../../utils/birth-profile.js');
|
||||||
|
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
loggedIn: false,
|
||||||
|
profiles: [],
|
||||||
|
activeProfileId: '',
|
||||||
|
maxFree: birthProfile.MAX_PROFILES,
|
||||||
|
canAdd: true,
|
||||||
|
showAddForm: false,
|
||||||
|
formName: '',
|
||||||
|
formGender: 'male',
|
||||||
|
formDate: '1990-01-01',
|
||||||
|
formTime: '12:00'
|
||||||
|
},
|
||||||
|
|
||||||
|
onShow() {
|
||||||
|
this.setData({ loggedIn: birthProfile.isLoggedIn() });
|
||||||
|
this.loadProfiles();
|
||||||
|
},
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 未登录时引导回个人中心登录
|
||||||
|
goLogin() {
|
||||||
|
wx.navigateBack();
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"navigationBarTitleText": "生辰管理",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
<view class="container">
|
||||||
|
<!-- 未登录提示 -->
|
||||||
|
<view class="card login-tip" wx:if="{{!loggedIn}}">
|
||||||
|
<text class="text-sm">当前未登录,生辰仅保存在本机</text>
|
||||||
|
<text class="text-xs text-muted block mt-1">登录后可云端同步,换设备不丢失</text>
|
||||||
|
<view class="btn-outline text-center mt-2" bindtap="goLogin">去登录</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 生辰管理 -->
|
||||||
|
<view class="card">
|
||||||
|
<view class="section-title flex justify-between items-center">
|
||||||
|
<text>生辰管理</text>
|
||||||
|
<text class="text-xs text-muted">{{profiles.length}}/{{maxFree}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="text-xs text-muted mb-2">八字排盘基于生辰信息,每位用户可免费绑定 {{maxFree}} 个出生年月(如本人、家人)。</view>
|
||||||
|
|
||||||
|
<view class="profile-list" wx:if="{{profiles.length > 0}}">
|
||||||
|
<view class="profile-item" wx:for="{{profiles}}" wx:key="id">
|
||||||
|
<view class="flex justify-between items-center">
|
||||||
|
<view>
|
||||||
|
<view class="flex items-center gap-1">
|
||||||
|
<text class="text-base font-medium">{{item.name}}</text>
|
||||||
|
<text class="badge badge-lucky" wx:if="{{item.id === activeProfileId}}">使用中</text>
|
||||||
|
</view>
|
||||||
|
<text class="text-xs text-muted block">{{item.gender === 'female' ? '女' : '男'}} · {{item.birthday}} {{item.birthTime}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="btn-ghost text-unlucky" bindtap="removeProfile" data-id="{{item.id}}">删除</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="text-center text-muted p-2" wx:else>
|
||||||
|
<text>暂未绑定生辰,请到下方添加</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="btn-outline text-center mt-2" bindtap="toggleAddForm" wx:if="{{canAdd}}">
|
||||||
|
{{showAddForm ? '收起' : '+ 添加生辰'}}
|
||||||
|
</view>
|
||||||
|
<view class="text-center text-xs text-muted mt-2" wx:else>
|
||||||
|
免费名额已用完,可删除旧档案后添加
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 添加表单 -->
|
||||||
|
<block wx:if="{{showAddForm}}">
|
||||||
|
<view class="form-item mt-2">
|
||||||
|
<text class="form-label">备注名(如:本人、爸爸)</text>
|
||||||
|
<input class="form-input" placeholder="未命名" value="{{formName}}" bindinput="onFormName"/>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">性别</text>
|
||||||
|
<view class="flex gap-2">
|
||||||
|
<view class="btn-outline {{formGender === 'male' ? 'active' : ''}}" bindtap="setFormGender" data-g="male">男</view>
|
||||||
|
<view class="btn-outline {{formGender === 'female' ? 'active' : ''}}" bindtap="setFormGender" data-g="female">女</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">出生日期(公历)</text>
|
||||||
|
<picker mode="date" value="{{formDate}}" start="1900-01-01" end="2100-12-31" bindchange="onFormDate">
|
||||||
|
<view class="picker-input">{{formDate}}</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">出生时间</text>
|
||||||
|
<picker mode="time" value="{{formTime}}" bindchange="onFormTime">
|
||||||
|
<view class="picker-input">{{formTime}}</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
<view class="btn-primary text-center" bindtap="submitProfile">保存生辰</view>
|
||||||
|
</block>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
.container {
|
||||||
|
padding: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
color: #C41E3A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-tip {
|
||||||
|
border: 1rpx dashed #C41E3A;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 生辰档案 */
|
||||||
|
.profile-item {
|
||||||
|
padding: 16rpx 0;
|
||||||
|
border-bottom: 1rpx solid #E8D5C4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 添加生辰表单 */
|
||||||
|
.form-item {
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #6B5E53;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
padding: 20rpx;
|
||||||
|
background: #FFFBF5;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
border: 1rpx solid #E8D5C4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picker-input {
|
||||||
|
padding: 20rpx;
|
||||||
|
background: #FFFBF5;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
border: 1rpx solid #E8D5C4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline.active {
|
||||||
|
background: #C41E3A;
|
||||||
|
color: #FFFFFF;
|
||||||
|
border-color: #C41E3A;
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
bookmarks: []
|
||||||
|
},
|
||||||
|
|
||||||
|
onShow() {
|
||||||
|
this.loadBookmarks();
|
||||||
|
},
|
||||||
|
|
||||||
|
loadBookmarks() {
|
||||||
|
const bookmarks = wx.getStorageSync('lunar-bookmarks') || [];
|
||||||
|
this.setData({ bookmarks });
|
||||||
|
},
|
||||||
|
|
||||||
|
removeBookmark(e) {
|
||||||
|
const date = e.currentTarget.dataset.date;
|
||||||
|
const bookmarks = this.data.bookmarks.filter(b => b.date !== date);
|
||||||
|
wx.setStorageSync('lunar-bookmarks', bookmarks);
|
||||||
|
this.setData({ bookmarks });
|
||||||
|
wx.showToast({ title: '已删除', icon: 'success' });
|
||||||
|
},
|
||||||
|
|
||||||
|
// 点击收藏项跳转到当日详情
|
||||||
|
openDetail(e) {
|
||||||
|
const date = e.currentTarget.dataset.date;
|
||||||
|
wx.navigateTo({ url: `/pages/day-detail/day-detail?date=${date}` });
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"navigationBarTitleText": "我的收藏",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<view class="container">
|
||||||
|
<view class="card">
|
||||||
|
<view class="section-title">我的收藏</view>
|
||||||
|
<view class="bookmark-list" wx:if="{{bookmarks.length > 0}}">
|
||||||
|
<view class="bookmark-item" wx:for="{{bookmarks}}" wx:key="date" bindtap="openDetail" data-date="{{item.date}}">
|
||||||
|
<view class="flex justify-between items-center">
|
||||||
|
<view>
|
||||||
|
<text class="text-base font-medium">{{item.date}}</text>
|
||||||
|
<text class="text-xs text-muted block">{{item.lunarDate}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="btn-ghost text-unlucky" catchtap="removeBookmark" data-date="{{item.date}}">删除</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="empty-tip" wx:else>
|
||||||
|
<text class="text-sm text-muted">暂无收藏</text>
|
||||||
|
<text class="text-xs text-muted block mt-1">在日期详情页点击「收藏」即可添加</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
.container {
|
||||||
|
padding: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
color: #C41E3A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bookmark-item {
|
||||||
|
padding: 16rpx 0;
|
||||||
|
border-bottom: 1rpx solid #E8D5C4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bookmark-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-tip {
|
||||||
|
text-align: center;
|
||||||
|
padding: 40rpx 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
weekStartDay: 0,
|
||||||
|
ziHourSect: 'lateZiNextDay',
|
||||||
|
solarTime: true,
|
||||||
|
showBuddhist: false,
|
||||||
|
highlightLunar: true
|
||||||
|
},
|
||||||
|
|
||||||
|
onShow() {
|
||||||
|
this.loadSettings();
|
||||||
|
},
|
||||||
|
|
||||||
|
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
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
saveSettings() {
|
||||||
|
const { weekStartDay, ziHourSect, solarTime, showBuddhist, highlightLunar } = this.data;
|
||||||
|
wx.setStorageSync('lunar-settings', { weekStartDay, ziHourSect, solarTime, showBuddhist, highlightLunar });
|
||||||
|
},
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"navigationBarTitleText": "偏好设置",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<view class="container">
|
||||||
|
<view class="card">
|
||||||
|
<view class="section-title">偏好设置</view>
|
||||||
|
|
||||||
|
<view class="setting-item">
|
||||||
|
<text class="setting-label">周起始日</text>
|
||||||
|
<view class="flex gap-2">
|
||||||
|
<view class="btn-outline {{weekStartDay === 0 ? 'active' : ''}}" bindtap="setWeekStart" data-v="0">周日</view>
|
||||||
|
<view class="btn-outline {{weekStartDay === 1 ? 'active' : ''}}" bindtap="setWeekStart" data-v="1">周一</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="setting-item">
|
||||||
|
<text class="setting-label">子时流派</text>
|
||||||
|
<view class="flex gap-2">
|
||||||
|
<view class="btn-outline {{ziHourSect === 'lateZiNextDay' ? 'active' : ''}}" bindtap="setZiSect" data-v="lateZiNextDay">晚子时算次日</view>
|
||||||
|
<view class="btn-outline {{ziHourSect === 'lateZiSameDay' ? 'active' : ''}}" bindtap="setZiSect" data-v="lateZiSameDay">晚子时算当日</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="setting-item">
|
||||||
|
<text class="setting-label">真太阳时校正</text>
|
||||||
|
<switch checked="{{solarTime}}" bindchange="onSolarTimeChange" color="#C41E3A"/>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="setting-item">
|
||||||
|
<text class="setting-label">显示佛历提醒</text>
|
||||||
|
<switch checked="{{showBuddhist}}" bindchange="onBuddhistChange" color="#C41E3A"/>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="setting-item">
|
||||||
|
<text class="setting-label">初一十五高亮</text>
|
||||||
|
<switch checked="{{highlightLunar}}" bindchange="onHighlightLunarChange" color="#C41E3A"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="text-xs text-muted text-center mt-2">设置仅保存在本机,修改后立即生效</view>
|
||||||
|
</view>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
.container {
|
||||||
|
padding: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
color: #C41E3A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
border-bottom: 1rpx solid #E8D5C4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline.active {
|
||||||
|
background: #C41E3A;
|
||||||
|
color: #FFFFFF;
|
||||||
|
border-color: #C41E3A;
|
||||||
|
}
|
||||||
+15
-157
@@ -7,140 +7,33 @@ Page({
|
|||||||
userInfo: null,
|
userInfo: null,
|
||||||
loggedIn: false,
|
loggedIn: false,
|
||||||
logging: false,
|
logging: false,
|
||||||
weekStartDay: 0,
|
// 菜单角标
|
||||||
ziHourSect: 'lateZiNextDay',
|
profileCount: 0,
|
||||||
solarTime: true,
|
|
||||||
showBuddhist: false,
|
|
||||||
highlightLunar: true,
|
|
||||||
bookmarks: [],
|
|
||||||
// 生辰档案
|
|
||||||
profiles: [],
|
|
||||||
activeProfileId: '',
|
|
||||||
maxFree: birthProfile.MAX_PROFILES,
|
maxFree: birthProfile.MAX_PROFILES,
|
||||||
canAdd: true,
|
bookmarkCount: 0,
|
||||||
showAddForm: false,
|
|
||||||
formName: '',
|
|
||||||
formGender: 'male',
|
|
||||||
formDate: '1990-01-01',
|
|
||||||
formTime: '12:00',
|
|
||||||
version: versionInfo.version,
|
version: versionInfo.version,
|
||||||
buildNumber: versionInfo.buildNumber,
|
buildNumber: versionInfo.buildNumber,
|
||||||
buildTime: versionInfo.buildTime,
|
buildTime: versionInfo.buildTime,
|
||||||
commitSha: versionInfo.commitSha
|
commitSha: versionInfo.commitSha
|
||||||
},
|
},
|
||||||
|
|
||||||
onLoad() {
|
|
||||||
this.loadSettings();
|
|
||||||
this.loadBookmarks();
|
|
||||||
},
|
|
||||||
|
|
||||||
onShow() {
|
onShow() {
|
||||||
this.loadBookmarks();
|
this.refreshUser();
|
||||||
this.loadProfiles();
|
this.refreshCounts();
|
||||||
},
|
},
|
||||||
|
|
||||||
loadSettings() {
|
refreshUser() {
|
||||||
const settings = wx.getStorageSync('lunar-settings') || {};
|
const token = wx.getStorageSync('token');
|
||||||
this.setData({
|
const userInfo = wx.getStorageSync('lunar-user-info');
|
||||||
weekStartDay: settings.weekStartDay || 0,
|
this.setData({ loggedIn: !!token, userInfo: userInfo || null });
|
||||||
ziHourSect: settings.ziHourSect || 'lateZiNextDay',
|
|
||||||
solarTime: settings.solarTime !== false,
|
|
||||||
showBuddhist: settings.showBuddhist === true,
|
|
||||||
highlightLunar: settings.highlightLunar !== false
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
saveSettings() {
|
refreshCounts() {
|
||||||
const { weekStartDay, ziHourSect, solarTime, showBuddhist, highlightLunar } = this.data;
|
|
||||||
wx.setStorageSync('lunar-settings', { weekStartDay, ziHourSect, solarTime, showBuddhist, highlightLunar });
|
|
||||||
},
|
|
||||||
|
|
||||||
loadBookmarks() {
|
|
||||||
const bookmarks = wx.getStorageSync('lunar-bookmarks') || [];
|
const bookmarks = wx.getStorageSync('lunar-bookmarks') || [];
|
||||||
this.setData({ bookmarks });
|
|
||||||
},
|
|
||||||
|
|
||||||
// ==================== 生辰档案 ====================
|
|
||||||
|
|
||||||
loadProfiles() {
|
|
||||||
const render = () => {
|
|
||||||
const profiles = birthProfile.getProfiles();
|
const profiles = birthProfile.getProfiles();
|
||||||
const active = birthProfile.getActiveProfile();
|
|
||||||
this.setData({
|
this.setData({
|
||||||
profiles,
|
bookmarkCount: bookmarks.length,
|
||||||
activeProfileId: active ? active.id : '',
|
profileCount: profiles.length
|
||||||
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();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -166,8 +59,8 @@ Page({
|
|||||||
wx.setStorageSync('lunar-user-info', res.data.user);
|
wx.setStorageSync('lunar-user-info', res.data.user);
|
||||||
this.setData({ userInfo: res.data.user, loggedIn: true, logging: false });
|
this.setData({ userInfo: res.data.user, loggedIn: true, logging: false });
|
||||||
wx.showToast({ title: '登录成功', icon: 'success' });
|
wx.showToast({ title: '登录成功', icon: 'success' });
|
||||||
// 登录后同步服务端生辰档案
|
// 登录后拉取云端生辰档案,保证菜单计数准确
|
||||||
this.loadProfiles();
|
birthProfile.syncFromServer().then(() => this.refreshCounts()).catch(() => {});
|
||||||
} else {
|
} else {
|
||||||
this.setData({ logging: false });
|
this.setData({ logging: false });
|
||||||
wx.showToast({ title: (res && res.msg) || '登录失败', icon: 'none' });
|
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) {
|
navTo(e) {
|
||||||
const url = e.currentTarget.dataset.url;
|
const url = e.currentTarget.dataset.url;
|
||||||
// tabBar 页面必须用 switchTab 打开
|
// 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)) {
|
if (tabPages.includes(url)) {
|
||||||
wx.switchTab({ url });
|
wx.switchTab({ url });
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<view class="container">
|
<view class="container">
|
||||||
<!-- 用户信息 -->
|
<!-- 登录与账号 -->
|
||||||
<view class="card">
|
<view class="card">
|
||||||
<view class="section-title">用户信息</view>
|
<view class="flex items-center justify-between" wx:if="{{loggedIn}}">
|
||||||
<view class="flex items-center gap-2 justify-between" wx:if="{{loggedIn}}">
|
|
||||||
<view class="flex items-center gap-2">
|
<view class="flex items-center gap-2">
|
||||||
<image src="{{userInfo.avatar}}" class="avatar" mode="aspectFill" wx:if="{{userInfo.avatar}}"/>
|
<image src="{{userInfo.avatar}}" class="avatar" mode="aspectFill" wx:if="{{userInfo.avatar}}"/>
|
||||||
<view class="avatar avatar-placeholder" wx:else>
|
<view class="avatar avatar-placeholder" wx:else>
|
||||||
@@ -10,135 +9,50 @@
|
|||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<text class="text-base font-medium">{{userInfo.nickname || '微信用户'}}</text>
|
<text class="text-base font-medium">{{userInfo.nickname || '微信用户'}}</text>
|
||||||
<text class="text-xs text-muted block">已登录,档案云端同步</text>
|
<text class="text-xs text-muted block">已登录,生辰档案云端同步</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="btn-ghost text-muted" bindtap="logout">退出</view>
|
<view class="btn-ghost text-muted" bindtap="logout">退出</view>
|
||||||
</view>
|
</view>
|
||||||
<block wx:else>
|
<block wx:else>
|
||||||
<view class="text-sm text-muted mb-2">登录后可将生辰档案同步到云端,换设备不丢失</view>
|
<view class="flex items-center gap-2 mb-2">
|
||||||
|
<view class="avatar avatar-placeholder">
|
||||||
|
<text>客</text>
|
||||||
|
</view>
|
||||||
|
<view>
|
||||||
|
<text class="text-base font-medium">未登录</text>
|
||||||
|
<text class="text-xs text-muted block">绑定的生辰仅保存在本机,登录后才生效</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
<view class="btn-primary text-center" bindtap="login">{{logging ? '登录中…' : '微信登录'}}</view>
|
<view class="btn-primary text-center" bindtap="login">{{logging ? '登录中…' : '微信登录'}}</view>
|
||||||
|
<view class="text-xs text-muted text-center mt-2">登录后可将生辰档案同步到云端,换设备不丢失</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 生辰管理 -->
|
<!-- 我的数据 -->
|
||||||
<view class="card">
|
<view class="card">
|
||||||
<view class="section-title flex justify-between items-center">
|
<view class="section-title">我的数据</view>
|
||||||
<text>生辰管理</text>
|
<view class="menu-item" bindtap="navTo" data-url="/pages/birth-profiles/birth-profiles">
|
||||||
<text class="text-xs text-muted">{{profiles.length}}/{{maxFree}}</text>
|
<text class="menu-label">生辰管理</text>
|
||||||
</view>
|
<view class="menu-right">
|
||||||
<view class="text-xs text-muted mb-2">八字排盘基于生辰信息,每位用户可免费绑定 {{maxFree}} 个出生年月(如本人、家人)。</view>
|
<text class="menu-count">{{profileCount}}/{{maxFree}}</text>
|
||||||
|
<text class="menu-arrow">›</text>
|
||||||
<view class="profile-list" wx:if="{{profiles.length > 0}}">
|
|
||||||
<view class="profile-item" wx:for="{{profiles}}" wx:key="id">
|
|
||||||
<view class="flex justify-between items-center">
|
|
||||||
<view>
|
|
||||||
<view class="flex items-center gap-1">
|
|
||||||
<text class="text-base font-medium">{{item.name}}</text>
|
|
||||||
<text class="badge badge-lucky" wx:if="{{item.id === activeProfileId}}">使用中</text>
|
|
||||||
</view>
|
|
||||||
<text class="text-xs text-muted block">{{item.gender === 'female' ? '女' : '男'}} · {{item.birthday}} {{item.birthTime}}</text>
|
|
||||||
</view>
|
|
||||||
<view class="btn-ghost text-unlucky" bindtap="removeProfile" data-id="{{item.id}}">删除</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<view class="menu-item" bindtap="navTo" data-url="/pages/bookmarks/bookmarks">
|
||||||
<view class="text-center text-muted p-2" wx:else>
|
<text class="menu-label">我的收藏</text>
|
||||||
<text>暂未绑定生辰,请到下方添加</text>
|
<view class="menu-right">
|
||||||
</view>
|
<text class="menu-count" wx:if="{{bookmarkCount > 0}}">{{bookmarkCount}}</text>
|
||||||
|
<text class="menu-arrow">›</text>
|
||||||
<view class="btn-outline text-center mt-2" bindtap="toggleAddForm" wx:if="{{canAdd}}">
|
|
||||||
{{showAddForm ? '收起' : '+ 添加生辰'}}
|
|
||||||
</view>
|
|
||||||
<view class="text-center text-xs text-muted mt-2" wx:else>
|
|
||||||
免费名额已用完,可删除旧档案后添加
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 添加表单 -->
|
|
||||||
<block wx:if="{{showAddForm}}">
|
|
||||||
<view class="form-item mt-2">
|
|
||||||
<text class="form-label">备注名(如:本人、爸爸)</text>
|
|
||||||
<input class="form-input" placeholder="未命名" value="{{formName}}" bindinput="onFormName"/>
|
|
||||||
</view>
|
|
||||||
<view class="form-item">
|
|
||||||
<text class="form-label">性别</text>
|
|
||||||
<view class="flex gap-2">
|
|
||||||
<view class="btn-outline {{formGender === 'male' ? 'active' : ''}}" bindtap="setFormGender" data-g="male">男</view>
|
|
||||||
<view class="btn-outline {{formGender === 'female' ? 'active' : ''}}" bindtap="setFormGender" data-g="female">女</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="form-item">
|
<view class="menu-item" bindtap="navTo" data-url="/pages/preferences/preferences">
|
||||||
<text class="form-label">出生日期(公历)</text>
|
<text class="menu-label">设置</text>
|
||||||
<picker mode="date" value="{{formDate}}" start="1900-01-01" end="2100-12-31" bindchange="onFormDate">
|
<text class="menu-arrow">›</text>
|
||||||
<view class="picker-input">{{formDate}}</view>
|
|
||||||
</picker>
|
|
||||||
</view>
|
|
||||||
<view class="form-item">
|
|
||||||
<text class="form-label">出生时间</text>
|
|
||||||
<picker mode="time" value="{{formTime}}" bindchange="onFormTime">
|
|
||||||
<view class="picker-input">{{formTime}}</view>
|
|
||||||
</picker>
|
|
||||||
</view>
|
|
||||||
<view class="btn-primary text-center" bindtap="submitProfile">保存生辰</view>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 偏好设置 -->
|
|
||||||
<view class="card">
|
|
||||||
<view class="section-title">偏好设置</view>
|
|
||||||
|
|
||||||
<view class="setting-item">
|
|
||||||
<text class="setting-label">周起始日</text>
|
|
||||||
<view class="flex gap-2">
|
|
||||||
<view class="btn-outline {{weekStartDay === 0 ? 'active' : ''}}" bindtap="setWeekStart" data-v="0">周日</view>
|
|
||||||
<view class="btn-outline {{weekStartDay === 1 ? 'active' : ''}}" bindtap="setWeekStart" data-v="1">周一</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="setting-item">
|
<!-- 功能 -->
|
||||||
<text class="setting-label">子时流派</text>
|
|
||||||
<view class="flex gap-2">
|
|
||||||
<view class="btn-outline {{ziHourSect === 'lateZiNextDay' ? 'active' : ''}}" bindtap="setZiSect" data-v="lateZiNextDay">晚子时算次日</view>
|
|
||||||
<view class="btn-outline {{ziHourSect === 'lateZiSameDay' ? 'active' : ''}}" bindtap="setZiSect" data-v="lateZiSameDay">晚子时算当日</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="setting-item">
|
|
||||||
<text class="setting-label">真太阳时校正</text>
|
|
||||||
<switch checked="{{solarTime}}" bindchange="onSolarTimeChange" color="#C41E3A"/>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="setting-item">
|
|
||||||
<text class="setting-label">显示佛历提醒</text>
|
|
||||||
<switch checked="{{showBuddhist}}" bindchange="onBuddhistChange" color="#C41E3A"/>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="setting-item">
|
|
||||||
<text class="setting-label">初一十五高亮</text>
|
|
||||||
<switch checked="{{highlightLunar}}" bindchange="onHighlightLunarChange" color="#C41E3A"/>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 收藏管理 -->
|
|
||||||
<view class="card">
|
|
||||||
<view class="section-title">我的收藏</view>
|
|
||||||
<view class="bookmark-list" wx:if="{{bookmarks.length > 0}}">
|
|
||||||
<view class="bookmark-item" wx:for="{{bookmarks}}" wx:key="date">
|
|
||||||
<view class="flex justify-between items-center">
|
|
||||||
<view>
|
|
||||||
<text class="text-base font-medium">{{item.date}}</text>
|
|
||||||
<text class="text-xs text-muted block">{{item.lunarDate}}</text>
|
|
||||||
</view>
|
|
||||||
<view class="btn-ghost text-unlucky" bindtap="removeBookmark" data-date="{{item.date}}">删除</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="text-center text-muted" wx:else>
|
|
||||||
<text>暂无收藏</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 功能入口 -->
|
|
||||||
<view class="card">
|
<view class="card">
|
||||||
<view class="section-title">功能</view>
|
<view class="section-title">功能</view>
|
||||||
<view class="menu-item" bindtap="navTo" data-url="/pages/fortune/fortune">
|
<view class="menu-item" bindtap="navTo" data-url="/pages/fortune/fortune">
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
width: 80rpx;
|
width: 96rpx;
|
||||||
height: 80rpx;
|
height: 96rpx;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,74 +21,7 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
background: #C41E3A;
|
background: #C41E3A;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
font-size: 36rpx;
|
font-size: 40rpx;
|
||||||
}
|
|
||||||
|
|
||||||
/* 生辰档案 */
|
|
||||||
.profile-item {
|
|
||||||
padding: 16rpx 0;
|
|
||||||
border-bottom: 1rpx solid #E8D5C4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile-item:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 添加生辰表单 */
|
|
||||||
.form-item {
|
|
||||||
margin-bottom: 24rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-label {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #6B5E53;
|
|
||||||
margin-bottom: 8rpx;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-input {
|
|
||||||
padding: 20rpx;
|
|
||||||
background: #FFFBF5;
|
|
||||||
border-radius: 12rpx;
|
|
||||||
border: 1rpx solid #E8D5C4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.picker-input {
|
|
||||||
padding: 20rpx;
|
|
||||||
background: #FFFBF5;
|
|
||||||
border-radius: 12rpx;
|
|
||||||
border: 1rpx solid #E8D5C4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.setting-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 20rpx 0;
|
|
||||||
border-bottom: 1rpx solid #E8D5C4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.setting-item:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.setting-label {
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-outline.active {
|
|
||||||
background: #C41E3A;
|
|
||||||
color: #FFFFFF;
|
|
||||||
border-color: #C41E3A;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bookmark-item {
|
|
||||||
padding: 16rpx 0;
|
|
||||||
border-bottom: 1rpx solid #E8D5C4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bookmark-item:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
@@ -107,6 +40,17 @@
|
|||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.menu-right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-count {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #9E8E7E;
|
||||||
|
}
|
||||||
|
|
||||||
.menu-arrow {
|
.menu-arrow {
|
||||||
color: #C9B8A6;
|
color: #C9B8A6;
|
||||||
font-size: 36rpx;
|
font-size: 36rpx;
|
||||||
|
|||||||
Reference in New Issue
Block a user