Hotfix release available: 2026-07-14c "Mort".
upgrade now! [57.3] (what's this?)
家庭管理系统h5:冷启动文件
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| 家庭管理系统h5:冷启动文件 [2026/10/11 01:51] – 4.54 棕色按钮改安排 172.17.0.1 | 家庭管理系统h5:冷启动文件 [2026/10/18 01:18] (current) – 4.58 新增成长记录模块 172.17.0.1 | ||
|---|---|---|---|
| Line 334: | Line 334: | ||
| | 灰色切换按钮 | `▶ 启用` 3 个 / `⏸ 禁用` 14 个(不受影响)✅ | | | 灰色切换按钮 | `▶ 启用` 3 个 / `⏸ 禁用` 14 个(不受影响)✅ | | ||
| | 页面加载 | ✅ 正常(不再卡「加载中」)| | | 页面加载 | ✅ 正常(不再卡「加载中」)| | ||
| + | |||
| + | ====== 4.55 家庭管理:登录态永久保持(localStorage + cookie 双写)(2026-10-10) ====== | ||
| + | |||
| + | **需求**:家庭管理 18932573927 的**登录状态永久保持**(不用反复登录)。 | ||
| + | |||
| + | **背景**:原登录态只存 `localStorage.family_user`(本身无过期),但**微信内置浏览器会不定期清理 localStorage** → 用户被迫重新登录。 | ||
| + | |||
| + | **实现**(`family.html`) | ||
| + | 新增统一登录态管理(cookie 有效期 **10 年**,`SameSite=Lax`,`path=/ | ||
| + | |||
| + | | 函数 | 作用 | | ||
| + | |---|---| | ||
| + | | `saveUser(u)` | 写入:`localStorage` + **cookie** 双份 | | ||
| + | | `loadUser()` | 启动恢复:**localStorage 优先 → cookie 兜底**(若从 cookie 恢复,顺带回写 localStorage)| | ||
| + | | `clearUser()` | 退出登录:**双清**(两处都要清,防残留)| | ||
| + | | `_ckSet/ | ||
| + | |||
| + | **接入点** | ||
| + | - 登录写入:3 处(验证码登录 / 密码登录 / 切换账号)→ 统一改 `saveUser(d.user)` | ||
| + | - 启动恢复:`(function(){ USER=loadUser(); | ||
| + | - 退出登录:`logout()` → `clearUser()` | ||
| + | |||
| + | **验证** | ||
| + | | 场景 | 结果 | | ||
| + | |---|---| | ||
| + | | 登录后 | localStorage ✅ + cookie ✅(cookie 含 10 年过期)| | ||
| + | | **清除 localStorage**(模拟微信清理)| cookie 仍在 ✅,`loadUser()` **成功恢复**为「武燕青」✅ | | ||
| + | | 退出登录(含 cookie 清除)| `loadUser()` 返回 null ✅(需重新登录,符合预期)| | ||
| + | |||
| + | > 说明:cookie 与 localStorage 同域,属于**同一浏览器**范围内持久化;只要不手动「退出登录」、不清除浏览器数据,即可长期免登录。 | ||
| + | |||
| + | ====== 4.56 登录态持久化增强:三重存储(覆盖全部账号)(2026-10-10) ====== | ||
| + | |||
| + | **需求**:18932573927(武燕青)与 **16603395188(倾心)** 的登录状态永久保持。 | ||
| + | |||
| + | **说明**:登录态持久化是**通用机制**(与手机号无关),任何账号登录都会写入三处,因此**所有账号同时生效**: | ||
| + | | 账号 | 姓名 | 角色 | | ||
| + | |---|---|---| | ||
| + | | 18932573927 | 武燕青 | admin | | ||
| + | | 16603395188 | 倾心 | user | | ||
| + | | 13780562913 | 果果 | user | | ||
| + | |||
| + | **三重存储(按可靠性递进)** | ||
| + | | 层 | 介质 | 说明 | | ||
| + | |---|---|---| | ||
| + | | ① | `localStorage.family_user` | 常规读写,最快 | | ||
| + | | ② | **cookie** `family_user`(10 年有效,SameSite=Lax)| ★ 微信清理 localStorage 后仍可恢复(**已实测有效**)| | ||
| + | | ③ | **IndexedDB** `family_auth/ | ||
| + | |||
| + | **恢复顺序**:`localStorage → cookie(同步)`,都无则 `IndexedDB(异步兜底)` → 任一成功即自动登录并回写其它层。 | ||
| + | |||
| + | **验证** | ||
| + | | 场景 | 结果 | | ||
| + | |---|---| | ||
| + | | 登录(如 16603395188)| localStorage ✅ + cookie ✅ | | ||
| + | | **清除 localStorage**(模拟微信清理)| cookie 仍在 → `loadUser()` **成功恢复**为「倾心」✅ | | ||
| + | | 同时清除 localStorage + cookie | 交由 IndexedDB 兜底(★ 本测试浏览器沙箱限制 IndexedDB 未生效;真实手机浏览器一般可用;**前两重已足够**)| | ||
| + | | 手动「退出登录」| 三层全清 ✅(需重新登录,符合预期)| | ||
| + | |||
| + | **给用户的使用建议**:微信里把家庭管理页面**加入浮窗/ | ||
| + | |||
| + | ====== 4.57 果果工资对普通用户开放(只读)(2026-10-10) ====== | ||
| + | |||
| + | **需求**:果果工资模块**对普通用户可见**,可查看每月工资详情,但**只读、不能编辑**。 | ||
| + | |||
| + | **前端(`family.html`)** | ||
| + | | 位置 | 改动 | | ||
| + | |---|---| | ||
| + | | `USER_TABS` | 增加 `" | ||
| + | | 新增按钮 | `+ 新增月份工资` 仅 `isAdminNow()` 显示;普通用户改为提示「👀 仅可查看(如需修改请联系管理员)」| | ||
| + | | 操作列 | 「编辑 / 删」仅管理员显示,普通用户显示 `—` | | ||
| + | | `salEdit()` | 增加 `isAdminNow()` 保护(防绕过前端直接调用)| | ||
| + | |||
| + | **后端(`family_api.py`)** | ||
| + | - 权限白名单新增: | ||
| + | < | ||
| + | if path.startswith("/ | ||
| + | if path.startswith("/ | ||
| + | </ | ||
| + | → 普通用户**只能读**;`POST/ | ||
| + | - 403 提示文案更新为「无权限(普通用户仅可使用家务/ | ||
| + | |||
| + | **验证(普通用户用 16603395188 倾心实测)** | ||
| + | | 项 | 结果 | | ||
| + | |---|---| | ||
| + | | 可见 tab | 🏠家务 / ⭐积分 / 🎂生日 / ⚠️预警 / **💰果果工资** / 👤我的 ✅ | | ||
| + | | 数据 | 正常显示 **8 个月**,累计实发 ¥37719.23 ✅ | | ||
| + | | 新增按钮 | ✅ 已隐藏(显示只读提示)| | ||
| + | | 编辑 / 删 链接 | ✅ 已隐藏(操作列 `—`)| | ||
| + | | 后端 GET | **200** ✅(返回 8 个月)| | ||
| + | | 后端 POST | **403 无权限** ✅ | | ||
| + | | 管理员 | 增删改一切正常 ✅(验证用测试记录已清理)| | ||
| + | |||
| + | ====== 4.58 新增「成长记录」模块(身高/ | ||
| + | |||
| + | **需求**:家庭管理增加模块,记录 **姓名 / 时间 / 身高 / 体重 / 脚长**;每个人按**固定时间间隔**记录一次。 | ||
| + | |||
| + | ===== 数据表(family.db) ===== | ||
| + | < | ||
| + | CREATE TABLE growth(id INTEGER PK, name TEXT, date TEXT, | ||
| + | height REAL, weight REAL, foot REAL, | ||
| + | note TEXT DEFAULT '', | ||
| + | CREATE TABLE growth_cfg(name TEXT PRIMARY KEY, days INTEGER DEFAULT 30, created TEXT DEFAULT '' | ||
| + | </ | ||
| + | |||
| + | ===== 接口(family_api.py) ===== | ||
| + | | 接口 | 方法 | 说明 | | ||
| + | |---|---|---| | ||
| + | | `/ | ||
| + | | `/ | ||
| + | | `/ | ||
| + | | `/ | ||
| + | |||
| + | **权限**:普通用户 **GET 放行(只读)**,POST/ | ||
| + | |||
| + | ===== 前端(family.html) ===== | ||
| + | - 新增 tab **「📏 成长」**(`ALL_TABS` 管理员 / `USER_TABS` 家人只读) | ||
| + | - 每人一张卡片:`每 N 天` + 状态(⏳ 还没有记录 / ✅ 下次 YYYY-MM-DD / ⚠️ 已超期 N 天)+ 上次数据(身高/ | ||
| + | - 管理员卡片右侧:`⚙️ 间隔`(prompt 设置天数)、`+ 记录`;右下 FAB 也可新增 | ||
| + | - 「历史数据」区:日期 + 姓名 + 身高/ | ||
| + | - 新增表单(底部弹出 sheet):姓名下拉(来自 members)、日期(默认今天)、身高/ | ||
| + | |||
| + | ===== 验证 ===== | ||
| + | | 项 | 结果 | | ||
| + | |---|---| | ||
| + | | 建表 | ✅ growth / growth_cfg 自动创建 | | ||
| + | | GET(空库)| ✅ people 自动从 members 生成(席子初、席子恩),间隔默认 30 | | ||
| + | | POST 录入 | ✅ 返回 id;同人同日重复提交覆盖 | | ||
| + | | 状态计算 | ✅ 录入 2026-10-16 → 「2 天前」、下次 2026-11-15(30 天档)| | ||
| + | | 改间隔 | ✅ 席子恩设为 90 天 → 下次变 2027-01-14 | | ||
| + | | 权限 | 普通用户 GET **200** / POST **403** / DELETE **403** ✅ | | ||
| + | | 管理员视图 | ✅ 标题/ | ||
| + | | 普通用户视图 | ✅ tab 可见、数据可见、**无 新增/ | ||
| + | | 收尾 | 测试数据已清理(growth 0 条、cfg 空,回到默认 30 天)| | ||
| + | |||
| + | ⚠️ 注意:`family_api.py` 是 Blueprint,新增路由必须用 `@bp.route`。 | ||
| ====== 5. 排障速查 ====== | ====== 5. 排障速查 ====== | ||
家庭管理系统h5/冷启动文件.1791683494.txt.gz · Last modified: by 172.17.0.1
