rwadurian/frontend/admin-web
hailin ac15d6682a feat(admin): 用户预种数量展示 & 授权申请照片查看
## 功能7:用户管理展示预种数量

### 需求
在用户管理(列表+详情页)展示个人及团队预种份数,
并支持跳转预种管理页查看团队中哪些ID购买了预种。

### 后端变更

referral-service — 新增内部 API:
  - GET  /internal/referral/pre-planting-stats/:accountSequence
  - POST /internal/referral/pre-planting-stats/batch
  从 TeamStatistics 表查询 selfPrePlantingPortions/teamPrePlantingPortions

admin-service:
  - 新建 ReferralProxyService (src/referral/) 代理 referral-service 内部 API
  - UserFullDetailDto 新增 selfPrePlantingPortions, teamPrePlantingPortions
  - user-detail.controller 并行调用获取预种统计
  - user.controller 批量获取用户列表预种统计
  - UserListItemDto 新增 selfPrePlantingPortions, teamPrePlantingPortions
  - pre-planting-config.controller 新增 teamOf 查询参数
    → 先从 referralQueryView 获取团队成员列表
    → 将 accountSequences 传递给 planting-service 过滤

planting-service:
  - internal-pre-planting.controller 的 admin orders/positions 端点
    新增 accountSequences 查询参数,支持按用户列表过滤

### 前端变更

admin-web:
  - 用户列表页表格新增"个人预种(份)"、"团队预种(份)"两列
  - 用户详情页新增预种统计卡片(个人/团队预种份数)
  - 团队预种数字可点击,跳转 /pre-planting?teamOf={accountSequence}
  - 预种管理页支持 teamOf URL 参数,团队过滤模式下显示提示条+返回链接

---

## 功能8:授权管理查看申请照片

### 需求
管理后台无法查看社区/市公司/省公司申请时提供的办公室照片。
原因:authorization-service 收到 officePhotoUrls 后只验证未持久化。
照片文件本身已存储在 MinIO,只需持久化 URL 到数据库。

### 后端变更

authorization-service:
  - schema.prisma: AuthorizationRole 新增 officePhotoUrls String[] 字段
  - authorization-role.aggregate: props/字段/getter/构造/toPersistence/所有工厂方法
  - repository: save() create/update 块 + toDomain() 映射
  - application service: 3个 self-apply 方法传递 officePhotoUrls 到 aggregate
  - admin controller: queryAuthorizations 响应包含 officePhotoUrls

admin-service:
  - schema.prisma: AuthorizationRoleQueryView 新增 officePhotoUrls 字段
  - user-detail-query.repository 接口 + impl: 包含 officePhotoUrls
  - user-detail.dto: AuthorizationRoleDto 新增 officePhotoUrls

### 前端变更

admin-web:
  - 授权管理页表格新增"申请照片"列,点击弹出照片网格 Modal
  - 照片支持点击放大(全屏 lightbox 覆盖层)
  - 用户详情页授权信息 Tab 同样支持查看照片
  - authorization.types.ts / userDetail.types.ts 类型更新

---

## 部署注意事项
1. authorization-service 需运行: npx prisma migrate dev --name add-office-photo-urls
2. admin-service 需运行: npx prisma migrate dev --name add-auth-role-office-photos
3. 需部署: authorization-service, admin-service, referral-service, planting-service, admin-web

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 03:09:17 -08:00
..
nginx refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
public feat(mining-app): improve UX with non-blocking splash and skeleton loading 2026-01-12 21:48:31 -08:00
scripts . 2025-12-07 14:56:13 +00:00
src feat(admin): 用户预种数量展示 & 授权申请照片查看 2026-03-02 03:09:17 -08:00
.dockerignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.development refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.production fix(admin-web): 修复生产环境 API 地址为 rwaapi.szaiai.com 2025-12-19 04:23:29 -08:00
.eslintrc.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.gitignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.prettierrc refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
Dockerfile fix(admin-web): Dockerfile 构建时传入 SNAPSHOT_SERVICE_URL build arg 2026-02-24 02:53:03 -08:00
README.md refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
deploy.sh fix: convert deploy.sh CRLF to LF and add executable permission 2025-12-07 07:01:13 -08:00
docker-compose.yml fix(admin-web): Dockerfile 构建时传入 SNAPSHOT_SERVICE_URL build arg 2026-02-24 02:53:03 -08:00
next.config.ts fix(snapshot): 前端 API 改走 Next.js rewrites 代理 + WebSocket 改 REST 轮询 2026-02-24 00:37:41 -08:00
package-lock.json chore: 更新前端 package-lock.json 同步 socket.io-client 依赖 2026-02-23 21:56:28 -08:00
package.json fix(snapshot): 前端 API 改走 Next.js rewrites 代理 + WebSocket 改 REST 轮询 2026-02-24 00:37:41 -08:00
tsconfig.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00

README.md

RWADurian Admin Web

榴莲认种管理后台 - Next.js 15 + TypeScript + SCSS

技术栈

  • 框架: Next.js 15 (App Router)
  • 语言: TypeScript
  • 样式: SCSS Modules
  • 状态管理: Redux Toolkit + Zustand
  • UI 组件: Recharts (图表)
  • 部署: Docker + Nginx

本地开发

环境要求

  • Node.js 20+
  • npm 或 yarn

安装依赖

npm install

启动开发服务器

npm run dev

访问 http://localhost:3000

构建

npm run build
npm start

Docker 部署

快速部署 (推荐)

项目已配置 Docker 一键部署方案,使用 Git 管理代码。

在服务器上部署:

# 1. 克隆项目 (首次)
git clone <repository-url>
cd rwadurian/frontend/admin-web

# 2. 或更新代码 (已有项目)
cd ~/rwadurian/frontend/admin-web
git pull

# 3. 赋予脚本执行权限
chmod +x scripts/*.sh deploy.sh nginx/*.sh

# 4. 一键部署 Docker 应用
./scripts/deploy.sh

# 5. 安装 Nginx + SSL (首次需要)
sudo ./nginx/install.sh

Docker 管理脚本

脚本 功能
./scripts/deploy.sh 一键部署 (构建+启动)
./scripts/build.sh 仅构建镜像
./scripts/start.sh 启动服务
./scripts/stop.sh 停止服务
./scripts/restart.sh 重启服务
./scripts/logs.sh 查看实时日志
./scripts/status.sh 查看服务状态
./scripts/health.sh 健康检查
./scripts/clean.sh 清理容器和镜像

使用原始 deploy.sh

# 启动服务
./deploy.sh start

# 停止服务
./deploy.sh stop

# 重启服务
./deploy.sh restart

# 查看日志
./deploy.sh logs

# 查看状态
./deploy.sh status

# 清理
./deploy.sh clean

自定义端口

PORT=8080 ./scripts/deploy.sh

Nginx 配置

前提条件

  1. 域名 DNS A 记录已指向服务器 IP
  2. 防火墙开放 80 和 443 端口
  3. Docker 应用已在 3000 端口运行

一键安装 (推荐)

cd nginx
sudo ./install.sh

脚本会自动完成:

  • 系统更新
  • 安装 Nginx
  • 安装 Certbot
  • 配置防火墙
  • 申请 Let's Encrypt SSL 证书
  • 配置 HTTPS 反向代理

手动配置

详见 nginx/README.md

项目结构

admin-web/
├── src/
│   ├── app/                    # Next.js App Router
│   │   ├── (auth)/            # 认证相关页面 (登录、注册)
│   │   ├── (dashboard)/       # 仪表板页面
│   │   └── api/               # API 路由
│   ├── components/            # React 组件
│   │   ├── common/            # 通用组件
│   │   ├── features/          # 功能组件
│   │   └── layout/            # 布局组件
│   ├── store/                 # 状态管理
│   │   ├── redux/             # Redux Toolkit
│   │   └── zustand/           # Zustand stores
│   ├── services/              # API 服务
│   ├── utils/                 # 工具函数
│   └── styles/                # 全局样式
├── public/                    # 静态资源
├── nginx/                     # Nginx 配置
│   ├── README.md             # Nginx 部署文档
│   ├── install.sh            # 一键安装脚本
│   ├── setup-ssl.sh          # SSL 配置脚本
│   └── rwaadmin.szaiai.com.conf  # Nginx 站点配置
├── scripts/                   # Docker 管理脚本
├── Dockerfile                 # Docker 镜像构建
├── docker-compose.yml         # Docker 编排
├── deploy.sh                  # 部署脚本
└── README.md                  # 本文档

环境变量

项目使用不同的环境配置文件:

  • .env.local - 本地开发
  • .env.development - 开发环境
  • .env.production - 生产环境

功能特性

  • 用户管理
  • 排行榜
  • 权限管理
  • 数据统计
  • 系统设置
  • 帮助中心
  • 侧边栏收起/展开
  • 响应式布局
  • 健康检查 API

API 端点

  • GET /api/health - 健康检查

访问地址

常见问题

1. Docker 构建失败

确保本地有 .nextnode_modules 已添加到 .dockerignore

2. 502 Bad Gateway

检查 Docker 容器是否运行:

docker ps
./scripts/status.sh

3. SSL 证书申请失败

  • 确认域名 DNS 解析正确
  • 确认 80 端口可访问
  • 查看错误日志: sudo tail -f /var/log/letsencrypt/letsencrypt.log

许可证

MIT