当前位置: 首页 > article >正文

第 26 课:任务表格列配置与持久化

第 26 课任务表格列配置与持久化这一课我们正式回到任务管理主线并补上一个真正中后台系统里非常常见的能力允许用户自己决定表格显示哪些列并把这份偏好保存下来。这类需求在真实项目里非常常见。因为同一张任务表不同角色最关心的字段往往不一样有人更关心负责人有人更关心截止日期有人更关心状态和优先级所以“表格列配置”并不是花活而是非常典型的后台产品能力。这一课一句话在做什么这一课我们完成了 5 件事给任务页加了“显示列”配置入口允许用户切换任务表显示哪些业务字段把列偏好保存到localStorage刷新页面后自动恢复这份偏好为这套能力补了单元测试和 E2E这节课新增了什么1. 新增列配置组件文件src/components/tasks/TaskColumnSettings.vue这一课新增了一个独立组件TaskColumnSettings它专门负责展示“显示列”按钮展示列配置弹层渲染每个列的开关告诉用户哪些列是固定显示列这一步很重要。因为如果你把这部分 UI 直接塞进TasksView.vue页面会越来越臃肿。2. 扩展任务页组合式函数文件src/composables/useTasksPage.ts这一课把列偏好逻辑集中放进了任务页 composable。里面新增了这些能力taskColumnOptionsvisibleTaskColumnKeysvisibleTaskColumnCounthandleTaskColumnVisibilityChange同时还新增了本地存储相关逻辑读取旧偏好标准化列 key写回最新偏好3. 扩展任务表格组件文件src/components/tasks/TaskTable.vue现在任务表不再默认无脑渲染全部列。它会根据传入的visibleColumnKeys来决定当前实际渲染哪些列。也就是说列配置不只是 UI 勾选了而已而是真正影响到了表格结构。这节课为什么把列配置状态放进useTasksPage因为“显示哪些列”本质上属于任务页自己的页面级偏好状态它不是单个表格组件内部的临时局部状态更不是全站共享状态所以它最适合放在useTasksPage这能让这套状态和任务页的筛选排序分页批量操作保持在同一层统一管理。这节课里定义了哪些列文件src/composables/useTasksPage.tssrc/types/task.ts当前可配置的任务表格列包括titleassigneedueDatestatusprioritydescription同时我们给这些列定义了稳定的类型TaskVisibleColumnKey以及列配置项结构TaskColumnOptionItem这一步的意义是不要把列配置写成一堆随手拼的字符串而是让它成为有类型约束的稳定配置。为什么“任务标题”被设计成固定显示列这一课里我们特意把任务标题设计成固定显示列。也就是说它会出现在列配置面板里但用户不能把它真的关掉为什么这样做因为任务标题是这张表的主标识。如果连标题都能隐藏表格很容易变成一堆状态一堆日期一堆按钮但用户已经很难知道“这一行到底是哪条任务”。所以这节课顺便练了一个很真实的产品设计点允许自定义不等于所有东西都无限制开放。这节课里的本地持久化是怎么做的文件src/composables/useTasksPage.ts这一课新增了一个本地存储 keytaskflow.tasks.visible-columns完整常量名是TASK_TABLE_VISIBLE_COLUMNS_STORAGE_KEY当前做法是页面初始化时先读localStorage把读到的数据做一次合法性清理如果数据非法就回退到默认列配置用户每次切换列显示状态时立刻写回本地存储这样一来刷新页面后任务表仍然保持上一次的列显示偏好为什么要做“标准化列 key”这一课里有一个很重要的底层函数normalizeVisibleTaskColumnKeys它负责做 3 件事过滤非法列 key自动补回固定显示列按预定义顺序输出最终列列表这个函数看起来只是“小工具”但其实非常关键。因为只要你一做本地持久化就必须考虑用户本地存储里可能是旧数据数据可能被手动改坏可能出现重复 key可能顺序被打乱所以真实项目里读取持久化配置后通常都要先做一次标准化。TaskColumnSettings.vue在负责什么这个组件不是在负责真正存储状态。它只负责两件事把列配置 UI 渲染出来把用户操作通过事件抛给父层也就是说它仍然是视图组件而不是状态管理组件这正是我们一直在练的分层思路组件负责展示和事件composable 负责状态和行为TaskTable.vue这次发生了什么变化原来任务表的列是直接写死的标题负责人截止日期状态优先级说明现在这些列都变成了根据visibleColumnKeys决定是否渲染例如v-ifisColumnVisible(assignee)这种变化非常关键因为它说明列配置不是“看起来有按钮”而是真正进入了表格渲染逻辑。这节课补了哪些测试1. 单元测试文件src/composables/__tests__/useTasksPage.spec.ts这次新增了两类列配置测试从localStorage恢复列偏好切换列后持久化到localStorage同时还验证了固定显示列不会被真的关掉这类测试特别适合放在单元测试层。因为它关注的是逻辑对不对而不是页面点不点得动2. E2E 测试文件e2e/app.spec.ts这次新增了任务页列配置用例验证关闭“负责人”列关闭“任务说明”列刷新页面这两个列仍然保持隐藏“任务标题”列仍然保留这条测试覆盖的是真实交互本地持久化刷新恢复所以它非常适合作为端到端验证。为什么这一课还要改TasksPageObject文件e2e/pages/TasksPage.ts因为任务页多了一套新交互打开列配置面板切换某一列断言某个表头显示/隐藏刷新页面再继续断言如果这些操作直接写在测试文件里会出现大量零散定位器。所以这次页面对象新增了openColumnSettings()setColumnVisible()expectColumnHeaderVisible()expectColumnHeaderHidden()reload()这正好再次说明Page Object 应该跟着页面能力一起成长。这节课最值得你真正学会什么如果你只记住“任务页多了个显示列按钮”那还不够。你更应该学会下面这 6 点表格列配置是非常真实的后台系统能力用户偏好状态通常适合做本地持久化读取本地持久化配置后要先做标准化清理组件层只负责渲染列配置 UI不负责真正存储状态表格列显隐最终必须真实进入渲染逻辑本地偏好这种能力也应该同时补单元测试和 E2E这节课改了哪些文件src/types/task.tssrc/components/tasks/TaskColumnSettings.vuesrc/components/tasks/TaskTable.vuesrc/composables/useTasksPage.tssrc/composables/__tests__/useTasksPage.spec.tssrc/views/TasksView.vuee2e/pages/TasksPage.tse2e/app.spec.tsdocs/26-task-table-column-visibility-and-persistence.mddocs/README.md这一课的验证结果这一课相关改动已经通过npm run test:unit -- --runnpm run test:e2e -- --projectchromiumnpm run type-checknpm run lint

相关文章:

第 26 课:任务表格列配置与持久化

第 26 课:任务表格列配置与持久化 这一课,我们正式回到任务管理主线,并补上一个真正中后台系统里非常常见的能力: 允许用户自己决定表格显示哪些列,并把这份偏好保存下来。 这类需求在真实项目里非常常见。 因为同一张…...

Fornjot实验性特性探索:最新算法与前沿技术解读

Fornjot实验性特性探索:最新算法与前沿技术解读 【免费下载链接】fornjot Early-stage b-rep CAD kernel, written in the Rust programming language. 项目地址: https://gitcode.com/gh_mirrors/fo/fornjot Fornjot是一个采用Rust编程语言开发的早期阶段边…...

终极Fiji科学图像处理完整指南:从零开始掌握开源图像分析平台

终极Fiji科学图像处理完整指南:从零开始掌握开源图像分析平台 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji作为ImageJ的"电池全包"增强发行…...

如何使用DoctrineExtensions的Uploadable扩展:文件上传和管理的完整实现指南

如何使用DoctrineExtensions的Uploadable扩展:文件上传和管理的完整实现指南 【免费下载链接】DoctrineExtensions Doctrine2 behavioral extensions, Translatable, Sluggable, Tree-NestedSet, Timestampable, Loggable, Sortable 项目地址: https://gitcode.co…...

validator国际化方案:构建多语言错误消息系统

validator国际化方案:构建多语言错误消息系统 【免费下载链接】validator Simple validation for Rust structs 项目地址: https://gitcode.com/gh_mirrors/vali/validator 在全球化应用开发中,为用户提供本地化的错误提示是提升用户体验的关键环…...

MicMute:如何通过一键操作解决Windows麦克风静音难题

MicMute:如何通过一键操作解决Windows麦克风静音难题 【免费下载链接】MicMute Mute default mic clicking tray icon or shortcut 项目地址: https://gitcode.com/gh_mirrors/mi/MicMute MicMute是一款专为Windows系统设计的轻量级麦克风静音管理工具&#…...

Evaluate 高级功能:分布式评估与性能优化指南

Evaluate 高级功能:分布式评估与性能优化指南 【免费下载链接】evaluate 🤗 Evaluate: A library for easily evaluating machine learning models and datasets. 项目地址: https://gitcode.com/gh_mirrors/ev/evaluate 🤗 Evaluate …...

JavaScript中判断两个对象深层相等的递归算法

JavaScript深层相等需递归比较:先判同一引用、null/undefined、类型差异;基础类型用;对象/数组校验属性/长度一致后递归;用WeakMap防循环引用;Date、RegExp、Map、Set等特殊对象按语义单独处理。JavaScript中判断两个对…...

Path of Building:流放之路Build规划器的三大创新突破

Path of Building:流放之路Build规划器的三大创新突破 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 在《流放之路》这款以复杂数值系统著称的动作RPG中&…...

easyXDM测试与调试:构建可靠跨域应用的完整测试策略

easyXDM测试与调试:构建可靠跨域应用的完整测试策略 【免费下载链接】easyXDM A javascript library providing cross-browser, cross-site messaging/method invocation. 项目地址: https://gitcode.com/gh_mirrors/ea/easyXDM easyXDM是一款强大的JavaScri…...

1000_Projects安全工具开发:从端口扫描器到密码破解器完整指南

1000_Projects安全工具开发:从端口扫描器到密码破解器完整指南 【免费下载链接】1000_Projects :sunglasses: Mega List of practical projects that one can solve in any programming language! 项目地址: https://gitcode.com/gh_mirrors/10/1000_Projects …...

LLaVA-v1.6-7b应用场景:跨境电商A+页面图文一致性自动审核

LLaVA-v1.6-7b应用场景:跨境电商A页面图文一致性自动审核 1. 项目背景与需求 跨境电商卖家每天都要面对一个头疼的问题:A页面的图文一致性审核。一个商品页面通常包含主图、细节图、功能说明图等10-20张图片,每张图片都需要与文字描述完全匹…...

GitHub汉化插件终极指南:3分钟实现GitHub界面全中文化

GitHub汉化插件终极指南:3分钟实现GitHub界面全中文化 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese GitHub汉化插件是一…...

《QGIS快速入门与应用基础》285:需求:加载 Landsat 8 遥感影像,制作真彩色/假彩色图

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

be-a-hacker工具开发实践:从需求分析到代码实现的全流程

be-a-hacker工具开发实践:从需求分析到代码实现的全流程 【免费下载链接】be-a-hacker roadmap for a self-taught hacker 项目地址: https://gitcode.com/gh_mirrors/be/be-a-hacker GitHub加速计划(be-a-hacker)是一个面向自学黑客的…...

Testcontainers-node 性能优化技巧:10个提升测试速度的最佳实践

Testcontainers-node 性能优化技巧:10个提升测试速度的最佳实践 【免费下载链接】testcontainers-node Testcontainers is a NodeJS library that supports tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or any…...

fake2db多数据库支持:一次配置生成MySQL、PostgreSQL、MongoDB测试数据

fake2db多数据库支持:一次配置生成MySQL、PostgreSQL、MongoDB测试数据 【免费下载链接】fake2db create custom test databases that are populated with fake data 项目地址: https://gitcode.com/gh_mirrors/fa/fake2db 在软件开发过程中,测试…...

gh_mirrors/prompts29/prompts高级技巧:10个方法优化你的AI引导词策略

gh_mirrors/prompts29/prompts高级技巧:10个方法优化你的AI引导词策略 【免费下载链接】Pensieve tore your decisions and principles. Claude reads them to make better choices. 项目地址: https://gitcode.com/gh_mirrors/prompts29/Pensieve Pensieve&…...

mysql如何配置隔离级别_mysql transaction_isolation设置

应覆盖 .modal-backdrop 类的 background-color,推荐用高优先级选择器如 .modal-backdrop.show 或主题 class 层叠,保持 alpha 值一致,避免 !important 干扰交互逻辑。修改 modal-backdrop 的 CSS 类样式bootstrap 的模态框遮罩层是独立的 do…...

fake2db社区贡献指南:如何为开源项目添加新的数据库支持

fake2db社区贡献指南:如何为开源项目添加新的数据库支持 【免费下载链接】fake2db create custom test databases that are populated with fake data 项目地址: https://gitcode.com/gh_mirrors/fa/fake2db fake2db是一个强大的开源工具,能够帮助…...

如何用解构赋值快速提取数组前几个元素到独立变量

数组解构可安全提取前若干元素,长度不足时对应变量为undefined;支持跳过元素、设置默认值、获取剩余元素(...rest须在末尾);嵌套解构需严格匹配结构,函数参数解构需防null/undefined报错。用 const [a, b, …...

告别Ramp-Up不准!用Parallel Controller插件在JMeter里精准实现HTTP请求并发

告别Ramp-Up不准!用Parallel Controller插件在JMeter里精准实现HTTP请求并发 在性能测试领域,JMeter作为开源工具被广泛使用,但许多中高级测试工程师都遇到过这样的困扰:当需要模拟电商秒杀、API高并发等场景时,单纯依…...

迅雷链接在线解密解析工具系统源码_本地化API_开源

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 迅雷链接在线解密解析工具系统源码/本地化API/开源 本地化API后无需担心API失效的烦恼,还可以改成加密链接等,自行探索 二、效果展示 1.部分代码 代码如下(示例&am…...

BUUCTF:[安洵杯 2019]easy_serialize_php 反序列化字符串逃逸漏洞深度解析

1. 漏洞背景与场景还原 这道来自BUUCTF安洵杯2019的题目,典型地展示了PHP反序列化漏洞中一个精妙的攻击手法——字符串逃逸。题目环境模拟了一个简单的图片查看功能,用户可以通过show_image功能查看指定图片。表面上看,系统对用户输入进行了严…...

SMAPI错误拦截与自动修复:如何确保星露谷物语游戏稳定性的完整指南

SMAPI错误拦截与自动修复:如何确保星露谷物语游戏稳定性的完整指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI SMAPI(Stardew Valley Modding API)作为星露谷…...

AMGTA就增材制造在资源高效型制造体系中的作用发布独立报告

电子、信息和通信领域获奖者:Cynthia Dwork博士 生命科学领域获奖者:Akira Shizuo博士和Zhijian “James” Chen博士 日本奖基金会(会长:Ryozo Nagai)于4月14日(周二)在东京涩谷区的东京新国立剧…...

QuickRecorder终极指南:5分钟掌握macOS专业录屏技巧

QuickRecorder终极指南:5分钟掌握macOS专业录屏技巧 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode.com/GitHub_Trend…...

Python百度搜索API开源项目:无限制免费搜索引擎集成的终极解决方案

Python百度搜索API开源项目:无限制免费搜索引擎集成的终极解决方案 【免费下载链接】python-baidusearch 自己手写的百度搜索接口的封装,pip安装,支持命令行执行。Baidu Search unofficial API for Python with no external dependencies 项…...

多核系统缓存一致性与并行编程优化实践

1. 多核系统架构与缓存一致性挑战现代多核处理器通常采用共享内存架构,每个核心拥有独立的L1缓存,而L2缓存可能是独立或共享的设计。以Intel Core i7为例,其典型架构包含:每个物理核心独享32KB L1指令缓存和32KB L1数据缓存256KB私…...

NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的5个技巧

NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的5个技巧 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的NVIDIA显卡配置工具,能够深…...