# 甲辰藏品管理系统 v1.0.0 发布说明

**发布日期**: 2026-03-16  
**版本**: v1.0.0  
**分支**: `main`  
**提交**: `initial`

---

## 🎉 初始版本

这是精简重构后的第一个正式版本，包含核心功能。

---

## 🎯 版本亮点

### 1. 统一版本管理系统 📦
**问题**: 之前版本号分散在多个文件，修改麻烦且容易遗漏  
**解决方案**: 
- 新增根目录 `VERSION` 文件集中管理版本号
- 后端启动时自动读取 VERSION 文件
- 前端构建时自动注入版本号到所有页面
- 浏览器标签页标题自动更新

**使用方法**:
```bash
# 只需修改这一处
vi VERSION
# 修改：VERSION=2.9.0

# 重新构建即可
npm run build
```

### 2. 冠字号查重功能 🔍
**功能**: 保存藏品时自动检测是否已有相同冠字号的藏品

**流程**:
1. 用户填写藏品信息（包含冠字号）
2. 点击保存 → 后端自动查重
3. 发现重复 → 弹窗提示：
   ```
   ⚠️ 发现重复冠字号！
   冠字号：J063558611
   已存在于：龙钞 (编号：0001)
   
   是否继续保存？
   ```
4. 用户选择：
   - **取消** → 终止保存
   - **确认** → 强制保存（支持重复冠字号）

**适用场景**: 
- 防止误操作重复录入
- 特殊情况下允许保存重复冠字号（如不同评级公司）

### 3. 图片重命名优化 📸
**旧格式**: `UUID.jpg` (如 `aaf56f63-548a-49f1-9b07-116a73b7dfa0.jpg`)  
**新格式**: `用户名 - 藏品编号 - 冠字号.jpg`

**示例**:
```
酷博特 -0001-J063558611.jpg
酷博特 -0002-J051811231.jpg
admin-0001.jpg  (无冠字号时)
```

**优势**:
- 文件名直观，一眼看出是谁的哪个藏品
- 便于手动查找和管理图片文件
- 自动清理特殊字符，兼容各操作系统
- 文件冲突时自动添加时间戳

---

## 🐛 Bug 修复

### 1. 用户管理 - 角色设置失效 ❌→✅
**问题**: 添加用户时选择"管理员"角色，保存后还是"普通用户"

**原因**:
- 前端调用 `/api/auth/register` 接口（硬编码 role="user"）
- 后端使用 `Query` 而非 `Form` 接收参数

**修复**:
- 新增 `POST /api/admin/users` 接口（支持 role 参数）
- 前端改为调用管理员接口
- 修复 error_handler 字段映射错误

### 2. 图片显示 - 全部显示系统 Logo ❌→✅
**问题**: 所有藏品图片都显示系统 logo，不显示实际图片

**原因**: Nginx 缺少 `/uploads` 路径代理配置

**修复**:
```nginx
location /uploads {
    proxy_pass http://127.0.0.1:3000/uploads;
    client_max_body_size 20M;
}
```

### 3. OCR 识别 - API 调用失败 ❌→✅
**问题**: OCR 识别返回 500 错误

**原因**: DashScope API 格式错误
```json
// ❌ 错误格式
{
  "model": "qwen-vl-max",
  "input": {"messages": [...]}
}

// ✅ 正确格式
{
  "model": "qwen-vl-max",
  "messages": [...],
  "max_tokens": 1000
}
```

---

## ⚙️ 技术优化

### 1. 版本号显示位置
- **统计页面** (`/stats`) - 右上角
- **藏品列表** (`/list`) - 右上角
- **添加藏品** (`/add`) - 右下角浮动
- **用户管理** (`/admin`) - 右下角浮动
- **首页** (`/`) - 底部
- **登录页** (`/login`) - 底部
- **浏览器标签页** - 标题自动更新

### 2. 藏品编码逻辑
**规则**: 本用户所有藏品中最大编码 +1

```python
def generate_code(version: str, user_id: str, db: Session) -> str:
    # 查询当前用户的所有编码
    user_codes = db.query(Collection.f01_02_code).filter(
        Collection.f01_02_code.isnot(None),
        Collection.f99_91_user_id == user_id
    ).all()
    
    # 找出最大数字编码（4 位纯数字）
    max_num = 0
    for (code,) in user_codes:
        if re.match(r'^\d{4}$', code):
            num = int(code)
            if num > max_num:
                max_num = num
    
    # 返回最大号 +1
    return str(max_num + 1).zfill(4)
```

**特点**:
- ✅ 每个用户独立编码（不与其他用户混算）
- ✅ 自动找出当前用户最大编码
- ✅ 返回最大编码 +1（4 位数字，如 0001, 0002）

### 3. 后端接口优化
- `POST /api/admin/users` - 支持 Form 参数
- `PUT /api/admin/users/{id}` - 同时支持 Query 和 JSON body
- `POST /api/collections?force=true` - 强制保存（忽略重复警告）

### 4. 日志记录增强
```python
logger.info(f"创建用户：username={username}, role={role}")
logger.warning(f"发现重复冠字号：{serial}, 已存在 ID: {id}")
logger.info(f"图片上传成功：{filename}")
```

---

## 📊 文件变更统计

**提交**: `1e42b7f`  
**变更**: 11 files changed, 206 insertions(+), 48 deletions(-)

### 修改文件列表
1. `VERSION` (新增) - 统一版本配置文件
2. `backend-fastapi/app/main.py` - 自动读取版本号
3. `backend-fastapi/app/routers/collections.py` - 查重 + 图片重命名
4. `backend-fastapi/app/routers/ocr.py` - API 格式修复
5. `backend-fastapi/app/routers/users.py` - 用户管理接口
6. `backend-fastapi/app/core/error_handler.py` - 错误映射修复
7. `zodiac-mobile/package.json` - 版本号
8. `zodiac-mobile/vite.config.js` - 自动更新 title
9. `zodiac-mobile/src/config/version.js` - 自动读取版本
10. `zodiac-mobile/src/pages/Add.jsx` - 查重弹窗
11. `zodiac-mobile/src/pages/Admin.jsx` - 版本号显示
12. `zodiac-mobile/src/pages/List.jsx` - 版本号显示
13. `zodiac-mobile/src/pages/Stats.jsx` - 版本号显示

---

## 🚀 升级指南

### 从 v2.7.x 升级到 v2.8.0

#### 1. 拉取新版本
```bash
cd /path/to/zodiac-collector
git fetch origin
git checkout v2.8.0
```

#### 2. 安装依赖
```bash
# 后端
cd backend-fastapi
pip install -r requirements.txt

# 前端
cd zodiac-mobile
pnpm install
```

#### 3. 重新构建
```bash
# 前端构建
npm run build
sudo cp -r dist/* /var/www/mobile/dist/

# 重启后端
pkill -f "uvicorn app.main:app"
nohup uvicorn app.main:app --port 3000 --host 0.0.0.0 &
```

#### 4. 验证版本
```bash
# 检查后端版本
curl http://localhost:3000/ | grep version
# {"name":"甲辰收藏系统 FastAPI 后端","version":"2.8.0",...}

# 检查前端版本
curl http://localhost:3001/ | grep title
# <title>甲辰收藏 v2.8.0</title>
```

---

## 📝 使用建议

### 1. 版本管理
- 每次发布新版本只需修改 `VERSION` 文件
- 构建前检查版本号是否正确
- 建议遵循语义化版本规范（主版本。次版本。修订版）

### 2. 冠字号查重
- 正常情况直接保存即可
- 如果确实需要保存重复冠字号，点击"确认"继续
- 建议在备注中说明重复原因

### 3. 图片管理
- 新上传的图片自动使用新命名格式
- 旧图片保持原有 UUID 格式（不影响使用）
- 建议定期整理图片文件

---

## 🐛 已知问题

暂无

---

## 📞 技术支持

- **代码仓库**: http://47.253.189.47:3000/coolbot/zodiac-collector
- **问题反馈**: 创建 Issue 或联系开发团队
- **在线系统**: http://120.26.133.10:3001/

---

## 🎉 致谢

感谢所有参与 v2.8.0 开发和测试的团队成员！

**特别感谢**:
- 产品需求提出
- Bug 报告与测试
- 代码审查与优化

---

**甲辰藏品管理系统开发团队**  
2026-03-15
