Files
FastapiAdmin/deploy.bat
T
zhangtao 80263e98e1 feat: 重构前端项目结构并优化代码
refactor: 迁移前端资源文件至web目录
feat: 新增多种图标资源
style: 统一代码风格和格式化配置
docs: 更新README和文档说明
chore: 更新依赖和配置文件
fix: 修复部分类型定义和枚举
perf: 优化路由和组件加载逻辑
2026-05-01 01:01:17 +08:00

358 lines
11 KiB
Batchfile

@echo off
setlocal EnableDelayedExpansion
set "SCRIPT_DIR=%~dp0"
set "BACKEND_DIR=%SCRIPT_DIR%backend"
set "FRONTEND_DIR=%SCRIPT_DIR%frontend"
set "WEB_DIR=%FRONTEND_DIR%\web"
set "APP_DIR=%FRONTEND_DIR%\app"
set "DOCS_DIR=%FRONTEND_DIR%\docs"
set "LOG_DIR=%SCRIPT_DIR%logs"
mkdir "%LOG_DIR%" 2>nul
set "BACKEND_LOG=%LOG_DIR%\backend.log"
set "WEB_LOG=%LOG_DIR%\web.log"
set "APP_LOG=%LOG_DIR%\app.log"
set "DOCS_LOG=%LOG_DIR%\docs.log"
set "BACKEND_PID_FILE=%LOG_DIR%\backend.pid"
set "WEB_PID_FILE=%LOG_DIR%\web.pid"
set "APP_PID_FILE=%LOG_DIR%\app.pid"
set "DOCS_PID_FILE=%LOG_DIR%\docs.pid"
:: 颜色定义
set "RED="
set "GREEN="
set "YELLOW="
set "BLUE="
set "CYAN="
set "RESET="
echo %GREEN%========================================%RESET%
echo %GREEN%📦 FastapiAdmin 全局启动脚本%RESET%
echo %GREEN%========================================%RESET%
echo.
if "%1"=="" goto :show_help
if "%1"=="start" goto :start_all
if "%1"=="stop" goto :stop_all
if "%1"=="restart" goto :restart_all
if "%1"=="status" goto :check_status
if "%1"=="help" goto :show_help
if "%1"=="--help" goto :show_help
if "%1"=="-h" goto :show_help
echo %RED%❌ 未知参数: %1%RESET%
goto :show_help
:show_help
echo %BLUE%使用说明:%RESET%
echo %GREEN% %~nx0 start %RESET% - 启动所有服务
set "YELLOW="
echo %GREEN% %~nx0 stop %RESET% - 停止所有服务
set "YELLOW="
echo %GREEN% %~nx0 restart %RESET% - 重启所有服务
set "YELLOW="
echo %GREEN% %~nx0 status %RESET% - 检查服务状态
set "YELLOW="
echo %GREEN% %~nx0 help %RESET% - 显示此帮助信息
set "YELLOW="
echo.
echo %BLUE%服务说明:%RESET%
echo %GREEN% 🚀 后端服务 %RESET% - FastAPI 后端 (默认端口: 8001)
echo %GREEN% 🌐 前端 Web %RESET% - Vue 前端 (默认端口: 5173)
echo %GREEN% 📱 前端 App %RESET% - UniApp 应用 (默认端口: 8080)
echo %GREEN% 📚 文档服务 %RESET% - VitePress 文档 (默认端口: 5174)
echo.
echo %BLUE%日志位置:%RESET%
echo %GREEN% %LOG_DIR%\%RESET%
goto :end
:start_all
echo %CYAN%🚀 开始启动所有服务...%RESET%
echo.
:: 启动后端
echo %BLUE%🔄 启动后端服务...%RESET%
if exist "%BACKEND_PID_FILE%" (
set /p PID=<"%BACKEND_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %YELLOW%⚠️ 后端服务已在运行 (PID: %PID%)%RESET%
) else (
echo %GREEN%✅ 启动后端服务...%RESET%
cd /d "%BACKEND_DIR%"
start "FastapiAdmin Backend" /B uv run main.py run --env=dev > "%BACKEND_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin Backend" /NH') do (
echo %%a > "%BACKEND_PID_FILE%"
echo %GREEN%✅ 后端服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
) else (
echo %GREEN%✅ 启动后端服务...%RESET%
cd /d "%BACKEND_DIR%"
start "FastapiAdmin Backend" /B uv run main.py run --env=dev > "%BACKEND_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin Backend" /NH') do (
echo %%a > "%BACKEND_PID_FILE%"
echo %GREEN%✅ 后端服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
echo.
:: 启动前端 Web
echo %BLUE%🔄 启动前端 Web 服务...%RESET%
if exist "%WEB_PID_FILE%" (
set /p PID=<"%WEB_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %YELLOW%⚠️ 前端 Web 服务已在运行 (PID: %PID%)%RESET%
) else (
echo %GREEN%✅ 启动前端 Web 服务...%RESET%
cd /d "%WEB_DIR%"
start "FastapiAdmin Web" /B pnpm dev > "%WEB_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin Web" /NH') do (
echo %%a > "%WEB_PID_FILE%"
echo %GREEN%✅ 前端 Web 服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
) else (
echo %GREEN%✅ 启动前端 Web 服务...%RESET%
cd /d "%WEB_DIR%"
start "FastapiAdmin Web" /B pnpm dev > "%WEB_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin Web" /NH') do (
echo %%a > "%WEB_PID_FILE%"
echo %GREEN%✅ 前端 Web 服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
echo.
:: 启动前端 App
echo %BLUE%🔄 启动前端 App 服务...%RESET%
if exist "%APP_PID_FILE%" (
set /p PID=<"%APP_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %YELLOW%⚠️ 前端 App 服务已在运行 (PID: %PID%)%RESET%
) else (
echo %GREEN%✅ 启动前端 App 服务...%RESET%
cd /d "%APP_DIR%"
start "FastapiAdmin App" /B pnpm dev:h5 > "%APP_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin App" /NH') do (
echo %%a > "%APP_PID_FILE%"
echo %GREEN%✅ 前端 App 服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
) else (
echo %GREEN%✅ 启动前端 App 服务...%RESET%
cd /d "%APP_DIR%"
start "FastapiAdmin App" /B pnpm dev:h5 > "%APP_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin App" /NH') do (
echo %%a > "%APP_PID_FILE%"
echo %GREEN%✅ 前端 App 服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
echo.
:: 启动文档服务
echo %BLUE%🔄 启动文档服务...%RESET%
if exist "%DOCS_PID_FILE%" (
set /p PID=<"%DOCS_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %YELLOW%⚠️ 文档服务已在运行 (PID: %PID%)%RESET%
) else (
echo %GREEN%✅ 启动文档服务...%RESET%
cd /d "%DOCS_DIR%"
start "FastapiAdmin Docs" /B pnpm dev > "%DOCS_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin Docs" /NH') do (
echo %%a > "%DOCS_PID_FILE%"
echo %GREEN%✅ 文档服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
) else (
echo %GREEN%✅ 启动文档服务...%RESET%
cd /d "%DOCS_DIR%"
start "FastapiAdmin Docs" /B pnpm dev > "%DOCS_LOG%" 2>&1
:: 获取新启动进程的 PID
for /f "tokens=2" %%a in ('tasklist /FI "WINDOWTITLE eq FastapiAdmin Docs" /NH') do (
echo %%a > "%DOCS_PID_FILE%"
echo %GREEN%✅ 文档服务已启动 (PID: %%a)%RESET%
)
cd /d "%SCRIPT_DIR%"
)
echo.
echo %GREEN%🎉 所有服务启动完成!%RESET%
echo.
echo %BLUE%访问地址:%RESET%
echo %GREEN% 🚀 后端 API: http://localhost:8001/api/v1/docs%RESET%
echo %GREEN% 🌐 前端 Web: http://localhost:5173%RESET%
echo %GREEN% 📱 前端 App: http://localhost:8080%RESET%
echo %GREEN% 📚 文档服务: http://localhost:5174%RESET%
echo.
goto :end
:stop_all
echo %CYAN%⏹️ 开始停止所有服务...%RESET%
echo.
:: 停止后端
if exist "%BACKEND_PID_FILE%" (
set /p PID=<"%BACKEND_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 停止后端服务 (PID: %PID%)%RESET%
taskkill /PID %PID% /F >NUL 2>&1
del "%BACKEND_PID_FILE%" >NUL 2>&1
) else (
echo %YELLOW%⚠️ 后端服务未在运行%RESET%
del "%BACKEND_PID_FILE%" >NUL 2>&1
)
) else (
echo %YELLOW%⚠️ 后端服务未在运行%RESET%
)
echo.
:: 停止前端 Web
if exist "%WEB_PID_FILE%" (
set /p PID=<"%WEB_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 停止前端 Web 服务 (PID: %PID%)%RESET%
taskkill /PID %PID% /F >NUL 2>&1
del "%WEB_PID_FILE%" >NUL 2>&1
) else (
echo %YELLOW%⚠️ 前端 Web 服务未在运行%RESET%
del "%WEB_PID_FILE%" >NUL 2>&1
)
) else (
echo %YELLOW%⚠️ 前端 Web 服务未在运行%RESET%
)
echo.
:: 停止前端 App
if exist "%APP_PID_FILE%" (
set /p PID=<"%APP_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 停止前端 App 服务 (PID: %PID%)%RESET%
taskkill /PID %PID% /F >NUL 2>&1
del "%APP_PID_FILE%" >NUL 2>&1
) else (
echo %YELLOW%⚠️ 前端 App 服务未在运行%RESET%
del "%APP_PID_FILE%" >NUL 2>&1
)
) else (
echo %YELLOW%⚠️ 前端 App 服务未在运行%RESET%
)
echo.
:: 停止文档服务
if exist "%DOCS_PID_FILE%" (
set /p PID=<"%DOCS_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 停止文档服务 (PID: %PID%)%RESET%
taskkill /PID %PID% /F >NUL 2>&1
del "%DOCS_PID_FILE%" >NUL 2>&1
) else (
echo %YELLOW%⚠️ 文档服务未在运行%RESET%
del "%DOCS_PID_FILE%" >NUL 2>&1
)
) else (
echo %YELLOW%⚠️ 文档服务未在运行%RESET%
)
echo.
echo %GREEN%🎉 所有服务已停止!%RESET%
echo.
goto :end
:restart_all
echo %CYAN%🔄 开始重启所有服务...%RESET%
echo.
goto :stop_all
:restart_all_continue
echo.
goto :start_all
:check_status
echo %CYAN%🔍 检查服务状态...%RESET%
echo.
:: 检查后端
if exist "%BACKEND_PID_FILE%" (
set /p PID=<"%BACKEND_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 后端服务: 运行中 (PID: %PID%)%RESET%
) else (
echo %RED%❌ 后端服务: 已停止%RESET%
del "%BACKEND_PID_FILE%" >NUL 2>&1
)
) else (
echo %RED%❌ 后端服务: 未启动%RESET%
)
:: 检查前端 Web
if exist "%WEB_PID_FILE%" (
set /p PID=<"%WEB_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 前端 Web: 运行中 (PID: %PID%)%RESET%
) else (
echo %RED%❌ 前端 Web: 已停止%RESET%
del "%WEB_PID_FILE%" >NUL 2>&1
)
) else (
echo %RED%❌ 前端 Web: 未启动%RESET%
)
:: 检查前端 App
if exist "%APP_PID_FILE%" (
set /p PID=<"%APP_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 前端 App: 运行中 (PID: %PID%)%RESET%
) else (
echo %RED%❌ 前端 App: 已停止%RESET%
del "%APP_PID_FILE%" >NUL 2>&1
)
) else (
echo %RED%❌ 前端 App: 未启动%RESET%
)
:: 检查文档服务
if exist "%DOCS_PID_FILE%" (
set /p PID=<"%DOCS_PID_FILE%"
tasklist /FI "PID eq %PID%" 2>NUL | find /I "%PID%" >NUL
if %errorlevel%==0 (
echo %GREEN%✅ 文档服务: 运行中 (PID: %PID%)%RESET%
) else (
echo %RED%❌ 文档服务: 已停止%RESET%
del "%DOCS_PID_FILE%" >NUL 2>&1
)
) else (
echo %RED%❌ 文档服务: 未启动%RESET%
)
echo.
goto :end
:end
echo %GREEN%========================================%RESET%
echo %GREEN%📦 FastapiAdmin 启动脚本%RESET%
echo %GREEN%========================================%RESET%
endlocal