// index.js const storage = require('../../utils/storage') const dateUtils = require('../../utils/date') Page({ data: { persons: [], originalPersons: [], // 原始数据备份 searchKeyword: '', currentFilter: 'all' }, onLoad() { this.loadPersons() }, onShow() { // 每次显示页面时刷新数据 this.loadPersons() }, /** * 加载人员列表 */ loadPersons() { const persons = storage.getPersons() const anniversaries = storage.getAnniversaries() // 为每个人员添加纪念日信息 const personsWithAnniversaries = persons.map(person => { const personAnniversaries = anniversaries.filter(a => a.personId === person.id) // 找到最近的纪念日 let nextAnniversary = null if (personAnniversaries.length > 0) { const today = new Date() const upcoming = personAnniversaries .map(a => { // 如果是农历,需要特殊处理 const date = new Date(a.solarYear, a.solarMonth - 1, a.solarDay) return { ...a, date, daysUntil: dateUtils.getDaysUntil(date) } }) .filter(a => a.daysUntil >= 0) .sort((a, b) => a.daysUntil - b.daysUntil) if (upcoming.length > 0) { const next = upcoming[0] nextAnniversary = { type: next.type, dateText: dateUtils.formatDate(next.date, 'MM月DD日'), daysUntil: next.daysUntil, daysUntilText: this.formatDaysUntil(next.daysUntil) } } } return { ...person, anniversaryCount: personAnniversaries.length, nextAnniversary } }) // 按最近的纪念日排序 const sorted = personsWithAnniversaries.sort((a, b) => { if (!a.nextAnniversary && !b.nextAnniversary) return 0 if (!a.nextAnniversary) return 1 if (!b.nextAnniversary) return -1 return a.nextAnniversary.daysUntil - b.nextAnniversary.daysUntil }) this.setData({ persons: sorted, originalPersons: sorted }) }, /** * 格式化剩余天数 */ formatDaysUntil(days) { if (days === 0) return '今天' if (days === 1) return '明天' if (days < 7) return `${days}天后` if (days < 30) return `还有${Math.floor(days / 7)}周` return `还有${Math.floor(days / 30)}个月` }, /** * 搜索输入 */ onSearchInput(e) { const keyword = e.detail.value this.setData({ searchKeyword: keyword }) this.filterPersons() }, /** * 筛选切换 */ onFilterTap(e) { const filter = e.currentTarget.dataset.filter this.setData({ currentFilter: filter }) this.filterPersons() }, /** * 筛选人员 */ filterPersons() { const { originalPersons, searchKeyword, currentFilter } = this.data let filtered = [...originalPersons] // 关键词搜索 if (searchKeyword) { filtered = filtered.filter(p => p.name.includes(searchKeyword) || (p.nickname && p.nickname.includes(searchKeyword)) ) } // 类型筛选(暂时保留,后续可以实现更精确的筛选) // if (currentFilter !== 'all') { // // 可以实现更精确的筛选逻辑 // } this.setData({ persons: filtered }) }, /** * 点击人员 */ onPersonTap(e) { const id = e.currentTarget.dataset.id wx.navigateTo({ url: `/pages/person-detail/person-detail?id=${id}` }) }, /** * 点击添加按钮 */ onAddTap() { wx.showActionSheet({ itemList: ['添加人员', '添加纪念日'], success: (res) => { if (res.tapIndex === 0) { wx.navigateTo({ url: '/pages/add-person/add-person' }) } else if (res.tapIndex === 1) { wx.navigateTo({ url: '/pages/add-anniversary/add-anniversary' }) } } }) } })