快速开始
本指南将帮助您在5分钟内部署并开始使用U盾/SIMKey厂家管理系统。
🚀 5分钟快速部署
前置要求
确保您的系统已安装:
- Docker Desktop (Windows/Mac)
- 或 Docker + Docker Compose (Linux)
一键启动
Windows
cd manufacturer-system
start.batLinux/Mac
cd manufacturer-system
chmod +x start.sh
./start.sh等待30秒后访问
启动脚本会自动:
- 拉取所有Docker镜像
- 启动MySQL、Redis、后端、前端服务
- 初始化数据库和默认数据
访问地址:
- 🖥️ 前端管理界面: http://localhost
- 📚 API文档: http://localhost:8080/api/swagger-ui.html
- 👤 默认账号: admin
- 🔑 默认密码: admin123456
📱 系统页面导航
登录后可以访问以下9个核心页面:
1. Dashboard (控制台)
访问路径: http://localhost/dashboard
功能概览:
- 📊 设备总数统计卡片
- 📈 激活趋势折线图
- 🥧 设备类型分布饼图
- 📥 APP下载量柱状图
- ⏱️ 最近操作记录时间轴
使用场景: 登录后的首页,快速了解系统整体运营情况
2. 设备管理
访问路径: http://localhost/devices
可以做什么:
- ✅ 查看所有设备列表(分页显示)
- ✅ 按设备类型筛选(U盾/SIMKey)
- ✅ 按设备状态筛选(未激活/已激活/已锁定/已注销)
- ✅ 关键词搜索(设备ID、序列号)
- ✅ 激活设备
- ✅ 锁定/解锁设备
- ✅ 注销设备
操作步骤:
- 点击左侧菜单 "设备管理"
- 使用顶部筛选器选择设备类型和状态
- 在搜索框输入关键词查找特定设备
- 点击操作列的按钮进行设备管理
示例:激活设备
- 找到状态为"未激活"的设备
- 点击 "激活" 按钮
- 输入激活码和用户ID
- 点击确认完成激活
3. 注册设备
访问路径: http://localhost/devices/register
功能特点:
- 单个设备注册
- 批量设备注册(CSV导入)
- CSV模板下载
- 手动添加批量设备列表
单个注册操作步骤
- 选择 "单个注册" 标签
- 选择设备类型(U盾/SIMKey)
- 填写设备序列号
- 填写制造商和型号
- 点击 "注册设备"
批量注册操作步骤
方式一:CSV文件导入
- 切换到 "批量注册" 标签
- 点击 "下载模板" 获取CSV模板
- 在Excel中填写设备信息
- 点击 "上传CSV" 选择填好的文件
- 点击 "批量注册" 提交
方式二:手动添加
- 切换到 "批量注册" 标签
- 点击 "添加设备" 按钮
- 逐行填写设备信息
- 继续添加或点击 "批量注册" 提交
注册结果:
- 显示成功数量和失败数量
- 列出失败的设备及原因
- 可下载注册结果报告
4. APP版本管理
访问路径: http://localhost/app-versions
可以做什么:
- ✅ 查看所有平台APP版本
- ✅ 按平台筛选(Windows/Mac/Linux/Android/iOS)
- ✅ 发布版本(从草稿/测试状态发布)
- ✅ 废弃旧版本
- ✅ 下载安装包
- ✅ 查看下载统计
版本状态说明:
- 草稿: 刚上传,未发布
- 测试中: 内部测试阶段
- 已发布: 正式发布,用户可下载
- 已废弃: 旧版本,不再推荐
操作步骤:
- 点击左侧菜单 "APP版本"
- 使用平台筛选器选择要查看的平台
- 点击 "发布" 将测试版本发布给用户
- 点击 "废弃" 标记旧版本为废弃
- 点击 "下载" 下载安装包
5. 上传APP版本
访问路径: http://localhost/app-versions/upload
4步上传流程:
步骤1: 选择平台
- Windows (.exe, .msi)
- macOS (.dmg, .pkg)
- Linux (.deb, .rpm, .AppImage)
- Android (.apk, .aab)
- iOS (.ipa)
步骤2: 上传文件
- 拖拽文件到上传区域
- 或点击选择文件
- 支持最大2GB文件
- 显示上传进度
步骤3: 填写信息
- 版本号(如:1.0.0)
- 版本名称
- 更新日志(支持Markdown)
- 是否强制更新
- 最小支持版本
步骤4: 确认提交
- 预览版本信息
- 确认无误后提交
- 上传成功后跳转到版本列表
提示: 上传后的版本默认为"草稿"状态,需要在版本管理页面点击"发布"才能让用户下载。
6. 备份管理
访问路径: http://localhost/backups
可以做什么:
- ✅ 查看所有备份记录
- ✅ 按设备ID或用户ID筛选
- ✅ 创建新备份
- ✅ 恢复数据到新设备
- ✅ 删除过期备份
创建备份操作步骤
- 点击 "创建备份" 按钮
- 输入设备ID
- 输入用户ID
- 选择备份类型:
- 完整备份: 备份所有数据
- 增量备份: 只备份变更数据
- 选择加密方式(AES-256-GCM)
- 输入加密后的数据(JSON格式)
- 设置有效期(默认730天)
- 点击 "创建" 提交
恢复数据操作步骤
- 在备份列表中找到要恢复的备份
- 点击 "恢复" 按钮
- 输入目标设备ID(新设备)
- 输入管理员密码进行验证
- 点击 "确认恢复"
- 等待恢复完成
安全提示:
- 备份数据已加密,无法直接查看内容
- 恢复操作需要管理员密码验证
- 删除备份前会二次确认
7. 用户管理
访问路径: http://localhost/users
可以做什么:
- ✅ 查看所有系统用户
- ✅ 按角色筛选(管理员/经销商/用户)
- ✅ 按状态筛选(正常/锁定/停用)
- ✅ 添加新用户
- ✅ 编辑用户信息
- ✅ 锁定/解锁用户
- ✅ 删除用户
- ✅ 查看用户详情
角色权限说明:
| 角色 | 权限范围 |
|---|---|
| 管理员 | 所有权限,包括用户管理 |
| 经销商 | 管理分配的设备,不能管理用户 |
| 普通用户 | 只能查看和管理自己的设备 |
添加用户操作步骤
- 点击 "添加用户" 按钮
- 填写用户信息:
- 用户名(唯一)
- 邮箱
- 手机号
- 真实姓名
- 选择角色
- 设置初始密码
- 点击 "确定" 创建
编辑用户操作步骤
- 点击用户行的 "编辑" 按钮
- 修改用户信息
- 点击 "确定" 保存
锁定/解锁用户
- 锁定: 临时禁止用户登录(可解锁)
- 停用: 永久停用用户(不可恢复)
- 锁定的用户在列表中显示为灰色
8. 操作日志
访问路径: http://localhost/logs
可以做什么:
- ✅ 查看所有操作记录
- ✅ 按设备ID筛选
- ✅ 按操作类型筛选
- ✅ 按状态筛选(成功/失败)
- ✅ 按时间范围筛选
- ✅ 查看日志详情
- ✅ 导出日志(CSV格式)
操作类型:
- 设备注册
- 设备激活
- 设备锁定
- 设备解锁
- 设备注销
- 密码恢复
- 数据备份
- 数据恢复
- 用户登录
- 用户登出
查询日志操作步骤
- 选择筛选条件:
- 设备ID(可选)
- 操作类型(可选)
- 状态(可选)
- 时间范围(可选)
- 点击 "查询" 按钮
- 查看筛选结果
查看详情操作步骤
- 点击日志行的 "详情" 按钮
- 查看完整的操作信息:
- 操作人
- 操作时间
- IP地址
- User Agent
- 请求参数(JSON格式)
- 响应结果(JSON格式)
- 错误信息(如果失败)
导出日志
- 设置筛选条件
- 点击 "导出" 按钮
- 选择导出格式(CSV)
- 下载日志文件
🎯 常见使用场景
场景1: 批量注册新设备
背景: 生产厂家生产了100个新U盾,需要批量注册到系统
步骤:
- 导航到 "注册设备" 页面
- 切换到 "批量注册" 标签
- 点击 "下载模板" 下载CSV模板
- 在Excel中填写100个设备的信息:csv
设备类型,序列号,制造商,型号 UKEY,UK20240001,ChainlessChain,CCU-1000 UKEY,UK20240002,ChainlessChain,CCU-1000 ... - 保存并上传CSV文件
- 点击 "批量注册"
- 查看注册结果统计:
- 成功:98个
- 失败:2个(序列号重复)
- 下载结果报告,修正失败的记录
场景2: 发布新APP版本
背景: 开发团队完成了Android v2.0.0版本,需要发布给用户
步骤:
- 导航到 "上传APP版本" 页面
- 步骤1: 选择 "Android" 平台
- 步骤2: 拖拽上传
chainlesschain-v2.0.0.apk - 步骤3: 填写版本信息
- 版本号:2.0.0
- 版本名称:重大功能更新
- 更新日志:markdown
## 新功能 - 新增人脸识别登录 - 支持指纹支付 ## 优化 - 优化启动速度 - 修复已知问题 - 强制更新:是(勾选)
- 最小支持版本:1.5.0
- 步骤4: 确认信息,点击 "提交"
- 上传成功后,跳转到 "APP版本管理" 页面
- 找到刚上传的v2.0.0版本(状态:草稿)
- 点击 "发布" 按钮
- 确认发布,版本状态变为"已发布"
- 用户端即可检测到新版本并下载更新
场景3: 用户设备激活
背景: 用户购买了一个U盾,获得激活码,需要激活设备
步骤:
- 用户从设备包装盒中获得激活码:
ABCD-EFGH-IJKL-MNOP - 导航到 "设备管理" 页面
- 在设备列表中筛选状态为 "未激活" 的设备
- 通过序列号找到对应设备:
UK20240001 - 点击 "激活" 按钮
- 在弹出的对话框中输入:
- 激活码:
ABCD-EFGH-IJKL-MNOP - 用户ID:
user123(用户在APP中注册的ID)
- 激活码:
- 点击 "确认激活"
- 激活成功,设备状态变为 "已激活"
- 用户可以在APP中使用该U盾
场景4: 数据备份与恢复
背景: 用户的U盾丢失,需要将数据恢复到新U盾
创建备份
- 用户在丢失前使用了数据备份功能
- APP将加密数据上传到厂家系统
- 管理员导航到 "备份管理" 页面
- 点击 "创建备份"
- 输入信息:
- 设备ID:
UK20240001(旧设备) - 用户ID:
user123 - 备份类型:完整备份
- 加密数据:(从APP获取的加密JSON)
- 有效期:730天
- 设备ID:
- 点击 "创建",备份成功
恢复数据
- 用户购买了新U盾:
UK20240100 - 管理员在 "设备管理" 中激活新设备
- 导航到 "备份管理" 页面
- 找到旧设备
UK20240001的备份 - 点击 "恢复" 按钮
- 输入目标设备ID:
UK20240100 - 输入管理员密码:
admin123456 - 点击 "确认恢复"
- 系统将备份数据恢复到新设备
- 用户在新设备上可以访问所有数据
🔧 故障排查
问题1: 无法访问前端页面
症状: 浏览器显示"无法访问此网站"
解决方法:
# 检查Docker容器状态
docker-compose ps
# 应该看到4个容器都是Up状态:
# - mysql
# - redis
# - backend
# - frontend
# 如果frontend容器异常,查看日志
docker-compose logs frontend
# 重启前端容器
docker-compose restart frontend问题2: API请求失败
症状: 页面显示"网络错误"或"请求失败"
解决方法:
# 检查后端服务
docker-compose logs backend
# 检查数据库连接
docker-compose logs mysql
# 查看是否有错误信息
docker-compose logs backend | grep ERROR
# 重启后端服务
docker-compose restart backend问题3: 登录失败
症状: 输入账号密码后提示"用户名或密码错误"
解决方法:
确认使用默认账号:
- 用户名:
admin - 密码:
admin123456
- 用户名:
清除浏览器缓存:
- 打开开发者工具(F12)
- Application → Storage → Clear site data
- 刷新页面
尝试无痕模式:
- 使用浏览器无痕窗口访问
- 避免缓存干扰
重置数据库:
# 停止所有服务
docker-compose down
# 删除数据库卷
docker volume rm manufacturer-system_mysql-data
# 重新启动
docker-compose up -d问题4: 文件上传失败
症状: 上传APP安装包时显示"上传失败"
解决方法:
检查文件大小(不超过2GB)
检查文件格式:
- Windows: .exe, .msi
- Mac: .dmg, .pkg
- Linux: .deb, .rpm, .AppImage
- Android: .apk, .aab
- iOS: .ipa
查看后端日志:
docker-compose logs backend | grep upload- 检查上传目录权限(Linux/Mac):
# 确保上传目录存在
mkdir -p data/uploads
# 设置权限
chmod 777 data/uploads- 重启后端服务:
docker-compose restart backend📊 系统监控
查看系统状态
# 查看所有容器状态
docker-compose ps
# 查看资源使用情况
docker stats
# 实时查看所有日志
docker-compose logs -f
# 只查看后端日志
docker-compose logs -f backend性能监控
访问 Dashboard 页面查看实时统计:
- 设备总数: 当前注册的设备总数
- 激活率: 已激活设备 / 总设备
- 用户数量: 系统用户总数
- 下载量: APP总下载次数
数据库监控
# 进入MySQL容器
docker-compose exec mysql bash
# 登录MySQL
mysql -u root -p
# 查看数据库大小
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'manufacturer_system'
GROUP BY table_schema;
# 查看表记录数
SELECT
table_name AS 'Table',
table_rows AS 'Rows'
FROM information_schema.tables
WHERE table_schema = 'manufacturer_system';🔄 数据备份
备份数据库
# 导出整个数据库
docker-compose exec mysql mysqldump -u root -p manufacturer_system > backup_$(date +%Y%m%d).sql
# 只导出数据(不包含结构)
docker-compose exec mysql mysqldump -u root -p --no-create-info manufacturer_system > data_backup.sql
# 只导出结构(不包含数据)
docker-compose exec mysql mysqldump -u root -p --no-data manufacturer_system > schema_backup.sql恢复数据库
# 恢复数据库
docker-compose exec -T mysql mysql -u root -p manufacturer_system < backup_20241202.sql备份上传文件
# 备份上传的APP文件
tar -czf uploads_backup_$(date +%Y%m%d).tar.gz data/uploads/
# 恢复上传文件
tar -xzf uploads_backup_20241202.tar.gz📞 获取帮助
文档资源
技术支持
- 官网: https://www.chainlesschain.com
- 邮箱: zhanglongfa@chainlesschain.com
- 电话: 400-1068-687
- GitHub: https://github.com/chainlesschain/manufacturer-system
社区支持
🎓 学习路径
新手推荐
进阶学习
代码学习
推荐学习顺序:
1. 前端页面 (frontend/src/views/) - 理解业务流程
2. 路由配置 (frontend/src/router/) - 理解页面结构
3. API封装 (frontend/src/api/) - 理解接口调用
4. 后端Controller (backend/.../controller/) - 理解API实现
5. 业务Service (backend/.../service/) - 理解业务逻辑
6. 数据库设计 (backend/.../resources/db/) - 理解数据结构祝您使用愉快! 🎉
有任何问题欢迎随时联系我们!
