yangg 3 tygodni temu
rodzic
commit
bf86bb42ca

+ 40 - 23
src/views/system/Inventorycount/InventoryDialog/index.vue

@@ -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} 个重复的设备编号(与待提交列表中的编码重复)`);
       }
     }