Go to file
zzh fc48b84f80
All checks were successful
Build and Deploy / deploy (push) Successful in 1m12s
fix: AI 对话解析多模型 JSON 配置,取 defaultModelId
兼容 apiSecret 纯模型名与 {defaultModelId,models} 结构,避免多模型配置后请求失败。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-28 10:46:36 +08:00
.gitea/workflows clear cache 2026-10-13 17:01:53 +08:00
.github/workflows fix: repair marketing compile errors and harden deploy CI 2026-07-27 10:51:13 +08:00
.vscode build 2026-06-25 17:47:46 +08:00
scripts fix: 修复智谱 AI 对话 URL,并合并自动触发预报时机 2026-07-28 20:54:28 +08:00
sql feat: SKU/预报下游申报明细带产品标识编码三字段 2026-10-23 11:19:12 +08:00
src fix: AI 对话解析多模型 JSON 配置,取 defaultModelId 2026-10-28 10:46:36 +08:00
tools feat: sync workplace spend stats and consolidate schema scripts into db.sql 2026-08-04 16:26:22 +08:00
.dockerignore add docker 2026-03-20 15:24:40 +08:00
.gitignore feat: 管理端列表返回客户名称/编码,并加固绑定与客户会话 2026-07-18 11:10:53 +08:00
Cursor调试环境说明.md build 2026-06-25 17:47:46 +08:00
db.sql feat: SKU/预报下游申报明细带产品标识编码三字段 2026-10-23 11:19:12 +08:00
design.md refactor: 合并 OrderTask 至批量任务,移除 t_order_task 依赖 2026-07-22 12:36:57 +08:00
Directory.Build.props upgrade 29 2026-10-19 15:08:05 +08:00
Directory.Build.targets upgrade 29 2026-10-19 15:08:05 +08:00
docker-compose.yml feat(order): 订单批量任务 RabbitMQ 异步处理与治理 API 2026-07-08 09:52:22 +08:00
Fake.Local.props upgrade 29 2026-10-19 15:08:05 +08:00
NuGet.Config feat:迁移到gitea 2026-09-05 16:34:35 +08:00
README.md feat: 店铺订单落库物流商与履约类型,并规范迁移脚本日期命名 2026-10-16 18:01:46 +08:00
SimpleAdmin.sln upgrade 29 2026-10-19 15:08:05 +08:00
SPEC.md ai-init 2026-04-15 15:25:38 +08:00
开发复刻说明.md ai-init 2026-04-15 15:25:38 +08:00
系统结构说明.md refactor: 合并 OrderTask 至批量任务,移除 t_order_task 依赖 2026-07-22 12:36:57 +08:00

SimpleAdmin API

基于 Fake 框架的简单管理系统后端 API。

技术栈

  • .NET 8.0 - 最新的 .NET 平台
  • Fake Framework - 模块化应用框架
  • Entity Framework Core - ORM 框架
  • SQL Server - 数据库
  • JWT - 身份认证
  • Swagger - API 文档

功能特性

  • ✅ 模块化架构
  • ✅ 自动 API 生成(ApplicationService 自动转换为 Controller)
  • ✅ RBAC 权限管理
  • ✅ JWT 认证
  • ✅ Swagger 文档
  • ✅ 依赖注入
  • ✅ 工作单元
  • ✅ 审计日志

开始使用

前置要求

  • .NET 8.0 SDK
  • SQL Server (LocalDB 或完整版)

配置数据库

修改 appsettings.json 中的连接字符串:

{
  "ConnectionStrings": {
    "Default": "Server=(localdb)\\mssqllocaldb;Database=SimpleAdminDb;Trusted_Connection=true;MultipleActiveResultSets=true"
  }
}

数据库迁移

# 添加迁移
dotnet ef migrations add InitialCreate --project ../modules/rbac/Fake.Rbac.Infrastructure

# 更新数据库
dotnet ef database update --project ../modules/rbac/Fake.Rbac.Infrastructure

运行项目

dotnet run

访问 http://localhost:5000 查看 Swagger 文档。

默认账号

系统会自动创建默认管理员账号:

  • 账号:admin
  • 密码:123456
  • 角色:超级管理员

⚠️ 重要:请在生产环境中立即修改默认密码!

API 端点

认证 API

  • POST /api/auth/login - 用户登录
  • GET /api/auth/current - 获取当前用户信息
  • PUT /api/auth/password - 修改密码

用户管理 API

  • GET /api/rbac/user/list - 获取用户列表
  • GET /api/rbac/user/{id} - 获取用户详情
  • POST /api/rbac/user - 创建用户
  • PUT /api/rbac/user/{id} - 更新用户
  • DELETE /api/rbac/user/{id} - 删除用户
  • PUT /api/rbac/user/{id}/roles - 分配角色
  • GET /api/rbac/user/{id}/permissions - 获取用户权限

角色管理 API

  • GET /api/rbac/role/list - 获取角色列表
  • GET /api/rbac/role/all - 获取所有角色
  • GET /api/rbac/role/{id} - 获取角色详情
  • POST /api/rbac/role - 创建角色
  • PUT /api/rbac/role/{id} - 更新角色
  • DELETE /api/rbac/role/{id} - 删除角色
  • PUT /api/rbac/role/{id}/permissions - 分配权限

菜单管理 API

  • GET /api/rbac/menu/tree - 获取菜单树
  • GET /api/rbac/menu/user/{userId} - 获取用户菜单
  • GET /api/rbac/menu/{id} - 获取菜单详情
  • POST /api/rbac/menu - 创建菜单
  • PUT /api/rbac/menu/{id} - 更新菜单
  • DELETE /api/rbac/menu/{id} - 删除菜单

权限管理 API

  • GET /api/rbac/permission/all - 获取所有权限
  • GET /api/rbac/permission/tree - 获取权限树

项目结构

SimpleAdmin.Api/
├── Controllers/          # 控制器(手动创建的)
├── Program.cs           # 程序入口
├── SimpleAdminApiModule.cs  # 主模块配置
├── appsettings.json     # 配置文件
└── README.md

开发规范(强制)

更完整的分层 / 路由 / DTO 约定见 开发复刻说明.md、design.md。下列为新增代码与合入共享分支的硬性标准,评审与上传前必须满足。

1. 写接口必须写注释

对外暴露的 Application API(ApplicationService 上的 [HttpGet] / [HttpPost] 等方法)必须有 XML / 中文注释,至少说明:

  • 接口用途(做什么)
  • 关键入参含义与约束(可写在方法注释或 DTO 属性注释上)
  • 关键返回语义或业务失败场景(如抛 BusinessException 的条件)

DTO、领域常量、非显而易见的私有辅助方法也应补注释,避免「只有路由名能猜业务」。

/// <summary>
/// 批量创建仓储代发订单:建单并绑定库存/包裹,产品须为分组 wms。
/// </summary>
/// <param name="input">仓库、产品编码与店铺订单绑定明细。</param>
[HttpPost("/order/platform-store-order/batch-create-fulfill-wms")]
public async Task<PlatformStoreOrderBatchCreateLogisticsOutput> BatchCreateFulfillWmsAsync(
    PlatformStoreOrderBatchCreateFulfillInput input)

2. 写 SQL 必须走 ORM(SqlSugar)

业务读写、列表筛选、联表、聚合、更新一律通过 SqlSugar / Repository,禁止在 Application / Domain 服务里手写拼装 SQL 字符串或 Ado.SqlQuery 作为常规实现。

允许 禁止(业务代码)
Repository / ISugarQueryable / 表达式 Where 服务内大段 "SELECT ... " + 拼接
实体 + 仓储封装复杂查询 绕过仓储直接 ADO 执行业务 SQL
sql/*.sql 仅作建库 / 存量 DDL 迁移 用脚本替代日常业务 CRUD

存量 DDL、字典初始化等脚本放在 sql/(说明见 sql/README.md),与运行时 ORM 查询分离;运行时查询与写入必须 ORM。

新增增量迁移文件命名:migrate_<主题>_YYYYMMDD.sql(日期在末尾,例如 migrate_xxx_20261016.sql)。详细约定见 sql/README.md。

3. 上传代码前先同步远端

test、master 等共享分支会有其他人提交。推送前必须先拉取远端,再上传,避免覆盖或漏掉别人的提交。

git fetch origin
git pull --ff-only origin <当前分支>
git push origin <当前分支>
  • 工作区有未提交改动时,先暂存(stash)或提交,再同步,同步完成后再恢复。
  • 本地已有未推送提交、远端也有新提交时,先 rebase 或 merge 并解决冲突,确认与远端对齐后再 push。
  • 禁止在未同步远端的情况下直接 push 共享分支。

4. 相关约定速查

  • 禁止新建库级唯一索引(UNIQUE KEY):见 .cursor/rules/no-unique-indexes.mdc,业务唯一性在 Application 校验。
  • 路由显式声明;分页统一 totalCount + items;勿把 Entity 直接返回前端。

Fake 框架特性

自动 API 生成

所有继承自 ApplicationService 的服务会自动生成对应的 API 端点,无需手动创建 Controller。

模块化

通过 [DependsOn] 特性声明模块依赖:

[DependsOn(
    typeof(FakeAspNetCoreModule),
    typeof(FakeRbacApplicationModule)
)]
public class SimpleAdminApiModule : FakeModule
{
    // ...
}

依赖注入

框架自动注册服务,支持:

  • ITransientDependency - 瞬时
  • IScopedDependency - 作用域
  • ISingletonDependency - 单例

工作单元

应用服务方法自动包装在工作单元中,支持事务管理。

JWT 配置

JWT 配置在 appsettings.json 中:

{
  "JwtSettings": {
    "SecretKey": "your-secret-key-here",
    "ExpiryInMinutes": 60
  }
}

CORS 配置

默认允许的前端地址:

可在 SimpleAdminApiModule.cs 中修改。

许可证

MIT