// settings.js const storage = require('../../utils/storage') Page({ data: { dataCount: { persons: 0, anniversaries: 0 } }, onLoad() { this.loadDataCount() }, onShow() { this.loadDataCount() }, /** * 加载数据统计 */ loadDataCount() { const persons = storage.getPersons() const anniversaries = storage.getAnniversaries() this.setData({ dataCount: { persons: persons.length, anniversaries: anniversaries.length } }) }, /** * 导出数据 */ onExportData() { const data = storage.exportData() // 转换为JSON字符串 const jsonStr = JSON.stringify(data, null, 2) // 在小程序中,可以通过提示用户复制 wx.setClipboardData({ data: jsonStr, success: () => { wx.showToast({ title: '数据已复制到剪贴板', icon: 'success' }) } }) }, /** * 导入数据 */ onImportData() { wx.showModal({ title: '导入数据', content: '将从剪贴板读取数据并导入。注意:导入会覆盖现有数据,请先备份!', confirmText: '确认导入', cancelText: '取消', success: (res) => { if (res.confirm) { // 读取剪贴板 wx.getClipboardData({ success: (res) => { try { const data = JSON.parse(res.data) const result = storage.importData(data) if (result.success) { wx.showToast({ title: '导入成功', icon: 'success' }) setTimeout(() => wx.reLaunch({ url: '/pages/index/index' }), 1500) } else { wx.showToast({ title: result.error || '导入失败,请检查数据格式', icon: 'none' }) } } catch (e) { wx.showToast({ title: '数据格式错误', icon: 'none' }) } } }) } } }) }, /** * 清空所有数据 */ onClearData() { wx.showModal({ title: '确认清空', content: '确定要清空所有数据吗?此操作不可恢复!', confirmText: '确认清空', confirmColor: '#ff5722', success: (res) => { if (res.confirm) { const success = storage.clearAllData() if (success) { wx.showToast({ title: '已清空', icon: 'success' }) setTimeout(() => { wx.reLaunch({ url: '/pages/index/index' }) }, 1500) } } } }) } })