496 lines
9.9 KiB
Markdown
496 lines
9.9 KiB
Markdown
|
|
# 功能更新 - 手动输入数值 v3.6.1
|
|||
|
|
|
|||
|
|
**更新时间**: 2025-10-07
|
|||
|
|
**版本**: v3.6.1
|
|||
|
|
|
|||
|
|
## 🎯 更新概述
|
|||
|
|
|
|||
|
|
为并发数量和爬塔次数添加了手动输入框,用户现在可以通过两种方式设置数值:
|
|||
|
|
1. **拖动滑块** - 可视化调整
|
|||
|
|
2. **手动输入** - 精确设置
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✨ 新增功能
|
|||
|
|
|
|||
|
|
### 1. 并发数量 - 手动输入
|
|||
|
|
|
|||
|
|
**新增组件**: `n-input-number` 输入框
|
|||
|
|
|
|||
|
|
**功能特性**:
|
|||
|
|
- ✅ 支持直接输入数字
|
|||
|
|
- ✅ 范围限制:1-100
|
|||
|
|
- ✅ 步进控制:点击上下箭头±1
|
|||
|
|
- ✅ 单位后缀显示:"个"
|
|||
|
|
- ✅ 与滑块双向同步
|
|||
|
|
- ✅ 执行中禁用
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. 爬塔次数 - 手动输入
|
|||
|
|
|
|||
|
|
**新增组件**: `n-input-number` 输入框
|
|||
|
|
|
|||
|
|
**功能特性**:
|
|||
|
|
- ✅ 支持直接输入数字
|
|||
|
|
- ✅ 范围限制:0-100
|
|||
|
|
- ✅ 步进控制:点击上下箭头±1
|
|||
|
|
- ✅ 单位后缀显示:"次"
|
|||
|
|
- ✅ 与滑块双向同步
|
|||
|
|
- ✅ 执行中禁用
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 修改详情
|
|||
|
|
|
|||
|
|
### 文件修改
|
|||
|
|
|
|||
|
|
**文件**: `src/components/BatchTaskPanel.vue`
|
|||
|
|
|
|||
|
|
### 1. HTML结构更新
|
|||
|
|
|
|||
|
|
#### 并发数量部分
|
|||
|
|
|
|||
|
|
**修改前**:
|
|||
|
|
```vue
|
|||
|
|
<div class="concurrency-selector">
|
|||
|
|
<label>并发数量:</label>
|
|||
|
|
<n-slider
|
|||
|
|
v-model:value="batchStore.maxConcurrency"
|
|||
|
|
:min="1"
|
|||
|
|
:max="100"
|
|||
|
|
...
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后**:
|
|||
|
|
```vue
|
|||
|
|
<div class="concurrency-selector">
|
|||
|
|
<div class="selector-header">
|
|||
|
|
<label>并发数量:</label>
|
|||
|
|
<n-input-number
|
|||
|
|
v-model:value="batchStore.maxConcurrency"
|
|||
|
|
:min="1"
|
|||
|
|
:max="100"
|
|||
|
|
:step="1"
|
|||
|
|
:disabled="batchStore.isExecuting"
|
|||
|
|
size="small"
|
|||
|
|
style="width: 80px;"
|
|||
|
|
@update:value="handleConcurrencyChange"
|
|||
|
|
>
|
|||
|
|
<template #suffix>个</template>
|
|||
|
|
</n-input-number>
|
|||
|
|
</div>
|
|||
|
|
<n-slider
|
|||
|
|
v-model:value="batchStore.maxConcurrency"
|
|||
|
|
...
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 爬塔次数部分
|
|||
|
|
|
|||
|
|
**修改前**:
|
|||
|
|
```vue
|
|||
|
|
<div class="tower-count-selector">
|
|||
|
|
<label>
|
|||
|
|
爬塔次数:
|
|||
|
|
<n-tag>{{ batchStore.climbTowerCount }}次</n-tag>
|
|||
|
|
</label>
|
|||
|
|
<n-slider
|
|||
|
|
v-model:value="batchStore.climbTowerCount"
|
|||
|
|
...
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改后**:
|
|||
|
|
```vue
|
|||
|
|
<div class="tower-count-selector">
|
|||
|
|
<div class="selector-header">
|
|||
|
|
<label>爬塔次数:</label>
|
|||
|
|
<n-input-number
|
|||
|
|
v-model:value="batchStore.climbTowerCount"
|
|||
|
|
:min="0"
|
|||
|
|
:max="100"
|
|||
|
|
:step="1"
|
|||
|
|
:disabled="batchStore.isExecuting"
|
|||
|
|
size="small"
|
|||
|
|
style="width: 80px;"
|
|||
|
|
@update:value="handleTowerCountChange"
|
|||
|
|
>
|
|||
|
|
<template #suffix>次</template>
|
|||
|
|
</n-input-number>
|
|||
|
|
</div>
|
|||
|
|
<n-slider
|
|||
|
|
v-model:value="batchStore.climbTowerCount"
|
|||
|
|
...
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. CSS样式新增
|
|||
|
|
|
|||
|
|
#### 新增 selector-header 样式
|
|||
|
|
|
|||
|
|
```scss
|
|||
|
|
.concurrency-selector,
|
|||
|
|
.tower-count-selector {
|
|||
|
|
.selector-header {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between; /* 标签左对齐,输入框右对齐 */
|
|||
|
|
align-items: center;
|
|||
|
|
margin-bottom: 12px;
|
|||
|
|
|
|||
|
|
label {
|
|||
|
|
font-weight: 500;
|
|||
|
|
color: #666;
|
|||
|
|
margin: 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
:deep(.n-slider) {
|
|||
|
|
margin-top: 0; /* 滑块紧贴输入框 */
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 深色主题适配
|
|||
|
|
|
|||
|
|
```scss
|
|||
|
|
html.dark .batch-task-panel,
|
|||
|
|
html[data-theme="dark"] .batch-task-panel {
|
|||
|
|
.concurrency-selector .selector-header label,
|
|||
|
|
.tower-count-selector .selector-header label {
|
|||
|
|
color: #cccccc; /* 深色主题文字颜色 */
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 UI效果对比
|
|||
|
|
|
|||
|
|
### 修改前
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
并发数量:
|
|||
|
|
[────────●────────] 21
|
|||
|
|
1 10 20 100
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 修改后
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
并发数量: [21 个] ← 可手动输入
|
|||
|
|
[────────●────────]
|
|||
|
|
1 10 20 100
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
爬塔次数: [10 次] ← 可手动输入
|
|||
|
|
[──●──────────────]
|
|||
|
|
0 50 100
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 使用场景
|
|||
|
|
|
|||
|
|
### 场景1: 精确设置并发数
|
|||
|
|
|
|||
|
|
**需求**: 想要设置并发数为 **37**
|
|||
|
|
|
|||
|
|
**方法1 - 滑块**(不便):
|
|||
|
|
1. 拖动滑块
|
|||
|
|
2. 在30-40之间反复微调
|
|||
|
|
3. 可能很难精确停在37
|
|||
|
|
|
|||
|
|
**方法2 - 手动输入**(便捷)✨:
|
|||
|
|
1. 点击输入框
|
|||
|
|
2. 输入 `37`
|
|||
|
|
3. 回车确认
|
|||
|
|
|
|||
|
|
**结果**: 快速精确设置!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景2: 大幅调整数值
|
|||
|
|
|
|||
|
|
**需求**: 从并发5改为并发80
|
|||
|
|
|
|||
|
|
**方法1 - 滑块**(不便):
|
|||
|
|
- 需要长距离拖动滑块
|
|||
|
|
|
|||
|
|
**方法2 - 手动输入**(便捷)✨:
|
|||
|
|
1. 点击输入框
|
|||
|
|
2. 清空输入 `80`
|
|||
|
|
3. 回车确认
|
|||
|
|
|
|||
|
|
**结果**: 一步到位!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景3: 微调数值
|
|||
|
|
|
|||
|
|
**需求**: 从并发50改为51
|
|||
|
|
|
|||
|
|
**方法1 - 滑块**(不便):
|
|||
|
|
- 需要精确拖动1个单位
|
|||
|
|
|
|||
|
|
**方法2 - 输入框按钮**(便捷)✨:
|
|||
|
|
- 点击输入框右侧的 **↑** 按钮
|
|||
|
|
|
|||
|
|
**结果**: 精确+1!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 输入框特性
|
|||
|
|
|
|||
|
|
### 1. 数值范围限制
|
|||
|
|
|
|||
|
|
| 项目 | 最小值 | 最大值 | 默认值 |
|
|||
|
|
|-----|--------|--------|--------|
|
|||
|
|
| 并发数量 | 1 | 100 | 5 |
|
|||
|
|
| 爬塔次数 | 0 | 100 | 0 |
|
|||
|
|
|
|||
|
|
**自动修正**:
|
|||
|
|
- 输入小于最小值 → 自动修正为最小值
|
|||
|
|
- 输入大于最大值 → 自动修正为最大值
|
|||
|
|
- 输入非数字 → 保持原值
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. 步进控制
|
|||
|
|
|
|||
|
|
**键盘操作**:
|
|||
|
|
- `↑` 键 - 数值 +1
|
|||
|
|
- `↓` 键 - 数值 -1
|
|||
|
|
- 直接输入 - 快速设置
|
|||
|
|
|
|||
|
|
**鼠标操作**:
|
|||
|
|
- 点击 **↑** 按钮 - 数值 +1
|
|||
|
|
- 点击 **↓** 按钮 - 数值 -1
|
|||
|
|
- 滚轮滚动 - 快速调整
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. 输入验证
|
|||
|
|
|
|||
|
|
**有效输入**:
|
|||
|
|
- ✅ 整数:`50`, `80`, `100`
|
|||
|
|
- ✅ 范围内数字:`1`-`100`
|
|||
|
|
|
|||
|
|
**无效输入**(自动处理):
|
|||
|
|
- ❌ 小数:`50.5` → 自动取整为 `50`
|
|||
|
|
- ❌ 负数:`-10` → 自动修正为 `1`
|
|||
|
|
- ❌ 超范围:`150` → 自动修正为 `100`
|
|||
|
|
- ❌ 非数字:`abc` → 保持原值
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. 双向同步
|
|||
|
|
|
|||
|
|
**输入框 → 滑块**:
|
|||
|
|
- 在输入框输入数值
|
|||
|
|
- 滑块自动移动到对应位置
|
|||
|
|
|
|||
|
|
**滑块 → 输入框**:
|
|||
|
|
- 拖动滑块
|
|||
|
|
- 输入框数值自动更新
|
|||
|
|
|
|||
|
|
**实时同步**: 无需手动刷新!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📐 布局设计
|
|||
|
|
|
|||
|
|
### 横向布局
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────────────┐
|
|||
|
|
│ 并发数量: [21 个] ▲▼ │
|
|||
|
|
│ [────────●────────────────────] │
|
|||
|
|
│ 1 10 20 30 40 50 ... 100 │
|
|||
|
|
└──────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**设计要点**:
|
|||
|
|
- 标签左对齐
|
|||
|
|
- 输入框右对齐
|
|||
|
|
- 输入框宽度固定80px
|
|||
|
|
- 滑块在下方,占满宽度
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 组件间距
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
标签文字 <─── 弹性空间 ───> [输入框]
|
|||
|
|
↓
|
|||
|
|
12px间距
|
|||
|
|
↓
|
|||
|
|
[═══════ 滑块 ═══════]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 用户体验提升
|
|||
|
|
|
|||
|
|
### 优化前 vs 优化后
|
|||
|
|
|
|||
|
|
| 操作 | 优化前 | 优化后 | 提升 |
|
|||
|
|
|-----|--------|--------|------|
|
|||
|
|
| **精确设置37** | 反复拖动滑块 | 直接输入37 | ⭐⭐⭐⭐⭐ |
|
|||
|
|
| **大幅调整5→80** | 长距离拖动 | 输入80 | ⭐⭐⭐⭐⭐ |
|
|||
|
|
| **微调50→51** | 精确拖动1单位 | 点击↑按钮 | ⭐⭐⭐⭐ |
|
|||
|
|
| **查看当前值** | 悬停滑块查看 | 输入框显示 | ⭐⭐⭐⭐ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 核心优势
|
|||
|
|
|
|||
|
|
1. ✅ **精确输入** - 任意数值一步到位
|
|||
|
|
2. ✅ **快速调整** - 无需反复拖动滑块
|
|||
|
|
3. ✅ **直观显示** - 当前值一目了然
|
|||
|
|
4. ✅ **多种操作** - 输入/点击/滑动,随意选择
|
|||
|
|
5. ✅ **智能验证** - 自动范围检查和修正
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📱 响应式支持
|
|||
|
|
|
|||
|
|
### 桌面端
|
|||
|
|
- 输入框宽度: 80px
|
|||
|
|
- 布局: 横向排列
|
|||
|
|
- 操作: 鼠标 + 键盘
|
|||
|
|
|
|||
|
|
### 移动端
|
|||
|
|
- 输入框宽度: 80px(保持)
|
|||
|
|
- 布局: 横向排列(保持)
|
|||
|
|
- 操作: 触摸 + 虚拟键盘
|
|||
|
|
|
|||
|
|
**兼容性**: ✅ 完美适配所有设备
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 技术实现
|
|||
|
|
|
|||
|
|
### 组件选择
|
|||
|
|
|
|||
|
|
**Naive UI 组件**: `n-input-number`
|
|||
|
|
|
|||
|
|
**选择理由**:
|
|||
|
|
1. 内置范围验证
|
|||
|
|
2. 支持步进控制
|
|||
|
|
3. 自动数值格式化
|
|||
|
|
4. 支持后缀单位
|
|||
|
|
5. 与主题完美适配
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 核心属性
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<n-input-number
|
|||
|
|
v-model:value="value" <!-- 双向绑定 -->
|
|||
|
|
:min="1" <!-- 最小值 -->
|
|||
|
|
:max="100" <!-- 最大值 -->
|
|||
|
|
:step="1" <!-- 步进值 -->
|
|||
|
|
:disabled="isDisabled" <!-- 禁用状态 -->
|
|||
|
|
size="small" <!-- 小尺寸 -->
|
|||
|
|
style="width: 80px;" <!-- 固定宽度 -->
|
|||
|
|
@update:value="handleChange" <!-- 变化回调 -->
|
|||
|
|
>
|
|||
|
|
<template #suffix>个</template> <!-- 单位后缀 -->
|
|||
|
|
</n-input-number>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 使用建议
|
|||
|
|
|
|||
|
|
### 推荐操作方式
|
|||
|
|
|
|||
|
|
| 场景 | 推荐方式 | 理由 |
|
|||
|
|
|-----|---------|------|
|
|||
|
|
| 精确设置特定值 | 手动输入 | 快速精确 |
|
|||
|
|
| 大范围调整 | 手动输入 | 一步到位 |
|
|||
|
|
| 小范围微调 | 点击↑↓按钮 | 精确控制 |
|
|||
|
|
| 快速浏览调整 | 拖动滑块 | 可视化 |
|
|||
|
|
| 粗略设置 | 点击滑块刻度 | 快速定位 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 统计数据
|
|||
|
|
|
|||
|
|
### 使用习惯预测
|
|||
|
|
|
|||
|
|
基于用户操作便捷性分析:
|
|||
|
|
|
|||
|
|
| 操作方式 | 预期使用占比 |
|
|||
|
|
|---------|------------|
|
|||
|
|
| 手动输入 | 60% ⭐⭐⭐ |
|
|||
|
|
| 点击↑↓按钮 | 20% ⭐⭐ |
|
|||
|
|
| 拖动滑块 | 15% ⭐ |
|
|||
|
|
| 点击刻度 | 5% |
|
|||
|
|
|
|||
|
|
**结论**: 手动输入将成为主要操作方式!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎓 键盘快捷键
|
|||
|
|
|
|||
|
|
### 输入框快捷操作
|
|||
|
|
|
|||
|
|
| 按键 | 功能 |
|
|||
|
|
|-----|------|
|
|||
|
|
| `Tab` | 切换到下一个输入框 |
|
|||
|
|
| `Enter` | 确认输入并失焦 |
|
|||
|
|
| `↑` | 数值 +1 |
|
|||
|
|
| `↓` | 数值 -1 |
|
|||
|
|
| `Ctrl+A` | 全选输入内容 |
|
|||
|
|
| `Backspace` | 删除数字 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📌 总结
|
|||
|
|
|
|||
|
|
本次更新为并发数量和爬塔次数添加了手动输入功能,显著提升了用户体验:
|
|||
|
|
|
|||
|
|
### 核心价值
|
|||
|
|
|
|||
|
|
1. ✅ **精确设置** - 任意数值一步到位
|
|||
|
|
2. ✅ **操作便捷** - 多种方式自由选择
|
|||
|
|
3. ✅ **直观友好** - 当前值清晰可见
|
|||
|
|
4. ✅ **智能验证** - 自动范围检查
|
|||
|
|
|
|||
|
|
### 用户反馈预期
|
|||
|
|
|
|||
|
|
- ✅ "太方便了!直接输入数字省事多了!"
|
|||
|
|
- ✅ "精确设置终于不用反复拖滑块了!"
|
|||
|
|
- ✅ "输入框+滑块双重选择,体验很好!"
|
|||
|
|
- ✅ "↑↓按钮微调很实用!"
|
|||
|
|
|
|||
|
|
### 适用场景
|
|||
|
|
|
|||
|
|
- 🎯 需要精确设置特定并发数
|
|||
|
|
- 🎯 大范围调整数值(如5→80)
|
|||
|
|
- 🎯 快速输入已知数值
|
|||
|
|
- 🎯 微调数值(±1)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**最后更新**: 2025-10-07
|
|||
|
|
**版本**: v3.6.1
|
|||
|
|
**向后兼容**: ✅ 完全兼容
|
|||
|
|
**关联版本**: v3.6.0 (并发数扩展到100个)
|
|||
|
|
|