本工作台的全部版本迭代记录,最新在最上方。v4.20.0 停用分类能管起来了、定时保存不再卡死:分类管理每个大类多了「停用」按钮,停用后整组移到「已停用分类」区(只显示已停用的,不占位置);顶部「停用 / 恢复分类」再开一个弹窗,能整组恢复或点某个细分单独恢复;旧损耗标记(报损 / 来源于)也摘进「系统备注」列;修掉定时记账保存卡在「保存中…」;休息记录可以编辑修改。
v4.19.2 修定时计划跨机丢失:本地模式导出再导入,定时记账的计划配置会整包丢掉,现已对齐导出/导入两端对设置项数组的约定,跨机恢复后所有关联不断。
v4.19.1 导出更清爽、工作表更全:导出的「备注」只留你写的话,系统标记单独进「系统备注」列;删「更多记账」、周期账改名「周期记账」、新增「分日记账」「定时记账」两表;损耗标记带 #编号。
v4.19.0 编号看得懂了:流水/损耗用 JF、周期用 PD、定时用 SC、分日用 FD,后面跟日期和序号(如 JF202611040001);旧记录保留原随机编号不动。
v4.18.0 / v4.17.0(概要补录):报表吸顶体验优化、新增校验台、支持 PDF/音频导出;以及若干性能与稳定性打磨。
v4.16.0 经手能改了:编辑周期账 / 定时任务时可以直接改「经手」,改完已记流水一起改;点周期账卡筛选也能认出备注没标记的老流水。
v4.15.3 缺的那几期点名说清:「已记 2 期、流水只找到 1 笔」时,弹窗直接写出缺的是第几期、应记哪天、每期多少钱,拿日期就能去流水页对账。
v4.15.2 编号识别容错 + 编辑页列流水:备注里「# 编号」多一个空格也认,编号被改坏的老流水按「该期日期 + 每期金额 + 分类」找回;编辑周期账直接列出已记的流水;修掉「改定时金额成功却弹操作没成功」。
v4.15.1 经手跟随第一笔、分天改分日:自动记的经手人在登记时就落库,不再靠翻流水反推(根治「变 local」);改金额提示里列出每期记流水的时间;「分天记账」改名「分日记账」。
v4.15.0 周期记账可设时间、定时记账上首页:周期账固定时间代代沿用并回填已记流水;流水页新增「定时记账 · N 条」卡片;暂停恢复改顺延;已暂停/已结束收进底部折叠区。
v4.14.2 系统备注统一 + 编辑页排版对齐:三类自动账的系统备注统一成【周期记账】【定时记账】【分天记账】一套写法(老记录自动改写);编辑周期账 / 编辑定时任务按「记一笔」的两列版式重排,补上付给与时间;定时记账可以起名字。v4.14.1 界面收尾:去掉多余小字、并排输入框等高、定时条件框两列并排;分天 / 定时 / 周期账自动记的流水补上时间,流水备注末尾标出【周期记账】【定时记账】【分天记账】来源。v4.14.0 新增分天记账 + 定时记账(都在记一笔表单上加框完成):一笔钱分多天入账(余数堆最后一天)、按周期到日子自动记一笔;界面按要求重排(四格照常显示、起始日与日期联动、面板内两列成行、退出回普通支出);更多记账弹层改居中,自动生成的记录带可溯源的系统备注框。v4.13.2 三处文字样式与对齐修正:公式里中文用常规说明灰、金额纯黑不加粗、字号统一 11.5px;横跨两栏的短公式居中;两边相同的副说明行居中(计算口径不变)。v4.13.1 四处排版修正(计算口径不变):一侧空着的行改为通栏(不再一半有字一半空白)、右栏副说明不再重复显示、左栏公式改顺排文字(不再挤成三行贴边)、人工成本率公式补括号;v4.13.0 两处调整(一处显示修正 + 一处明细展示增强):周期账公式改为逐笔列出每一笔(不再只举第一笔),一眼看清各笔怎么加、合计怎么来,计算口径不变;双栏卡改为「头部一行 + 数值行 + 副行 + 通栏公式」,左右两栏行数对齐、1:1 等宽;v4.12.0 两处调整(一处核心计算修正 + 一处界面增强):周期账摊销改为按「自然月整月摊」,修正本月/本季/今年被周期账起始日截短、且与右栏(租金占比)口径打架导致「÷31×6=合计1166.67」自相矛盾的问题;双栏卡左右两栏始终画竖线分隔(账面≠应计时线加粗变主题色、右栏空白也画);v4.11.0 四处调整(界面 + 一处计算修正):大屏 KPI 改每行 4 列并删掉遗留的 220px 网格覆盖、提示「点击可跳转至流水」改「点击查流水」且与指标同行不遮挡、周期账摊销除数统一改为所属月份实际天数(28/29/30/31,随查看月份逐月变化);v4.10.0 六处界面调整(含一处显示修正):删除口径开关说明、左右两栏说明默认折叠、毛利率"理论/实际毛利"移到金额右侧、损耗率右栏补公式、公式行按长短居中/左对齐;并修"当前口径"被吸顶卡遮挡;v4.9.1 两处修复:KPI 卡片网格最小列宽改为「不超过容器 100%」,手机上不再撑出横向滚动条;「区间进度」那一行收紧间距、压缩天数文字,让「预计全月」开关在 360~412px 手机上都稳定留在同一行。v4.9.0 九处调整:流水「编辑」行加收入 / 支出 / 结余;「预计区间全程」开关挪到区间进度那一行的最右边;账目视角不再显示经营那一摞(口径开关 / 说明 / 当前口径 / 区间进度 / 预计全程 / 经营体检 只在经营视角);「当前口径」搬到口径说明下面并跟它同字号;说明离开关拉开 12px;能耗率左栏改口成「右栏把本月能耗平摊到区间天数」;租金 / 装修 / 设备三张摊销卡的计算合并成通栏一行;「左右两栏怎么看」补一句大白话。v4.8.5 一处调整:口径开关只把「理论支出计入经营指标 + 开关」那一行钉在顶栏下方,下面那句说明移出吸顶组、跟着内容滚走;吸顶这一行不再含说明,高度恒定,跨过吸附阈值不跳。v4.8.4 一处修复:修「上滑时卡一下」——上一版吸住瞬间把口径开关卡的说明文字隐藏、内边距也压小,整块矮了十几像素,下面内容跟着上跳,看着就卡;现在吸附前后尺寸一致,并把滚动回调改成按帧节流、CSS 变量只在变化时写。v4.8.3 三处调整:经营视角卡片补齐「详细计算」——租金占比补上「周期账按天摊 + 一次性 = 合计」与「每期 ¥1,166.67 ÷ 31 天 × 20 天 = ¥752.69」,装修 / 设备 / 能耗的右栏也给出算式;顺带把「理论支出计入经营指标」开关并入吸顶组,下滑时钉在顶栏。v4.8.2 一处修复:修「同一分类下有两笔周期账 → 右栏凭空翻倍」——重建 / 重复创建周期账后留下的旧流水(编号已不在配置里)会被右栏当成「窗口外周期账」再摊一遍,¥752.69 被算成 ¥1,505.38;现在同分类有在册周期账时旧流水一律不再计入。顺带把 ?v= 缓存号升到 v4.8.2,避免浏览器继续用缓存的旧 app.js。v4.8.1 三处调整:① 经营视角「视角切换 + 齿轮」重新钉回顶栏——下滑时跟月份 / 范围一起吸在顶栏下方,随时切换账目 / 经营视角;② 右栏「人工(应计)」拆成「人工工资(应计)+ 夫妻工资(应计)」两项明细,和左栏口径完全一致(口径开关关掉时夫妻工资自然为 0);③ 修正左右栏语义说明——明确左栏=本区间账面(含周期账摊进本区间)、右栏=截至今日 / 区间应计(按天折算到今天,不是整月),周期账在左右栏是同一笔摊销结果、不会翻倍,直接回应「租金翻倍」的疑问。(租金翻倍的旧 Bug 在 v4.8.0 源码里已修,本版确保发布版含修复。)v4.8.0 五处调整:① 周期账改成按天精确摊——装修 / 设备 / 租金这类走周期账的分类,改成「每期金额 × 本区间与该期重叠天数 ÷ 该期天数」,任意自定义区间都能算出该摊的钱,不再因为没有整笔落在区间里就显示 0;② 点装修摊销 / 设备摊销 / 租金占比卡跳流水时自动把时间范围放宽到「全部」,一定看得到周期账每一期;③ 口径开关卡压到两行(标题与开关同一行、说明只一句),名字改成「算上夫妻工资的经营」/「不算夫妻工资的经营」;④ 修 开关关掉后人工成本率公式里还留着「夫妻工资」;⑤ 修时间范围选「全部」时报表页报错的隐患。v4.7.0 四处调整:① 毛利率两档叫全名——「毛利率(不含损耗)理论毛利」=假设买进来的菜一点没坏、「毛利率(含损耗)实际毛利」=再把损耗扣掉,「实际毛利」卡的算法里直接写明两档差几个点、折成钱是多少;② 报表顶部新增「理论支出计入经营指标」口径开关——开=经营口径(夫妻工资 / 折旧 / 自有资金利息 / 门店自用都算进成本,看开店本身赚不赚钱),关=口袋口径(这几笔钱没真掏出去,整类剔掉,看口袋里到底多了还是少了),收入 / 支出 / 结余、经营指标、预计全程、支出构成饼图、经营体检全部跟着变;③ 报表底部新增「经营体检」卡——把比率翻译成人话:赚没赚、钱花在哪(前三大块)、哪几项超建议线、跟上一期比、保本线还差多少、下一步干什么;④ 修两个真问题:「理论支出 ▸ 夫妻工资」细分出现两个(默认分类表与改名迁移撞车,已自动去重,只删多余分类条目、流水金额不动)、记一笔的时间停在「打开账本那一刻」(没手动改过日期时间就自动刷新成当前时刻,改过的绝不覆盖)。v4.6.0 五处调整:① 毛利率拆成两档——「不含损耗」(只扣食材采购,就是原来那个数)和「含损耗」(再把损耗报损扣掉),两档之差就是损耗吃掉的钱,卡片说明写明两者区别;② 报表所有比例改两位小数(58.2% → 58.23%),指标卡、右栏应计、环比同比、饼图图例与导出 Excel 全部统一;③ 人工成本算上「夫妻工资」——人工成本 = 人工工资 + 理论支出·夫妻工资(夫妻俩自己的工资,钱没真发出去但同样是人力投入);④ 自定义日期按日薪平摊工资——选某月 1~7 号,一整月工资只算 7/31,不再全额砸进这几天;⑤ 「理论支出」提示改文案换配色(补上「发给员工的工资请选『人工工资』」、主色底醒目显示),细分「经营工资」改名「夫妻工资」。v4.4.0 三处显示调整:① 窄窗口(390~640px)里「(点击可跳转至流水)」不再被挤到指标名下面单独一行,改成自动缩字号跟「营收」「综合费用率」这些名字同一行(460px 约 10~12px,390px 最小 9px;桌面多列时左栏太窄,缩不下就照旧排第二行);② 报表左右两栏字号拉齐(说明 11.5px、公式 11px),公式里的金额和百分比加粗,最下面「算法:」那行保持 11px 不变;③ 综合费用率移到营收正后面——赚了多少后面紧接着被花掉多少,费用率 + 净利率 = 100%,两张卡挨着看。v4.2.0 按老板拍板把成本结构饼图精简成一张「截至今日(应计)」(账面那张跟账目视角支出构成重复,删掉)并新增大类 / 细分切换;「预计全月」随范围变「预计全季 / 预计全年」,「费用」明确改叫「支出」;左栏公式改成名字金额同行的内联格式、占比左右同色同字号、账目三卡右栏说明独立成行、手机上饼图浮框不再被屏幕挡住。v4.1.0 继续打磨双口径报表:成本结构改成上下两张饼图(账面 / 截至今日)、报表卡去掉填充框压得更紧、「点击可跳转至流水」挪到标题名后面、本季和今年也纳入折算(所选范围包含今天就有右栏)、报表卡加宽让页面变短。v4.0.0 新增「截至今日」双口径:每张卡改成左右两列逐行对齐,右栏把周期账、月底才记的能耗工资按天折算成应计数,月中看经营不再被「整月固定成本 vs 半月收入」吓到。v3.0.0 是次版本,把一直躺在代码里的「云端模式」真正接通了,并照搬 08 门店收银管家的成熟做法补齐配套:① 补上云端的关键两行——主页此前从未引入 Supabase 客户端和云端配置,所以云端模式点了也连不上,现在 SDK 已本地化到 assets/vendor/supabase.min.js(218KB),不依赖外网 CDN;② 修「一切到云端就白屏」的致命 Bug——数据层的 _from() 在云端分支里递归调用了自己,一进云端就栈溢出、整页白屏;③ 智能默认模式——网址打开默认走云端、双击文件打开默认走本机,部署后不用手动切、没网也不会打不开;④ 「我的 → 数据来源」新增切换入口,并写明当前模式与切换失败的具体原因;⑤ 本机数据一键搬上云——切到云端登录后若检测到本机有流水、云端为空,主动询问是否导入(归属账号重映射、分批 200 条);⑥ 云端连接自检——登录失败时自动探测,用大白话区分「配置没填好 / 网络不通 / 密码错」;⑦ 免费版 7 天休眠提醒(照搬 08);⑧ 照搬 08 的 _redirects,根网址不再 404;⑨ 建表脚本补上周期账表(共 5 张表,均配行级权限);⑩ 使用说明新增「本机还是云端 / 云端部署 / 登录与注册 / 休眠提醒」四章,含 Supabase 建表与 Cloudflare Pages 上传的逐步步骤。兼容性:无需改数据结构;但首次启用云端必须先到 Supabase 的 SQL 编辑器执行一次 系统文件/supabase_schema.sql(脚本用 IF NOT EXISTS,不会破坏已有数据)。本机模式的账号、分类、流水、设置、备份全部照旧。
core.js 的 SYS_NOTE_RX、sysNoteText,以及 app.js 的 WASTE_RE),让旧「报损-3元」「来源于…的…」也归到系统备注。一条历史记录都不改写,纯分类,个人手写的备注一个字不动。save() 里新建计划对象时写成了 id: CB.genId('SC', scObj.起始日)——对象还没赋值就先引用了自己,JS 当场抛错,按钮的「保存中…」状态再也退不出来(从 v4.14.0 起就埋着)。现在改成先把起始日取到局部变量 scStartDate 再引用,保存恢复正常。版本升级脚本/验收_v4.20.0.js 21/21 全过:定时计划保存不再卡死且确实写入、休息记录编辑后原因回写、顶部入口位置、卡片停用整组、停用区只显示已停用分类、恢复后回到主列表、第二个弹窗只列已停用分类(未停用的不出现)、整组/单个细分恢复、导入重名孤立项可恢复、全程无未捕获 JS 错误。版本升级脚本/_test_sysnote.js:旧报损 / 旧来源于正确摘入系统备注、新格式仍认、含「报损」字样的个人备注不误伤。cb_categories 原有的 停用 字段上,休息记录仍存在账号设置里,都没给云端表加列;旧备份、云端库表结构一律不变。上传 Cloudflare Pages 后请 Ctrl+F5 强刷,顶栏版本号应为 v4.20.0。__verify/test_roundtrip_4191.js:造全量数据(含周期/定时/分日/损耗、且含一条 v4.19.0 前的旧随机编号记录)→ 导出 → 清空 → 导入另一账号 → 二次导出,22/22 全过。关键证据:null(计划丢了),修复后是 SC202610260001(计划完整恢复);【损耗登记: 2026/11/04 损耗 1 元#损耗id】(反查这笔损耗记录);【损耗登记来源:食材采购-肉禽蛋(2026/11/04采购)#来源id】(反查这笔采购/收入);JF(如 JF202611040001)PDSCFD__verify/test_genid_4190.js 16/16(格式、序号自增、旧随机 id 隔离、撞号顺延、1 万条零重复)+ __verify/test_genid_e2e_4190.js 10/10(真实浏览器验证四个前缀都走可读编号、导入重映射正确)。cb_settings 原有的 JSON 字段,和「时间」同一套做法),定时任务的经手本来就存在计划里,都没给云端表加列。上传 Cloudflare Pages 后请 Ctrl+F5 强刷,顶栏版本号应为 v4.16.0。mm is not defined),数据其实早就写进去了,只是最后一步崩了。已修正,改完直接提示成功。@media(min-width:768px) 内 .kpi-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}」覆盖规则,它在所有 ≥768px 视口把 1500px 的 4 列配置覆盖成 7 列窄卡,导致 4 列一直不生效,现已恢复(≥1500px 稳定 4 列、其它视口按 minmax(340px) 自适应)。② 提示「点击可跳转至流水」改「点击查流水」——提示字随界面自动缩字号、始终与指标名(如「毛利率」)同一行,且不再遮挡右上角「⏱截至今日」字样。③ 周期账摊销除数修正(核心计算)——原公式用「该周期账所属期的零碎天数」当除数,随每条周期账扣款日不同出现 ÷30/÷31 不一致,且不随你查看的月份天数变化(例如你设本月状态、周期账 1166.67,10 月 31 天却按「每期 ÷30 天 ×6 天」算,得 233.33)。现统一改为「所属月份实际天数」(28/29/30/31,逐月变化),公式即「每期金额 ÷ 所属月份实际天数 × 本区间落在那个月的天数」。以你的场景为例:自定义区间 10/1~10/6 → 1166.67 ÷ 31 × 6 = 225.81,与手算一致;整月(如 10 月 31 天)即 1166.67 ÷ 31 × 31 = 1166.67。装修 / 设备摊销卡同理,除数统一取各自然月实际天数。④ 文案口径同步更正为「所属月份实际天数」,并顺手修掉第 ① 点 CSS 覆盖带来的 regression。document.documentElement.scrollWidth 均不再大于 clientWidth(无横向滚动);360/375/412px 下「预计全月」开关与「区间进度」同行(两者 top 差 < 6px);原 v4.9.0 的 18 项验收全部复测通过、全页无 JS 报错。#listEditBar 里新增 <span id="listSumBar">,renderList() 汇总完就把它填上「收入 / 支出 / 结余」,口径就是当前筛选后的那些流水(跟顶部三张卡、走势图同一把尺子,会员充值与「调整」不计入);CSS 字号钉 13.5px,跟旁边「✏️ 编辑」一模一样。点「编辑」后 updateBatchBar() 把它 hide 掉,把整行腾给批量工具条,点「完成」再回来。② 说明离开关远一点——.thy-note 的上边距从 -4px 改成 12px。原来是负边距,这句说明几乎贴在吸顶那张卡的下沿,卡片有圆角和投影,看着就像被压住一截。③ 预计区间全程开关换位——renderRangeProgress() 里把 .rp-sw 从独立的第二行挪进第一行(.rp-toprow)末尾,进度条最小宽度从 110px 让到 64px,保证 412px 手机上「区间进度 + 进度条 + 天数 + 开关」不折行;下面那行只在开关打开时才渲染。④ 账目视角不再堆经营那一摞——applyReportShow() 里新增一组「经营视角专属」,含 #thySwCard / #thySwNote / #bizCalNote / #progCard / #analysisCard,账目视角一律打上 .rpt-off。⑤ 当前口径搬位置——#bizCalNote 从 #bizCard 里移出,放到 #thySwNote 正下方,新样式 .thy-cal 字号 / 行高 / 颜色 / 缩进全部跟说明对齐,并加 .thy-cal *{font-size:11px} 兜底,里面的 <b> 不会再冒出更大的字。⑥ 能耗率改口——左栏括号里那句「右栏是估算值」改成「右栏把本月能耗平摊到区间天数」。⑦ 摊销卡计算合并——新增 amortWide():只有当左右金额确实对得上(两栏都是按同一区间摊出来的,差 ≤ 0.005 元)才把两句话合成通栏一行(tdRows() 新增 wide 行类型 + .k-drow-wide 通栏样式);右栏是「账已记全,不折算」或两边金额对不上时返回空串,卡片照旧左右分栏——算法真不一样就分两栏,一样才合并。⑧ 左右栏大白话——#bizAccNote 开头补一句「左栏=账上实打实记了多少;右栏=把整月的钱按天平摊到今天应该是多少」。⑨ 字号兜底——?v= 缓存号同步升 4.9.0,避免浏览器继续用缓存里的旧 style.css(老板看到的「当前口径太大」就是旧 CSS 没生效造成的)。#listSumBar 与「编辑」同一行、实测字号同为 13.5px,点「编辑」后它隐藏、工具条出现,点「完成」后它回来;② 报表页:#thySwNote 与开关卡实测间距 12px;③ 「预计区间全程」开关与「区间进度」同一行(两者 top 差 < 8px);④ 账目视角下 #thySwCard / #thySwNote / #bizCalNote / #progCard / #analysisCard 全部 .rpt-off,经营视角下全部显示;⑤ #bizCalNote 紧跟在 #thySwNote 下方,两者计算字号同为 11px;⑥ 能耗率左栏文案含「平摊到区间天数」;⑦ 装修 / 设备 / 租金三张卡出现 .k-drow-wide 通栏计算行,且左右金额一致;⑧ 全页无 JS 报错。#thySwCard 里只留「理论支出计入经营指标」标题和右边那个开关,整行 33px 高,跟着月份 / 范围 / 视角切换一起钉在 #reportHeadPin 里;② 不吸顶的那一半——说明文字改成独立的 <div class="thy-note" id="thySwNote">,挪到吸附组外面,留在正常流里,往下翻就跟着内容滚走。开关点击后的说明更新逻辑完全没动(renderTheorySwitch() 里仍写 note.innerHTML,只是宿主从 <span> 换成了 <div>)。#thySwNote 已不在 #reportHeadPin 内(contains() 返回 false),且全页只有一份;② 高度:#thySwCard 在「滚动前 / 刚吸附 / 继续下滚」三种状态下都是 33px,完全一致;③ 说明:下滚 373px 后说明文字的底边已跑到视口上方(-31px),确认它没跟着钉住;④ 对齐:说明首字与卡片标题首字的左边距实测都是 24px,偏差 0.0px;⑤ 交互:点开关 → 说明文字在「算上夫妻工资的经营」与「不算夫妻工资的经营」之间正常切换,账目视角下这一行也照常显示。.head-pin.stuck)把说明文字 display:none、内边距从 6px 压到 4px,想让它别占地方。但跨过吸附阈值的那一瞬间整块矮了 16px,下面所有内容跟着往上跳一次;再往回滑又跳回来 —— 老板反馈的「上滑卡顿」就是这次跳动,不是手机卡。.stuck 里那两条改高度的规则,只留一个常量间距 .head-pin .thy-card{margin:8px 0 0}——吸住只换投影(纯绘制,不触发布局),说明文字一直显示。② 滚动回调按帧节流:一帧内的多次 scroll 事件合并成一次(requestAnimationFrame),快速滑动时不再每个事件都读一次布局。③ CSS 变量只在真变了才写:--head-top(顶栏高度)和 --list-pin-h(流水页吸附组高度)以前每帧都 setProperty,等于每帧都让浏览器重算一次样式;现在缓存上次的值、相同就跳过。.head-pin.stuck 里已无任何改高度 / 改内边距 / 隐藏子元素的规则(grep stuck 只剩投影);② 视觉:吸附前后 .thy-card 高度一致(说明文字恒定占位),阈值处不再有内容位移;③ 卡片内容不受影响——用老板 2026-10-30 的账号备份跑真实渲染,租金 / 装修 / 设备 / 能耗四张卡的左右栏算式与上一版逐字一致(render_cards.js 四项断言全过)。periodicExplain() 专门产这段文字:按 每期金额 ÷ 该期天数 × 本区间落在该期的天数 逐段算,只输出文字、不参与取数,所以小字和大数字永远同源;区间为「全部」或不做摊销时自动回退到原来的写法。#reportHeadPin,跟月份 / 范围 / 视角切换 / 齿轮一起吸住;吸住时说明文字自动收成一行(.head-pin.stuck 里隐藏那句说明),只留标题 + 开关,不占屏幕;还给吸附组补了 10px 底部留白,免得卡片下沿贴着下面内容。app.js 上跑渲染,逐格比对左右栏文字:租金 左「周期账按天摊 ¥752.69 + 一次性 ¥0.00 = 合计 ¥752.69 ÷ 营收 ¥7,927.51」/ 右「每期 ¥1,166.67 ÷ 31 天 × 20 天 = ¥752.69 ÷ 营收 ¥7,927.51」;装修 4 笔 → ¥730.88;设备 3 笔 + 一次性 ¥201.91 → ¥655.76;能耗左栏 0.00 带说明、右栏「按当月 ¥158.16 ÷ 31天 × 20天 = ¥102.04」。另核 HTML 结构:#thySwCard 在 #reportHeadPin 内且全页只有一份,吸附组内 div 开闭配平(8/8)。mucut4uzzm6v47b 与 mu1zoquimtwa2zm),而周期账配置表里只有一条,证实这种重复是真实存在的。periodicLiveCats():只要该一级分类下还有在册周期账,编号对不上的旧周期账流水就不再参与账面(applyPeriodicAmort)与应计(accrualByKey 的窗口外周期账)。真·配置丢失(换设备 / 云端没搬上来,该分类一笔周期账配置都没有)时维持原行为:照旧拿流水按天摊出应计,不会把账算没。?v= 缓存号,浏览器 / CDN 一直在用缓存里的旧 app.js,所以看到的还是旧数字。本版缓存号升到 v4.8.2,会强制拉新代码。?v= 缓存号已升到 v4.8.1),顶栏版本号应为 v4.8.1。win.full),整页直接报错。这个隐患在点摊销卡自动切「全部」之后被踩中,一并修掉了。accrualByKey(大类 / 细分共用一套三分法);成本结构只画应计饼 + 细分切换;进度卡标签随范围变;kpiAcct 右栏说明独立成行;右栏占比补颜色;浮框按屏幕夹取;版本号 v4.2.0。bizMetrics 接应计口径、饼图渲染替换横条、kpi/kpiAcct 跳转提示与公式行合并、版本号 v4.1.0。accrualWindow / accrualByCat / accrualFormula / projFullMonth / renderRangeProgress);bizMetrics 支持应计口径;kpi / kpiAcct 支持左右两列;成本条加折算行;版本号 v4.0.0。.k-drow / .kd-l / .kd-r 双列样式、.bar-sub 折算行、进度条与预计全月开关样式(含 ≤430px 断点)。openWaste);周期账扣款日 / 收款日 hint 与例子精简;版本号 v3.80.1。#profRow-mode 同行样式;.bw-balance 放大;.biz-bar-lb 标签列加宽(含 ≤420px 断点)。openWaste);新增选角色小窗(paintWhoBtn / openWhoPicker),接入填充与保存后清空;个人设置文案。.bw-who-btn / .rp-list / .rp-row)。footer / noSnap 两个可选参数(别的弹层不受影响);按钮补上「灰显」样式。.sheet-f、按钮 disabled 半透明、存储卡阈值行窄屏不折行;顺手删掉两个已经没人用的旧样式。deleteRecordsByIds(ids)(云端分批 200 个按 id 删 / 本机过滤重写)。readStorageWarn / saveStorageWarn / storageWarnRatio 三件套替掉写死的 STORAGE_WARN;新增 openPurgeOld / doPurgeOld / purgeOptions;VERSION 升 v3.77.0。.store-warn-row(阈值行)、.purge-opts / .purge-opt / .purge-sum(清理选项)。?v= 升到 3.77.0。@media (max-width:350px) 与 @media (max-width:315px) 两段。VERSION 升 v3.76.1。?v= 缓存参数升到 3.76.1。?v= 缓存号已升到 3.76.0),顶栏版本号应为 v3.76.0。?v= 缓存号已升到 3.75.0),顶栏版本号应为 v3.75.0。?v= 缓存号已升到 3.74.1),顶栏版本号应为 v3.74.1。user_id)隔离,改密码后 ID 不变,数据还挂在同一个账号下面。?v= 缓存号已升到 3.74.0)。若邮件链接提示「无效或已过期」,去云端后台 Authentication → URL Configuration 把本工具网址加进 Redirect URLs;链接默认 1 小时有效。?v= 缓存号已升到 3.73.0)。?v= 缓存号已升到 3.72.0)。?v= 缓存号已升到 3.71.0)。?v= 缓存号已升到 3.70.0)。?v= 缓存号已升到 3.69.1)。?v= 缓存号已升到 3.69.0)。?v= 缓存号已升到 3.68.0)。ALTER TABLE cb_prices ADD COLUMN IF NOT EXISTS 时间 TEXT; 即可(建表脚本已同步加入)。其余都是界面/交互改动,没改任何已有字段名。上传 Cloudflare Pages 后请 Ctrl+F5 强刷(三个 ?v= 缓存号已升到 3.67.0)。?v= 缓存号已升到 3.66.0)。?v= 缓存号已升到 3.65.0)。?v= 缓存号已升到 3.64.0)。?v= 缓存号已升到 3.63.1)。?v= 缓存号已升到 3.63.0)。?v= 缓存号已升到 3.62.0)。test_v3600.js 114/114(新增 N1~N4:登记损耗支付方式默认一致、导入换号后关联标记重映射);回归 test_v3550.js 32/32、test_v3560e.js 35/35、test_v3560f.js 29/29、test_v3560g.js 27/27、test_v3570.js 27/27、test_v3571.js 26/26、test_v3572.js 17/17、test_v3581.js 20/20、test_v3581b.js 18/18、test_v3581c.js 31/31、test_v3581d.js 39/39、test_v3581e.js 47/47、test_v3581f.js 38/38、test_theory_v3560.js 13/13、test_theory_v3560b.js 30/30,全部通过。?v= 缓存号已升到 3.61.0)。test_v3600.js 105/105(含新增 L 节:复制预填记一笔不保存 / 提示点击即消失);回归 test_v3550.js 32/32、test_v3560e.js 35/35、test_v3560f.js 29/29、test_v3560g.js 27/27、test_v3570.js 27/27、test_v3571.js 26/26、test_v3572.js 17/17、test_v3581.js 20/20、test_v3581b.js 18/18、test_v3581c.js 31/31、test_v3581d.js 39/39、test_v3581e.js 47/47、test_v3581f.js 38/38、test_theory_v3560.js 13/13、test_theory_v3560b.js 30/30,全部通过。?v= 缓存号已升到 3.60.0)。test_v3600.js 64/64(登记损耗全链路 / 防重复提示 / 损耗率 / 窄屏筛选行 / 收入退菜 / 来源改日期同步);回归 test_v3550.js 32/32、test_v3560e.js 35/35、test_v3560f.js 29/29、test_v3560g.js 27/27、test_v3570.js 27/27、test_v3571.js 26/26、test_v3572.js 17/17、test_v3581.js 20/20、test_v3581b.js 18/18、test_v3581c.js 31/31、test_v3581d.js 39/39、test_v3581e.js 47/47、test_v3581f.js 38/38、test_theory_v3560.js 13/13、test_theory_v3560b.js 30/30,全部通过。?v= 缓存号已升到 3.59.0)。test_v3581.js 20/20、test_v3581b.js 18/18、test_v3581c.js 31/31、test_v3581d.js 41/41、test_v3581e.js 47/47、test_v3581f.js 38/38、表单尺寸检查 check_form_v3590.js 12/12;回归 test_v3550.js 32/32、test_v3560e.js 35/35、test_v3560f.js 29/29、test_v3560g.js 27/27、test_v3570.js 27/27、test_v3571.js 26/26、test_v3572.js 17/17、test_theory_v3560.js 13/13、test_theory_v3560b.js 30/30,全部通过。?v= 缓存号已升到 3.58.0)。test_v3571.js 26/26、test_v3572.js 17/17 通过;回归 test_v3570.js 27/27、test_v3560g.js 27/27、test_v3560f.js 29/29、test_v3560e.js 35/35、test_v3550.js 32/32、test_theory_v3560b.js 30/30、test_theory_v3560.js 13/13,全部通过。display:none 藏,行高会变;改成占位式隐藏(看不见但占位),来回点标题行高度完全一致。?v= 缓存号已升到 3.57.0)。test_v3570.js 27/27 通过(提示条常显 12 项、工具条预留占位 14 项含窄屏、无 JS 报错 1 项);回归 test_v3560g.js 27/27、test_v3560f.js 29/29、test_v3560e.js 35/35、test_v3550.js 32/32、test_theory_v3560b.js 30/30、test_theory_v3560.js 13/13,全部通过。Cannot read properties of undefined)。已加兜底初始化,全程无报错。?v= 缓存号已升到 3.56.0)。test_v3560g.js 27/27 通过(版本号与缓存号 3 项、提示条 7 项、单条改内容预填与写回 9 项、日历四档高度 5 项、无 JS 报错 1 项);回归 test_v3560f.js 29/29、test_v3560e.js 35/35、test_v3550.js 32/32、test_theory_v3560b.js 30/30、test_theory_v3560.js 13/13,全部通过。: 是 Windows 文件名禁用字符(\ / : * ? " < > | 都不行),直接写进文件名会存不下来或被截断;改用「时」「分」既避开非法字符,中文读起来也最顺。2026-10-09T14:05:33.000Z 改成「2026-10-09 22:05」这种好读的写法)。0.00,一眼能看出「这里可以管周期账」。0.00。mInBox / mOutBox),高亮与结余卡走同一套样式,五张卡都能正常亮。renderFilters(),按钮文字现在会随卡片点击立即更新。Cannot read properties of undefined (reading 'handleEvent'))——原因是在图表自己的点击事件里当场把图表销毁重画了。现在把重画延到本次事件走完再执行,报错消失。assets/vendor/ 下三个底层组件:Supabase 云端组件、Chart.js 走势图、Excel 导出库。这三个文件线上全是 404,所以不只是云端登录,走势图和 Excel 导出在线上其实也一直是坏的。现在部署包补齐到 18 个文件,并且加了自动防线:主页面引用的每个文件都必须真实存在于包里,否则打包直接报错,这类「漏打包」以后不会再发生。1,它不是合法颜色:边框画不出来回退成深色、背景被算成黑色,于是 12 个方框全黑。现在读取时做校验:只认正常的十六进制颜色(如 #ff0000),其它一律按「空 = 跟随主题」处理——老账本打开就自动恢复,不用手动清任何设置。#000000,看着像没恢复成功(实际存的已是「跟随主题」)。现在改成:留空时取色框显示当前主题的主色,旁边文字提示「跟随主题」;自定义时显示所选色并提示色值;切换主题时若设置面板开着,取色框也即时跟着变。.slice 直接报错。除上面的自愈外,筛选、趋势、日历等所有读日期的地方都加了 String() 防御,数字日期也不会再崩。.json(最早版的格式),而「备份数据」早改成了下载 .xlsx——等于备份了却选不进来。现已放开:.xlsx 和旧 .json 都能选。ALTER TABLE cb_records ADD COLUMN IF NOT EXISTS 时间 TEXT; 然后回到页面刷新、重试搬家即可(重跑完整建表脚本效果一样)。cbld_adv),不写云端、不动账目,
最后有「恢复默认」一键回到出厂状态。<html> 的
data-adv-* 属性(如 data-adv-compact="1"),页面长相全部交给 CSS 按属性选择器去管——
这样不会和已有的渲染逻辑打架,也不会出现「切个页设置就丢了」。字号档位用 zoom 整体缩放,
同时把容器宽度除以同一个系数(zoom:1.12; width:calc(100% / 1.12)),
只放大不改宽度的话 1280 宽的屏会被撑到 1434、直接冲出横向滚动条。v3.8.0_test.js 79/79 通过:静态断言覆盖「净利两处『不含充值』/ 表脚『含充值』保持原样 / data-dt="fund" 按钮 / fundStat 五项口径 / fundSeries 四条线不填充 / 月度与逐月两条路径 / 切资金往来时跳过收支筛选 / 深浅色配色 / #fundCard 与 #fundGrid / 高级设置七组控件与 ADV_DEF 默认值 / CSS 各 data-adv-* 规则」;运行时真跑两轮——第一轮造「会员充值 100 + 借出 5 + 借入 1 + 支出 30」,验净利下显示「不含充值 ¥100.00」、切「资金往来」后图上确实是「会员充值 100 / 借入 1 / 借出 5 / 还款 0」四条线、切回「收支」恢复两条线、报表卡片五个数与范围标签正确、KPI 收入仍为 ¥0(充值不进收支);第二轮把高级设置全部调成非默认再重启页面,验「紧凑 / 大字号 / 高图表 / 精简记录 / 首页三块收起 / 侧栏图标 / 走势默认资金往来」全部贴回,并验设置页控件状态与设置一致、改一档立刻落盘、恢复默认全部回位。连同回归十套合计 717 项断言全绿(v3.3.0 98 + v3.3.1 109 + v3.3.2 91 + v3.3.3 21 + v3.4.0 57 + v3.4.0_borrow 57 + v3.5.0 41 + v3.6.0 48 + v3.7.0 68 + v3.7.1 48 + v3.8.0 79;其中 3 条因本轮改动而过期的历史断言按新行为更新:v3.3.0 的 switchPage 页面清单、v3.3.2 与 v3.5.0 里「字号档位写在文件末尾」两处判据——判据从「取文件最后 N 字符」改成「该规则必须排在更早那条之后」,含义不变但不怕后面继续追加内容);真实 Chromium 桌面 1280 与窄屏 500 / 360 共 20 张截图目检,各档位均无横向溢出(逐项打印 scrollWidth vs clientWidth 核对)。v3.7.1_test.js 48/48 通过:静态断言覆盖「净额口径与文案 / 日小计排除转账与借还 / 操作条收进 #listEditBar / _skipTrend 开关 / toggleRecSel 与 setAllSel 走轻量路径 / 充值提示文案」;运行时真跑「借出 5 + 借入 1 + 支出 30 → 当天小计只报 ¥30.00、不出现 ¥6.00 → 点郑进入往来条报净额 ¥4.00 → 进编辑态勾选 / 全选 / 退出,全程监测 Chart 构造次数为 0」。连同回归九套合计 638 项全绿。_skipTrend 开关包住图表重画;② 勾选动作改成只动 DOM 的轻量函数,根本不进 renderList。v3.7.0_test.js 68/68 通过:覆盖「会员页签出现与必填校验(先选会员 / 建会员手机号必填)/ 会员充值落库为『会员充值 · 充值收款』/ 收入→会员消费核销显示『不需要细分』/ isLiability 对细分 null 的充值判负债、对核销判非负债 / 批量编辑进退出与全选 / 挂账改名与老数据迁移」。连同回归八套合计 590 项全绿。v3.6.0_test.js 47/47 通过:静态断言覆盖「汇总行 grid 定宽列 / 滚动条占位 / #whoFilterBar 与 matchWho / openRoleRecords / 借还三行与去「借还」角标 / #homeLiab #todayLiab / #liabWriteOffBtn」;运行时真跑「记会员充值 → 净利显示含充值 ¥200.00 → 点核销按钮自动选好细分 → 核销算真实收入 → 借还三行结构 → 挂账点郑哥跳流水页且只见郑哥 → 清除后恢复 → 全程无 JS 错误」。同时把 v3.3.2 老断言里 9 条早已过期的陈旧校验更新到当前行为。连同回归八套合计 521 项断言全绿(v3.3.0 98 + v3.3.1 109 + v3.3.2 91 + v3.3.3 21 + v3.4.0 57 + v3.4.0_borrow 57 + v3.5.0 41 + v3.6.0 47);真实 Chromium 四尺寸 × 6 页 + 登录页 无横向溢出 / 无文字截断 / 无 JS 报错,并截图目检了汇总行对齐、挂账角色列表与角色筛选流水页。v3.5.0_test.js 40/40 通过:静态断言覆盖「两卡口径备注 / 空占位对齐 / 胶囊不换行与窄屏一行 / 借还未选中橙描边已删 / #bwWho 下拉与+新建角色 / #bwAccChips 与默认按钮 / 记录两行新文案 / rec-meta 空行不渲染」;运行时真跑「登录 → 首页两处备注可见 → 切借还 → 跟谁下拉含预置角色与+新建 → 点「现金」chip 选中 → ⭐ 设默认后按钮变「取消默认」且 chip 带 ⭐ → 记一笔借入王哥(带利息)→ 第一行「借入 [借还] 我欠王哥 · 利息 ¥8.00」→ 无 .rec-debt 单独行 → 第二行记账人 → 全程无 JS 错误」。连同回归五套合计 382 项断言全绿(v3.3.0 98 + v3.3.1 109 + v3.3.3 21 + v3.4.0 57 + v3.4.0_borrow 57 + v3.5.0 40)。ALTER TABLE cb_records ADD COLUMN IF NOT EXISTS 利息 NUMERIC(12,2);(完整建表脚本在「系统文件 / supabase_schema.sql」,已同步更新)。不执行的话记账能照常用,只是保存借还的利息时会提示缺列。老的欠账/收账记录由程序自动迁移,不会丢失、不需要手工处理。v3.4.0_test.js 与 v3.4.0_borrow_test.js 两套专项测试,连同原有三套回归合计 343 项断言全绿:静态断言覆盖「类型栏四档含借还 / 借还面板 4 个方向 / 利息字段进表 / 迁移函数只跑一次 / 收入环形切换按钮 / 三组默认星星按钮 / 首页第三格本月净利 / 汇总行去规格与涨跌前置 / 走势图不跳号」;运行时真跑「登录 → 切借还 → 记一笔借入(带利息)→ 账户余额增加 → 记一笔还债 → 欠款余额减少 → 列表显示『欠 张师傅 · 待还』→ 借还往来页按人汇总 → 老欠账记录自动迁移 → 设默认分类后重开表单自动选中 → 全程无 JS 错误」。v3.3.3_test.js 20/20 通过:静态断言覆盖「首页三卡移除 / 单价回侧栏 / 汇总行一行居中 / 物料名去重单位 / 版本号一致」五处落点;运行时真跑「登录 → 无 #todaySummary → 点单价 tab 进页 → 我的页无单价卡 → 空数据提示 → 记两条猪肉单价(19 与 10)→ 汇总行出现最低/最高/价差且同处一行 → 物料名不含重复单位 → 单位仍在最新单价右侧(10 元/斤)→ 全程无 JS 错误」。同时回归 v3.3.0_test.js 98/98、v3.3.1_test.js 109/109,合计 227 项全绿。全程无 JS 运行时错误。v3.3.2_test.js 87/87 通过:静态断言覆盖 5 类修复的 CSS/HTML/JS 落点;运行时真跑一遍「勾选→展开→分类自动填充→物料快捷联想(输入/点选)→缺项被拦住并提示→保存后流水 +1 且单价 +1(材质/单价/分类逐字段核对)→勾选自动复位→转账时自动隐藏→供应商区块存在且有输入与按钮」。同时回归历史套件:v3.3.1_test.js 108/108、v3.3.0_test.js 99/99、v3.2.0 29/29、v3.1.2 25/25、v3.1.1 40/40、v3.1.0 47/47、v3.0.0 48/48,合计 483 项全绿;并用真实 Chromium 在 1280×900 下截图/测量逐条确认(首页统计卡 341px × 3 铺满、汇总行价差胶囊、供应商 259px 等宽、弹窗两栏 186px 等宽且两张截图肉眼确认)。全程无 JS 运行时错误。v3.3.1_test.js 108/108 通过:静态断言覆盖 7 类修复的 CSS/HTML/JS 落点,运行时真实点一遍「记一笔→汇总无占位符→走势高低价→复制记录→快捷录入(输入/点选/回车三种)→管理物料筛选与配色与编辑→供应商返回不丢内容→分类管理按钮对称/填充色/补齐预览/取消不改动/补齐幂等」。同时回归 v3.3.0_test.js 扩到 98/98 通过(补充了筛选项、返回流程、二次确认等新断言),并跑通 v2.4 起的全部历史套件;全程无 JS 运行时错误。v3.3.0_test.js 82/82 通过。v3.3.0_test.js 82/82 通过(静态 40 项:HTML 页面与导航顺序、CSS 涨跌/异动样式、app.js 函数与接线、core.js 数据层登记、schema 建表;运行时 42 项:本机与云端各跑一遍完整增删改查、汇总涨跌、走势、搜索、物料与供应商管理、一键生成支出、全程无 JS 错误)。另跑全量历史回归(v2.4~v3.2.0 共 12 套)功能项全部通过;手机端用真实 Chromium 巡检 4 种尺寸 × 6 页面 + 登录页,无横向溢出 / 无文字截断 / 无 JS 报错(本次据此修好了「底部导航被挤成两行挡住保存按钮」的真实缺陷)。v3.2.0_test.js 29/29 通过。v3.2.0_test.js 29/29 通过(静态 16 项:两个容器、CSS 样式、三个函数、取前 8、三处刷新点;运行时 13 项:本机模式真实保存后常用语按频率出现/排序/隐藏、点 chip 填值、切收入方向过滤、备注不挑方向、全程无 JS 错误)。全量回归 v3.1.2 历史测试功能项 23/23 通过(仅该老测试里写死的版本号字符串随升版失效,属预期)。a@example.com 记账署名「a」,短、卡片上放得下,不再挂整串邮箱)。v3.1.2_test.js 22/22 通过(静态 9 项:写入逻辑不再分模式 / 取名链路 / 快照不可改 / 提示语同步;运行时 13 项:本机没填姓名、本机填姓名、云端三种场景真实注册并记账,核对落库的记账人字段与改名快照行为)。全量回归 v2 ~ v3.1.1 共 16 个测试脚本全部通过。switchDataSource(),不是各写一套——以后改逻辑不会漏改一处(旧版这类「两处各写一遍」最容易出岔子)。v3.1.1_test.js 40/40 通过(静态 19 项:卡片顺序 / 公用函数唯一性 / 按钮文案与绑定 / 版本号;运行时 21 项:分别以云端模式和本机模式启动,真实打开个人设置、点按钮、走确认框,并核对「我的」页卡片序号)。全量回归 v2 ~ v3.1.0 共 14 个测试脚本全部通过。.type-btn.on[data-t="转账"] 的填充(跟随主题主色),三个 tab 一眼就能看出选中的是哪个。user_metadata,不额外建表,对数据库结构零影响;本机模式则写在本机账号表里,读取方式与云端完全一致。记账人 字段)。以后改了姓名,老记录仍显示当时的名字——不然「追溯」就失去意义。schema cache,原先会被上面那条通用提示抢先命中,用户看不到究竟缺哪一列;现在缺列判断排在前面。cb_records 增加 记账人 TEXT,并补上兼容老库的 ALTER TABLE ... ADD COLUMN IF NOT EXISTS(对已有库只加列、不动数据)。cb_records 加了 记账人 列——没跑脚本的话,云端模式记新账时会提示「还缺『记账人』这一列」并给出要执行的 SQL。脚本用 ADD COLUMN IF NOT EXISTS,重复执行安全。旧的流水记录没有这个字段,界面显示为空(明细表显示「—」),不影响任何统计口径。本机模式无需任何操作。v3.1.0_test.js 47/47 通过(含真实跑一遍「注册带姓名 → 记一笔 → 列表显示记账人 → 改名后老记录不变 → 设本机记账人后新记录换名字」);全量回归 v2.4 ~ v3.0.0 及早期 7 个测试脚本全部通过。_from() 在云端分支里写成了 return this._from(table)——调用了它自己。这是个无限递归,一进云端模式立刻栈溢出、整页白屏,连报错都来不及显示。改成真正调用云端客户端 this.sb.from(table) 后正常。这个 Bug 单看代码很难发现(名字太像"正确的调用"),是靠真实浏览器跑通登录流程才暴露出来的。http / https)默认走云端;直接双击文件打开(file://)默认走本机。这样部署后不用再手动切模式,也避免"数据库还没配好 + 没网"时整个页面打不开。/ 自动跳到 餐饮流水管家.html。少它访问 xxx.pages.dev 就 404(这个文件必须留在部署包最外层,挪进子文件夹就失效)。程序临时文件/_verify_cloud_real.js),用真实 Chromium 打开真实页面、加载真实 Supabase SDK、真实发请求:http:// 打开):确认自动进入云端模式、客户端对象真的被创建、真实探测云端认证接口能拿到服务器响应(返回 400 = 服务器可达、网络与配置都通),页面提示「云端连接正常」;file:// 打开):确认自动进入本机模式、不创建客户端、页面显示本机模式说明。http 协议下的回归测试会自动走云端模式、而测试环境连不上云端,导致 10 个旧脚本连锁失败。没有去改业务代码迁就测试,而是给测试环境加了一层"云端文件返回空桩"的拦截,让它们维持 v3.0.0 之前的本机行为;同时修掉两个早就存在的测试误报(主题数统计没去重、版本号断言写死)。改完 v2.0.0 → v2.6.3 的全部回归重新跑通。IF NOT EXISTS,重复执行不会破坏已有数据。不打算上云、继续用本机模式的话,这一步可以完全跳过。程序临时文件/v3.0.0_test.js 与 程序临时文件/_verify_cloud_real.js)。系统文件/备份_v2.6.3_pre_v3.0.0/。按"系统文件/根目录只保留最新 1 份备份"的约定,上一份备份已移入 系统文件/历史归档/。width:33.33%——在网格里再取 33.33%,按钮宽度只剩约 39px,两个字放不下,只能上下叠成一根竖条,占了将近两行的高度,很难看也很好笑。删掉那句多余宽度即可。100dvh(原来 100vh 会被手机地址栏撑出一小截无意义滚动);④ 分类「细分」的小圆点触控高度从 28px 抬到 34px(原来比手指小,容易点错),输入框字号抬到 16px,避免 iOS Safari 一聚焦就自动放大整页。程序临时文件/mobile_audit.js):启动真实 Chromium 浏览器,模拟 iPhone 14 Pro(393px)/ 主流安卓(360px)/ iPhone SE(375px)/ 极窄小屏(320px)四种尺寸,真实走一遍「注册 → 记 7 笔账 → 切五个页面」,每一页都自动找出所有超出屏幕右边界的元素并打印出它的标签、左右坐标、宽度和文本内容,同时检查金额有没有被容器截断。修复前跑出 42 条问题(其中 2 条是真实布局缺陷),修复后全部归零——4 种尺寸 × 5 个页面 + 登录页 + 个人设置弹层,无横向溢出、无文字截断、无 JS 报错。这个脚本留在项目里,以后每次改版都可以复跑。程序临时文件/v2.6.3_test.js 与 程序临时文件/mobile_audit.js)。fmtMoney 改成自带货币符号:正数 ¥1,234.56、负数 -¥1,234.56。这个函数在全站有 72 处调用且纯做展示、不参与任何计算,所以改一处 = 全站一次性统一,以后新增的金额展示也自动带单位,不会再漏。同时清理掉历史上 18 处手写的「¥」「元」,避免出现 ¥¥1.00 或 ¥1.00 元 这类重复。100 变成 ¥100(上万时显示 ¥1.2万),鼠标悬停提示同样带 ¥;「哪天花得多(日历)」标题补成「哪天花得多(日历 · 单位:元)」,「逐月收支对比」补成「逐月收支对比(单位:元)」。之所以用标题标注而不是给每个坐标轴刻度加符号,是因为刻度空间太窄,逐个加 ¥ 会挤成一团。¥12,345.67 把三列小格子撑破;饼图图例的金额加了「禁止折行、不被压扁」,金额长时优先压缩左侧分类名。1,234.56)且不带 ¥ 的,全部报出来。扫描确实抓到了一处(记账页帮助文案「例:房租每月 5 号扣就填 5」里的天数),加了「数字紧跟 号/天/日/月/期/笔 等 = 非金额」的排除规则后,全站裸金额归零。这条扫描留在了 程序临时文件/v2.6.2_test.js 里,以后每轮迭代都会自动复查一遍,防止新加的金额展示又漏了单位。程序临时文件/v2.6.2_test.js)。THEMES 表里墨灰(ink)的按钮图标写的就是 🖤(黑色心形 emoji),切到墨灰后顶栏右上角那个圆按钮就成了一颗"黑心"。v2.6.1 换成 🌫️(雾)——语义贴「墨灰」、也不突兀;同时「我的 → 主题色」里墨灰的色卡渐变同步成和顶栏完全一致,点之前看到的就是点之后的效果。#94a3b8 → #cbd5e1 之后,白色文字在这层浅灰上几乎看不清——按 WCAG 对比度公式实测只有 1.6:1(正文可读标准是 4.5:1)。v2.6.1 给顶栏加了自动配色变量:深色顶栏继续用白字,墨灰这种浅灰顶栏自动换成深灰字 #1e293b(实测 5.7 / 9.9:1),店名、日期、按钮、版本徽标全都看得清,同时保留"不黑心"的观感。按钮与徽标的半透明底也从"白色半透明"换成"深色半透明",在浅灰底上才有按钮的立体感。u.email 无条件显示,本机模式下还挂着云端登录留下的邮箱地址,和「本机模式没有账号」自相矛盾。v2.6.1 起本机模式顶栏显示「👤 本机模式」,云端模式才显示邮箱;鼠标悬停的提示文案也按模式区分。slate(深色蓝紫)最好(14.6 / 7.6),purple / blue / pink 属"小字勉强"(3.5~4.0),另有 teal / green / orange 三套的白字对比度偏低(约 2.3~2.8,渐变浅色端尤其明显)。这三套属"饱和彩底 + 白字"的常见设计,本次未改动以免打乱你已习惯的观感;若想一起调深,说一声即可。程序临时文件/v2.6.1_test.js)。系统文件/备份_v2.6.0_pre_v2.6.1/。按"系统文件/根目录只保留最新 1 份备份"的约定,备份_v2.5.0_pre_v2.6 已移入 系统文件/历史归档/。.home-hero 顶部右侧加 #homeHeroDate,与今日面板共用同一个 dateTxt 变量,格式完全一致;原来的月份标签改为「翻到非本月时才显示的徽标」——正常看本月时隐藏(避免和日期重复显示两个月),用顶部左右箭头翻到历史月份时才以胶囊样式亮出「2026年8月」,提示你现在看的是哪个备份月。CB.user.email 还残留着之前云端登录过的邮箱(如 chenshuia@outlook.com),看起来像"本机也有账号"。实际上登录/注册页是给云端模式用的:云端模式数据存在你自己的云端数据库,必须先登录;本机模式数据只存这台电脑的浏览器,不需要登录、也没有账号。v2.6.0 把「个人设置」里的「👤 账号邮箱:xxx」在本机模式下改成「👤 账号:本机模式无账号(数据存这台电脑浏览器里)」,云端模式仍正常显示邮箱。renderFilters / renderFCat2 用了 Object.keys().sort()(拼音字母序),而「记一笔」页走的是 CB.catTree()(分类表里的「排序」字段顺序)。v2.6.0 把两个下拉都改成按 CB.catTree('支出') / CB.catTree('收入') 的顺序排,二级细分同样取该一级分类在 catTree 里的明细顺序——两个页面的分类顺序从此完全一致。<details> 版本卡片(漏掉 v1.1.0~v2.0.0 共 14 条)。另外顶部目录第 4 行还残留一个没被解析的转义换行符(反斜杠 n),导致那一行显示错乱。v2.6.0 把顶部目录 + 左侧目录都补齐到全部 23 个版本(含本版),并清掉那个转义换行符。程序临时文件/v2.6_test.js)。系统文件/备份_v2.5.0_pre_v2.6/。按"系统文件/根目录只保留最新 1 份备份"的约定,备份_v2.4.0_pre_v2.5 已移入 系统文件/历史归档/。.home-hero 一样的 linear-gradient(135deg, var(--primary), var(--primary-2)) 紫渐变背景,三列小格改用半透明白底(rgba(255,255,255,.16)),整张小卡视觉上和「本月结余」是一对。右上角日期标签从「9月10日 · 周四」改成「2026年9月10日 周四」,与顶栏 todayLine 统一格式。$('todayLine').textContent 从 CB.todayStr() + ' ' + CB.weekday(...)(输出 2026-09-10 周四)改成与今日面板一致的「YYYY年M月D日 周X」格式。两处同步,开首页 / 看顶栏看到的日期样式一致。doLogout 函数都删了过头了。v2.5.0 重新加回 doLogout 函数,并在「我的 → 顶栏账号标识 → 个人设置」弹窗底部加一个「⏻ 退出登录」按钮,点了二次确认后真退出(云端模式调 CB.signOut(),本机模式兜底清 cb-session 后刷新)。只在云端模式显示——本机模式数据存浏览器,"退出"反而误导,所以换成一行「💡 本机模式没有退出概念…」说明。顶栏 ⋯ 菜单里不放退出(保持你上轮的诉求)。renderFCat2:和 renderFilters(一级)一样按类型分组,未选一级分类时「—— 支出 ——」/「—— 收入 ——」两组都显示;选了某个一级时只显示对应类型那组细分(避免空组)。用同一套 catType 字典推断二级所属类型。bindExportRemind 的循环改为 d <= 28,每月都有 28 号、永远能到日子。红条提醒逻辑本身(todayDay >= cfg.day)不变。#334155 → #64748b 在视觉上像是中心偏黑、整条顶栏偏"闷"。v2.5.0 换成更柔和的中灰渐变 #94a3b8 → #cbd5e1(slate-400 → slate-300),整体偏明亮、不再"黑心"。其他 7 套主题顶栏不变。系统文件/备份_v2.4.0_pre_v2.5/。按"系统文件/根目录只保留最新 1 份备份"的约定,把 备份_v2.2.1_pre_v2_3 和 备份_v2.3.0_pre_v2.4 移到了 系统文件/历史归档/ 下。系统文件/备份_v2.3.0_pre_v2.4/,根目录只保留最新版 v2.4.0。cb-theme + cb-topbar,下次打开自动还原。顶栏月亮/太阳按钮仍可循环切下一套。cb-topbar。下次打开浏览器自动还原。顶栏原月亮/太阳按钮仍循环切主题色(兼容老习惯)。cb-cat-colors),换电脑前记得用「备份与恢复」把本机数据一起带走。core.js / app.js 的引用一直挂着 ?v=1.6.0,style.css 挂着 ?v=1.7.0,而程序实际已经到 v1.7.1。浏览器发现网址没变就直接读本地缓存,于是 v1.6.1 之后的所有新功能和修复都加载不到——表现就是「明明改了,打开还是老样子」。现在三个引用全部统一为当前版本号?v= 参数。这个参数的作用就是告诉浏览器「文件变了,别用缓存」,漏改等于白改——这也解释了为什么之前几次反馈「改了没效果」。core.js?v=1.6.0 / app.js?v=1.6.0 两年没升,v1.6.1~v1.7.1 的代码改动用户浏览器根本没加载style.css?v=1.7.0 停在上一版,v1.7.1 新增的样式(明细前缀、新建角色选项配色等)不生效input + 旁边的+」组合去掉,直接换成下拉框。选项从上到下:① 「+ 新建角色…」(高亮蓝紫,单独配色)② 已有角色(来自历史记录的对方 + cb-custom-roles 手动库)。选「+ 新建角色…」自动弹出新建窗、保存后下拉自动选中新名字、再下一次直接选就行,不能再像 input 那样随手敲字明细:调味料」「支付:微信」,没填的字段也明确写成「明细:(未填)」「支付:(未选)」(灰斜体)⏰HH:MM:SS,下面的日期行又重复拼了一遍 今天 · 周二 · HH:MM:SS,同一条记录的时间戳显示两次。现在日期行只显示「今天 · 周二」,时间戳只显示在 meta 行那个 ⏰ 处