const { checkAuth, listSessions } = require('../../utils/api'); const { SELECTED_SESSION_KEY } = require('../../utils/config'); function formatTime(value) { const timestamp = Number(value || 0); if (!timestamp) return ''; const date = new Date(timestamp < 10_000_000_000 ? timestamp * 1000 : timestamp); return `${date.getMonth() + 1}/${date.getDate()} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`; } Page({ data: { sessions: [], loading: false, error: '' }, onShow() { this.ensureAndLoad(); }, async ensureAndLoad() { try { const status = await checkAuth(); if (!status?.authenticated) { wx.redirectTo({ url: '/pages/login/index' }); return; } await this.loadSessions(); } catch { wx.redirectTo({ url: '/pages/login/index' }); } }, async loadSessions() { this.setData({ loading: true, error: '' }); try { const result = await listSessions({ limit: 30 }); const rows = result?.sessions || result?.data || result?.items || []; this.setData({ sessions: rows.map((item) => ({ ...item, id: item.id || item.sessionId, updatedAtText: formatTime(item.updatedAt || item.updated_at || item.created || item.createdAt) })) }); } catch (error) { this.setData({ error: error?.message || '会话加载失败' }); } finally { this.setData({ loading: false }); } }, openSession(event) { const id = event.currentTarget.dataset.id; if (!id) return; wx.setStorageSync(SELECTED_SESSION_KEY, id); wx.switchTab({ url: '/pages/chat/index' }); } });