# imgcms **Repository Path**: bullet/imgcms ## Basic Information - **Project Name**: imgcms - **Description**: 图片管理系统,图片分类系统,支持单张和一组图片进行分类。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/bullet/imgcms - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-25 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 图片管理系统 (img-cms-v2) 默认登录账号为admin,密码为123456,支持修改。非windows系统需要自己构建为可执行文件。 ## 用途 - 图片标签管理,默认支持 4 级标签(可在系统设置中调整 `tag.max_level`) - 标签支持升级、下沉、删除、重命名、移动 - 支持单张图片和一组图片打标签 - 支持为图片打标签(最多 4 组标签;待打标的图片放在 `temp` 目录扫描) - 浏览已打标签的图片并支持编辑(打过标签的图片在images目录下) - 浏览图片支持10倍放大和3倍缩小(滚动鼠标即可放大缩小) - 支持图片扫描页面中删除的图片放入回收站中,回收站支持图片恢复和删除 - 支持在系统设置中调节各种参数 ## 功能截图 ![image](./screenshot/20260916142325.png) ![image](./screenshot/20260916142301.png) ![image](./screenshot/20260916142353.png) ![image](./screenshot/20260916142441.png) ![image](./screenshot/20260916142504.png) ![image](./screenshot/20260916142521.png) ![image](./screenshot/20260916142542.png) ## 技术栈 ### 前端 - **Vue 3** - 渐进式 JavaScript 框架 - **TypeScript** - JavaScript 的超集,提供类型安全 - **Vite** - 下一代前端构建工具 - **Wails Runtime** - 前后端通信桥接 ### 后端 - **Go 1.25** - 高性能编程语言 - **Wails v2** - 跨平台桌面应用框架 - **SQLite** - 轻量级数据库(glebarez 纯 Go 驱动,经 GORM 访问) - **GORM** - Go ORM 库 - **Zap** - 高性能日志库 - **Systray** - 系统托盘支持 ## 项目架构 ### 整体架构 ``` ┌─────────────────────────────────────────────────────────┐ │ 前端层 (Frontend) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Views │ │ Components │ │ Router │ │ │ │ (Vue3 + TS) │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────┘ │ Wails Runtime │ ┌─────────────────────────────────────────────────────────┐ │ 应用层 (App) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ App.go │ │ MenuBar │ │ Bindings │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────┐ │ 启动引导层 (Bootstrap) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Bootstrap │ │ Providers │ │ Components │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────┐ │ 业务逻辑层 (Service) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ImageService │ │ UserService │ │ TagService │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────┐ │ 数据层 (Database) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Connection │ │ Models │ │ SQLite │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ### 目录结构 ``` img-cms-v2/ ├── main.go # 应用主入口 ├── wails.json # Wails 配置文件 ├── go.mod # Go 依赖管理 ├── go.sum # Go 依赖锁定 │ ├── backend/ # 后端代码(Go 模块:img-cms-v2) │ ├── app.go # 应用核心类(Wails 绑定、生命周期) │ │ │ ├── app/ # 应用层 │ │ ├── api/ # 绑定层 API 处理 │ │ │ ├── images_api.go # 图片接口 │ │ │ ├── tags_api.go # 标签接口 │ │ │ └── users_api.go # 用户接口 │ │ ├── dto/ # 请求/响应数据结构 │ │ │ └── dto.go │ │ ├── model/ # 数据模型(GORM) │ │ │ ├── image.go # 图片模型 │ │ │ ├── tag.go # 标签模型 │ │ │ ├── user.go # 用户模型 │ │ │ └── config.go # 配置项模型 │ │ ├── service/ # 业务逻辑层 │ │ │ ├── image_service.go # 图片服务 │ │ │ ├── tag_service.go # 标签服务 │ │ │ ├── user_service.go # 用户服务 │ │ │ └── config_service.go # 配置服务 │ │ ├── menubar/ # 菜单栏 │ │ │ └── menubar.go # 菜单构建器 │ │ └── utils/ # 工具函数 │ │ ├── image.go # 图片处理(HEIC 转换等) │ │ ├── character.go # 字符处理 │ │ ├── notification.go # 系统通知 │ │ └── screen.go # 屏幕宽高计算 │ │ │ ├── bootstrap/ # 启动引导 │ │ ├── bootstrap.go # 引导器核心 │ │ ├── component.go # 组件接口定义 │ │ └── providers/ # 组件提供者 │ │ ├── database.go # 数据库提供者(优先级 100) │ │ ├── event.go # 事件提供者(优先级 50) │ │ ├── systray.go # 系统托盘提供者(优先级 30) │ │ └── hotkey.go # 快捷键提供者(优先级 30) │ │ │ ├── config/ # 配置 │ │ ├── config.go # 配置结构定义与加载 │ │ ├── config.yaml.tmpl # 默认配置模版,需要手动重名为 config.yaml │ │ └── config.yaml # 配置模板(首次运行生成 config.yaml,否则用内置默认值) │ │ │ ├── db/ # 数据库 │ │ └── connection.go # 连接与 GORM AutoMigrate │ │ │ └── pkg/ # 通用包 │ ├── logger/ # 日志封装 │ └── servehttp/ # 本地图片加载器(FileLoader) │ └── frontend/ # 前端代码(Vue3 + TypeScript + Vite) ├── src/ │ ├── views/ # 视图页面 │ ├── components/ # 组件 │ ├── layouts/ # 布局 │ ├── router/ # 路由 │ ├── stores/ # Pinia 状态管理 │ ├── types/ # TypeScript 类型定义 │ ├── assets/ # 静态资源 │ ├── App.vue # 根组件 │ ├── main.ts # 前端入口 │ └── style.css # 全局样式 │ ├── package.json # 前端依赖 ├── vite.config.ts # Vite 配置 └── tsconfig.json # TypeScript 配置 ``` ## 设计文档 规则定义与实现逻辑(图片文件命名规则、图片标签与追加图片功能逻辑、标签移动规则)已迁移至 [.docs/设计文档.md](.docs/设计文档.md),此处不再重复。 ## 核心组件 ### 1. Bootstrap(启动引导) 负责应用的初始化和组件生命周期管理。 **核心功能:** - 组件注册与依赖管理 - 按优先级顺序初始化组件 - 组件启动和停止管理 - 错误处理和日志记录 **组件生命周期:** ``` Register → Initialize → Start → (Running) → Stop ``` ### 2. Providers(组件提供者) 实现了 `Component` 接口的各种功能提供者。 **DatabaseProvider** - 优先级:100(最高) - 功能:管理数据库连接和迁移 - 依赖:无 **EventProvider** - 优先级:50 - 功能:处理前后端事件通信 - 依赖:无 **SystrayProvider** - 优先级:30 - 功能:管理系统托盘图标和菜单 - 依赖:无 **HotkeyProvider** - 优先级:30 - 功能:注册全局快捷键 - 依赖:无 ### 3. Service(业务服务层) 封装业务逻辑,协调 Repository 和其他服务。 **ImageService** - 图片列表查询和分页 - 扫描未分类图片 - 图片标签管理 - 孤儿图片清理 **UserService** - 用户登录认证 - 密码管理 **TagService** - 标签树形结构管理 - 标签层级支持(最多4级,由 `tag.max_level` 配置) - 标签排序与跨父级移动 **ConfigService** - 应用配置读写(标签层级、查看器、扫描、列表等设置) - 系统设置的持久化与默认值管理 ## 业务流转流程 ### 1. 应用启动流程 ``` main.go ↓ wails.Run() ↓ App.Startup(ctx) ↓ Bootstrap.Start() ↓ ┌─────────────────────────────────────┐ │ 按优先级初始化所有组件: │ │ 1. DatabaseProvider (100) │ │ - 建立数据库连接 │ │ - 执行数据库迁移 │ │ 2. EventProvider (50) │ │ - 注册事件监听器 │ │ 3. SystrayProvider (30) │ │ - 初始化系统托盘 │ │ 4. HotkeyProvider (30) │ │ - 注册全局快捷键 │ └─────────────────────────────────────┘ ↓ 初始化 Service 层 ↓ 应用就绪 ``` ### 2. 本地图片加载流程 ``` 前端 ↓ 请求本地图片路径 ↓ FileLoader.ServeHTTP() ↓ 读取文件并返回 ↓ 前端显示图片 ``` ## 配置说明 ### Wails 配置 (wails.json) ```json { "name": "img-cms-v2", "outputfilename": "图片管理系统", "frontend:install": "npm install", "frontend:build": "npm run build", "frontend:dev:watcher": "npm run dev", "frontend:dev:serverUrl": "auto", "author": { "name": "Louis", "email": "xiuwu_just@163.com" } } ``` ### 应用配置 (backend/config/config.yaml.tmpl) > 配置文件为模板 `config.yaml.tmpl`:首次运行时若不存在 `config.yaml`,则使用 `config.go` 中 `defaultConfig()` 的内置默认值; > 运行时也可在「系统设置」界面修改并持久化到数据库(覆盖默认值)。 ```yaml app: data_dir: "" # 数据目录;空=当前工作目录,可指定具体路径,如 ./data services: image: temp_dir: ./temp # 待打标图片目录 allowed_formats: [jpg, jpeg, png, gif, webp, bmp] max_file_size: 10485760 # 单文件大小上限(字节,10 MB) user: session_timeout: 5 # 登录会话超时(秒) config: tag: max_level: 4 # 最大标签层级(可在系统设置中调整) max_groups: 4 # 最多标签组数 bootstrap: components: - name: logger enabled: true config: { level: info, directory: ./logs, output: stdout, max_age: 7 } - name: database enabled: true config: { type: sqlite3, dsn: ./db/imgcms.db, max_open_conns: 10, max_idle_conns: 5, migrate: true } - name: event enabled: true - name: systray enabled: true - name: hotkey enabled: true ``` ## 开发指南 ### 环境要求 - Go 1.25+ - Node.js 16+ - npm 或 yarn ### 安装依赖 ```bash # 安装 Go 依赖 go mod download # 安装前端依赖 cd frontend npm install cd .. ``` ### 开发模式 ```bash wails dev ``` ### 构建生产版本 ```bash wails build ``` ## 许可证 MIT License