4.9 KiB
4.9 KiB
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— 新增LoginTesthandler:验证用户存在 → 更新登录时间 → 查 family → 生成 JWT → 返回LoginRespapp-go/internal/router/router.go— 新增路由POST /auth/login/test
前端:
app-rn/src/types/auth.ts— 新增LoginTestParams接口app-rn/src/request/api.ts— 新增loginTestApi(),导入LoginTestParamsapp-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: 添加
<Stack.Screen options={{ animation: "slide_from_bottom" }} />
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 + getUniqueIdApistore/favorite.ts: fetchFavorites 用 loadDataApi 查 b_app_favorite;toggleFavorite 用 loadDataApi 查存在 + saveDataApi 删/插 + getUniqueIdApi 取新 IDtools/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: 数据库连接信息、所有表结构速查