一、两级分类解决什么问题羽毛球知识既有基础规则、技巧分析、装备详解等大模块也有发球、击球、步伐、防守等模块内子分类。若页面只维护一串展示文案课程详情、学习进度、收藏和测验很快会失去共同的业务标识。应用采用“模块 → 子分类 → 课程”三级结构。模块负责首页入口与主题子分类负责页面筛选课程对象承载详情内容。界面上的“已学”标签则来自进度状态不写进课程静态数据。二、课程对象保存可复用的业务字段课程模型同时服务列表、详情、搜索、进度和前后篇跳转因此字段使用稳定 id而不是依赖数组位置或标题。export interface Course { id: string moduleId: string subCategory: string subCategoryLabel: string title: string desc: string thumbKey: string durationSec: number order: number intro: Block[] keyPoints: Block[] mistakes: Block[] training: Block[] keywords: string[] } export function coursesByModule(moduleId: string): Course[] { return COURSES .filter(course course.moduleId moduleId) .sort((a, b) a.order - b.order) }moduleId建立大类关系subCategory用于页面筛选order决定模块内顺序keywords支持跨模块搜索。intro、keyPoints、mistakes、training采用块模型使详情页可以按文本、列表等不同块类型渲染。字段消费者不采用的替代方案id路由、收藏、进度不能用标题标题可能调整moduleId首页与分类页不能从文件名推断subCategory子分类筛选不能用中文标签作主键order列表与前后篇不能依赖录入顺序keywords搜索服务不能只搜索标题三、模块元数据与课程内容分开维护八个学习模块有自己的标题、图标、渐变色和启用状态。模块卡片不需要读取整份课程正文只读取轻量元数据。export interface LearnModule { id: string title: string subtitle: string iconKey: string enabled: boolean gradientStart: string gradientEnd: string } export function findModule(id: string): LearnModule | undefined { return MODULES.find(m m.id id) }这种分离让首页只关心模块导航课程详情只关心内容对象。模块暂时不可用时可通过enabled显示禁用态而不需要删除课程数据。四、筛选状态由页面直接观察分类页从路由读取moduleId并用两个State字段保存当前模块和子分类。点击标签只更新subCategoryId列表随状态重新计算。State moduleId: string skill_analysis State subCategoryId: string all State moduleTitle: string private filtered(): Course[] { const all: Course[] coursesByModule(this.moduleId) if (this.subCategoryId all) { return all } return all.filter(c c.subCategory this.subCategoryId) }筛选结果是静态课程数据的投影不需要另存一份可变列表。这样连续切换“发球 → 击球 → 全部”时不会累积旧结果也不会把筛选后的数组误写回课程源。筛选字段与组件刷新之间的关系遵循华为官方 State 状态管理说明页面改变可观察状态后只让直接依赖它的标签和列表重新渲染。五、CategoryTabs 的高亮必须绑定 selectedId子分类组件接收selectedId和回调文字颜色、字重与指示条都在build()中直接读取当前值。CategoryTabs({ items: subCategoriesForModule(this.moduleId) .mapTabItem((s: SubCategory) ({ id: s.id, label: s.label })), selectedId: this.subCategoryId, onSelect: (id: string) this.subCategoryId id })如果把标签行封装进捕获旧值的 Builder父页面虽然改变了筛选结果指示条却可能仍停在原标签。当前实现把每个标签放在组件主构建路径中使Prop selectedId的变化能直接驱动高亮刷新。六、ForEach 键同时考虑课程身份与已学状态课程列表还要显示“已学/未学”。页面使用课程 id 加完成状态生成键使进度变化时对应卡片能重新渲染。ForEach(this.filtered(), (course: Course) { ListItem() { CourseCard({ course, onTap: () router.pushUrl({ url: Routes.DETAIL, params: { courseId: course.id } }) }) } }, (course: Course) course.id _ (this.studied.indexOf(course.id) 0 ? done : todo) )单独使用数组下标会把位置当身份筛选后同一位置可能变成另一门课程只使用课程 id 又可能让旧的子树继续显示之前的完成标记。把业务身份和影响卡片展示的状态合并到键中刷新范围更明确。七、空结果和测验入口属于列表状态筛选结果为空时页面显示“该分类下还没有章节”并建议切换分类不会继续渲染空白卡片。模块存在题库时列表尾部再追加测验入口并显示历史最高分。场景页面结果恢复入口路由没有模块参数使用默认技巧分析正常展示模块 id 未找到标题降级为“学习模块”返回上页子分类无课程显示空状态切换其他分类课程 id 失效详情页拒绝渲染返回课程列表模块无题库不显示测验入口继续浏览课程八、运行界面的验证路径现有运行界面显示“技巧分析”模块、全部/发球/击球/步伐/防守五个标签以及课程卡片的已学状态。围绕这张界面可以完成以下验证1. 进入技巧分析默认“全部”高亮且课程按order排列。 2. 点击“发球”只保留短发球等发球课程。 3. 点击“步伐”课程集合变化且标签高亮同步。 4. 完成一门课程后返回卡片由“未学”刷新为“已学”。 5. 选中无内容分类时出现可理解的空状态不留下整页空白。数据验收还要覆盖模型质量。每个模块 id 必须能在模块元数据中找到每个课程的子分类必须属于对应模块order在模块内应保持可预测正确的缩略图键与详情内容不能缺失。若课程标题调整既有收藏和进度仍应通过 id 找到同一对象若某个课程被移除收藏、历史和进度页要忽略失效 id而不是渲染空卡片。对这类静态数据可在构建前增加一致性脚本集中报告重复 id、未知模块和未知子分类。九、模型稳定后页面才能持续扩展课程数量增加时页面不需要再添加新的条件分支录入课程对象、补齐子分类元数据即可进入现有筛选链路。稳定 id 也让收藏、进度、搜索和测验能够引用同一门课程而不是各自维护一套标题映射。当课程改为远端下发时这套模型仍可保留但需要在数据源外增加版本、缓存和失败回退。页面只接收已经归一化的Course[]远端失败可读取最近一次完整缓存缓存也为空才显示整体错误不能把半份响应直接合并进当前数组否则分类计数、前后篇顺序和进度分母会同时失真。
企业数字化 ERP 产品动态
相关推荐
基于深度学习的电子元器件分类数据集与应用实践 1. 项目背景与核心价值 电子元器件分类是工业自动化、智能仓储和PCB检测等领域的基础需求。传统人工分类方式效率低下且容易出错,而基于深度学习的视觉识别技术正在快速改变这一现状。这个数据集的核心价值在于解决了三个关键痛点: 高精度标注 &#x… · 2026/9/21 13:31:23
TI C67x DSP浮点运算性能优化:FastRTS库原理与工程实践 1. 项目概述在嵌入式数字信号处理(DSP)的世界里,性能就是一切。尤其是在处理音频流、雷达信号或者实时图像时,一个三角函数或者对数运算慢了那么几微秒,整个系统的实时性就可能崩塌。我接触过不少基于TI C6000系列DSP的… · 2026/11/7 16:08:05
OpCore-Simplify:15分钟完成OpenCore EFI配置的终极解决方案 OpCore-Simplify:15分钟完成OpenCore EFI配置的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify
在PC上安装macOS曾经是一项耗… · 2026/9/20 14:47:35
威海低压电工作业证复审保姆级教程:证书过期了不知道怎么复审延期? 威海低压电工作业证复审保姆级教程:证书过期了不知道怎么复审延期? 证书过期了不知道怎么复审延期?你不是一个人。很多人在工作过程中,因为忙于项目或管理,常常忽略证件的复审期限,等到要用的时候才发现证件已经失效,严重影响工作进度。今天这篇【威海… · 2026/11/7 16:07:44
工厂查电工证吗?电子证书全国通用吗?别让证书过期了 工厂查电工证吗?电子证书全国通用吗?别让证书过期了 证书过期了不知道怎么复审延期,你不是一个人。最近我帮一位洛阳涧西区的建筑工老李处理电工证过期问题,他一进工地就被拦下,说是查电工证。老李说:“我证还在手机里,咋查不到?”这事儿可真得说清楚… · 2026/11/7 16:07:44
延安特种工多少钱?含金量高不高?这些真相你必须知道 延安特种工多少钱?含金量高不高?这些真相你必须知道 你现在缺一个特种作业证,找工作处处碰壁,眼看着别人拿着证轻松上岗,而你只能干些杂活,甚至被拒之门外。延安特种工多少钱?含金量高不高?这些问题,直接影响你能不能拿到证、拿到好证,也关系到你未… · 2026/11/7 16:07:44
满城区电工证在哪里考千万别踩坑 满城区电工证在哪里考千万别踩坑 工地太忙根本没时间复习考试,满城区电工证在哪里考成了很多一线施工人员最头疼的问题。你不是不想考证,而是真没空去跑培训、刷题、排队。但偏偏电工证是进入工地从事电气作业的“门槛证”, 千万别踩坑… · 2026/11/7 16:07:44
林州那个学校办电工证内部消息:外省证怎么转?报名流程全解析 林州那个学校办电工证内部消息:外省证怎么转?报名流程全解析 之前考的证在外省能不能转过来?这是很多来林州找工作或者打算换行业的电工朋友问得最多的问题。其实,很多人的证书虽然不在本地,但 林州那个学校办电工证… · 2026/11/7 16:07:44
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23
澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄? 澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄? 证书过期了不知道怎么复审延期?别慌,很多人在拿到【澳洲水电工证考试】的电子证书后,一不小心就忽略了复审时间,结果证书失效,工作受阻,甚至被单位追责。今天就从【澳洲水电工证考试… · 2026/11/7 0:00:41
电工作业提示版通过率揭秘:怎么考才能一次过? 电工作业提示版通过率揭秘:怎么考才能一次过? 怕考不过白交培训费?别急,今天我就从驻马店应届工程类毕业生的视角,带你全面了解电工作业提示版的考试流程、备考要点和真实通过率,帮你少走弯路、提高一次通过率。… · 2026/11/7 0:00:41
电工证年审报名千万别踩坑 外省证转过来要搞清这几点 电工证年审报名千万别踩坑 外省证转过来要搞清这几点 之前考的证在外省能不能转过来?这个问题是很多电工从业者最关心的,特别是像你这样在商丘从事公路工程的人员,经常需要跨省流动,证书的 有效性 和 可迁移性… · 2026/11/7 0:00:41
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23