# 智慧停车管理系统 (Smart Parking) 基于 Wails v2 构建的单进程桌面应用,零外部依赖。 ## 技术栈 - **桌面框架**:Wails v2.13 - **后端**:Go 1.25 + Gin + GORM + Casbin v3 + JWT - **前端**:Vue 3 + Vite 4 + Element Plus + Pinia - **数据库**:SQLite(`%APPDATA%/smart-parking/lc_garage.db`) ## 环境要求 - Go >= 1.25 / Node.js >= 16 - Wails CLI:`go install github.com/wailsapp/wails/v2/cmd/wails@latest` - Windows 10 build 1809+(WebView2 运行时) ## 快速开始 ```bash # 1. 安装前端依赖 cd frontend && npm install && cd .. # 2. 启动开发模式 wails dev # 3. 生产构建 wails build # 产物:build/bin/smart-parking.exe ``` ## 管理员账户 - 账号:`admin` / 密码:`123456` - 首次启动自动创建系统数据(用户、角色、菜单、权限、字典) ## 数据库 - 文件位置:`%APPDATA%/smart-parking/lc_garage.db` - `config.yaml` 中 `sqlite.path` 为空时使用默认路径 - 查询工具:[DB Browser for SQLite](https://sqlitebrowser.org/) ## 项目结构 ``` lc_garage/ ├── main.go # Wails 入口 ├── wails.json # Wails 配置 ├── go.mod # 根模块 (wails-app) ├── config.yaml # 后端配置 │ ├── internal/ # Go 后端 │ ├── api/v1/ # API 控制器(system/parking/uhf/vehicle/owner) │ ├── service/ # 业务逻辑(含 UHF TCP/串口硬件驱动) │ ├── router/ # 路由注册 │ ├── model/ # 数据模型(Request/Response DTO) │ ├── dao/ # 数据访问(GORM 实体,25 张表) │ ├── middleware/ # 中间件(JWT/CORS/Casbin) │ ├── core/ # 核心(Viper/Zap/Server) │ ├── config/ # 配置结构体 │ ├── global/ # 全局变量 │ ├── initialize/ # 初始化(GORM/Seed/Timer) │ ├── plugin/ # 插件(email/ws) │ ├── utils/ # 工具函数 │ └── pkg/ # 工具函数(core 层引用) │ ├── frontend/ # Vue 3 前端 │ └── src/ │ ├── api/ # API 封装(24 文件) │ ├── view/ # 业务页面 │ │ ├── parking/ # 停车管理(含 Tab 联动) │ │ ├── dashboard/ # 仪表盘 │ │ ├── superAdmin/ # 系统管理 │ │ └── ... │ ├── pinia/ # 状态管理 │ └── router/ # 路由配置 │ ├── build/bin/ # 构建输出 │ └── smart-parking.exe │ └── doc/ # 文档 ├── PROJECT.md └── 代码规划.md # 目标架构蓝图 ``` ## 代码规范 - **旧模块**(`internal/api/` `internal/service/` 等):保持不动,继续维护 - **新模块**(`internal/modules//`):自包含 api / service / repository / model 四层 - 详细规范见 [CLAUDE.md](CLAUDE.md) ## 常见问题 **双击 exe 打不开?** 确保 `config.yaml` 与 `smart-parking.exe` 在同一目录。 **超级管理员菜单不显示?** 删除 `%APPDATA%/smart-parking/lc_garage.db` 后重启重建。 **wails dev 卡住?** 确保 `cd frontend && npm install` 已执行过。 **端口 5173 被占用?** 上次 `wails dev` 残留的 node 进程,任务管理器结束即可。