chore: Remove src/components/common/Header.tsx.
This commit is contained in:
1 parent
8a8630416e
commit
5f944dd88a
5 files changed
-802
No files matched your search
@@ -1,108 +0,0 @@
|
|||||||
name: Deploy Backend
|
|
||||||
|
|
||||||
on:
|
|
||||||
# push:
|
|
||||||
# branches: [ main ]
|
|
||||||
# paths:
|
|
||||||
# - 'backend/**'
|
|
||||||
# - 'Dockerfile'
|
|
||||||
# - '.github/workflows/deploy_backend.yml'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
IMAGE_NAME: license-manager-backend
|
|
||||||
CONTAINER_NAME: license-manager
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v4
|
|
||||||
with:
|
|
||||||
go-version: '1.23'
|
|
||||||
|
|
||||||
- name: Build and test backend
|
|
||||||
run: |
|
|
||||||
cd backend
|
|
||||||
go mod tidy
|
|
||||||
go mod verify
|
|
||||||
go test ./...
|
|
||||||
go build -ldflags="-s -w" -o license-manager cmd/main.go
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Build Docker image
|
|
||||||
run: |
|
|
||||||
docker build -f Dockerfile.backend -t ${{ env.IMAGE_NAME }}:latest .
|
|
||||||
docker save ${{ env.IMAGE_NAME }}:latest > backend-image.tar
|
|
||||||
|
|
||||||
- name: Copy files to server
|
|
||||||
uses: appleboy/scp-action@v0.1.7
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.HOST_PI }}
|
|
||||||
username: pi
|
|
||||||
password: ${{ secrets.PASS_PI }}
|
|
||||||
port: 22
|
|
||||||
source: "backend-image.tar"
|
|
||||||
target: "/home/pi/license-manager/"
|
|
||||||
|
|
||||||
- name: Deploy to server
|
|
||||||
uses: appleboy/ssh-action@v1.0.3
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.HOST_PI }}
|
|
||||||
username: pi
|
|
||||||
password: ${{ secrets.PASS_PI }}
|
|
||||||
port: 22
|
|
||||||
script: |
|
|
||||||
cd /home/pi/license-manager
|
|
||||||
|
|
||||||
# Stop and remove existing container
|
|
||||||
docker stop ${{ env.CONTAINER_NAME }} || true
|
|
||||||
docker rm ${{ env.CONTAINER_NAME }} || true
|
|
||||||
|
|
||||||
# Load new image
|
|
||||||
docker load < backend-image.tar
|
|
||||||
|
|
||||||
# Remove old image
|
|
||||||
docker rmi ${{ env.IMAGE_NAME }}:old || true
|
|
||||||
docker tag ${{ env.IMAGE_NAME }}:latest ${{ env.IMAGE_NAME }}:old || true
|
|
||||||
|
|
||||||
# Run new container with host network
|
|
||||||
docker run -d \
|
|
||||||
--name ${{ env.CONTAINER_NAME }} \
|
|
||||||
--restart unless-stopped \
|
|
||||||
--network host \
|
|
||||||
-v /home/pi/license-manager/logs:/app/logs \
|
|
||||||
${{ env.IMAGE_NAME }}:latest
|
|
||||||
|
|
||||||
# Clean up
|
|
||||||
rm -f backend-image.tar
|
|
||||||
docker image prune -f
|
|
||||||
|
|
||||||
# Check deployment status
|
|
||||||
sleep 5
|
|
||||||
if docker ps | grep -q ${{ env.CONTAINER_NAME }}; then
|
|
||||||
echo "✅ Deployment successful! Container is running."
|
|
||||||
docker logs --tail 10 ${{ env.CONTAINER_NAME }}
|
|
||||||
else
|
|
||||||
echo "❌ Deployment failed! Container is not running."
|
|
||||||
docker logs ${{ env.CONTAINER_NAME }}
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Health check
|
|
||||||
run: |
|
|
||||||
sleep 10
|
|
||||||
response=$(curl -s -o /dev/null -w "%{http_code}" http://${{ secrets.HOST_PI }}:18888/health || echo "000")
|
|
||||||
if [ "$response" = "200" ]; then
|
|
||||||
echo "✅ Health check passed! Service is responding."
|
|
||||||
else
|
|
||||||
echo "⚠️ Health check returned status: $response"
|
|
||||||
echo "Service may still be starting up..."
|
|
||||||
fi
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
name: Deploy Frontend
|
|
||||||
|
|
||||||
on:
|
|
||||||
# push:
|
|
||||||
# branches: [ main ]
|
|
||||||
# paths:
|
|
||||||
# - 'frontend/**'
|
|
||||||
# - 'Dockerfile.frontend'
|
|
||||||
# - 'nginx.conf'
|
|
||||||
# - '.github/workflows/deploy_frontend.yml'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
IMAGE_NAME: license-manager-frontend
|
|
||||||
CONTAINER_NAME: license-manager-frontend
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Build Docker image
|
|
||||||
run: |
|
|
||||||
docker build -f Dockerfile.frontend --build-arg NGINX_CONF=nginx-ci.conf -t ${{ env.IMAGE_NAME }}:latest .
|
|
||||||
docker save ${{ env.IMAGE_NAME }}:latest > frontend-image.tar
|
|
||||||
|
|
||||||
- name: Copy files to server
|
|
||||||
uses: appleboy/scp-action@v0.1.7
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.HOST_PI }}
|
|
||||||
username: pi
|
|
||||||
password: ${{ secrets.PASS_PI }}
|
|
||||||
port: 22
|
|
||||||
source: "frontend-image.tar"
|
|
||||||
target: "/home/pi/license-manager/"
|
|
||||||
|
|
||||||
- name: Deploy to server
|
|
||||||
uses: appleboy/ssh-action@v1.0.3
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.HOST_PI }}
|
|
||||||
username: pi
|
|
||||||
password: ${{ secrets.PASS_PI }}
|
|
||||||
port: 22
|
|
||||||
script: |
|
|
||||||
cd /home/pi/license-manager
|
|
||||||
|
|
||||||
# Stop and remove existing container
|
|
||||||
docker stop ${{ env.CONTAINER_NAME }} || true
|
|
||||||
docker rm ${{ env.CONTAINER_NAME }} || true
|
|
||||||
|
|
||||||
# Load new image
|
|
||||||
docker load < frontend-image.tar
|
|
||||||
|
|
||||||
# Remove old image
|
|
||||||
docker rmi ${{ env.IMAGE_NAME }}:old || true
|
|
||||||
docker tag ${{ env.IMAGE_NAME }}:latest ${{ env.IMAGE_NAME }}:old || true
|
|
||||||
|
|
||||||
# Run new container
|
|
||||||
docker run -d \
|
|
||||||
--name ${{ env.CONTAINER_NAME }} \
|
|
||||||
--restart unless-stopped \
|
|
||||||
-p 18080:80 \
|
|
||||||
--add-host host.docker.internal:host-gateway \
|
|
||||||
${{ env.IMAGE_NAME }}:latest
|
|
||||||
|
|
||||||
# Clean up
|
|
||||||
rm -f frontend-image.tar
|
|
||||||
docker image prune -f
|
|
||||||
|
|
||||||
# Check deployment status
|
|
||||||
sleep 5
|
|
||||||
if docker ps | grep -q ${{ env.CONTAINER_NAME }}; then
|
|
||||||
echo "✅ Frontend deployment successful! Container is running."
|
|
||||||
docker logs --tail 10 ${{ env.CONTAINER_NAME }}
|
|
||||||
else
|
|
||||||
echo "❌ Frontend deployment failed! Container is not running."
|
|
||||||
docker logs ${{ env.CONTAINER_NAME }}
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Health check
|
|
||||||
run: |
|
|
||||||
sleep 10
|
|
||||||
response=$(curl -s -o /dev/null -w "%{http_code}" http://${{ secrets.HOST_PI }}:18080/ || echo "000")
|
|
||||||
if [ "$response" = "200" ]; then
|
|
||||||
echo "✅ Frontend health check passed! Service is responding."
|
|
||||||
else
|
|
||||||
echo "⚠️ Frontend health check returned status: $response"
|
|
||||||
echo "Service may still be starting up..."
|
|
||||||
fi
|
|
||||||
@@ -1,345 +0,0 @@
|
|||||||
# 客户属性设计与Web显示方案
|
|
||||||
|
|
||||||
## 1. 核心客户属性
|
|
||||||
|
|
||||||
### 基础标识
|
|
||||||
- `id` - 唯一标识符
|
|
||||||
- **作用**: 数据库主键,系统内部引用
|
|
||||||
- **生成**: UUID自动生成
|
|
||||||
- **必填**: 是
|
|
||||||
|
|
||||||
- `customer_code` - 客户编码 (如: CUS-2025-001)
|
|
||||||
- **作用**: 业务识别码,便于客服沟通和查找
|
|
||||||
- **生成**: CUS-YYYY-NNNN格式,系统自动递增
|
|
||||||
- **必填**: 是
|
|
||||||
- **唯一**: 是
|
|
||||||
- **意义**: 比数据库ID更有业务意义,支持按年度统计
|
|
||||||
|
|
||||||
- `customer_name` - 客户名称/公司名
|
|
||||||
- **作用**: 主要识别信息,合同签署主体
|
|
||||||
- **示例**: "北京科技有限公司"、"张三"
|
|
||||||
- **必填**: 是
|
|
||||||
- **搜索**: 支持模糊搜索
|
|
||||||
|
|
||||||
- `customer_type` - 客户类型 (个人/企业/政府/教育)
|
|
||||||
- **作用**: 区分客户类别,影响服务策略和定价
|
|
||||||
- **枚举**: individual(个人) | enterprise(企业) | government(政府) | education(教育)
|
|
||||||
- **必填**: 是
|
|
||||||
- **默认**: enterprise
|
|
||||||
|
|
||||||
### 联系信息
|
|
||||||
- `contact_person` - 联系人姓名
|
|
||||||
- **作用**: 授权通知和技术支持的对接人
|
|
||||||
- **必填**: 是
|
|
||||||
- **示例**: "张三"
|
|
||||||
|
|
||||||
- `contact_title` - 联系人职务
|
|
||||||
- **作用**: 了解联系人在组织中的角色,便于沟通
|
|
||||||
- **必填**: 否
|
|
||||||
- **示例**: "技术总监"、"IT经理"
|
|
||||||
|
|
||||||
- `email` - 主邮箱
|
|
||||||
- **作用**: 授权激活通知、过期提醒、技术支持的主要渠道
|
|
||||||
- **必填**: 是
|
|
||||||
- **唯一**: 建议唯一
|
|
||||||
- **验证**: 邮箱格式验证
|
|
||||||
|
|
||||||
- `phone` - 电话号码
|
|
||||||
- **作用**: 紧急联系、电话技术支持
|
|
||||||
- **必填**: 否
|
|
||||||
- **格式**: 支持手机和固话
|
|
||||||
|
|
||||||
### 地址信息
|
|
||||||
- `address` - 地址
|
|
||||||
- **作用**: 联系地址,邮寄材料或现场服务时使用
|
|
||||||
- **必填**: 否
|
|
||||||
- **示例**: "北京市朝阳区科技园区100号"
|
|
||||||
- **格式**: 自由文本,用户可详细可简略
|
|
||||||
|
|
||||||
### 商业属性
|
|
||||||
- `company_size` - 企业规模 (小型/中型/大型/集团)
|
|
||||||
- **作用**: 影响定价策略和服务等级
|
|
||||||
- **枚举**: small(小型) | medium(中型) | large(大型) | enterprise(集团)
|
|
||||||
- **必填**: 否
|
|
||||||
- **用途**: 制定差异化授权策略
|
|
||||||
|
|
||||||
### 授权配置
|
|
||||||
- `preferred_license_type` - 首选授权类型 (在线/离线/混合)
|
|
||||||
- **作用**: 影响授权码生成策略和验证方式
|
|
||||||
- **枚举**: online(在线) | offline(离线) | hybrid(混合)
|
|
||||||
- **必填**: 否
|
|
||||||
- **默认**: online
|
|
||||||
- **意义**: 在线需要联网验证,离线可本地验证
|
|
||||||
|
|
||||||
### 客户分级
|
|
||||||
- `customer_level` - 客户等级 (普通/VIP/企业/战略)
|
|
||||||
- **作用**: 影响服务优先级、授权数量限制、技术支持等级
|
|
||||||
- **枚举**: normal(普通) | vip(VIP) | enterprise(企业) | strategic(战略)
|
|
||||||
- **必填**: 否
|
|
||||||
- **默认**: normal
|
|
||||||
- **影响**: 高等级客户可获得更多授权、更快响应
|
|
||||||
|
|
||||||
### 状态管理
|
|
||||||
- `status` - 客户状态 (正常/禁用)
|
|
||||||
- **作用**: 控制是否允许为该客户生成新授权
|
|
||||||
- **枚举**: active(正常) | disabled(禁用)
|
|
||||||
- **必填**: 是
|
|
||||||
- **默认**: active
|
|
||||||
- **影响**: 禁用状态下不能生成新授权,但现有授权仍可使用
|
|
||||||
|
|
||||||
- `description` - 客户描述/备注
|
|
||||||
- **作用**: 记录客户特殊情况、业务背景、注意事项
|
|
||||||
- **必填**: 否
|
|
||||||
- **示例**: "重要客户,IoT平台采购方,需要优先技术支持"
|
|
||||||
|
|
||||||
### 时间字段
|
|
||||||
- `created_at` - 创建时间
|
|
||||||
- **作用**: 记录客户注册时间,用于统计分析
|
|
||||||
- **自动**: 系统自动记录
|
|
||||||
- **不可修改**: 是
|
|
||||||
|
|
||||||
- `updated_at` - 更新时间
|
|
||||||
- **作用**: 记录最后修改时间,追踪数据变更
|
|
||||||
- **自动**: 系统自动更新
|
|
||||||
- **触发**: 任何字段修改都会更新
|
|
||||||
|
|
||||||
- `created_by` - 创建人
|
|
||||||
- **作用**: 记录是哪个管理员创建的客户
|
|
||||||
- **必填**: 是
|
|
||||||
- **关联**: 管理员用户ID
|
|
||||||
|
|
||||||
- `updated_by` - 更新人
|
|
||||||
- **作用**: 记录最后修改人,便于问题追溯
|
|
||||||
- **自动**: 系统自动记录当前操作员
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Web列表页显示信息
|
|
||||||
|
|
||||||
### 主要显示列
|
|
||||||
```
|
|
||||||
| 客户编码 | 客户名称 | 客户类型 | 联系人 | 邮箱 | 客户等级 | 状态 | 创建时间 | 操作 |
|
|
||||||
```
|
|
||||||
|
|
||||||
### 具体显示内容与作用
|
|
||||||
|
|
||||||
**客户编码** (`customer_code`)
|
|
||||||
- 显示: CUS-2025-001
|
|
||||||
- 作用: 快速识别客户,支持精确搜索,客服沟通时的标准引用
|
|
||||||
- 交互: 点击可复制到剪贴板
|
|
||||||
|
|
||||||
**客户名称** (`customer_name`)
|
|
||||||
- 显示: 北京科技有限公司
|
|
||||||
- 作用: 主要识别信息,最重要的显示内容
|
|
||||||
- 交互: 点击进入客户详情页
|
|
||||||
- 样式: 可截断显示,悬停显示完整名称
|
|
||||||
|
|
||||||
**客户类型** (`customer_type`)
|
|
||||||
- 显示: 🏢企业 | 👤个人 | 🏛️政府 | 🎓教育
|
|
||||||
- 作用: 快速区分客户类别,影响服务策略
|
|
||||||
- 样式: 用图标+文字+颜色区分
|
|
||||||
- 筛选: 支持按类型筛选
|
|
||||||
|
|
||||||
**联系人** (`contact_person`)
|
|
||||||
- 显示: 张三
|
|
||||||
- 作用: 知道具体联系谁,便于沟通对接
|
|
||||||
- 交互: 悬停显示联系人职务信息
|
|
||||||
|
|
||||||
**邮箱** (`email`)
|
|
||||||
- 显示: zhangsan@example.com
|
|
||||||
- 作用: 重要联系方式,授权通知的主要渠道
|
|
||||||
- 交互: 点击可发送邮件
|
|
||||||
- 验证: 显示邮箱验证状态(已验证/未验证)
|
|
||||||
|
|
||||||
**客户等级** (`customer_level`)
|
|
||||||
- 显示: 🏢企业 | 👤普通 | ⭐VIP | 💼战略
|
|
||||||
- 作用: 显示客户重要程度,影响服务优先级
|
|
||||||
- 样式: 不同等级用不同颜色和图标
|
|
||||||
- 排序: 支持按等级排序
|
|
||||||
|
|
||||||
**状态** (`status`)
|
|
||||||
- 显示: ✅正常 | ❌禁用
|
|
||||||
- 作用: 显示客户是否可以生成新授权
|
|
||||||
- 交互: 可直接点击切换状态(需要确认)
|
|
||||||
- 样式: 正常为绿色,禁用为红色
|
|
||||||
|
|
||||||
**创建时间** (`created_at`)
|
|
||||||
- 显示: 2025-01-15
|
|
||||||
- 作用: 了解客户注册时间,便于分析客户生命周期
|
|
||||||
- 格式: YYYY-MM-DD
|
|
||||||
- 排序: 默认按创建时间倒序
|
|
||||||
|
|
||||||
**操作**
|
|
||||||
- 查看详情: 进入客户详情页
|
|
||||||
- 编辑: 修改客户信息
|
|
||||||
- 授权管理: 查看该客户的所有授权
|
|
||||||
- 生成授权: 快速为该客户生成新授权
|
|
||||||
- 更多操作: 禁用/启用、删除等
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Web详情页显示信息
|
|
||||||
|
|
||||||
### 基本信息卡片
|
|
||||||
```
|
|
||||||
客户编码: CUS-2025-001 客户类型: 🏢企业
|
|
||||||
客户名称: 北京科技有限公司 客户等级: ⭐VIP客户
|
|
||||||
联系人: 张三 (技术总监) 当前状态: ✅正常
|
|
||||||
邮箱: zhangsan@example.com 电话: 13800138000
|
|
||||||
```
|
|
||||||
**用途**: 核心信息一览,便于快速了解客户基本情况
|
|
||||||
|
|
||||||
### 地址信息卡片
|
|
||||||
```
|
|
||||||
地址: 北京市朝阳区科技园区100号
|
|
||||||
```
|
|
||||||
**用途**: 联系地址,邮寄材料或现场服务参考
|
|
||||||
|
|
||||||
### 商业信息卡片
|
|
||||||
```
|
|
||||||
企业规模: 中型企业 首选授权: 在线授权
|
|
||||||
备注描述: 重要客户,IoT平台采购方,需要优先技术支持
|
|
||||||
```
|
|
||||||
**用途**: 业务背景了解,制定针对性服务策略
|
|
||||||
|
|
||||||
### 状态信息卡片
|
|
||||||
```
|
|
||||||
当前状态: ✅正常 创建时间: 2025-01-15 10:30:00
|
|
||||||
创建人: 李四(管理员) 更新时间: 2025-01-20 15:45:00
|
|
||||||
更新人: 王五(客服)
|
|
||||||
```
|
|
||||||
**用途**: 跟踪客户生命周期,了解操作历史
|
|
||||||
|
|
||||||
### 授权统计卡片
|
|
||||||
```
|
|
||||||
总授权数: 3个 活跃授权: 2个
|
|
||||||
过期授权: 1个 最近授权: 2025-01-18
|
|
||||||
即将过期: 1个(7天内) 授权设备总数: 85台
|
|
||||||
```
|
|
||||||
**用途**: 快速了解客户授权使用情况,识别续费机会
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. 列表页功能特性
|
|
||||||
|
|
||||||
### 搜索筛选
|
|
||||||
- **全文搜索框**: 支持客户编码、名称、联系人、邮箱的模糊搜索
|
|
||||||
- **作用**: 快速定位目标客户
|
|
||||||
- **实现**: 实时搜索,输入即显示结果
|
|
||||||
|
|
||||||
- **客户类型筛选**: 全部 | 企业 | 个人 | 政府 | 教育
|
|
||||||
- **作用**: 按业务类型分类查看
|
|
||||||
- **场景**: 针对不同类型客户制定营销策略
|
|
||||||
|
|
||||||
- **客户等级筛选**: 全部 | 普通 | VIP | 企业 | 战略
|
|
||||||
- **作用**: 重点关注高价值客户
|
|
||||||
- **场景**: 优先处理VIP和战略客户的需求
|
|
||||||
|
|
||||||
- **状态筛选**: 全部 | 正常 | 禁用
|
|
||||||
- **作用**: 识别问题客户,及时处理
|
|
||||||
- **场景**: 定期清理禁用客户,分析禁用原因
|
|
||||||
|
|
||||||
### 排序功能
|
|
||||||
- **按创建时间排序** (默认)
|
|
||||||
- **作用**: 了解客户注册趋势,关注新客户
|
|
||||||
|
|
||||||
- **按客户名称排序**
|
|
||||||
- **作用**: 字母序查找,便于浏览
|
|
||||||
|
|
||||||
- **按客户等级排序**
|
|
||||||
- **作用**: 优先显示重要客户
|
|
||||||
|
|
||||||
- **按更新时间排序**
|
|
||||||
- **作用**: 查看最近活跃的客户
|
|
||||||
|
|
||||||
### 批量操作
|
|
||||||
- **批量启用/禁用**
|
|
||||||
- **作用**: 批量处理客户状态变更
|
|
||||||
- **场景**: 批量处理欠费客户、恢复客户服务
|
|
||||||
|
|
||||||
- **批量导出**
|
|
||||||
- **作用**: 导出客户数据进行分析
|
|
||||||
- **格式**: Excel、CSV格式
|
|
||||||
|
|
||||||
- **批量删除**
|
|
||||||
- **作用**: 清理无效客户数据
|
|
||||||
- **安全**: 需要二次确认,软删除机制
|
|
||||||
|
|
||||||
### 分页显示
|
|
||||||
- **每页条数**: 10/20/50/100条可选
|
|
||||||
- **默认**: 20条
|
|
||||||
- **作用**: 平衡加载速度和浏览效率
|
|
||||||
|
|
||||||
- **总数统计**: 显示"共1,234个客户"
|
|
||||||
- **作用**: 了解客户总体规模
|
|
||||||
|
|
||||||
- **页码导航**: 支持跳转到指定页
|
|
||||||
- **作用**: 快速浏览大量数据
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. 显示优化建议
|
|
||||||
|
|
||||||
### 响应式设计
|
|
||||||
- **桌面端(>1200px)**: 显示所有列
|
|
||||||
- **作用**: 完整信息展示,提高工作效率
|
|
||||||
|
|
||||||
- **平板端(768-1200px)**: 隐藏地址、电话等次要信息
|
|
||||||
- **作用**: 保持核心信息,适应中等屏幕
|
|
||||||
|
|
||||||
- **手机端(<768px)**: 卡片式布局,只显示客户名称、等级、状态
|
|
||||||
- **作用**: 移动端快速浏览,支持现场客户查询
|
|
||||||
|
|
||||||
### 数据可视化(仪表盘)
|
|
||||||
- **客户等级分布饼图**
|
|
||||||
- **作用**: 了解客户结构,制定等级提升策略
|
|
||||||
|
|
||||||
- **客户类型统计柱图**
|
|
||||||
- **作用**: 分析目标市场,调整营销重点
|
|
||||||
|
|
||||||
- **月度新增客户趋势图**
|
|
||||||
- **作用**: 监控业务增长,评估营销效果
|
|
||||||
|
|
||||||
### 交互优化
|
|
||||||
- **悬停显示完整信息**
|
|
||||||
- **场景**: 客户名称过长时显示完整名称
|
|
||||||
- **内容**: 联系人悬停显示职务和电话
|
|
||||||
|
|
||||||
- **点击客户名称进入详情页**
|
|
||||||
- **作用**: 快速访问详细信息
|
|
||||||
|
|
||||||
- **状态切换快捷操作**
|
|
||||||
- **实现**: 点击状态图标直接切换,需要确认
|
|
||||||
- **作用**: 快速处理客户状态变更
|
|
||||||
|
|
||||||
- **右键菜单快速操作**
|
|
||||||
- **功能**: 编辑、查看授权、生成授权、禁用等
|
|
||||||
- **作用**: 提高操作效率,减少页面跳转
|
|
||||||
|
|
||||||
### 性能优化
|
|
||||||
- **虚拟滚动**: 大数据量时采用虚拟滚动
|
|
||||||
- **触发**: 客户数>1000时
|
|
||||||
- **作用**: 保证页面流畅性
|
|
||||||
|
|
||||||
- **延迟加载**: 图片和非关键信息延迟加载
|
|
||||||
- **作用**: 提高首屏加载速度
|
|
||||||
|
|
||||||
- **缓存策略**: 客户列表数据缓存5分钟
|
|
||||||
- **作用**: 减少不必要的服务器请求
|
|
||||||
|
|
||||||
## 6. 业务价值总结
|
|
||||||
|
|
||||||
### 提高工作效率
|
|
||||||
- **快速识别**: 通过客户编码和等级快速识别重要客户
|
|
||||||
- **精准搜索**: 多维度搜索快速定位目标客户
|
|
||||||
- **批量操作**: 减少重复性操作,提高处理效率
|
|
||||||
|
|
||||||
### 优化客户服务
|
|
||||||
- **服务分级**: 根据客户等级提供差异化服务
|
|
||||||
- **及时响应**: 通过状态管理及时识别问题客户
|
|
||||||
- **个性化**: 根据客户偏好(授权类型)提供合适的解决方案
|
|
||||||
|
|
||||||
### 支撑业务决策
|
|
||||||
- **客户分析**: 通过等级、类型分布了解客户结构
|
|
||||||
- **趋势监控**: 通过创建时间分析客户增长趋势
|
|
||||||
- **风险控制**: 通过状态管理防范业务风险
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
# 软件授权管理平台 - 目录结构说明
|
|
||||||
|
|
||||||
## 项目整体结构
|
|
||||||
|
|
||||||
```
|
|
||||||
license-manager/
|
|
||||||
├── README.md # 项目说明文档
|
|
||||||
├── LICENSE # 开源许可证
|
|
||||||
├── .gitignore # Git忽略文件配置
|
|
||||||
├── Dockerfile # Docker构建配置
|
|
||||||
├── docker-compose.yml # Docker编排配置
|
|
||||||
├── Makefile # 构建自动化脚本
|
|
||||||
│
|
|
||||||
├── backend/ # 后端服务目录
|
|
||||||
├── frontend/ # 前端应用目录
|
|
||||||
├── docs/ # 项目文档目录
|
|
||||||
├── scripts/ # 项目级脚本目录
|
|
||||||
├── tests/ # 端到端测试目录
|
|
||||||
└── bin/ # 编译产物目录
|
|
||||||
```
|
|
||||||
|
|
||||||
## 前端目录 (frontend/)
|
|
||||||
|
|
||||||
```
|
|
||||||
frontend/
|
|
||||||
├── public/ # 静态资源目录
|
|
||||||
│ ├── index.html # HTML模板
|
|
||||||
│ └── favicon.ico # 网站图标
|
|
||||||
├── src/ # 前端源代码
|
|
||||||
│ ├── components/ # Vue组件
|
|
||||||
│ ├── views/ # 页面视图
|
|
||||||
│ ├── router/ # 路由配置
|
|
||||||
│ ├── store/ # 状态管理(Pinia)
|
|
||||||
│ ├── api/ # API请求封装
|
|
||||||
│ ├── utils/ # 工具函数
|
|
||||||
│ ├── assets/ # 资源文件
|
|
||||||
│ └── main.js # 应用入口
|
|
||||||
├── package.json # NPM依赖配置
|
|
||||||
├── vite.config.js # Vite构建配置
|
|
||||||
└── .env.example # 环境变量模板
|
|
||||||
```
|
|
||||||
|
|
||||||
## 文档目录 (docs/)
|
|
||||||
|
|
||||||
```
|
|
||||||
docs/
|
|
||||||
├── api/ # API接口文档
|
|
||||||
├── architecture/ # 架构设计文档
|
|
||||||
│ ├── 需求说明书.md # 项目需求规格
|
|
||||||
│ └── 目录结构说明.md # 本文档
|
|
||||||
└── deployment/ # 部署相关文档
|
|
||||||
```
|
|
||||||
|
|
||||||
## 脚本目录 (scripts/)
|
|
||||||
|
|
||||||
```
|
|
||||||
scripts/
|
|
||||||
├── build.sh # 项目构建脚本
|
|
||||||
├── deploy.sh # 部署脚本
|
|
||||||
└── dev.sh # 开发环境启动脚本
|
|
||||||
```
|
|
||||||
|
|
||||||
## 测试目录 (tests/)
|
|
||||||
|
|
||||||
```
|
|
||||||
tests/
|
|
||||||
├── integration/ # 集成测试
|
|
||||||
└── e2e/ # 端到端测试
|
|
||||||
```
|
|
||||||
|
|
||||||
## 编译产物目录 (bin/)
|
|
||||||
|
|
||||||
```
|
|
||||||
bin/
|
|
||||||
└── license-manager # 编译后的可执行文件
|
|
||||||
```
|
|
||||||
|
|
||||||
## 目录设计原则
|
|
||||||
|
|
||||||
### 1. 前后端分离
|
|
||||||
- backend/ 和 frontend/ 完全独立,可以分别开发和部署
|
|
||||||
- 各自拥有独立的依赖管理和构建配置
|
|
||||||
|
|
||||||
### 2. 职责清晰
|
|
||||||
- internal/ 存放内部业务逻辑,不对外暴露
|
|
||||||
- pkg/ 存放可重用的公共代码
|
|
||||||
- cmd/ 只包含应用启动代码
|
|
||||||
|
|
||||||
### 3. 标准化
|
|
||||||
- 遵循Go项目标准布局
|
|
||||||
- 遵循Vue.js项目最佳实践
|
|
||||||
- 符合开源项目规范
|
|
||||||
|
|
||||||
### 4. 易于维护
|
|
||||||
- 配置文件集中管理
|
|
||||||
- 脚本统一放置
|
|
||||||
- 文档结构清晰
|
|
||||||
|
|
||||||
## 开发流程
|
|
||||||
|
|
||||||
### 开发环境启动
|
|
||||||
```bash
|
|
||||||
# 启动开发环境(前后端同时启动)
|
|
||||||
./scripts/dev.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### 项目构建
|
|
||||||
```bash
|
|
||||||
# 构建整个项目
|
|
||||||
./scripts/build.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Docker部署
|
|
||||||
```bash
|
|
||||||
# 构建Docker镜像
|
|
||||||
docker build -t license-manager .
|
|
||||||
|
|
||||||
# 运行容器
|
|
||||||
docker run -p 8080:8080 license-manager
|
|
||||||
```
|
|
||||||
|
|
||||||
## 注意事项
|
|
||||||
|
|
||||||
1. 权限管理:确保脚本文件具有执行权限
|
|
||||||
2. 配置文件:不要提交包含敏感信息的配置文件
|
|
||||||
3. 依赖管理:定期更新依赖版本,注意安全漏洞
|
|
||||||
4. 代码规范:前后端代码都要遵循各自的编码规范
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
# 软件授权管理平台需求规格说明书
|
|
||||||
|
|
||||||
## 1. 项目概述
|
|
||||||
|
|
||||||
### 1.1 项目背景
|
|
||||||
为了保护软件知识产权,规范软件使用权限,需要开发一个独立的软件授权管理平台,为IoT平台等软件系统提供授权码生成、分发、验证和管理服务。
|
|
||||||
|
|
||||||
### 1.2 项目目标
|
|
||||||
- 建立统一的软件授权管理系统
|
|
||||||
- 实现基于硬件绑定的授权机制
|
|
||||||
- 提供在线和离线两种授权模式
|
|
||||||
- 支持授权状态实时监控和管理
|
|
||||||
- 提供完整的客户管理功能
|
|
||||||
|
|
||||||
### 1.3 系统定位
|
|
||||||
本系统作为独立的授权管理平台,通过Web管理界面和RESTful API为其他软件系统提供授权服务。
|
|
||||||
|
|
||||||
## 2. 系统功能需求
|
|
||||||
|
|
||||||
### 2.1 客户管理模块
|
|
||||||
- 支持客户基本信息的增删改查(姓名、公司、联系人、邮箱、电话、地址、状态、描述)
|
|
||||||
- 支持客户状态管理(激活/停用)
|
|
||||||
- 提供客户列表查看、详情查看和JSON API接口
|
|
||||||
|
|
||||||
### 2.2 授权生成模块
|
|
||||||
|
|
||||||
#### 2.2.1 授权类型支持
|
|
||||||
- **在线授权码模式**:生成授权码,客户端激活时绑定硬件信息
|
|
||||||
- **离线许可证模式**:直接生成绑定硬件信息的软件许可证
|
|
||||||
|
|
||||||
#### 2.2.2 授权生成功能
|
|
||||||
- 支持为指定客户生成授权码或软件许可证
|
|
||||||
- 硬件指纹基于机器序列号、MAC地址、CPU ID生成
|
|
||||||
- 支持自定义有效期(1-36500天,预设选项:30天、90天、365天、永久)
|
|
||||||
- 支持功能列表配置和部署模式选择(在线/离线)
|
|
||||||
- 使用HMAC-SHA256签名和Base64编码保证安全性
|
|
||||||
- 可扩展额外功能,软件系统可以从生成的license里解析出来,比如{"device_number":20}
|
|
||||||
|
|
||||||
### 2.3 授权管理模块
|
|
||||||
- 显示所有授权记录列表,支持按客户筛选
|
|
||||||
- 授权状态监控(激活、过期、吊销),支持手动吊销和删除
|
|
||||||
- 提供授权详细信息查看(客户信息、硬件信息、过期时间、最后心跳时间)
|
|
||||||
- 实时显示授权过期和激活状态
|
|
||||||
|
|
||||||
### 2.4 部署包生成模块
|
|
||||||
- 为每个授权自动生成ZIP格式部署包
|
|
||||||
- 包含配置文件(config.yaml)、安装脚本(install.sh)、部署文档等
|
|
||||||
- 根据客户和授权信息自动命名
|
|
||||||
|
|
||||||
### 2.5 在线验证模块
|
|
||||||
- **授权验证API**:验证授权码和软件许可证,支持硬件指纹验证
|
|
||||||
- **授权激活API**:支持授权码激活为软件许可证,防止重复激活
|
|
||||||
- **心跳监控API**:记录客户端活跃时间,提供在线状态统计
|
|
||||||
- **授权信息查询API**:返回脱敏的授权信息,支持状态和过期检查
|
|
||||||
|
|
||||||
### 2.6 系统管理模块
|
|
||||||
- **用户认证**:管理员登录、状态保持、安全退出
|
|
||||||
- **权限控制**:Web界面需要认证,API接口独立于管理界面
|
|
||||||
- **系统监控**:运行状态仪表盘、授权统计信息、资源监控
|
|
||||||
|
|
||||||
### 2.7 工具支持模块
|
|
||||||
- 提供Windows和Linux平台的硬件信息获取工具
|
|
||||||
- 支持获取机器序列号、MAC地址、CPU ID
|
|
||||||
- 提供工具下载接口
|
|
||||||
|
|
||||||
## 3. 系统非功能性需求
|
|
||||||
|
|
||||||
### 3.1 性能需求
|
|
||||||
- 支持并发用户数不少于100个
|
|
||||||
- API响应时间不超过2秒
|
|
||||||
- 数据库连接池管理和查询性能优化
|
|
||||||
|
|
||||||
### 3.2 安全需求
|
|
||||||
- 授权码和软件许可证使用HMAC-SHA256签名
|
|
||||||
- 硬件指纹绑定防止盗用
|
|
||||||
- 敏感信息保护和HTTPS传输加密
|
|
||||||
|
|
||||||
### 3.3 可靠性需求
|
|
||||||
- 系统可用性达到99.9%
|
|
||||||
- 数据备份恢复、异常优雅降级
|
|
||||||
- 完善的错误处理和日志记录
|
|
||||||
|
|
||||||
### 3.4 可扩展性需求
|
|
||||||
- 支持水平扩展和模块化设计
|
|
||||||
- 支持多种数据库(当前使用PostgreSQL)
|
|
||||||
- RESTful API设计便于集成
|
|
||||||
|
|
||||||
### 3.5 兼容性需求
|
|
||||||
- 支持Windows、Linux、macOS操作系统
|
|
||||||
- 支持主流浏览器和跨平台客户端工具
|
|
||||||
|
|
||||||
## 4. 系统架构需求
|
|
||||||
|
|
||||||
### 4.1 技术架构
|
|
||||||
- **架构模式**:B/S架构
|
|
||||||
- **后端技术**:Go 1.23+,Gorilla Mux路由,Logrus日志
|
|
||||||
- **数据库**:PostgreSQL 12+,mysql12+
|
|
||||||
- **前端**:Vue.js 3+ 配合Vite,响应式UI组件
|
|
||||||
- **配置**:YAML格式配置文件
|
|
||||||
|
|
||||||
### 4.2 部署要求
|
|
||||||
- 支持单机部署、Docker容器化部署
|
|
||||||
- 支持系统服务形式运行
|
|
||||||
- 提供启动脚本和配置模板
|
|
||||||
|
|
||||||
## 5. 数据需求
|
|
||||||
|
|
||||||
### 5.1 数据模型
|
|
||||||
- **客户数据表**:基本信息、状态、创建时间,支持软删除和审计
|
|
||||||
- **授权数据表**:授权码/许可证信息、客户关联、硬件信息、状态时间、功能列表
|
|
||||||
|
|
||||||
### 5.2 数据管理
|
|
||||||
- 支持定期数据备份和导入导出功能
|
|
||||||
- 提供数据迁移工具
|
|
||||||
|
|
||||||
## 6. 接口需求
|
|
||||||
|
|
||||||
### 6.1 Web管理界面
|
|
||||||
- 客户管理、授权生成、授权列表和详情页面
|
|
||||||
- 系统仪表盘、用户登录页面
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in new issue
Block a user