# 喵记账 · 开发手册 > 最后更新:2026-07-18 ## 版本号规范 三端统一版本号格式:`YYYYMMDD-HHMM`(年月日-时分)。**每次构建必须更新版本号**。 ### 后端版本号 - 文件:`backend/MiaoJiZhang.Api/Program.cs` - 变量:`apiVersion = "20260718-1600"`(修改此行即可) - 显示位置: - `GET /api/ping` 返回 JSON `{ "version": "...", "built": "..." }` - `GET /api/version` 同上 - 更新方法:修改 `apiVersion` 字符串,重启后端 ### Flutter App 版本号 - 文件:`frontend/lib/shared/version.dart` - 变量:通过 `--dart-define=APP_VERSION=xxx` 构建时注入,默认 `"dev"` - 显示位置: - 启动页(SplashPage)Logo 下方 - 登录页底部 - 「我的」页底部 - 构建命令: ```bash flutter clean flutter build apk --release --dart-define=APP_VERSION=20260718-1600 ``` ⚠️ **必须加 `--dart-define`,否则 App 显示 `vdev`** ### Admin Web 版本号 - 文件:`admin-web/src/App.vue` - 变量:侧边栏底部的硬编码版本文字 `
v20260718-1600
` - 更新方法:修改 `
` 内的版本号,重新构建部署 ```bash cd admin-web && npm run build cp dist/index.html ../backend/MiaoJiZhang.Api/wwwroot/ cp -r dist/assets ../backend/MiaoJiZhang.Api/wwwroot/ ``` --- ## 构建与部署 ### 1. 后端 ```bash cd backend dotnet build # 重启 powershell -Command "Get-Process dotnet | Stop-Process -Force" dotnet run --project MiaoJiZhang.Api ``` ### 2. Admin Web ```bash cd admin-web npm run build cp dist/index.html ../backend/MiaoJiZhang.Api/wwwroot/ cp -r dist/assets ../backend/MiaoJiZhang.Api/wwwroot/ ``` 浏览器打开 `http://localhost:5000/` 或 `http://{电脑IP}:5000/`。如界面未更新请 **Ctrl+Shift+R** 强制刷新。 ### 3. Flutter APK ```bash cd frontend flutter clean flutter pub get flutter build apk --release --dart-define=APP_VERSION=20260718-1600 adb install -r build/app/outputs/flutter-apk/app-release.apk ``` --- ## 项目结构 ``` jizhang/ ├── backend/ │ └── MiaoJiZhang.sln │ ├── MiaoJiZhang.Api/ # Web API 控制器、JWT、配置 │ │ ├── Program.cs # ★ 启动入口 + 版本号 │ │ ├── Controllers/ │ │ │ ├── AuthController.cs │ │ │ ├── ChatController.cs # ★ AI 聊天(LLM only) │ │ │ ├── AdminController.cs │ │ │ ├── UsersController.cs │ │ │ ├── TransactionsController.cs │ │ │ └── ... │ │ ├── Services/ │ │ │ ├── OpenAiVisionClient.cs # LLM 客户端 │ │ │ ├── AiServices.cs # 规则版(已废弃) │ │ │ └── ... │ │ └── wwwroot/ # Admin Web 发布目标 │ ├── MiaoJiZhang.Domain/ # 实体 + 枚举 │ └── MiaoJiZhang.Infrastructure/ # EF Core + MySQL ├── frontend/ │ └── lib/ │ ├── main.dart │ ├── app/app.dart # 路由 │ ├── shared/ │ │ ├── version.dart # ★ App 版本号 │ │ ├── api/ # API 客户端 │ │ ├── theme/ # 设计规范色 │ │ └── widgets/ # 图标/组件 │ └── features/ # 业务页面 ├── admin-web/ # Vue3 + Ant Design 后台 │ └── src/ │ ├── App.vue # ★ 侧边栏版本号 │ └── views/ # 管理页面 ├── docs/ # 项目说明、设计规范、开发说明 └── design/ # UI 稿、UX 原型、配色探索 ``` --- ## 验证构建是否生效 1. **后端**:浏览器访问 `http://localhost:5000/api/ping`,看返回的 `version` 字段 2. **Admin Web**:打开 `http://localhost:5000/`,看左下角版本号,对不上就 Ctrl+Shift+R 3. **App**:打开 App 看启动页 Logo 下方的版本号,或登录页/我的页底部 **版本号对不上 = 没构建进去 = 代码没生效。不要继续测试其他功能,先排查构建问题。** --- ## 常见错误 | 现象 | 原因 | 解决 | |------|------|------| | 修改了代码但 App 不变 | 没有 clean 构建,或没加 dart-define | `flutter clean && flutter build apk --release --dart-define=APP_VERSION=...` | | 修改了代码但后台不变 | 后端还在跑旧进程 | 先 `Stop-Process -Name dotnet -Force` 再 `dotnet run` | | Admin Web 界面不变 | 浏览器缓存 | Ctrl+Shift+R 强制刷新,或用无痕模式打开 | | Windows 文件路径错误 | 中文路径编码 | 用 python3 读文件时加 `encoding='utf-8'` | | sed 破坏代码 | git-bash 的 sed 不兼容 | 禁止用 sed 改 dart/vue 源码,用 Write/Edit 工具 |