# 实习工作日志系统 设计方案 - 版本:v1.10(Electron 桌面应用) - 范围:个人版全量功能;团队版仅作扩展预留 ## 1. 产品定位 面向实习生的轻量工作记录工具,覆盖四个环节:考勤打卡、每日记录、周记沉淀、一键总结。 | 维度 | 说明 | |---|---| | 目标用户 | 实习生本人(个人版);扩展支持导师查看(团队版预留) | | 核心痛点 | 记录难坚持、总结靠回忆、考勤对不清 | | 核心价值 | 10 秒记一条;写入即结构化,总结零回忆;数据本地可控、随时导出 | | 产品形态 | 本地优先 Web 应用,桌面与移动浏览器均可使用 | ## 2. 设计原则 1. 写入时结构化,总结时只聚合:记录时多花 2 秒选项目与分类,总结时不再回忆 2. 一切以「天」为聚合键:打卡、日志、周记按日期自然关联,无复杂外键 3. 极致低摩擦:打卡一键完成,记录一句话即可 4. 视觉克制:高级白主题、灰阶文字、唯一强调色、1px 细线分层 5. 无特殊符号、无表情:全部图标自绘 SVG,导出文档用文字标签 ## 3. 功能设计 ### 3.1 打卡 | 功能 | 说明 | |---|---| | 上班打卡 | 一键记录时间戳;当日重复点击时按钮置灰并显示打卡时间 | | 下班打卡 | 仅当日已有上班打卡后可用 | | 考勤状态 | 运行时按规则实时计算,不落库(规则见 4.3) | | 补卡 | 近 30 天内任选日期补录上下班时间,kind 记为 makeup,原因写入 note | | 规则配置 | 上班时间、下班时间、迟到宽限分钟、午休扣除分钟 | | 上班地点 | 打卡与补卡时可选可输入(公司、客户现场、出差、居家办公等,支持自由输入城市),存于 attendance.location,记住上次选择 | ### 3.2 日历(月视图) | 元素 | 表达方式 | |---|---| | 出勤状态 | 6px 圆点:正常(ok) / 缺卡(warn) / 缺勤(danger) / 无记录(dot-empty) | | 已写日志 | 12px check-circle 小图标 | | 成果日 | 小 star 图标,表示当日存在星标条目 | | 今天 | 日期数字用强调色,其余日期灰阶 | | 周末 | 文字降为辅助色,不填色块 | | 交互 | 点击日期打开当日抽屉(桌面右侧 / 移动整页);月份切换;回到今天 | ### 3.3 工作日志 快速记录控件状态: | 控件 | 默认状态 | |---|---| | 内容输入框 | 常显,placeholder「做了什么」,回车即提交 | | 项目下拉 | 常显,记住上次选择 | | 分类下拉 | 常显,记住上次选择 | | 耗时 / 备注 / 收获 | 默认折叠,点击展开 | | 星标 / 待跟进 | 条目上的图标按钮,点击切换 | 三个文本位分工(防重复): | 字段 | 回答的问题 | 总结去向 | |---|---|---| | content | 做了什么 | 总结正文 | | takeaway | 学到了什么 | 「学习与成长」章节 | | remark | 背景、链接、未决事项 | 可检索;带旗标的进「待跟进」章节 | ### 3.4 周记 - 每周五(可配置开关)顶部提示补填:本周亮点 / 踩的坑 / 下周计划,三个文本位 - 周报草稿 = 周记 + 当周日志自动聚合 - 周定义:周一为一周开始 ### 3.5 总结生成 范围:本周 / 本月 / 自定义区间 / 全部实习期。 流程:选范围 → 按模板聚合 → 生成可编辑草稿 → 导出 Markdown。 模板结构: ``` 实习工作总结(起 ~ 止) 一、考勤概况 出勤 N 天,累计工时 H 小时,补卡 M 次 地点分布:公司 N 天,客户现场 M 天 二、工作内容分布 开发 45%,BUG修复 20%,学习 15%,会议 10%,文档 10% 三、项目投入 项目A 32 条,项目B 11 条 四、主要成果 1. 星标条目逐条列出 五、待跟进事项 带旗标且未勾销的备注 六、学习与成长 takeaway 汇总 + 各周 highlights ``` Markdown 导出节选示例(成果与待跟进均用文字标签,不用符号): ``` ## 四、主要成果 - 【成果】独立完成订单列表分页接口并上线(2025-03-04) - 【成果】排查并修复订单金额精度丢失问题(2025-03-05) ## 五、待跟进事项 - 【待跟进】订单并发场景未覆盖测试(2025-03-06 备注) ``` AI 润色为可选进阶:将统计、成果、周记交给大模型按四段式输出,结果仍可编辑;前提是原料已结构化。 ### 3.6 统计 | 卡片 | 指标 | |---|---| | 考勤 | 出勤天数 / 累计工时 / 补卡次数 | | 记录 | 总条数 / 连续记录天数 | | 分布 | 分类横向条形、项目投入横向条形(灰阶 + 单一强调色) | | 趋势 | 近 12 周记录热力图(绿色单阶,克制) | ### 3.7 备忘录 双栏结构:左侧列表(标题、内容摘要、更新时间),右侧编辑器(标题 + 内容)。带未保存修改守卫(切换、新建前确认)、删除确认弹窗。 ### 3.8 密码库 企业账号密码管理:字段为系统名称、账号、密码、备注。 | 项 | 说明 | |---|---| | 加密 | 主密码经 PBKDF2-SHA256(150000 次迭代)派生 AES-256-GCM 密钥;密码字段以密文落库(enc:v1:iv:cipher) | | 解锁 | 主密钥仅存内存,页面刷新或手动锁定后需重新解锁;首次使用时设置主密码 | | 表格 | 系统名称 / 账号 / 密码(掩码显示、显示切换、一键复制)/ 备注 / 操作;支持按名称、账号、备注搜索 | | 其他 | 新增与编辑弹窗(必填校验、一键生成随机密码)、删除确认、修改主密码(全量重新加密)、5 分钟无操作自动锁定 | ### 3.9 全局搜索 顶栏搜索框(Ctrl+K 聚焦),覆盖工作记录(内容、收获、备注)与备忘录(标题、内容)。结果分组展示,点击跳转:工作记录定位到日历当月并打开当日抽屉,备忘录定位并选中。 ### 3.10 数据导出与 AI 润色 - CSV 导出:工作记录(日期、分类、项目、内容、耗时、成果、待跟进、收获、备注)与考勤(日期、星期、状态、上下班、地点、类型、说明),UTF-8 BOM,Excel 直接打开 - 报表支持复制到剪贴板 - AI 润色:设置页配置 OpenAI 兼容接口(地址、API Key、模型名,仅存本机),总结页一键润色草稿,保留结构与事实数据,可一键还原润色前版本 - 考勤支持休假标记:标记后该日状态为请假并清空打卡时间,统计与总结含请假天数 ### 3.11 用户系统与数据隔离 | 项 | 说明 | |---|---| | 数据隔离 | 每位用户独立一个 IndexedDB 数据库(intern_worklog_u_用户ID),工作日志、考勤、备忘录、密码库物理隔离;用户注册表为独立小库,仅存用户名与密码哈希 | | 身份校验 | 登录密码经 PBKDF2-SHA256(150000 次迭代、随机盐)哈希后存储,系统不保存明文;会话存 sessionStorage,关闭标签页即退出 | | 会话安全 | 30 分钟无操作自动退出;退出即断开数据库连接并清空内存密钥 | | 账号管理 | 设置页可修改登录密码、删除用户(连同其全部数据,二次确认) | | 旧数据迁移 | 首次创建用户时可勾选迁移升级前单机数据,迁移仅复制、原库保留兜底 | ## 4. 数据模型(SQLite) ### 4.1 建表语句 ```sql -- 项目 CREATE TABLE project ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, archived INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')) ); -- 工作日志(以天为单位) CREATE TABLE work_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT NOT NULL UNIQUE, created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')) ); -- 日志条目(随手记) CREATE TABLE log_item ( id INTEGER PRIMARY KEY AUTOINCREMENT, work_log_id INTEGER NOT NULL REFERENCES work_log(id) ON DELETE CASCADE, content TEXT NOT NULL, project_id INTEGER REFERENCES project(id) ON DELETE SET NULL, category TEXT NOT NULL DEFAULT 'other', minutes INTEGER, is_milestone INTEGER NOT NULL DEFAULT 0, needs_followup INTEGER NOT NULL DEFAULT 0, takeaway TEXT, remark TEXT, sort_order INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')) ); -- 打卡 CREATE TABLE attendance ( id INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT NOT NULL UNIQUE, clock_in_at TEXT, clock_out_at TEXT, kind TEXT NOT NULL DEFAULT 'normal', note TEXT, location TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')) ); -- 周记 CREATE TABLE weekly_note ( id INTEGER PRIMARY KEY AUTOINCREMENT, week_start TEXT NOT NULL UNIQUE, highlights TEXT, challenges TEXT, plan_next TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')) ); -- 备忘录 CREATE TABLE memo ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, content TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); -- 账号密码(password 为 AES-256-GCM 密文,主密码派生密钥加密) CREATE TABLE credential ( id INTEGER PRIMARY KEY AUTOINCREMENT, system TEXT NOT NULL, account TEXT NOT NULL, password TEXT NOT NULL, remark TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); -- 设置 CREATE TABLE setting ( key TEXT PRIMARY KEY, value TEXT NOT NULL ); CREATE INDEX idx_log_item_log ON log_item(work_log_id); CREATE INDEX idx_work_log_date ON work_log(date); CREATE INDEX idx_attendance_date ON attendance(date); ``` setting 预置键:work_start(09:00)、work_end(18:00)、grace_minutes(10)、lunch_minutes(60)、remind_weekly(friday/off)、last_project、last_category。 ### 4.2 分类枚举(固定,不开放自定义标签) dev 开发 / bugfix BUG修复 / test 测试 / learning 学习成长 / meeting 会议沟通 / doc 文档输出 / other 其他 ### 4.3 考勤状态计算规则(运行时,不落库) ``` 输入:attendance 记录 + setting 规则 1. 工作日无任何打卡 缺勤 2. 有上班、无下班 未完成 3. 上班时间晚于 上班时刻+宽限 迟到 4. 下班时间早于 下班时刻 早退 5. kind 为 makeup 按正常计,附加「补卡」标记 其余 正常 ``` ### 4.4 约束要点 - work_log.date、attendance.date、weekly_note.week_start 均 UNIQUE,保证一天一条 - 时间一律存 ISO 本地时间文本,展示层不做时区换算 - log_item 通过外键级联删除,删天即清条目 ## 5. 页面结构 整体布局:左侧 56px 图标导航,顶部 56px 工具栏(视图标题 + 打卡主按钮 + 周记提醒点),主内容区最大宽 1200px 居中。 ``` +------+-------------------------------+ | 导航 | 工具栏:标题 · 打卡按钮 · 提醒 | | 日历 +-------------------------------+ | 今日 | | | 统计 | 主内容区 | | 总结 | | | 设置 | | +------+-------------------------------+ ``` | 视图 | 内容 | |---|---| | 日历(默认首页) | 月历网格;点击日期开右侧当日抽屉:打卡时间线 + 条目列表 + 快速记录 | | 今日 | 打卡状态卡 / 快速记录区 / 今日条目列表 / 自动小结(x 条 · y 小时) | | 统计 | 概览卡片行 / 记录热力图 / 分类与项目条形图 | | 总结 | 范围选择 + 左侧草稿编辑 + 右侧数据摘要 + 导出 Markdown | | 设置 | 打卡规则 / 项目管理 / 周记提醒 / JSON 备份导入导出 | ## 6. 交互细节 - 打卡点击后按钮原地变为文字状态「已打卡 09:02」,无弹窗 - 快速记录回车提交,新条目插入列表顶部,150ms 透明度过渡 - 删除、备份覆盖导入等不可逆操作:统一确认弹窗,明确说明操作对象与不可恢复性 - 操作结果(打卡、保存、删除、导入等)以右上角轻提示统一反馈,2 秒自动消失 - 空状态:居中灰字「暂无记录」 - 备注中的 URL 自动识别为链接 - 历史列表按月分页加载 ## 7. 视觉设计规范(高级白) 色彩: ``` --bg-page #FFFFFF 页面底色 --bg-subtle #F7F8FA 卡片内分区 --bg-hover #F2F3F5 悬停态 --border #EBEDF0 1px 分隔线 --border-strong #DCDEE3 输入框描边 --text-1 #1D2129 主文本 --text-2 #4E5969 次要文本 --text-3 #86909C 辅助与占位 --accent #3370FF 唯一强调色:主按钮、当前日期、链接 --accent-bg #F0F5FF 选中态浅底 --ok #23A757 出勤正常(状态点) --warn #E8842C 缺卡、待跟进(状态点) --danger #E5484D 缺勤(状态点) --dot-empty #C9CDD4 无记录(状态点) ``` 排版: ``` font-family -apple-system, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif 字号 12 辅助 / 13 正文 / 14 小标题 / 20 页面标题 字重 400 正文 / 500 次强调 / 600 仅页面标题 数字 font-variant-numeric: tabular-nums,打卡时间与统计数字严格对齐 ``` 形状与层级: ``` 圆角 6px 输入框与按钮 / 8px 卡片 / 12px 弹层 阴影 常态无阴影,靠 1px 边框分层;仅浮层 0 4px 16px rgba(29,33,41,0.08) 间距 4 的倍数(4/8/12/16/24);内容区最大宽 1200px 居中 强调色面积小于 5%;不使用渐变与大面积色块 日历:白底 + 1px 细线网格,状态用 6px 圆点,不填色块 ``` 交互态: ``` hover:--bg-hover 选中:--accent-bg 浅底 + 文字 --accent 过渡:仅透明度与背景色,不超过 150ms ``` 禁用清单: 1. 界面文案纯文字,不出现表情与装饰符号 2. 勾、叉、箭头、展开折叠等视觉指示一律 SVG 3. 导出文档用文字标签「成果」「待跟进」,不用符号 4. 数据层为纯文本,不依赖符号字符做逻辑判断 ## 8. SVG 图标体系 绘制规则: ``` 画布 viewBox 0 0 24 24 风格 线性描边,fill none 线宽 stroke-width 1.5 端点 linecap 与 linejoin 均 round 颜色 stroke currentColor,激活态由 CSS 切色 ``` 图标清单(14 个,覆盖全部界面): | 图标 | 用途 | 图标 | 用途 | |---|---|---|---| | calendar | 日历 | flag | 待跟进 | | clock | 打卡 | chart | 统计 | | check-circle | 完成 | export | 导出 | | edit | 日志 | chevron-left / chevron-right | 月份切换 | | tag | 项目分类 | chevron-down | 展开 | | star | 成果 | plus | 新增 | | close | 关闭 | search | 搜索(预留) | 示例(定风格基调): ```svg ``` 工程化:全部图标集中在 components/icons.ts,以常量字符串导出、内联渲染,不引入任何第三方图标库。 ## 9. 技术方案 | 层 | 选型 | 理由 | |---|---|---| | 框架 | Vue 3 + TypeScript + Vite | 轻量、构建快、单页够用 | | 存储 M1 | Dexie.js(IndexedDB) | 零部署、本地优先、打开即用 | | 存储 M2 | Tauri 2 + SQLite | 日用稳定后桌面化,schema 不变仅换持久层 | | 图标 | 自绘 SVG 内联 | 视觉完全自控 | | 导出 | 前端生成 Markdown / JSON 下载 | 无后端依赖 | | 应用化 | PWA(清单 + Service Worker + 自绘图标) | Edge/Chrome 一键安装为独立窗口应用,离线可用,数据仍在浏览器本地 | | 桌面安装包 | Electron 33 + electron-builder(NSIS 安装包与免安装目录) | 数据存储于用户目录(userData),不受浏览器影响,双击即用 | 路线:M1 纯前端交付;稳定后 Tauri 桌面化;团队版再加服务端与账号。 工程结构: ``` src/ main.ts 入口 App.vue 布局:导航 + 工具栏 + 路由视图 router.ts 五个视图路由 db/schema.ts 建表与迁移 db/repo.ts 数据访问:attendance / log / weekly / project / setting domain/attendance.ts 考勤状态计算 domain/report.ts 总结聚合与模板渲染 components/calendar/ 月历、格子、当日抽屉 components/log/ 快速记录、条目列表、行内编辑 components/icons.ts 自绘 SVG 图标 styles/tokens.css 设计令牌(第 7 节) ``` ## 10. 备份与导出 - JSON 全量备份:五表整包,含 schema 版本号,导入时校验版本 - Markdown:总结草稿、单日记录 - Excel 导出列入后续需求,M1 不做 ## 11. 边界情况 | 场景 | 处理 | |---|---| | 凌晨下班 | 04:00 前的下班打卡归属前一日;之后仍无下班记「未完成」,次日补卡 | | 重复打卡 | 已有上班打卡时按钮置灰并显示时间 | | 补卡超期 | 仅允许近 30 天 | | 历史修改 | 个人版信任模式,任意条目可编辑;补卡记录保留 makeup 标记 | | 缺周记 | 总结对应周显示「无周记」占位文字,不影响其余聚合 | ## 12. 开发路线图 | 阶段 | 内容 | 预估 | |---|---|---| | M1 MVP | 打卡 + 月历 + 快速记录(项目/分类)+ 今日列表 | 1-2 天 | | M2 | 星标、旗标、备注、收获 + 周记 + 统计页 | 1-2 天 | | M3 | 总结生成 + Markdown 导出 + JSON 备份 + 设置页 | 1-2 天 | | M4 可选 | AI 润色 / 提醒 / Tauri 桌面化 / 团队版 | 按需 | ## 13. 扩展预留(本期不做) 团队版(账号、导师只读、周报提交)、截图附件、系统级提醒、多端同步。 ## 变更记录 - v1.1:新增上班地点(attendance.location):打卡、补卡可选填并记住上次选择;设置页支持常用地点预设;统计页与总结报告增加地点分布 - v1.2:打卡时间支持行内直接修改(点击当日详情中的上班/下班时间即可编辑,可补录下班时间),修改后考勤状态运行时自动重算 - v1.3:上班地点支持自定义输入并自动记忆:输入新地点保存后自动加入常用地点列表(可在设置中删减) - v1.4:企业级表单与确认规范——当日详情重构为分区结构(出勤信息、补卡登记、新增工作记录、记录列表),字段全部带标签、必填校验与错误提示;时间编辑采用显式确认/取消;删除与备份覆盖导入使用统一确认弹窗;操作结果统一轻提示反馈 - v1.5:已有工作记录支持完整信息编辑——点击条目或编辑图标,屏幕中央弹窗编辑全部字段(内容、项目、分类、耗时、收获、备注、成果标记、待跟进),带必填校验与归档项目回显 - v1.6:新增备忘录(双栏列表与编辑、未保存守卫)与加密密码库(主密码 PBKDF2 派生 AES-256-GCM,密码密文落库,解锁、锁定、搜索、一键复制、随机密码生成、修改主密码全量重加密);备份兼容 v1 与 v2 格式 - v1.7:全局搜索(Ctrl+K,跨工作记录与备忘录并跳转定位);考勤支持休假标记并纳入统计与总结;工作记录与考勤 CSV 导出;总结草稿一键复制;AI 润色(OpenAI 兼容接口,本机保存配置,可还原);密码库 5 分钟无操作自动锁定;日历格子悬停显示状态与地点 - v1.7.1:考勤数据全视图实时同步——打卡、修改时间、补卡、休假、地点变更后,顶栏按钮、今日面板、日历抽屉、月历格子与统计页通过全局变更信号即时刷新,无需切换视图 - v1.8:新增用户系统——每位用户独立 IndexedDB 数据库物理隔离数据;登录密码仅存 PBKDF2 哈希;会话存 sessionStorage 并支持 30 分钟无操作自动退出;设置页支持修改登录密码与删除用户;首次创建用户可一键迁移升级前单机数据(原库保留兜底) - v1.9:PWA 应用化——新增 Web 应用清单、Service Worker 离线缓存与自绘应用图标;在 Edge/Chrome 中可一键安装为独立窗口应用(桌面图标、开始菜单入口),离线可用,数据随浏览器配置文件存储 - v1.10:Electron 桌面应用——pnpm dist 一键产出 NSIS 安装包与免安装目录;主进程加载本地构建产物,数据存于系统用户目录;窗口禁用菜单栏、外部链接交由系统浏览器打开