d3ca8498fbde838348935c26f7f85e0eab316cca
## 管理端 / API(Bug 修复) - matches.service:getAdminMatchDetail 返回 markets 时补充 allowSingle、allowParlay 字段 - MatchMarketsPanel:mapMarkets 从接口读取单关/串关开关,不再硬编码为 true - match-form.ts:AdminMarket 类型补充 allowSingle、allowParlay ## 玩家端 — 全局主题(styles.css / index.html / site.webmanifest) - 海军暗色 + 白色强调 token,卡片高光渐变(--gradient-card) - 下拉/弹窗实底不透明(--dropdown-bg: #0A2540) - 统一 sub-toolbar、status-ribbon、filter-tab 等全局样式 - theme-color 同步为 #001A33 ## 玩家端 — 布局与壳层 - MainLayout:详情子页去顶栏/公告,sub-toolbar 全宽铺底 - WalletBalanceCard(新):个人页钱包卡片(反水 + 未结算) - walletStats.ts(新):钱包统计逻辑抽取 ## 玩家端 — 赛事 / 投注 - MatchDetailView:顶栏 8px 顶距、卡片全宽(--detail-gutter-x: 0) - 盘口状态标签(暂停/已关闭)、去掉 MarketTypeTile 右侧箭头 - VsBadge(新):纯文字 VS,删除 vs.png - isMarketLocked:仅关单关但允许串关时仍可点击,支持串关流程 - BetSlipDrawer:仅串关盘口禁用单关提交并提示 slip_parlay_only_hint - betSlip:SlipItem 增加 allowSingle 字段 - MatchBetCard / LeagueAccordionItem:45° 待开赛角标,去掉展开左侧白边 - OutrightEventSection:去掉展开时左侧白色选中条 - FootballView:加大左右边距、筛选栏去 sticky、选中态增强 - BannerCarousel:恢复原始全宽轮播 ## 玩家端 — 钱包 / 个人 / 认证 / 其他页面 - WalletView:移除顶部钱包卡片,保留账单列表 - ProfileView:保留 WalletBalanceCard - 充值/账单/注单/登录注册等页面配色与间距统一 - 公告标签、余额面板、语言切换、区号选择等弹层改为实底 ## 国际化 - zh-CN / en-US / ms-MY:新增 slip_parlay_only_hint(仅串关盘口提示) ## 资产 - 更新 banner.svg、empty-matches.svg 配色 - 删除 vs.png Co-authored-by: Cursor <cursoragent@cursor.com>
TheBet365 - 足球投注平台 MVP
Monorepo 项目,包含 NestJS 后端与 Vue 3 三端前端。
技术栈
| 层级 | 技术 |
|---|---|
| 后端 | NestJS + Prisma + PostgreSQL + Redis |
| 玩家前台 | Vue 3 + Vite + Pinia (H5 移动端优先) |
| 管理后台(平台+代理) | Vue 3 + Vite + Element Plus,单应用 apps/admin |
| 包管理 | pnpm workspace |
快速开始
完整步骤、环境变量、端口、演示账号与排错见 docs/项目启动指南.md。
Docker 全栈一键部署(生产) 见 docs/Docker部署指南.md。
1. 启动基础设施
docker compose up -d
2. 安装依赖
pnpm install
3. 配置环境
cp .env.example apps/api/.env
4. 数据库迁移与种子数据
pnpm db:migrate
pnpm db:seed
5. 启动开发服务
pnpm dev:api # API http://localhost:3000
pnpm dev:player # 玩家前台 http://localhost:5173
pnpm dev:admin # 管理后台 http://localhost:5174(admin/agent 同一入口)
pnpm dev:manage # 同上别名
API 文档:http://localhost:3000/api/docs
测试账号
| 角色 | 用户名 | 密码 |
|---|---|---|
| 超级管理员 | admin | Admin@123 |
| 一级代理 | agent1 | Agent@123 |
| 二级代理 | agent2 | Agent@123 |
| 玩家 | player1 | Player@123 |
更多默认数据(赛事、48 强夺冠、余额、Banner 等)见 docs/默认数据说明.md。
项目结构
apps/api/src/
├── domains/ # 8 个业务领域
│ ├── identity/ # 身份与权限(auth + users)
│ ├── agent/ # 代理网络
│ ├── ledger/ # 账务账本(wallet)
│ ├── catalog/ # 赛事目录(matches)
│ ├── odds/ # 盘口赔率(markets)
│ ├── betting/ # 注单引擎
│ ├── settlement/ # 结算引擎(含 domain/ 纯函数)
│ └── operations/ # 运营支撑(audit/cashback/content/i18n)
├── applications/ # 三端应用层(编排,不含领域规则)
│ ├── player/
│ ├── admin/
│ └── agent/
├── shared/ # 基础设施
│ ├── prisma/
│ └── common/
├── app.module.ts
└── main.ts
apps/
player/ 玩家 H5 前台
admin/ 管理后台(平台 + 代理,单应用)
packages/
shared/ 共享类型与常量
MVP 功能
- 三端登录鉴权 + RBAC
- 2 级代理 + 信用额度池
- 钱包账变(禁止直接改余额)
- 11 种足球玩法 + 盘口模板
- 单关 / 2~5 串 1 下注
- 结算预览 + 确认入账
- 返水批次
- Banner / 公告 / 多语言
测试
pnpm --filter @thebet365/api test
Description
Languages
Vue
49.1%
TypeScript
45.5%
JavaScript
3.2%
CSS
1%
Shell
0.8%
Other
0.4%