import { View, Text } from '@tarojs/components' import { useDidShow } from '@tarojs/taro' import { FC, useState } from 'react' import { Network } from '@/network' import './index.css' interface SignInRecord { id: number user_id: string sign_date: string created_at: string } /** * 签到记录页面 */ const RecordPage: FC = () => { const [records, setRecords] = useState([]) const [loading, setLoading] = useState(true) // 页面显示时获取签到记录 useDidShow(async () => { await fetchRecords() }) // 获取签到记录 const fetchRecords = async () => { try { setLoading(true) const res = await Network.request({ url: '/api/signin/history', method: 'GET' }) console.log('签到记录:', res.data) if (res.data?.code === 200 && res.data?.data) { setRecords(res.data.data) } } catch (error) { console.error('获取签到记录失败:', error) } finally { setLoading(false) } } // 格式化日期显示 const formatDate = (dateStr: string) => { const date = new Date(dateStr) const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'] const weekDay = weekDays[date.getDay()] return `${year}年${month}月${day}日 ${weekDay}` } // 获取当前月份的天数 const getCurrentMonthDays = () => { const now = new Date() const year = now.getFullYear() const month = now.getMonth() const firstDay = new Date(year, month, 1) const lastDay = new Date(year, month + 1, 0) const days: { date: Date; isSigned: boolean }[] = [] // 填充前面的空白 for (let i = 0; i < firstDay.getDay(); i++) { days.push({ date: null as any, isSigned: false }) } // 填充日期 for (let i = 1; i <= lastDay.getDate(); i++) { const date = new Date(year, month, i) const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(i).padStart(2, '0')}` const isSigned = records.some(r => r.sign_date === dateStr) days.push({ date, isSigned }) } return days } const monthDays = getCurrentMonthDays() const now = new Date() const monthNames = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] return ( {/* 月份标题 */} {monthNames[now.getMonth()]} {now.getFullYear()} {/* 日历视图 */} {/* 星期标题 */} {['日', '一', '二', '三', '四', '五', '六'].map((day, index) => ( {day} ))} {/* 日期网格 */} {monthDays.map((item, index) => ( {item.date ? ( {item.date.getDate()} ) : ( )} ))} {/* 签到记录列表 */} 签到记录 {loading ? ( 加载中... ) : records.length === 0 ? ( 暂无签到记录 开始你的第一次签到吧 ) : ( {records.map((record) => ( {formatDate(record.sign_date)} 已签到 ))} )} ) } export default RecordPage