Vue 3 + .NET 9 + SQL Server | 617 xUnit | Playwright E2E | FlowOps AI Agent
SkillFlow 解决企业内部跨部门的技能协作与履约管理问题。员工可以发布协作需求、承接同事任务,通过点数(积分)进行内部结算。系统提供需求审核、争议调解、交付验收、点数商城等完整闭环,并集成 FlowOps AI Agent 实现自然语言驱动的任务操作。
核心流程:发布协作需求 → AI 解析 → 管理员审核 → 招募响应 → 承接 → 交付验收 → 点数结算 → 商城兑换
| 层 | 技术 |
|---|---|
| 前端框架 | Vue 3 (Composition API) + TypeScript 6 |
| UI 组件 | Element Plus |
| 图表 | Chart.js + ECharts 6 |
| 富文本 | TipTap |
| 状态管理 | Pinia 3 |
| 路由 | Vue Router 4(嵌套路由 + 路由守卫 + 面包屑) |
| HTTP | Axios (拦截器自动刷新 Token + CSRF 保护) |
| 后端框架 | .NET 9 Web API (RESTful) |
| ORM | Entity Framework Core 9 (Code-First, Fluent API) |
| 认证 | JWT 双 Token (Access Token 15min + Refresh Token 7天) + BCrypt |
| 安全 | CSRF 中间件 + 速率限制 + CORS |
| 数据库 | SQL Server 2022 (Docker) |
| AI | 规则引擎 + DeepSeek API + LLM Goal Interpreter |
| Agent | FlowOps — 通用页面理解 + 控件执行 + 长程自主任务 |
| 测试 | xUnit (617 单元测试) + Playwright (16+ E2E) |
自动完成:启动数据库 → 等待就绪 → 引导填入 DeepSeek Key(可跳过)→ 启动前后端 → 打开浏览器。
- Windows:双击根目录
start.bat(或 PowerShell 运行./start.ps1) - macOS / Linux:
chmod +x start.sh && ./start.sh
脚本会弹出提示询问 AI Key,直接回车即可跳过(FlowOps 走规则引擎,主流程不受影响)。 脚本前置条件:已安装 Docker Desktop、.NET 9 SDK、Node 18+,且 Docker 已运行。
# 1. 数据库(Docker,一键)
docker compose up -d
# 等待 8-10 秒让 SQL Server 就绪
# —— 备选:手动 docker run(与上等价)——
# docker run -d --name skillflow-db -e "ACCEPT_EULA=Y" \
# -e "SA_PASSWORD=SkillF10w_Sa" -p 1433:1433 \
# mcr.microsoft.com/mssql/server:2022-latest
# 2. 后端(开发配置已随仓库提供,clone 后零配置即可起;自动迁移 + 种子数据)
# appsettings.Development.json 已内置可用的 DB 连接与 Jwt,dotnet run 默认走 Development 环境。
# FlowOps 智能助手如需启用,再补一个 DeepSeek Key(详见下方「配置 FlowOps 的 AI Key」,可选)。
cd backend/SkillFlow.Api && dotnet run # → http://localhost:5000
# 3. 前端
cd ../frontend && npm install && npm run dev # → http://localhost:5173首次启动注意:后端使用
Database.Migrate()自动创建数据库并填充种子数据(含演示用户、协作任务、商城商品)。确保 Docker 容器启动后等待 5-10 秒再启动后端。
关于数据:演示数据由后端
DemoSeedService在空库首次启动时确定性生成(固定演示账号、任务、商品、部门),无需导入任何 .bak / 数据卷。已有数据时不会重复播种、不会覆盖你的改动。
环境要求:.NET 9 SDK · Node 18+ · Docker Desktop(含 SQL Server 容器)。
不配也能跑:主业务流程(发布 / 审核 / 投标 / 承接 / 交付 / 争议 / 商城)全部正常。 只有 FlowOps(右下角智能助手)需要 DeepSeek API Key 才能真正对话;不配则自动降级为规则引擎,能力受限。
第 1 步:拿一个 Key — 到 https://platform.deepseek.com 注册 → 「API Keys」→ 创建,形如 sk-xxxxxxxx。
第 2 步:填进配置(任选一种)
# 方式 A(环境变量,优先级最高,推荐):
# Windows PowerShell: $env:OPENAI_API_KEY = "sk-你的key"
# Linux/macOS: export OPENAI_API_KEY="sk-你的key"
# 然后在同一终端 dotnet run。
# 方式 B(改文件):编辑 backend/SkillFlow.Api/appsettings.Development.json
# 把 "AI": { "ApiKey": "" } 填成你的 Key。
# ⚠️ 该文件已随仓库提交,请勿把真实 Key commit 上去——优先用方式 A。后端
dotnet run默认就是 Development 环境(见launchSettings.json),无需手动设环境变量即可读取appsettings.Development.json。
第 3 步:验证 Key 真的生效 — 登录后打开右下角 FlowOps,问一句「总结一下现在有哪些任务」。
- ✅ 正常:它会具体列出真实任务名、积分、截止时间,每次回答不同。
- ❌ 未生效:每次都回同一句很笼统的兜底话(如「请到任务大厅查看」),说明 Key 没加载——回到第 2 步检查,并确认是用 Development 环境启动的。
以种子数据为准,已确认账号如下:
| 邮箱 | 密码 | 角色 | 说明 |
|---|---|---|---|
superadmin@company.com |
Admin123456 |
超级管理员 | 全部管理权限,可分配管理员 |
admin@company.com |
Admin123456 |
管理员 | 任务审核 + 争议调解管理 |
zhangsan@company.com |
Admin123456 |
普通用户 | 市场部,200 点数 |
zhaoliu@company.com |
Admin123456 |
普通用户 | 研发部,500 点数 |
完整用户列表见种子数据 SeedData.cs。
| 文档 | 说明 |
|---|---|
| docs/README.md | 完整文档索引 |
| docs/prd/PRD.md | 产品需求文档(唯一权威规格) |
| docs/prd/EPIC-STORY.md | Epic/Story 追踪 |
| docs/CHANGELOG.md | 变更日志 |
| docs/BUG-FIXES.md | Bug 修复记录 |
| docs/UI-DESIGN-GUIDE.md | UI 设计指南 |
| docs/demo/v3.4-manual-acceptance-script.md | 手工验收脚本 |
| docs/evaluation/teacher-review-alignment.md | 评审标准对照表 |
| docs/flowops-architecture-debt-report.md | FlowOps 架构债务报告 |
SkillFlow/
├── backend/
│ ├── SkillFlow.sln # 解决方案文件
│ ├── SkillFlow.Api/ # Web API 层(Controllers + Middleware)
│ ├── SkillFlow.Application/ # 业务逻辑层(Services + DTOs + Agents)
│ ├── SkillFlow.Domain/ # 领域层(Entities + Enums + Interfaces)
│ ├── SkillFlow.Infrastructure/ # 基础设施层(DbContext + Migrations + AI)
│ └── SkillFlow.Tests/ # xUnit 单元测试(617 个)
├── frontend/
│ ├── src/
│ │ ├── views/ # 页面组件(30+)
│ │ ├── components/ # 复用组件(30+,含 FlowOps Agent Panel)
│ │ ├── agent/ # FlowOps Agent 运行时(通用层架构)
│ │ ├── api/ # API 调用模块
│ │ ├── router/ # 路由配置
│ │ └── stores/ # Pinia 状态管理
│ ├── e2e/ # Playwright E2E + FlowOps LLM 探针
│ └── public/ # 静态资源
├── docs/
│ ├── prd/ # 产品需求文档
│ ├── concepts/ # 概念图与 UI 设计
│ ├── design/ # 设计文档与开发总结
│ ├── screenshots/ # 验收截图
│ ├── superpowers/ # 实施计划与规格
│ └── archive/ # 历史版本归档
└── README.md # 本文件
- 协作需求大厅 — 浏览/筛选/搜索全部协作需求,支持收藏
- 任务详情 — 完整描述、交付物、附件、消息讨论
- 投标/承接 — 提交申请、查看竞价列表、选择承接者
- 交付验收 — 交付物上传、审核、通过/退回
- 消息系统 — 任务级消息(嵌套回复)+ 私信
- 个人中心 — 档案编辑、技能管理、统计面板
- 点数商城 — 商品浏览、兑换、订单管理
- 争议调解 — 提交仲裁、查看进度、结算比例建议
- 仪表盘 — 系统概览(任务、用户、钱包、争议)
- 任务审核 — AI 辅助风险评分,审核/驳回
- 用户管理 — 用户列表、详情、锁定/解锁
- 管理员分配 — 角色分配与管辖范围
- 争议调解管理 — 分配仲裁员、查看裁决
- 部门钱包 — 点数调整、操作记录
- 运营内容 — 公告、轮播图、配置管理
- 审计日志 — 操作追溯
- 自然语言驱动 — 通过聊天界面用自然语言完成任务操作
- 通用运行时 — CandidateSet → ReferenceResolver → GoalFrame → PlanRunner → Verifier
- 页面理解 —
data-agent-*元数据标注,自动识别页面对象/动作/控件 - 长程任务 — 多步规划、执行、验证、恢复
- 安全治理 — DomainPolicy 分级、高危操作确认、只读兜底
- 跨页面操作 — 导航→读取→决策→执行的全链路
| 角色 | 路由可见范围 | 说明 |
|---|---|---|
| SuperAdmin | 全部 | 系统管理 + 管理员分配 |
| Admin | 内容管理 | 任务审核 + 争议调解,仅操作分配的用户 |
| Auditor | 任务审核 + 审计日志 | 审核 + 审计查询 |
| Arbitrator | 争议调解(仅自己案件) | 裁决权限 |
| User | 用户端全功能 | 协作需求发布/响应、交付、点数商城 |
# 后端编译
dotnet build backend/SkillFlow.sln
# 后端单元测试(617 个)
dotnet test backend/SkillFlow.Tests
# 前端类型检查
cd frontend && npx vue-tsc --noEmit
# 前端构建
cd frontend && npm run build
# E2E 测试(需先启动前后端)
cd frontend && npx playwright test e2e/auth-guard.spec.ts --workers=1
cd frontend && npx playwright test e2e/tasks.spec.ts --workers=1
cd frontend && npx playwright test e2e/shop.spec.ts --workers=1如果本地数据库已被多次 E2E 测试污染(用户点数耗尽、任务状态混乱),建议重建演示数据库:
docker stop skillflow-db
docker rm skillflow-db
# 然后重新创建容器(见快速启动中的 docker run 命令)后端首次启动会自动执行 Database.Migrate() 创建表结构并使用种子数据填充,无需手动执行 SQL 脚本。
项目采用切片迭代开发模式,完整历程记录在 docs/design/ 中:
| 阶段 | 覆盖范围 | 说明 |
|---|---|---|
| Ver1 (S1-S13) | 核心流程(发布→承接→交付→结算→商城) | MVP 功能闭环 |
| Ver2 (S14-S15) | UI 全面升级 + 设计系统 | 多分辨率适配,概念图驱动 |
| Ver2 (S16-S18) | 投标面板/工作间/仪表盘 | 三大核心视图深度重构 |
| Ver2 (S19-S22) | FlowOps AI Agent 系统 | 通用 Agent 运行时架构 |
| Ver2 (S20-S22) | 只读底座/叙事/通用层 | CandidateSet/GoalFrame/PlanRunner |