From 0ca93ec97ebf3bf581b1a56733efae7c769f00c0 Mon Sep 17 00:00:00 2001 From: richarjiang Date: Tue, 7 Apr 2026 09:22:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 21 +++++- packages/app/src/pages/admin/members.vue | 73 ++++++++++++++++++++- packages/app/src/stores/admin.ts | 3 +- packages/server/src/user/user.controller.ts | 10 ++- packages/server/src/user/user.service.ts | 28 +++++++- packages/server/tsconfig.build.tsbuildinfo | 2 +- 6 files changed, 129 insertions(+), 8 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index ac3001d..b3e1bae 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -66,4 +66,23 @@ pnpm deploy:server # 部署后端到生产环境 ### 数据库 - Prisma schema 位于 `packages/server/prisma/schema.prisma` -- 核心数据模型:User(用户)、Studio(场馆)、TimeSlot(时段)、Booking(预约)、Membership(会员卡)、CardType(卡种)、Order(订单) \ No newline at end of file +- 核心数据模型:User、Studio、TimeSlot、Booking、Membership、CardType、Order +- 注意:查询会员列表时,booking 统计通过 `groupBy` 批量获取,避免 N+1 查询 + +### 卡类型枚举 +- `CardTypeCategory` (TIMES/DURATION/TRIAL) 定义在 `packages/shared/src/enums.ts` +- 会员管理筛选使用特殊值 `NONE` 表示无卡/无有效会员(不在枚举中) +- 前端选项硬编码在 `src/pages/admin/members.vue` 的 `cardTypeOptions`,需与枚举保持同步 + +### 管理后台 API 模式 +- `/admin/members` 支持 `page`, `limit`, `search`, `cardType` 参数 +- `cardType=NONE` → 无有效会员的用户;其他值对应 `CardTypeCategory` +- 预约统计(total/completed/cancelled)通过 `groupBy` 批量查询 + +### 筛选组件模式 +- picker 筛选使用 300ms debounce 再触发加载,避免频繁请求 +- 列表分页使用 `onReachBottom` + `hasMore` 标志位实现无限滚动 + +### Admin Store (`src/stores/admin.ts`) +- 聚合所有管理端 API 调用:weekTemplates、cardTypes、studioConfig、members、bookings、orders、stats 等 +- 遵循不可变更新原则:`data` 赋值使用展开运算符 `[...newData]` \ No newline at end of file diff --git a/packages/app/src/pages/admin/members.vue b/packages/app/src/pages/admin/members.vue index b11d1ac..b5eb70e 100644 --- a/packages/app/src/pages/admin/members.vue +++ b/packages/app/src/pages/admin/members.vue @@ -15,6 +15,19 @@ × + + + {{ cardTypeOptions[cardTypeIndex].label }} + + + 搜索 @@ -115,7 +128,7 @@