# 2026-06-22 ## 添加测试登录功能 ### 目标 前端 login.tsx 中的 test1/test2 需要实现模拟登录,后端接受并走完整 auth 流程(生成 JWT、查 family 等)。 ### 改动文件 **后端:** - `app-go/internal/types/auth.go` — 新增 `LoginTestReq` 结构体(user_id, nickname, avatar) - `app-go/internal/handle/auth.go` — 新增 `LoginTest` handler:验证用户存在 → 更新登录时间 → 查 family → 生成 JWT → 返回 `LoginResp` - `app-go/internal/router/router.go` — 新增路由 `POST /auth/login/test` **前端:** - `app-rn/src/types/auth.ts` — 新增 `LoginTestParams` 接口 - `app-rn/src/request/api.ts` — 新增 `loginTestApi()`,导入 `LoginTestParams` - `app-rn/src/app/auth/login.tsx` — 实现 `test1()` 方法(硬编码用户 id=801787924787269, nickname=Zhang),修复两个测试按钮的 `onPress` 绑定(从 `handleLoginQQ` 改为 `test1` / `test2`) ### 关键设计 - 后端 `/auth/login/test` 不在白名单需要额外处理,但路由器中它属于 `/auth/login/**` 前缀,前端的 WhiteList 使用 prefix 匹配 → `/auth/login/test` 已被自动放行 - 生成的 token 是标准 JWT,auth 中间件无需任何改动即可正常识别 - `test2()` 目前为空占位,后续再实现 ### 数据库依赖 需要确保 `b_user` 表中存在 id=801787924787269 的用户记录,否则测试登录会返回"测试用户不存在"。 ## 子模块动画改为底部滑入/滑出(B 方案) - ModuleLayout.tsx: handleClose 从 `router.replace("/(tabs)/home")` 改为 `router.back()` - finance/(tabs)/_layout.tsx: 添加 `` ## tools/index.tsx 改为宫格布局 移除:列表组件(ListGroup/PressableFeedback/Separator/LegendList)、AZIndex 字母索引 改为:LayoutView.ScrollView + 3 列宫格(flexWrap),每个格子含图标、标题、描述 保留:顶部搜索框、底部关闭按钮、EmptyState ### 第二轮优化 - 去掉描述文案,卡片更紧凑 - 加回 AZIndex 字母导航,通过 onLayout 记录分组标题位置实现 scrollTo - 卡片改为固定上下 padding(不设 aspectRatio),尺寸更小 - 按行分组渲染,末尾行空位用占位 View 填充,保证左对齐 - AZIndex 始终显示(搜索时位置基于复合 key 追踪) ## 修复测试登录 404 问题 `config.yaml` 中 `base_url: /app`,开发环境没有 nginx 剥离前缀,导致请求路径 `/auth/login/test` 无法匹配路由 `/app/auth/login/test`。 **修复:** `config.dev.yaml` 添加 `base_url: ""`,覆盖掉主配置的 `/app` 前缀。 ## 工具页宫格样式对齐首页 - 组件:Pressable → PressableFeedback + PressableFeedback.Ripple - 样式:h-20 / rounded-xl / shadow-lg / 去图标灰底 / 图标 26px / text-xs ## 子应用收藏(星标)功能 **数据库**: 新建 `b_app_favorite` 表(family_id + app_id 唯一约束) **修复**: `b_app_favorite` 加入 `auditExcludeTables`(meta_field.go),因为表内已有 user_id 追踪、无需 create_by/update_by 审计字段。否则 saveData 自动注入不存在的列 → 500。 - **再次修复**: 用户要求不应跳过审计,改为给表添加 `create_by` / `update_by` 列,meta_field.go 撤回修改。 ## PROJECT_CONTEXT.md 补充开发规范 新增 "Development Conventions" 章节: - API 规则:禁止新增专用 CRUD 接口,一律使用 loadData/saveData/loadDataBySql/getUniqueId。如需新增接口须先询问,且新增的也应是通用接口。 - 数据库规则:所有业务表必须含 create_time/update_time/create_by/update_by 四列,不要随意加到 auditExcludeTables。 - 前端规则:复用现有 store 和通用 API,不创建 RPC 风格封装。 **后端**: 无新增路由/handler,全部复用已有通用接口(loadData / saveData / getUniqueId) - 重新清理:删除了之前错误创建的 `types/app.go`、`handle/app.go` 和 `/app/favorite/*` 路由 **前端**: - `request/api.ts`: 删除 toggleFavoriteApi / getFavoritesApi,改用 loadDataApi + saveDataApi + getUniqueIdApi - `store/favorite.ts`: fetchFavorites 用 loadDataApi 查 b_app_favorite;toggleFavorite 用 loadDataApi 查存在 + saveDataApi 删/插 + getUniqueIdApi 取新 ID - `tools/index.tsx`: 卡片右上角 Star 按钮(已修复事件冲突:Star 独立于导航主体,外层 View 容器 + z-10 避免触摸冒泡)+ 收藏分区置顶 + 搜索时不拆分收藏分区 - `home/index.tsx`: 改为 3 列宫格(同 tools,固定 itemWidth + 按行分组)+ 收藏优先 + "更多"占位自动补到末尾行 + 跳转 /tools ## 创建项目 Skill:allapp-conventions 位置:`.workbuddy/skills/allapp-conventions/` - `SKILL.md`: 5 条规则(读 package.json、禁止专用 API、审计字段、不重复造轮子、家庭为中心)+ 项目结构速查 + 前端关键依赖库表 + 代码示例 - `references/db-config.md`: 数据库连接信息、所有表结构速查