feat(dev): 本地开发工具集 v0.5.6-dev-tooling

包含本地 dev 链路完整跑通的工具集(不进生产):

backend:
- dev_auth.py: /api/dev/login Mock 企微 OAuth(/dev/* 路由)
- messages.py: dev 模式短路企微推送,避免 invalid corpid 噪音
- main.py: dev 模式启动时建 5 条 demo conversation,让前端有数据可测

frontend:
- PortalSelect.vue: dev 模式 enterRole 跳完整 URL(5173/5174/5175 端口),生产仍走相对路径

infrastructure:
- docker-compose.dev.yml: dev compose(包含 backend/postgres/redis)

scripts(Windows PowerShell):
- dev-frontend-install.ps1: 一次性装 4 个前端依赖
- dev-frontend-start.ps1: 后台起 4 个前端 dev server
- dev-check-schema-drift.ps1: 对比 SQLAlchemy 模型 vs Postgres schema,漂移 exit 1

docs:
- CURRENT-FOCUS.md: 项目状态看板(每次 session 维护)
This commit is contained in:
Simon
2026-06-16 19:24:02 +08:00
parent cec5607c45
commit eee2bcc071
9 changed files with 963 additions and 22 deletions
+106
View File
@@ -0,0 +1,106 @@
# =============================================================================
# 企微IT智能服务台 — 前端 dev 环境一键安装脚本
# =============================================================================
# 作用:一次性给 4 个前端项目装 pnpm 依赖
# 用法:.\scripts\dev-frontend-install.ps1
# 前置:已装 pnpm (npm install -g pnpm)
# 输出:每个前端在它自己的目录下创建 node_modules
# 注意:首次安装 3-8 分钟,后续 pnpm install 会很快(增量)
# =============================================================================
$ErrorActionPreference = 'Stop'
$ProjectRoot = $PSScriptRoot | Split-Path -Parent
Set-Location $ProjectRoot
# --------------------------------------------------------------------------
# 自动把 npm 全局 bin 加进 PATH(只对本脚本生效,不污染系统)
# 原因:某些用户(如 NVM 用户)系统 PATH 缺 npm global bin,pnpm 找不到
# --------------------------------------------------------------------------
$NpmGlobalBin = npm config get prefix 2>$null
if ($NpmGlobalBin -and (Test-Path $NpmGlobalBin)) {
if ($env:PATH -notlike "*$NpmGlobalBin*") {
$env:PATH = "$env:PATH;$NpmGlobalBin"
Write-Host " 已临时把 $NpmGlobalBin 加进 PATH(只对本次脚本生效)" -ForegroundColor DarkGray
}
}
$Frontends = @('frontend-h5', 'frontend-agent', 'frontend-admin', 'frontend-portal')
# --------------------------------------------------------------------------
# 颜色函数
# --------------------------------------------------------------------------
function Write-Step($msg) { Write-Host "`n$msg" -ForegroundColor Cyan }
function Write-OK($msg) { Write-Host "$msg" -ForegroundColor Green }
function Write-Warn($msg) { Write-Host "$msg" -ForegroundColor Yellow }
function Write-Err($msg) { Write-Host "$msg" -ForegroundColor Red }
# --------------------------------------------------------------------------
# 前置检查
# --------------------------------------------------------------------------
Write-Step "═══ 企微IT智能服务台 — 前端依赖安装 ═══"
# 检查 pnpm(包含 npm global bin 路径)
$pnpmCmd = Get-Command pnpm -ErrorAction SilentlyContinue
if (-not $pnpmCmd) {
Write-Err "pnpm 没装,请先跑: npm install -g pnpm"
exit 1
}
$pnpmVer = & $pnpmCmd.Source --version 2>&1
Write-OK "pnpm 已装: $pnpmVer"
# 检查 Node 版本(警告,不阻塞)
$nodeVer = node --version
Write-Host " Node 版本: $nodeVer"
if ($nodeVer -notmatch '^v(20\.|21\.|22\.)') {
Write-Warn "前端要求 Node 20.x,你是 $nodeVer。多数情况能跑,出问题再装 Node 20。"
}
# 检查后端 dev 是否在跑(可选)
try {
$null = Invoke-WebRequest -Uri 'http://localhost:8000/health' -UseBasicParsing -TimeoutSec 3
Write-OK "后端 dev 在跑 (http://localhost:8000)"
} catch {
Write-Warn "后端 dev 没跑,Vite 反代会连不上后端。先跑 dev-start.ps1 起后端。"
}
# --------------------------------------------------------------------------
# 顺序装 4 个前端
# --------------------------------------------------------------------------
foreach ($name in $Frontends) {
Write-Step "─── $name ───"
$dir = Join-Path $ProjectRoot $name
if (-not (Test-Path "$dir/package.json")) {
Write-Err "找不到 $dir/package.json,跳过"
continue
}
Set-Location $dir
$sw = [System.Diagnostics.Stopwatch]::StartNew()
try {
pnpm install 2>&1 | Tee-Object -FilePath "$ProjectRoot\.pnpm-install-$name.log" | Out-Host
$sw.Stop()
Write-OK "$name 装完 ($([math]::Round($sw.Elapsed.TotalSeconds))s)"
} catch {
$sw.Stop()
Write-Err "$name 装失败 ($([math]::Round($sw.Elapsed.TotalSeconds))s)"
Write-Host " 详细日志: $ProjectRoot\.pnpm-install-$name.log" -ForegroundColor Yellow
Write-Host " 常见原因:网络抖动 / 镜像源不通 / Node 版本太新" -ForegroundColor Yellow
}
}
# --------------------------------------------------------------------------
# 汇总
# --------------------------------------------------------------------------
Write-Step "═══ 装完 ═══"
foreach ($name in $Frontends) {
$log = "$ProjectRoot\.pnpm-install-$name.log"
if ((Test-Path "$ProjectRoot/$name/node_modules") -and (Test-Path "$ProjectRoot/$name/package.json")) {
Write-OK "$name 已就绪 (node_modules 存在)"
} else {
Write-Err "$name 没装好,日志: $log"
}
}
Write-Host "`n下一步:启动前端 dev server" -ForegroundColor Cyan
Write-Host " 单独启动: cd frontend-h5 ; pnpm dev" -ForegroundColor Gray
Write-Host " 一起启动: d:/资料/03-项目开发/wecom_it_smart_desk-claude/scripts/dev-frontend-start.ps1" -ForegroundColor Gray
Write-Host " 全部停止: ...\scripts\dev-frontend-start.ps1 -Stop" -ForegroundColor Gray