diff --git a/admin/src/views/order/OrderList.vue b/admin/src/views/order/OrderList.vue index 4d0f86d9..01a3fcac 100644 --- a/admin/src/views/order/OrderList.vue +++ b/admin/src/views/order/OrderList.vue @@ -750,7 +750,7 @@ async function handleAddBarcode() { function downloadCsvTemplate() { const header = '\uFEFF条形码\n' - const example = 'ABC123456\nDEF789012\n' + const example = '001234\n001235\n' const blob = new Blob([header + example], { type: 'text/csv;charset=utf-8' }) const url = URL.createObjectURL(blob) const a = document.createElement('a') @@ -766,12 +766,15 @@ function handleCsvImport(file: File) { const raw = (e.target?.result as string) || '' const text = raw.replace(/^\uFEFF/, '') const lines = text.split(/\r?\n/).map(l => l.trim()).filter(Boolean) + if (lines.length <= 1) { + ElMessage.warning('CSV 中未找到有效的条形码(仅有表头)') + return + } + // 跳过第一行表头,从第二行开始解析 const barcodes: string[] = [] - for (let i = 0; i < lines.length; i++) { + for (let i = 1; i < lines.length; i++) { const val = lines[i].split(',')[0].trim() if (!val) continue - // 跳过表头行:第一行或包含中文/header关键字的行 - if (i === 0 && (/[\u4e00-\u9fa5]/.test(val) || /^barcode$/i.test(val))) continue barcodes.push(val) } if (barcodes.length === 0) { @@ -853,11 +856,14 @@ function handleEditCsvImport(file: File) { const raw = (e.target?.result as string) || '' const text = raw.replace(/^\uFEFF/, '') const lines = text.split(/\r?\n/).map(l => l.trim()).filter(Boolean) + if (lines.length <= 1) { + ElMessage.warning('CSV 中未找到有效的条形码(仅有表头)') + return + } const barcodes: string[] = [] - for (let i = 0; i < lines.length; i++) { + for (let i = 1; i < lines.length; i++) { const val = lines[i].split(',')[0].trim() if (!val) continue - if (i === 0 && (/[\u4e00-\u9fa5]/.test(val) || /^barcode$/i.test(val))) continue barcodes.push(val) } if (barcodes.length === 0) {