index_analysis.md 4.2 KB

pages/tpl/style3/index.vue 交互流程与 API 分析

pages/tpl/style3/index.vue 是一个用于展示赛事卡片概览的页面。以下是其详细的交互流程和 API 调用分析。

1. 程序流程分析

  1. 页面初始化 (onLoad):

    • 参数解析: 页面加载时,会从 URL 参数中解析出 token (用户令牌)、id (卡片ID,即 ecId)、type (卡片类型,例如“锦标赛”) 和 btnText (按钮文本,例如“开始比赛”) 等信息。
    • 初始化 cardfunc: 调用 cardfunc.init() 方法,对卡片功能相关的模块进行初始化。
    • 配置获取: 通过 cardfunc.getCardConfig() 获取卡片页面所需的配置数据。这些配置可能包括页面的样式规则和通用设置。配置成功加载后,pageReady 状态会被设为 true,页面内容将显示给用户。
    • 数据获取:
      • 调用 getCardBaseQuery() 方法来获取卡片的基本信息。
      • 调用 matchRsDetailQuery() 方法获取赛事的详细数据,这部分数据主要用于检测更新和显示“小红点”通知。
  2. 页面逻辑处理:

    • 倒计时显示: getCardBaseQuery 成功返回数据后,页面会启动一个定时器 (setInterval)。这个定时器每分钟会调用 getCountdown() 方法来更新页面上显示的倒计时。当赛事结束时,isFinished 状态会被设为 true
    • 通知检查 (dealNotice): matchRsDetailQuery 返回的数据会被转换为 JSON 字符串,然后与存储在本地缓存 (uni.getStorage) 中的旧数据进行对比。如果数据有差异,意味着有新的更新,页面会设置 notice = true 来显示一个“小红点”通知图标。
    • 点击交互 (btnClick): 用户点击卡片主体时,会根据当前赛事的报名状态和结束状态执行不同的跳转逻辑:
      • 已报名: 直接跳转到排行榜页面 (/pages/tpl/style3/rankList)。
      • 未报名:
        • 赛事未结束: 根据 secondCardName 的配置,跳转到报名页 (/pages/tpl/style3/signup) 或排行榜页。
        • 赛事已结束: 跳转到排行榜页面。
      • 所有的页面跳转都通过 tools.appAction(url) 方法完成。
  3. 页面卸载 (onUnload):

    • 为了防止内存泄漏,当页面被卸载时,会调用 clear() 方法来清除之前设置的倒计时定时器。

2. 调用的 API

该页面通过 uni.request 发起以下后端 API 请求,这些 API 的定义通常在 common/api.js 中:

  1. apiCardBaseQuery:

    • 用途: 查询卡片的基本信息,例如名称、描述、开始和结束时间等。
    • 参数: ecId (卡片ID), pageName (当前页面名称,此处为 "index")。
    • 返回数据示例: 包含 ecName (卡片名称), ecDesc (卡片简介), beginSecond (开始时间戳), endSecond (结束时间戳), secondCardName (次级卡片名称,用于跳转逻辑)。
    • 后续动作: 获取数据后,页面会设置卡片名称、时间,并启动倒计时逻辑。
  2. apiUserJoinCardQuery:

    • 用途: 查询当前用户是否已经报名了该赛事。
    • 参数: ecId (卡片ID)。
    • 返回数据示例: 包含 isJoin (布尔值,表示用户是否已报名)。
    • 后续动作: 根据 isJoin 的值,页面会更新按钮文本或决定 btnClick 后的跳转行为。
  3. apiMatchRsDetailQuery:

    • 用途: 查询卡片关联的线上赛的详细活动数据(如榜单数据)。
    • 参数: ecId (卡片ID)。
    • 在此页面中的作用: 页面会将此 API 返回的数据转换为 JSON 字符串,然后与本地存储中的旧数据进行对比 (dealNotice 方法)。如果数据有更新,则会在页面上显示一个通知图标(“小红点”)。

3. 本地存储 (uni.getStorage, uni.setStorage)

  • rank-tpl-style3-{ecId}: 用于存储 apiMatchRsDetailQuery 返回的数据的 JSON 字符串。这个值用于在用户返回页面时,与最新的数据进行比较,以判断是否有新的榜单信息需要提醒用户。