diff --git a/das/src/main/resources/mapper/SysImpTabMappingMapper.xml b/das/src/main/resources/mapper/SysImpTabMappingMapper.xml index bf60e775..2fbf6e7d 100644 --- a/das/src/main/resources/mapper/SysImpTabMappingMapper.xml +++ b/das/src/main/resources/mapper/SysImpTabMappingMapper.xml @@ -105,7 +105,10 @@ diff --git a/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue b/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue index 20c46535..c46d508f 100644 --- a/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue +++ b/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue @@ -609,12 +609,18 @@ const handleRes = (res: any, selectAllDevices: any) => { attIndex = highSpeedExoprtHeader.value.indexOf(attName) } xData.forEach((time: any, index: number) => { - const dataItem = [ - escapeCsvValue(deviceName + '\t'), // 风机名称 - escapeCsvValue(timestampToTime(time) + '\t'), // 时间 - ] - dataItem[attIndex] = escapeCsvValue(yData[index] + '\t') - highSpeedExoprtData.value.push(dataItem.join(',')) + const tableDataIndex = highSpeedExoprtData.value.findIndex( + (data: any) => data.name == deviceName && data.time == timestampToTime(time) + ) + if (tableDataIndex > -1) { + highSpeedExoprtData.value[tableDataIndex][attName] = yData[index] + } else { + highSpeedExoprtData.value.push({ + name: deviceName, + time: timestampToTime(time), + [attName]: yData[index], + }) + } }) } else { let attIndex = lowSpeedExoprtHeader.value.indexOf(attName) @@ -623,26 +629,20 @@ const handleRes = (res: any, selectAllDevices: any) => { attIndex = lowSpeedExoprtHeader.value.indexOf(attName) } xData.forEach((time: any, index: number) => { - const dataItem = [ - escapeCsvValue(deviceName) + '\t', // 风机名称 - escapeCsvValue(timestampToTime(time)) + '\t' + '\t', // 时间 - ] - dataItem[attIndex] = escapeCsvValue(yData[index] + '\t') - lowSpeedExoprtData.value.push(dataItem.join(',')) + const tableDataIndex = lowSpeedExoprtData.value.findIndex( + (data: any) => data.name == deviceName && data.time == timestampToTime(time) + ) + if (tableDataIndex > -1) { + lowSpeedExoprtData.value[tableDataIndex][attName] = yData[index] + } else { + lowSpeedExoprtData.value.push({ + name: deviceName, + time: timestampToTime(time), + [attName]: yData[index], + }) + } }) } - highcsvContent.value = highSpeedExoprtData.value.length - ? highSpeedExoprtHeader.value + '\n' + highSpeedExoprtData.value.join('\n') - : [] - lowcsvContent.value = lowSpeedExoprtData.value.length - ? lowSpeedExoprtHeader.value + '\n' + lowSpeedExoprtData.value.join('\n') - : [] - if (!yData.length) { - ElMessage.info(`${deviceName + attName}数据为空`) - return - } - console.log(selectAllDevicesIndex) - console.log(irnIndex) const seriesData = { name: deviceName + attName, type: 'line', @@ -681,37 +681,41 @@ const handleRes = (res: any, selectAllDevices: any) => { } } -const escapeCsvValue = (value: any) => { - if (value === undefined || value === null) { - return ' ' - } - if (typeof value === 'string') { - if (value.includes(',') || value.includes('"') || value.includes('\n')) { - return `"${value.replace(/"/g, '""')}"` - } - } - - return value -} const statAnalysisExport = () => { const tables = [ - { data: highcsvContent.value, filename: '多机对比_高频' + new Date().getTime() + '.csv' }, - { data: lowcsvContent.value, filename: '多机对比_低频' + new Date().getTime() + '.csv' }, + { header: highSpeedExoprtHeader.value, data: highSpeedExoprtData.value, filename: '多机对比_高频' + new Date().getTime() + '.csv' }, + { header: lowSpeedExoprtHeader.value, data: lowSpeedExoprtData.value, filename: '多机对比_低频' + new Date().getTime() + '.csv' }, ] - tables.forEach((table) => { - const csvContent = table.data - if (csvContent.length) { - const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }) - const link = document.createElement('a') - if (link.download !== undefined) { - const url = URL.createObjectURL(blob) - link.setAttribute('href', url) - link.setAttribute('download', table.filename) - link.style.visibility = 'hidden' - document.body.appendChild(link) - link.click() - document.body.removeChild(link) + if (table.data.length) { + let str = '' + table.data.forEach((item: any) => { + table.header.forEach((prop: any, index: number) => { + let val = '' + if (index == 0) { + val = item.name + } else if (index == 1) { + val = item.time + } else { + val = typeof item[prop] === 'number' ? String(item[prop]) : item[prop] ? item[prop] : '' + } + str += val + '\t' + ',' + }) + str += '\n' + }) + str = table.header + '\n' + str + if (str.length) { + const blob = new Blob([str], { type: 'text/csv;charset=utf-8;' }) + const link = document.createElement('a') + if (link.download !== undefined) { + const url = URL.createObjectURL(blob) + link.setAttribute('href', url) + link.setAttribute('download', table.filename) + link.style.visibility = 'hidden' + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + } } } })