|
|
@@ -337,14 +337,14 @@
|
|
|
|
|
|
console.log('splitRFIDCodes - 输入:', trimmed, '分隔符配置:', separator, '实际分隔符:', actualSeparator, '分隔符类型:', typeof actualSeparator, '长度:', actualSeparator?.length);
|
|
|
|
|
|
- // 方法0: 优先处理分隔符分隔的情况
|
|
|
- // 首先检查输入中是否包含空格(无论配置如何,空格都应该被识别)
|
|
|
- const hasSpace = /\s/.test(trimmed);
|
|
|
+ // 方法0: 优先处理换行符分隔的情况(换行符是最明确的分隔符)
|
|
|
+ // 检测各种换行符组合:\r\n (Windows), \n (Unix/Linux), \r (Mac)
|
|
|
+ const hasNewline = /[\r\n]/.test(trimmed);
|
|
|
|
|
|
- if (hasSpace) {
|
|
|
- // 如果输入包含空格,优先按空格分割
|
|
|
- const parts = trimmed.split(/\s+/).filter(part => part.trim());
|
|
|
- console.log('检测到空格,分割结果:', parts);
|
|
|
+ if (hasNewline) {
|
|
|
+ // 如果输入包含换行符,优先按换行符分割(无论配置如何)
|
|
|
+ const parts = trimmed.split(/[\r\n]+/).filter(part => part.trim());
|
|
|
+ console.log('检测到换行符,分割结果:', parts);
|
|
|
|
|
|
if (parts.length > 1) {
|
|
|
const result: string[] = [];
|
|
|
@@ -356,31 +356,25 @@
|
|
|
result.push(...splitCodes);
|
|
|
}
|
|
|
}
|
|
|
- console.log('空格分割最终结果:', result);
|
|
|
+ console.log('换行符分割最终结果:', result);
|
|
|
return result.length > 0 ? result : [trimmed];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 如果配置了分隔符且不是空格,按配置的分隔符处理
|
|
|
- if (actualSeparator && actualSeparator.trim() !== '' && actualSeparator !== ' ') {
|
|
|
+ // 方法1: 处理配置的分隔符(如果配置了且不是换行符)
|
|
|
+ if (actualSeparator && actualSeparator.trim() !== '' && actualSeparator !== '\n' && actualSeparator !== '\r\n' && actualSeparator !== '\r') {
|
|
|
let parts: string[] = [];
|
|
|
let hasSeparator = false;
|
|
|
|
|
|
// 根据分隔符类型进行分割
|
|
|
- if (actualSeparator === '\n') {
|
|
|
- // 回车换行分隔符
|
|
|
- hasSeparator = trimmed.includes('\n');
|
|
|
- if (hasSeparator) {
|
|
|
- parts = trimmed.split(/\n+/).filter(part => part.trim());
|
|
|
- }
|
|
|
- } else if (actualSeparator === '\t') {
|
|
|
+ if (actualSeparator === '\t') {
|
|
|
// 制表符分隔符
|
|
|
hasSeparator = trimmed.includes('\t');
|
|
|
if (hasSeparator) {
|
|
|
parts = trimmed.split(/\t+/).filter(part => part.trim());
|
|
|
}
|
|
|
} else {
|
|
|
- // 其他分隔符
|
|
|
+ // 其他分隔符(包括空格和自定义分隔符)
|
|
|
hasSeparator = trimmed.includes(actualSeparator);
|
|
|
if (hasSeparator) {
|
|
|
try {
|
|
|
@@ -412,7 +406,30 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 如果没有分隔符或分割失败,直接处理粘连情况
|
|
|
+ // 方法2: 如果没有明确的分隔符,检查是否有空格(作为备选)
|
|
|
+ const hasSpace = /\s/.test(trimmed);
|
|
|
+
|
|
|
+ if (hasSpace) {
|
|
|
+ // 如果输入包含空格,按空格分割
|
|
|
+ const parts = trimmed.split(/\s+/).filter(part => part.trim());
|
|
|
+ console.log('检测到空格,分割结果:', parts);
|
|
|
+
|
|
|
+ if (parts.length > 1) {
|
|
|
+ const result: string[] = [];
|
|
|
+ // 对每个部分处理可能的粘连情况
|
|
|
+ for (const part of parts) {
|
|
|
+ const trimmedPart = part.trim();
|
|
|
+ if (trimmedPart) {
|
|
|
+ const splitCodes = splitRFIDStickyCodes(trimmedPart);
|
|
|
+ result.push(...splitCodes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log('空格分割最终结果:', result);
|
|
|
+ return result.length > 0 ? result : [trimmed];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 方法3: 如果没有分隔符或分割失败,直接处理粘连情况
|
|
|
const stickyResult = splitRFIDStickyCodes(trimmed);
|
|
|
console.log('粘连处理结果:', stickyResult);
|
|
|
return stickyResult;
|
|
|
@@ -431,7 +448,7 @@
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 自动分割RFID粘连的设备编号
|
|
|
+ // 自动分割RFID粘连的设备编号(分割函数内部已经去重)
|
|
|
const codes = splitRFIDCodes(input);
|
|
|
console.log('分割结果:', codes, '输入:', input, '配置:', readRuleConfig.value);
|
|
|
|
|
|
@@ -440,14 +457,14 @@
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // 根据配置决定是否去重
|
|
|
+ // 根据配置决定是否允许添加到待提交列表(与已存在的编码比较)
|
|
|
let codesToAdd = codes;
|
|
|
if (!readRuleConfig.value.allowDuplicate) {
|
|
|
- // 过滤掉已存在的设备编号
|
|
|
+ // 过滤掉已存在于待提交列表中的设备编号
|
|
|
codesToAdd = codes.filter(code => !pendingDeviceCodes.value.includes(code));
|
|
|
if (codesToAdd.length < codes.length) {
|
|
|
const duplicateCount = codes.length - codesToAdd.length;
|
|
|
- ElMessage.warning(`已过滤 ${duplicateCount} 个重复的设备编号`);
|
|
|
+ ElMessage.warning(`已过滤 ${duplicateCount} 个重复的设备编号(与待提交列表中的编码重复)`);
|
|
|
}
|
|
|
}
|
|
|
|