https://linux.do/t/topic/657951/15

智学闪卡”功能需求 V4 (完整详尽版) “智学闪卡”应用重构需求文档 V4 (完整详尽版)

项目目标:

从零开始构建一个全新的“智学闪卡”应用程序。该应用需具备完善的核心功能(创建、学习、复习、统计、分类、收藏、导入/导出等),确保数据存储在本地且持久化,所有界面数据(特别是分类)保持实时准确和一致,提供稳定流畅的用户体验。应用整体需采用现代、简约、专业的设计风格,主色调为黑、白、灰。

核心原则:

全新构建: 此文档描述的是一个全新的应用,不基于任何现有代码的修改。所有功能和特性都将从头开始实现。 数据本地化与持久化: 所有用户数据,包括但不限于闪卡内容(正面、反面、详情)、分类信息、学习进度记录、统计数据、用户收藏状态及收藏时间、以及所有用户自定义设置,都必须安全地存储在用户本地计算机的特定、可由用户知晓(并在必要时访问)的位置。推荐使用嵌入式数据库(如SQLite)以保证数据结构的完整性和查询效率。数据存储必须独立于浏览器缓存,确保用户更换浏览器或清除浏览器数据后,应用数据不受影响。 数据准确性与一致性: 应用中任何显示数据的地方,例如首页的统计数字(总卡片数、分类数等)、学习界面中的分类选择列表、创建卡片时的分类下拉框、分类管理界面的列表、收藏夹中的卡片信息以及统计图表等,都必须实时、准确地反映数据库中的当前状态。特别是分类信息,在应用的任何界面(首页、学习选择、创建卡片、分类管理、收藏过滤等)都必须是完全一致且最新的。 任何对数据的增、删、改操作都应立即同步到所有相关视图。 渲染一致性: 在所有非编辑状态下展示卡片内容(正面、反面、详情)的界面(包括但不限于学习/复习时的卡片展示、创建卡片时的实时预览区、卡片列表项中的摘要显示、收藏列表中的卡片预览、以及任何形式的卡片详情弹窗或页面),Markdown语法和LaTeX数学公式(包括行内 ... 和块级… )必须被正确且一致地渲染成最终的富文本格式,用户不应看到原始的Markdown或LaTeX源码。只有在用户明确处于编辑卡片内容的状态时(如在创建或修改卡片的输入框中),才显示和允许编辑源码。 用户体验优先: 界面设计和交互流程应以用户为中心,力求逻辑清晰、操作流畅、反馈明确。需要特别注意处理列表内容过多时的性能和可用性(如分页、虚拟滚动)、弹窗的定位应符合用户预期(如屏幕居中)、避免不必要的页面跳转或刷新,提供清晰的错误提示和引导。 配置中心化: 所有可由用户自定义的应用参数(例如学习相关的设置如每日学习量、复习算法参数调整;统计视图的默认偏好如图表时间范围;数据管理选项如备份恢复路径;以及可能的界面外观主题选择等)都应统一集中到应用程序的“设置”界面进行管理。避免将配置选项散落在各个功能页面,以保持其他界面的简洁和专注。 设计风格: 整体应用需采用现代、简约、专业的视觉设计风格。 色调: 以黑色、白色、灰色系作为主导色调,营造一种干净、沉稳、低调且具有科技感和高端感的视觉氛围。避免使用过多鲜艳或饱和度高的色彩,以保证长时间使用的舒适性。 强调色: 可审慎选用一种或两种饱和度较低、不刺眼的颜色(例如深蓝色、暗紫色、或一种中性的科技蓝/绿,甚至可以考虑让用户在设置中从预设的几种颜色中选择)作为强调色。强调色应用于关键操作按钮(如“创建”、“开始学习”)、选中状态指示、重要提示信息、图表中的关键数据系列等,目的是引导用户注意力和区分信息层级,使用上需克制且有明确目的。 布局: 采用简洁、规范的布局原则,如网格系统,确保元素对齐,信息组织有序。注重留白(Negative Space)的运用,使界面看起来不拥挤,内容更易于阅读和区分。 组件: UI元素如按钮、输入框、卡片容器、图标等,其设计风格应统一为扁平化(Flat Design)或轻拟物风格(Light Skeuomorphism),强调清晰的轮廓和功能性。避免使用过多的装饰性元素、复杂的阴影效果和不必要的渐变填充。 字体: 选择一套或两套高质量、清晰易读的现代无衬线字体(例如开源的思源黑体/Noto Sans,或系统默认的苹方/PingFang SC、微软雅黑/Microsoft YaHei,或如Inter等专为UI设计的字体)。通过字号大小、字重(粗细)、颜色深浅以及行间距等排版手段来区分信息层级和提高可读性。 详细功能需求:

数据存储 技术选型: 强烈推荐使用 SQLite 数据库。数据库文件应存储在用户本地文件系统的一个专用、可配置(或有明确默认路径,如用户文档目录下的 智学闪卡数据/data.db)的文件夹内。应用启动时应检查数据库文件是否存在,并建立连接。

数据模型(表结构示例,可根据实际SRS算法等需求调整):

Cards 表: id (主键, INTEGER, AUTOINCREMENT), front_content (TEXT, 存储正面Markdown/LaTeX源码), back_content (TEXT, 存储反面源码), details_content (TEXT, 可选, 存储详情源码), category_id (INTEGER, 外键关联Categories表), created_at (TIMESTAMP, 创建时间), updated_at (TIMESTAMP, 最后修改时间), is_collected (BOOLEAN, 是否收藏, 默认FALSE), collected_at (TIMESTAMP, 收藏时间, 收藏时记录), last_reviewed_at (TIMESTAMP, 上次复习时间), next_review_date (DATE, 下次应复习日期), ease_factor (REAL, 易度因子, SRS算法用), interval_days (INTEGER, 当前复习间隔天数, SRS算法用), lapses (INTEGER, 遗忘次数, SRS算法用), status (INTEGER, 卡片状态:0-新卡, 1-学习中, 2-已掌握等, SRS算法用)。

Categories 表: id (主键, INTEGER, AUTOINCREMENT), name (TEXT, UNIQUE, 分类名称), created_at (TIMESTAMP, 创建时间). (可以考虑增加一个 card_count 字段,通过触发器或应用逻辑维护,用于快速获取分类下的卡片数)。

Study_Logs 表: id (主键, INTEGER, AUTOINCREMENT), card_id (INTEGER, 外键关联Cards表), review_time (TIMESTAMP, 本次复习的具体时间), user_rating (INTEGER, 用户对卡片掌握程度的评价, 如 0-重来, 1-困难, 2-良好, 3-简单), previous_interval_days (INTEGER, 复习前的间隔), new_interval_days (INTEGER, 复习后的新间隔).

Tags 表 (可选增强功能): id (主键, INTEGER, AUTOINCREMENT), name (TEXT, UNIQUE, 标签名称).

Card_Tags 关联表 (可选增强功能, 多对多): card_id (INTEGER, 外键), tag_id (INTEGER, 外键), PRIMARY KEY (card_id, tag_id).

独立性: 数据存储必须完全独立于任何特定的浏览器。用户在同一台计算机上使用不同的浏览器访问应用(如果是通过Web技术本地部署)或直接运行应用(如果是桌面应用程序),都应访问并操作同一份数据。

备份与恢复: 在“设置”界面中,提供明确的“备份数据”和“恢复数据”功能。备份功能应允许用户将当前的SQLite数据库文件(或其压缩包)导出到用户指定的位置。恢复功能应允许用户选择一个之前备份的数据库文件来替换当前数据,操作前必须有清晰的警告提示,告知用户此操作将覆盖现有所有数据且不可逆。

通用 UI/UX & 风格 全局导航栏: 应用顶部应有一个固定的全局导航栏。左侧可以放置应用的Logo或名称(点击可返回首页)。右侧或中间部分依次排列主要的功模块入口链接/图标,例如:“首页”、“创建”、“学习”、“收藏”、“统计”、“分类管理”、“CSV导入”、“AI工具箱”(如果保留此功能)。导航栏最右侧应放置“设置”图标(如齿轮图标)以及可能的其他全局操作(如同步状态指示器 - 如果未来有云同步功能,或用户菜单)。导航栏的整体设计(颜色、高度、元素间距等)需严格符合应用整体的黑白灰简约风格。 操作反馈: 用户执行重要操作(如保存卡片、删除分类、开始学习会话等)后,应立即获得简短、清晰且非侵入式的视觉反馈。例如,使用屏幕底部或角落短暂出现的Toast提示(如“卡片已保存”、“分类已删除”),或者按钮状态的临时改变(如“保存中…”变为“已保存”)。 加载状态指示: 当应用需要从数据库加载数据或执行耗时操作时(例如,打开一个包含大量卡片的列表,或生成复杂的统计图表),必须向用户显示明确的加载状态指示。可以使用全局的加载指示器、特定区域的骨架屏(Skeleton Screens)、或美观的加载动画(如旋转图标),以避免用户感觉应用卡顿或无响应。 空状态提示: 在任何可能出现列表为空的情况下(例如,没有任何收藏卡片时打开收藏夹,没有任何错题时查看错题分析,刚开始使用应用时分类列表为空等),界面不应只是空白。应显示友好且具有引导性的空状态提示信息,例如“您还没有收藏任何闪卡,快去创建一个或开始学习吧!”并可能附带一个指向相关操作的按钮或链接。 响应式设计(若为Web技术): 如果应用是基于Web技术栈(如Electron包裹的Web应用),应考虑基础的响应式布局。确保应用在不同尺寸的窗口或屏幕下(尤其是在常见的桌面显示器分辨率范围内)依然能够保持良好的可用性和视觉效果,元素不会重叠或超出可视范围。 首页/仪表盘 (Dashboard) 布局设计: 首页作为应用的入口和信息概览中心,其布局应遵循简约风格,信息组织清晰,主次分明。可以考虑划分为几个主要区域:顶部的核心统计数据区、中部的功能快捷入口区、下部的学习统计图表区,以及可能的侧边或底部快速访问/学习建议区。

核心统计区: 以醒目的卡片式或列表式设计,展示用户最关心的几个核心数据指标。这些数据必须实时从数据库查询或通过有效的缓存机制更新。包括:

总闪卡数: 数据库中所有卡片的总数量。

今日已学习/复习卡片数: 当天完成的学习/复习任务的卡片数量。

分类总数: 数据库中实际存在的用户自定义分类的数量,必须准确无误。