flnxi-Wu/docs/guides/SMART_FEATURES.md
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

349 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 智能功能更新 v2.3
## 📅 更新日期:2025-10-17
---
## ✨ 新功能概览
### 1. 🎯 拖拽上传功能
- **全窗口拖拽**:整个上传窗口都支持拖拽
- **智能识别**:自动识别图片和压缩包
- **视觉反馈**:拖拽时显示蓝色覆盖层提示
- **多文件支持**:可同时拖拽图片和压缩包
### 2. 🌐 智能网络切换
- **后台检测**:自动检测内网是否可达
- **自动切换**:内网可达时自动切换,无需用户操作
- **无感知**:检测过程在后台进行,不影响用户体验
- **状态显示**:仅显示最终使用的网络模式
---
## 🎯 拖拽上传详解
### 使用方法
#### 方式1:拖拽文件到窗口
1. 打开上传模态框
2. 从文件管理器拖拽文件到窗口
3. 系统自动识别文件类型
4. 图片 → 预览图字段
5. 压缩包 → 压缩包字段
#### 方式2:传统点击上传
1. 点击"选择图片"或"选择压缩包"按钮
2. 从文件对话框选择文件
### 支持的文件类型
**预览图**:
- ✅ JPG/JPEG
- ✅ PNG
- ✅ WebP
- ✅ GIF
- ✅ 其他浏览器支持的图片格式
**压缩包**:
- ✅ .zip
- ✅ .rar
- ✅ .7z
### 视觉交互
#### 拖拽状态
```
┌─────────────────────────────────┐
│ ╔═══════════════════════════╗ │
│ ║ ║ │
│ ║ 📤 ║ │
│ ║ 拖放文件到这里 ║ │
│ ║ 支持图片和压缩包文件 ║ │
│ ║ ║ │
│ ╚═══════════════════════════╝ │
└─────────────────────────────────┘
蓝色覆盖层,清晰提示
```
#### 实现细节
```typescript
// 拖拽事件处理
onDragEnter → 显示蓝色覆盖层
onDragLeave → 隐藏覆盖层
onDragOver → 阻止默认行为
onDrop → 处理文件,隐藏覆盖层
// 智能文件识别
- 图片:file.type.startsWith('image/')
- 压缩包:['.zip', '.rar', '.7z'].includes(extension)
```
---
## 🌐 智能网络切换详解
### 工作原理
#### 1. 网络检测流程
```
页面加载
↓
后台检测内网 (192.168.58.20:4320)
↓
├─ 可达 → 切换到内网模式 ✅
│ └─ 显示:"内网模式 🏠"
│
└─ 不可达 → 使用公网模式 ⚠️
└─ 显示:"公网模式 🌍"
```
#### 2. 检测机制
- **超时时间**:2秒
- **检测端点**:`/api/health`
- **检测方式**:HTTP HEAD请求
- **失败处理**:自动降级到公网模式
#### 3. 用户体验
- ✅ **无感知**:检测在后台进行
- ✅ **不阻塞**:页面正常加载显示
- ✅ **自动优化**:优先使用内网(速度更快)
- ✅ **智能降级**:内网不可达时自动使用公网
### 使用场景
#### 场景1:办公室内网访问公网地址
```
用户访问:http://180.97.221.140:2320
↓
系统检测:内网可达 ✅
↓
自动切换:内网模式 🏠
结果:使用内网API,速度快
```
#### 场景2:外网访问
```
用户访问:http://180.97.221.140:2320
↓
系统检测:内网不可达 ❌
↓
使用当前:公网模式 🌍
结果:使用公网API,正常访问
```
#### 场景3:直接访问内网
```
用户访问:http://192.168.58.20:4320
↓
直接使用:内网模式 🏠
结果:无需检测,直接使用内网
```
### 状态显示
#### 内网模式
```
┌────────────────────────────────────┐
│ 🏠 内网模式 │
│ 已自动切换到内网,速度更快 │
└────────────────────────────────────┘
绿色背景,表示最优状态
```
#### 公网模式
```
┌────────────────────────────────────┐
│ 🌍 公网模式 │
│ 当前使用公网访问 ⓘ 内网不可达 │
└────────────────────────────────────┘
蓝色背景,提示内网不可达
```
### 技术实现
#### 网络检测模块 (`lib/network.ts`)
```typescript
// 检测内网是否可达
async function checkInternalNetwork(): Promise<boolean> {
try {
const controller = new AbortController()
const timeoutId = setTimeout(() => controller.abort(), 2000)
await fetch(`http://192.168.58.20:4320/api/health`, {
method: 'HEAD',
signal: controller.signal,
mode: 'no-cors'
})
clearTimeout(timeoutId)
return true
} catch (error) {
return false
}
}
```
#### Health Check API (`app/api/health/route.ts`)
```typescript
export async function GET() {
return NextResponse.json({
status: 'ok',
timestamp: new Date().toISOString()
})
}
export async function HEAD() {
return new NextResponse(null, { status: 200 })
}
```
---
## 🎨 用户界面优化
### 上传页面
- ✅ 拖拽提示:"💡 提示:可以直接拖拽图片和压缩包文件到窗口"
- ✅ 拖拽时蓝色覆盖层
- ✅ 清晰的视觉反馈
### 首页网络状态
- ✅ 仅在检测完成后显示
- ✅ 绿色(内网)/ 蓝色(公网)区分
- ✅ 简洁的状态说明
---
## 📊 性能影响
### 网络检测
- **检测时间**:< 2秒
- **对加载的影响**:无(异步后台检测)
- **资源消耗**:极低(单次HEAD请求)
### 拖拽功能
- **性能影响**:无
- **资源消耗**:极低(事件监听)
- **浏览器兼容**:现代浏览器全支持
---
## 🔧 配置说明
### 网络地址配置
修改 `lib/network.ts`:
```typescript
const INTERNAL_HOST = '192.168.58.20:4320' // 内网地址
```
### 超时时间配置
修改 `lib/network.ts`:
```typescript
const timeoutId = setTimeout(() => controller.abort(), 2000) // 超时时间(毫秒)
```
---
## ✅ 测试清单
### 拖拽上传测试
- [ ] 拖拽单个图片文件
- [ ] 拖拽单个压缩包文件
- [ ] 同时拖拽图片和压缩包
- [ ] 拖拽不支持的文件格式(应显示错误)
- [ ] 拖拽时视觉反馈正常
- [ ] 拖拽后自动填充到对应字段
### 网络切换测试
- [ ] 内网环境访问公网地址(应自动切换到内网)
- [ ] 外网环境访问公网地址(应显示公网模式)
- [ ] 直接访问内网地址(应显示内网模式)
- [ ] 网络检测不影响页面加载
- [ ] 状态显示正确
- [ ] Console显示网络检测日志
---
## 🚀 部署更新
### 本地测试
```bash
cd /Users/lanmu/Desktop/gongxiangp2
npm run dev
```
### 部署到NAS
```bash
cd /Users/lanmu/Desktop/gongxiangp2
./update-deploy.sh
```
或手动部署:
```bash
# 1. 打包
tar -czf update-v2.3.tar.gz \
--exclude='node_modules' \
--exclude='.next' \
--exclude='uploads/*' \
.
# 2. 上传
scp update-v2.3.tar.gz root@192.168.58.20:/mnt/tank/apps/youyidian-3d/
# 3. 部署
ssh root@192.168.58.20
cd /mnt/tank/apps/youyidian-3d
tar -xzf update-v2.3.tar.gz
docker compose down
docker compose up -d --build
```
---
## 💡 使用建议
### 对于内网用户
- ✅ 访问公网地址即可,系统自动切换到内网
- ✅ 无需记忆内网地址
- ✅ 享受内网的高速访问
### 对于外网用户
- ✅ 正常访问公网地址
- ✅ 系统会提示当前为公网模式
- ✅ 回到内网后,系统会自动切换
### 上传文件
- ✅ 优先使用拖拽,更快更方便
- ✅ 可同时拖入多个文件,一次完成
- ✅ 点击按钮上传仍然可用
---
## 🎯 未来优化
### 网络切换
- [ ] 添加手动刷新按钮
- [ ] 定期后台检测(自动重连)
- [ ] 网络切换动画效果
- [ ] 断线重连提示
### 拖拽上传
- [ ] 支持批量拖拽上传
- [ ] 拖拽预览功能
- [ ] 进度条优化
---
## 📞 技术支持
- **版本**:v2.3.0
- **更新日期**:2025-10-17
- **相关文档**:
- `CARD_ENHANCEMENT.md` - 卡片增强功能
- `LABEL_OPTIMIZATION.md` - 标签优化
- `FEATURE_UPDATES.md` - 功能更新列表
---
**享受智能化的使用体验!** 🎉