From a5e2bfef4bfa3471a98211a4a46a27e27daf8031 Mon Sep 17 00:00:00 2001 From: risingLee <871066422@qq.com> Date: Mon, 29 Dec 2025 23:16:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=B7=BB=E5=8A=A0=E6=A0=B7?= =?UTF-8?q?=E5=93=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/warehouse/receipt/index.vue | 73 +++++- 批量添加样品功能说明.md | 225 ++++++++++++++++++ 2 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 批量添加样品功能说明.md diff --git a/ruoyi-fastapi-frontend/src/views/warehouse/receipt/index.vue b/ruoyi-fastapi-frontend/src/views/warehouse/receipt/index.vue index 62a8cba..0363466 100644 --- a/ruoyi-fastapi-frontend/src/views/warehouse/receipt/index.vue +++ b/ruoyi-fastapi-frontend/src/views/warehouse/receipt/index.vue @@ -234,7 +234,8 @@ 样品信息 - 添加样品 + 添加样品 + 批量添加样品 @@ -297,6 +298,27 @@ 取 消 + + + + + + +
+ 提示:每行输入一个SN号,系统将自动为每个SN号创建一条样品记录 +
+
+
+ +
@@ -325,6 +347,10 @@ export default { title: "", // 是否显示弹出层 open: false, + // 批量添加样品对话框 + batchSampleOpen: false, + // 批量添加样品文本 + batchSampleText: "", // 查询参数 queryParams: { pageNum: 1, @@ -479,6 +505,51 @@ export default { status: '0' }); }, + /** 批量添加样品 */ + handleBatchAddSample() { + this.batchSampleText = ""; + this.batchSampleOpen = true; + }, + /** 提交批量添加样品 */ + submitBatchSample() { + if (!this.batchSampleText || !this.batchSampleText.trim()) { + this.$modal.msgWarning("请输入样品SN号"); + return; + } + + // 按行分割文本 + const lines = this.batchSampleText.split('\n'); + let addedCount = 0; + + // 处理每一行 + lines.forEach(line => { + const sn = line.trim(); + // 跳过空行 + if (sn) { + // 检查是否已存在相同的SN号 + const exists = this.form.samples.some(sample => sample.sampleSn === sn); + if (!exists) { + this.form.samples.push({ + sampleModel: null, + sampleSn: sn, + hardwareVersion: null, + externalStatus: null, + testDeadline: null, + testItems: null, + status: '0' + }); + addedCount++; + } + } + }); + + if (addedCount > 0) { + this.$modal.msgSuccess(`成功添加 ${addedCount} 条样品记录`); + this.batchSampleOpen = false; + } else { + this.$modal.msgWarning("没有添加任何样品,请检查输入的SN号是否已存在"); + } + }, /** 删除样品 */ handleDeleteSample(index) { this.form.samples.splice(index, 1); diff --git a/批量添加样品功能说明.md b/批量添加样品功能说明.md new file mode 100644 index 0000000..3758307 --- /dev/null +++ b/批量添加样品功能说明.md @@ -0,0 +1,225 @@ +# 批量添加样品功能说明 + +## 功能概述 + +在入库单管理页面中,新增了"批量添加样品"功能,允许用户通过输入多行SN号快速创建多条样品记录。 + +## 功能位置 + +**页面**:入库单管理 → 新增/编辑入库单对话框 → 样品信息区域 + +**按钮**:在"添加样品"按钮旁边,有一个绿色的"批量添加样品"按钮 + +## 使用方法 + +### 步骤1:打开批量添加对话框 + +1. 在入库单管理页面,点击"新增"或"修改"按钮打开入库单对话框 +2. 滚动到"样品信息"区域 +3. 点击"批量添加样品"按钮 + +### 步骤2:输入样品SN号 + +在文本框中输入样品SN号,**每行一个SN号**,例如: + +``` +SN001 +SN002 +SN003 +242323950 +DGMK V1.1 +PCBA +``` + +### 步骤3:确认添加 + +点击"确定"按钮,系统将: +1. 自动识别每一行的SN号 +2. 跳过空行 +3. 检查SN号是否已存在(避免重复) +4. 为每个有效的SN号创建一条样品记录 +5. 显示成功添加的样品数量 + +## 功能特点 + +### 1. 智能处理 +- ✅ 自动去除每行前后的空格 +- ✅ 自动跳过空行 +- ✅ 自动检测重复的SN号,避免重复添加 + +### 2. 批量创建 +- ✅ 一次可以添加多条样品记录 +- ✅ 每条记录自动填充SN号 +- ✅ 其他字段(型号、硬件版本等)保持为空,可后续手动填写 + +### 3. 用户友好 +- ✅ 清晰的提示信息 +- ✅ 实时反馈添加结果 +- ✅ 防止误操作(点击对话框外部不会关闭) + +## 字段说明 + +批量添加的样品记录包含以下字段: + +| 字段 | 说明 | 批量添加时的值 | +|------|------|----------------| +| 样品SN | 样品序列号 | **自动填充**(从输入的文本中获取) | +| 样品型号 | 样品的型号 | 空(需手动填写) | +| 硬件版本号 | 硬件版本 | 空(需手动填写) | +| 样品外观状态 | 外观状态 | 空(需手动填写) | +| 计划测试截止日期 | 测试截止日期 | 空(需手动填写) | +| 计划测试项 | 测试项目 | 空(需手动填写) | +| 状态 | 样品状态 | 正常(默认值) | + +## 使用场景 + +### 场景1:快速录入多个样品 + +当收到一批样品时,可以先批量录入所有SN号,然后再逐个补充其他信息。 + +**示例**: +``` +收到10个样品,SN号分别为: +SN001, SN002, SN003, ..., SN010 + +操作: +1. 点击"批量添加样品" +2. 输入10个SN号(每行一个) +3. 点击确定 +4. 系统自动创建10条样品记录 +5. 逐个补充型号、版本等信息 +``` + +### 场景2:从Excel或文本文件导入 + +如果SN号已经在Excel或文本文件中,可以直接复制粘贴。 + +**操作**: +1. 在Excel中选中SN号列 +2. 复制(Ctrl+C) +3. 在批量添加对话框中粘贴(Ctrl+V) +4. 点击确定 + +### 场景3:避免重复录入 + +系统会自动检测重复的SN号,避免重复添加。 + +**示例**: +``` +已有样品:SN001, SN002 +批量添加:SN002, SN003, SN004 + +结果: +- SN002 已存在,跳过 +- SN003 添加成功 +- SN004 添加成功 +- 提示:成功添加 2 条样品记录 +``` + +## 注意事项 + +### 1. SN号格式 +- 每行只能输入一个SN号 +- SN号可以包含字母、数字、特殊字符 +- 系统会自动去除前后空格 + +### 2. 重复检测 +- 系统会检查当前入库单中是否已存在相同的SN号 +- 如果存在,该SN号会被跳过,不会重复添加 +- 最终会显示实际添加的样品数量 + +### 3. 后续操作 +- 批量添加后,其他字段(型号、版本等)需要手动填写 +- 可以在表格中直接编辑每条样品记录 +- 也可以删除不需要的样品记录 + +### 4. 数据保存 +- 批量添加的样品记录只是临时添加到表单中 +- 需要点击入库单对话框底部的"确定"按钮才会保存到数据库 +- 点击"取消"按钮会放弃所有修改 + +## 技术实现 + +### 修改的文件 +- `ruoyi-fastapi-frontend/src/views/warehouse/receipt/index.vue` + +### 新增的功能 +1. **批量添加按钮**:在样品信息区域添加"批量添加样品"按钮 +2. **批量添加对话框**:包含多行文本输入框 +3. **文本解析逻辑**:按行分割文本,提取SN号 +4. **重复检测逻辑**:检查SN号是否已存在 +5. **批量创建逻辑**:为每个SN号创建样品记录 + +### 核心代码 + +```javascript +// 批量添加样品方法 +submitBatchSample() { + // 按行分割文本 + const lines = this.batchSampleText.split('\n'); + let addedCount = 0; + + // 处理每一行 + lines.forEach(line => { + const sn = line.trim(); + // 跳过空行 + if (sn) { + // 检查是否已存在相同的SN号 + const exists = this.form.samples.some(sample => sample.sampleSn === sn); + if (!exists) { + this.form.samples.push({ + sampleModel: null, + sampleSn: sn, + hardwareVersion: null, + externalStatus: null, + testDeadline: null, + testItems: null, + status: '0' + }); + addedCount++; + } + } + }); + + if (addedCount > 0) { + this.$modal.msgSuccess(`成功添加 ${addedCount} 条样品记录`); + this.batchSampleOpen = false; + } else { + this.$modal.msgWarning("没有添加任何样品,请检查输入的SN号是否已存在"); + } +} +``` + +## 未来优化方向 + +### 可能的增强功能 + +1. **支持更多字段的批量输入** + - 例如:SN号,型号,版本(CSV格式) + - 需要更复杂的解析逻辑 + +2. **支持文件上传** + - 直接上传Excel或CSV文件 + - 自动解析文件内容 + +3. **模板下载** + - 提供Excel模板下载 + - 用户填写后上传 + +4. **数据验证** + - SN号格式验证 + - 必填字段检查 + +5. **导入预览** + - 显示即将导入的数据 + - 允许用户确认或修改 + +## 日期 + +开发日期:2025-12-05 + +## 相关功能 + +- 入库单管理 +- 样品管理 +- 对话框点击外部关闭问题修复