5.4 KiB
5.4 KiB
🥟 哈尔滨美食地图 · 第一阶段
管理后台系统(Admin Panel)详细设计文档
技术栈:Go (Gin) + PostgreSQL + Vue3 + Element Plus 目标:为后续 Web 网站和抖音小程序提供数据支撑的高可用、易维护的管理后台
一、项目目标
构建一个独立的 Web 管理后台,供运营人员或管理员:
- 录入/编辑/删除哈尔滨本地美食店铺
- 管理分类、招牌菜、用户评论(审核)
- 查看数据统计与排行榜预览
- 支持图片上传与地理位置标注
该后台将作为整个美食地图项目的唯一数据入口。
二、整体架构
┌──────────────────────┐
│ Admin Frontend │ ← Vue3 + Element Plus (SPA)
└──────────┬───────────┘
│ HTTP / JSON
┌──────────▼───────────┐
│ Go Backend (Gin) │ ← RESTful API + JWT Auth
└──────────┬───────────┘
│
┌──────────▼───────────┐
│ Mysql │ ← 存储店铺、分类、评论等
└──────────┬───────────┘
│
┌──────────▼───────────┐
│ redis │ ← 缓存
└──────────┬───────────┘
┌──────────▼───────────┐
│ 阿里云 OSS / 本地存储 │ ← 图片文件存储
└──────────────────────┘
三、核心功能模块(管理后台)
1. 管理员登录 / 权限控制
- 账号密码登录(支持初始超级管理员)
- JWT Token 认证
- 后续可扩展角色权限(当前 MVP 只需“管理员”角色)
2. 美食分类管理
- 新增/编辑/删除分类(如:东北菜、俄餐、烧烤、小吃)
- 分类图标(可选)
- 排序权重(用于前端展示顺序)
3. 店铺管理(核心)
- 创建新店铺:
- 店铺名称(必填)
- 所属分类(单选)
- 地址(文本 + 自动解析经纬度 via 高德 API)
- 手动调整经纬度(地图选点组件)
- 营业时间、电话(可选)
- 封面图 + 多图上传(最多6张)
- 必点招牌菜(可添加多个,带名称+描述+图片)
- 编辑/下架/删除店铺
- 批量导入(CSV 模板下载 + 上传解析,MVP 可暂缓)
4. 评论管理
- 列表展示所有用户评论(含评分、内容、图片)
- 支持审核状态:通过 / 屏蔽
- 可删除恶意评论
- 按店铺筛选
5. 数据概览(Dashboard)
- 总店铺数、总评论数、分类分布饼图
- 最近7天新增店铺趋势
- 高评分店铺 Top5 预览
6. 系统设置(可选)
- OSS 配置(AccessKey、Bucket)
- 高德地图 Key 配置(用于地址转经纬度)
四、技术选型详情
| 模块 | 技术 | 说明 |
|---|---|---|
| 后端语言 | Go 1.22+ | 高性能、编译快、并发好 |
| Web 框架 | Gin | 轻量、路由清晰、中间件丰富 |
| 数据库 | mysql:8.0 | 支持 JSON、数组、地理扩展(未来可升级 PostGIS) |
| ORM | GORM | Go 最流行 ORM,支持关联、事务、软删除 |
| 认证 | JWT + Bcrypt | 密码加密 + Token 验证 |
| 文件存储 | 阿里云 OSS(生产) / 本地 static/upload(开发) | 图片统一 CDN 加速 |
| 前端框架 | Vue 3 + Vite + TypeScript | 响应式、组件化 |
| UI 组件库 | Element Plus | 企业级后台 UI,开箱即用 |
| 地图组件 | 高德地图 JS API(Web 端选点) | 用于手动标注店铺位置 |
| 构建部署 | Docker + Nginx |
五、设置添加前端调用apikey,做好加密防止别人随意调用接口内容。
六、补充不足,完善数据库表,api接口等。
七、数据库链接信息
根据docker-compose.yml信息进行链接,告诉我配置文件位置,后期可以自行修改
mysql:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wechatpadpro/mysql:8.0
container_name: mysql-db
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password123
ports:
- "3309:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
redis:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.0.8
container_name: redis-cache
ports:
- "6381:6379"
lumes:
- redis_data:/data
tworks:
- app-network