练学通答题小程序是面向教育培训行业学生的在线刷题与考试工具(微信小程序端),与机构管理后台配套使用,目标是让学生利用碎片化时间完成题库练习、模拟考试和学科竞赛,并通过积分激励和能力分析报告形成"练习—竞赛—激励—反馈"的学习闭环。小程序核心功能包括:首页功能导航、理论题库与实操题库(按科目、难度分级浏览与作答)、专项训练、每日一练、随机刷题、模拟考试与真题作答、赛事真题、错题本与错题分类训练、考试记录、收藏、公告、搜索、个人中心(积分、兑换码、能力分析、设置、用户协议与隐私政策)等,全部页面支持分享到微信好友和朋友圈。主要业务流程:① 竞赛流程——学生在"赛事真题"Tab 浏览赛事列表,进入赛事后按赛程(初赛/复赛/决赛)查看试卷,未解锁的试卷显示锁定状态,学生可通过管理员授权或输入兑换码解锁,随后在线限时作答并即时查看成绩与解析;② 积分兑换流程——学生在"我的积分"页查看积分余额和可兑换商品,使用积分兑换竞赛试卷解锁资格,兑换成功后获得兑换码(支持一键复制,也可在"我的兑换码"页集中查看),凭兑换码在锁定的赛事试卷处完成解锁;③ 能力分析流程——管理员在后台为学生生成并发布能力分析报告后,学生在"能力分析"页查看包含统计数据、能力雷达图、能力分析文字、柱状图和表格五大模块的个性化报告,各模块展示内容由后台开关控制。
项目基于 uni-app + Vue3(setup 语法)+ Vite 开发,编译产物为微信小程序;页面路由在 pages.json 中配置,底部导航采用自定义 CustomTabbar 组件;网络请求基于 uni.request 封装统一请求层,内置 token 鉴权、登录态校验和图片地址拼接工具;字典数据(题型、难度、赛程类型)通过字典接口统一下发,保证小程序端与管理后台的展示口径一致。我主要负责三个模块的端内实现:① 赛事竞赛模块(5 个页面,约 1900 行):实现赛事列表、赛程列表(初赛/复赛/决赛)、试卷详情、限时答题和成绩结果的完整参赛链路,试卷支持锁定态展示与多种解锁条件(管理员授权自动放行、兑换码手动解锁);② 积分兑换模块:实现积分余额展示、商品列表滚动分页加载、兑换前积分与重复兑换双重校验、兑换成功弹窗展示兑换码并支持剪贴板复制、"我的兑换码"管理页,打通了"积分页兑换—兑换码解锁试卷"的跨页面链路;③ 学生能力分析模块(约 800 行):实现报告展示页,包含统计表格、问候语模板变量({name})动态替换、能力雷达图与柱状图的 Canvas 原生自绘(网格、轴线、多角度标签自适应对齐、多图例、虚线样式)、表格模块渲染,并依据后台模块开关与发布状态实现"无报告/无查看权限/正常展示"三种状态的精确区分。开发中遇到的难点与解决方案:一是小程序 Canvas 绘图 API 与 H5 差异大,雷达图维度标签在不同方位容易溢出画布,通过按角度区间动态计算 textAlign/textBaseline 并预留边距解决;二是画布尺寸适配——小程序 rpx 与 canvas px 单位不一致,改为通过 getSystemInfoSync 获取真实窗口宽度扣除卡片内边距后动态计算画布尺寸;三是兑换解锁的状态同步——兑换成功后需即时更新试卷的 locked/canAccess 状态并放行跳转,采用本地状态先行更新加接口失败回滚的策略,避免二次请求造成的卡顿感。