设置页改造:「设置」→「数据」,做成数据中心
- tabBar 文字 ⚙️ 设置 → 💾 数据 - Header 收敛成 标题 + 一行统计 + 上次备份时间 - 删除「关于」「温馨提示」整块装饰内容 - 「数据管理」拆成「备份」+「危险操作」两组 - 导出成功后写入 lastBackupAt,进页面格式化展示 - 图标背景从冷色统一为纸感暖色 - 底部加版本号 v2.1.3 小字 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+29
-33
@@ -1,50 +1,56 @@
|
||||
// settings.js
|
||||
const storage = require('../../utils/storage')
|
||||
|
||||
const LAST_BACKUP_KEY = 'lastBackupAt'
|
||||
|
||||
function formatRelativeTime(ts) {
|
||||
if (!ts) return '从未备份'
|
||||
const diff = Date.now() - ts
|
||||
if (diff < 60 * 1000) return '刚刚'
|
||||
if (diff < 60 * 60 * 1000) return Math.floor(diff / 60000) + ' 分钟前'
|
||||
if (diff < 24 * 60 * 60 * 1000) return Math.floor(diff / 3600000) + ' 小时前'
|
||||
if (diff < 30 * 24 * 60 * 60 * 1000) return Math.floor(diff / 86400000) + ' 天前'
|
||||
const d = new Date(ts)
|
||||
return (d.getMonth() + 1) + '月' + d.getDate() + '日'
|
||||
}
|
||||
|
||||
Page({
|
||||
data: {
|
||||
dataCount: {
|
||||
persons: 0,
|
||||
anniversaries: 0
|
||||
}
|
||||
personsCount: 0,
|
||||
anniversariesCount: 0,
|
||||
lastBackupText: '从未备份',
|
||||
version: 'v2.1.3'
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.loadDataCount()
|
||||
this.loadSummary()
|
||||
},
|
||||
|
||||
onShow() {
|
||||
this.loadDataCount()
|
||||
this.loadSummary()
|
||||
},
|
||||
|
||||
/**
|
||||
* 加载数据统计
|
||||
*/
|
||||
loadDataCount() {
|
||||
loadSummary() {
|
||||
const persons = storage.getPersons()
|
||||
const anniversaries = storage.getAnniversaries()
|
||||
|
||||
const lastBackupAt = wx.getStorageSync(LAST_BACKUP_KEY) || 0
|
||||
|
||||
this.setData({
|
||||
dataCount: {
|
||||
persons: persons.length,
|
||||
anniversaries: anniversaries.length
|
||||
}
|
||||
personsCount: persons.length,
|
||||
anniversariesCount: anniversaries.length,
|
||||
lastBackupText: formatRelativeTime(lastBackupAt)
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出数据
|
||||
*/
|
||||
onExportData() {
|
||||
const data = storage.exportData()
|
||||
|
||||
// 转换为JSON字符串
|
||||
const jsonStr = JSON.stringify(data, null, 2)
|
||||
|
||||
// 在小程序中,可以通过提示用户复制
|
||||
|
||||
wx.setClipboardData({
|
||||
data: jsonStr,
|
||||
success: () => {
|
||||
wx.setStorageSync(LAST_BACKUP_KEY, Date.now())
|
||||
this.loadSummary()
|
||||
wx.showToast({
|
||||
title: '数据已复制到剪贴板',
|
||||
icon: 'success'
|
||||
@@ -53,9 +59,6 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 导入数据
|
||||
*/
|
||||
onImportData() {
|
||||
wx.showModal({
|
||||
title: '导入数据',
|
||||
@@ -64,7 +67,6 @@ Page({
|
||||
cancelText: '取消',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
// 读取剪贴板
|
||||
wx.getClipboardData({
|
||||
success: (res) => {
|
||||
try {
|
||||
@@ -87,25 +89,20 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 清空所有数据
|
||||
*/
|
||||
onClearData() {
|
||||
wx.showModal({
|
||||
title: '确认清空',
|
||||
content: '确定要清空所有数据吗?此操作不可恢复!',
|
||||
confirmText: '确认清空',
|
||||
confirmColor: '#ff5722',
|
||||
confirmColor: '#C8412F',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
const success = storage.clearAllData()
|
||||
|
||||
if (success) {
|
||||
wx.showToast({
|
||||
title: '已清空',
|
||||
icon: 'success'
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
wx.reLaunch({
|
||||
url: '/pages/index/index'
|
||||
@@ -117,4 +114,3 @@ Page({
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user