# CLAUDE.md 本项目是智慧停车管理系统 (Smart Parking),基于 Wails v2 构建的单进程桌面应用(Go 后端 + Vue 3 前端内嵌 WebView2)。 ## 技术栈 | 层级 | 技术 | | ---------- | ------------------------------------------ | | 桌面框架 | **Wails v2.13**(WebView2 运行时) | | 后端 | Go 1.25 + Gin + GORM + Casbin + JWT | | 前端 | Vue 3 + Vite 4 + Element Plus + Pinia | | 数据库 | **SQLite**(`%APPDATA%/smart-parking/lc_garage.db`) | ## 项目结构 ``` lc_garage/ ├── main.go # Wails 入口(反向代理 /api → Gin :8888) ├── go.mod / go.sum # 根模块 (wails-app) ├── wails.json # Wails 项目配置 ├── config.yaml # 后端配置文件 ├── server_backup.tar.gz # 旧 server/ 备份(67MB,已归档) │ ├── internal/ # ★ Go 后端(所有代码) │ ├── main.go # InitBackend() 入口 │ ├── api/v1/ # API 控制器层 │ │ ├── system/ # 系统管理(用户/角色/菜单/API/Casbin/字典) │ │ ├── parking/ # 停车管理(停车场/岗亭/通道) │ │ ├── uhf/ # UHF 读卡器管理 │ │ ├── vehicle/ # 车辆管理(车辆/收费/记录/类型/名单) │ │ ├── owner/ # 车主管理 │ │ └── example/ # 示例(文件上传/断点续传) │ ├── service/ # 业务逻辑层 │ │ ├── system/ # 系统服务(11 文件,含 Casbin) │ │ ├── parking/ # 停车服务(booth/channel/lot) │ │ ├── uhf/ # UHF 服务(TCP/串口读写器驱动) │ │ ├── vehicle/ # 车辆服务(进出场+计费) │ │ ├── owner/ # 车主服务 │ │ └── enter.go # ServiceGroupApp 全局注册中心 │ ├── router/ # 路由定义(与 api 一一对应) │ │ └── enter.go # RouterGroupApp 全局注册中心 │ ├── model/ # 数据模型(Request / Response DTO) │ │ ├── common/ # 通用模型(分页/响应结构) │ │ ├── system/ # 系统模型 │ │ ├── parking/ # 停车模型 │ │ ├── uhf/ # UHF 模型 │ │ ├── vehicle/ # 车辆模型 │ │ └── owner/ # 车主模型 │ ├── dao/ # 数据访问层(GORM 实体,25 张表) │ ├── middleware/ # 中间件(JWT/CORS/Casbin/操作日志) │ ├── config/ # 配置结构体定义 │ ├── core/ # 核心(Viper/Zap/Server 启动) │ ├── global/ # 全局变量(GVA_DB/GVA_CONFIG/GVA_LOG) │ ├── initialize/ # 初始化(GORM/Redis/Seed/Timer/UHF) │ ├── plugin/ # 插件(email/ws/plugin-tool) │ ├── utils/ # 工具函数(upload/captcha/AST/定时器) │ └── pkg/ # 工具函数副本(部分 core 文件引用) │ ├── frontend/ # Vue 3 前端 │ ├── vite.config.js # Vite 配置(dev :5173 → proxy :8888) │ └── src/ │ ├── api/ # API 封装(24 文件,117 接口) │ ├── view/ # 业务页面(37 个 .vue 文件) │ │ ├── parking/ # 停车管理(含 Tab 联动) │ │ ├── dashboard/ # 仪表盘 │ │ ├── report/ # 报表查询 │ │ ├── statistics/ # 统计分析 │ │ ├── superAdmin/ # 系统管理 │ │ ├── person/ # 个人中心 │ │ └── login/ # 登录页 │ ├── pinia/ # 状态管理(user + parkArea) │ └── router/ # 路由(Hash 模式 + 动态菜单) │ ├── build/bin/ # 构建输出 │ └── smart-parking.exe # 最终产物(需与 config.yaml 同目录) │ └── doc/ # 文档 ├── PROJECT.md └── 代码规划.md # 目标架构蓝图 ``` ## 代码组织规范 ### 旧代码 (internal/api, internal/service, ...) 现有的 `api/` `service/` `router/` `model/` `dao/` 目录保持不动,所有现有功能继续维护在原有位置。 ### 新模块 (internal/modules/) 新功能按领域模块开发,放在 `internal/modules//` 下。每个模块内部自包含三层结构: ``` internal/modules// ├── api.go # 对外暴露给 Wails/路由的方法 ├── service/ # 业务逻辑 │ ├── service.go # 核心逻辑 │ └── ... ├── repository/ # 数据访问(替代 dao/) │ └── repo.go # GORM 查询封装 └── model/ # 数据模型 ├── request/ # 请求 DTO └── response/ # 响应 DTO ``` **模块间通信规则**: - 模块之间通过 `internal/service/enter.go` 中的 `ServiceGroupApp` 引用其他模块的服务 - 避免模块间直接 import,防止循环依赖 - 共享类型(如分页、统一响应)放在 `internal/model/common/` 下 **注册新模块路由**: 1. 在 `internal/modules//api.go` 中定义 Handler 方法 2. 在 `internal/router/` 下新增路由文件注册路由组 3. 在 `internal/initialize/router.go` 中调用路由注册 ### pkg vs utils - `internal/utils/` — 旧工具函数(api 层引用) - `internal/pkg/` — 新工具函数(core/initialize 层引用) - 两者内容相同但 import 路径不同,暂不合并 ## 配置说明 ```yaml system: addr: 8888 # 后端监听端口 db-type: sqlite # 数据库类型 sqlite: path: "" # 空 = %APPDATA%/smart-parking/lc_garage.db db-name: lc_garage cors: mode: allow-all # 桌面应用,允许所有跨域 ``` ## 启动方式 ### 环境要求 - Go >= 1.25 / Node.js >= 16 - Wails CLI:`go install github.com/wailsapp/wails/v2/cmd/wails@latest` - Windows 10 build 1809+(WebView2) ### 开发模式 ```bash cd lc_garage cd frontend && npm install && cd .. # 首次 wails dev # 热更新 + DevTools ``` ### 生产构建 ```bash cd lc_garage wails build # 产物:build/bin/smart-parking.exe ``` ## 管理员账户 - 账号:`admin` / 密码:`123456`(首次启动自动创建) ## 角色菜单 | Authority | 角色 | 可见菜单 | |-----------|------|---------| | 888 | 管理员 | 全部 | | 618 | 操作员 | 停车管理 + 报表 + 统计 | ## 项目规范 - **Git 提交备注**:使用中文,格式 `类型: 简要描述`,如 `feat: 新增停车场信息菜单`、`fix: 修复字典查询 EOF` ## 常用命令 ```bash # 开发 cd lc_garage && wails dev # 构建 cd lc_garage && wails build # 前端 cd lc_garage/frontend && npm install cd lc_garage/frontend && npm run build ```