| | |
| | | |
| | | onShow() { |
| | | console.log('首页显示') |
| | | // 统一系统导航栏标题 |
| | | try { wx.setNavigationBarTitle({ title: '蓉易创' }) } catch (e) {} |
| | | // 检查登录状态 |
| | | if (!app.globalData.token) { |
| | | app.login() |
| | |
| | | }, |
| | | |
| | | // 加载赛事列表 |
| | | loadActivities() { |
| | | loadActivities(isLoadMore = false) { |
| | | this.setData({ loading: true }) |
| | | |
| | | const { currentPage, pageSize, searchKeyword, filterStatus } = this.data |
| | |
| | | // 名称搜索条件 |
| | | const nameFilter = searchKeyword || "" |
| | | |
| | | // 状态筛选条件:将前端的筛选状态转换为后端的state参数 |
| | | let stateFilter = null |
| | | if (filterStatus !== 'all') { |
| | | // 根据filterStatus映射到对应的state值 |
| | | const stateMapping = { |
| | | 'upcoming': 1, // 即将开始 |
| | | 'ongoing': 2, // 进行中 |
| | | 'ended': 3 // 已结束 |
| | | } |
| | | stateFilter = stateMapping[filterStatus] |
| | | } |
| | | |
| | | return app.graphqlRequest(` |
| | | query getActivities($page: Int!, $size: Int!, $name: String) { |
| | | activities(page: $page, size: $size, name: $name) { |
| | | query getActivities($page: Int!, $size: Int!, $name: String, $state: Int) { |
| | | activities(page: $page, size: $size, name: $name, state: $state) { |
| | | content { |
| | | id |
| | | name |
| | |
| | | `, { |
| | | page: currentPage, |
| | | size: pageSize, |
| | | name: nameFilter |
| | | name: nameFilter, |
| | | state: stateFilter |
| | | }).then(data => { |
| | | if (data.activities) { |
| | | let newActivities = data.activities.content |
| | | // 调试:输出报名截止原始值 |
| | | try { |
| | | console.log('活动原始报名截止:', newActivities.map(a => ({ id: a.id, name: a.name, signupDeadline: a.signupDeadline }))) |
| | | } catch (e) {} |
| | | |
| | | // 为每个活动添加名称文字 |
| | | newActivities = newActivities.map(activity => ({ |
| | | ...activity, |
| | | nameText: (activity.name || '活动').substring(0, 2) |
| | | })) |
| | | // newActivities = newActivities.map(activity => ({ |
| | | // ...activity, |
| | | // nameText: (activity.name || '活动').substring(0, 2) |
| | | // })) |
| | | |
| | | // 根据筛选状态过滤活动 |
| | | if (filterStatus !== 'all') { |
| | | newActivities = newActivities.filter(activity => activity.state === filterStatus) |
| | | } |
| | | |
| | | // 合并数据 |
| | | const mergedActivities = currentPage === 1 |
| | | ? newActivities |
| | | : [...this.data.activities, ...newActivities] |
| | | // 合并数据:只有在真正的加载更多时才追加,其他情况都是全量替换 |
| | | const mergedActivities = isLoadMore && this.data.activities.length > 0 |
| | | ? [...this.data.activities, ...newActivities] |
| | | : newActivities |
| | | |
| | | this.setData({ |
| | | activities: mergedActivities, |
| | |
| | | this.setData({ |
| | | currentPage: this.data.currentPage + 1 |
| | | }) |
| | | this.loadActivities() |
| | | this.loadActivities(true) // 传入true表示这是加载更多 |
| | | }, |
| | | |
| | | // 轮播图切换 |
| | |
| | | utils.navigateTo('/pages/activity/detail', { id: activityId }) |
| | | }, |
| | | |
| | | // 点击赛事卡片 |
| | | onActivityTap(e) { |
| | | const index = e.currentTarget.dataset.index |
| | | const activity = this.data.activities[index] |
| | | if (activity) { |
| | | this.goToActivityDetail(activity.id) |
| | | } |
| | | }, |
| | | |
| | | // 格式化日期 |
| | | formatDate(date) { |
| | | return utils.formatDate(date, 'MM-DD HH:mm') |
| | | }, |
| | | |
| | | // 设计稿需要的 YYYY-MM-DD(强兼容:直接截取前10位,避免 JSCore 日期解析差异) |
| | | formatDateYYYYMMDD(date) { |
| | | if (!date && date !== 0) return '—' |
| | | // 字符串:优先匹配 YYYY-MM-DD 直接返回,避免解析 |
| | | if (typeof date === 'string') { |
| | | const m = date.match(/^(\d{4}-\d{2}-\d{2})/) |
| | | if (m) return m[1] |
| | | } |
| | | // 数值:时间戳(秒/毫秒)兜底 |
| | | if (typeof date === 'number') { |
| | | const ts = date > 1e12 ? date : date * 1000 |
| | | const d = new Date(ts) |
| | | if (!isNaN(d.getTime())) { |
| | | const y = d.getFullYear() |
| | | const m = String(d.getMonth() + 1).padStart(2, '0') |
| | | const day = String(d.getDate()).padStart(2, '0') |
| | | return `${y}-${m}-${day}` |
| | | } |
| | | } |
| | | // 其他情况走工具函数兜底 |
| | | const v = utils.formatDate(date, 'YYYY-MM-DD') |
| | | return v && typeof v === 'string' && v.trim() ? v : '—' |
| | | }, |
| | | onTest(e){ |
| | | const activityId = e.currentTarget.dataset.id |
| | | const xid = e.currentTarget.dataset.xid; |
| | | const idx = e.currentTarget.dataset.idx; |
| | | |
| | | // 简化的调试信息 |
| | | console.log('点击活动详情 - ID:', activityId, '名称:', xid, '索引:', idx) |
| | | |
| | | if (activityId) { |
| | | this.goToActivityDetail(activityId) |
| | | } |
| | | }, |
| | | // 点击"详情"按钮(与卡片点击一致) |
| | | onActivityDetailTap(e) { |
| | | const activityId = e.currentTarget.dataset.id |
| | | const xid = e.currentTarget.dataset.xid; |
| | | const idx = e.currentTarget.dataset.idx; |
| | | |
| | | // 简化的调试信息 |
| | | console.log('点击活动详情 - ID:', activityId, '名称:', xid, '索引:', idx) |
| | | |
| | | if (activityId) { |
| | | this.goToActivityDetail(activityId) |
| | | } |
| | | }, |
| | | |
| | | // 获取状态文本 |
| | | getStatusText(state) { |
| | | const statusMap = { |