Files
workspace/code/app/.workbuddy/memory/2026-06-22.md
T
2026-06-22 21:44:33 +08:00

4.9 KiB
Raw Blame History

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: 添加 <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 + 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: 数据库连接信息、所有表结构速查