From a4b307765a96e66007deacc1719682b348b58e5e Mon Sep 17 00:00:00 2001 From: geting <13585118195@163.com> Date: Fri, 17 Jan 2025 09:21:33 +0800 Subject: [PATCH] bugfixed --- .../statAnalysis/powerCurveAnalysis.vue | 73 +++++++++++-------- .../backend/statAnalysis/trendAnalysis.vue | 2 +- .../backend/statAnalysis/trendComparison.vue | 4 +- 3 files changed, 47 insertions(+), 32 deletions(-) diff --git a/ui/dasadmin/src/views/backend/statAnalysis/powerCurveAnalysis.vue b/ui/dasadmin/src/views/backend/statAnalysis/powerCurveAnalysis.vue index 7056910b..3dc30823 100644 --- a/ui/dasadmin/src/views/backend/statAnalysis/powerCurveAnalysis.vue +++ b/ui/dasadmin/src/views/backend/statAnalysis/powerCurveAnalysis.vue @@ -288,7 +288,7 @@ const getDateRange = (type: 'week' | 'month') => { return [startOfMonth, endOfMonth] } } - +const theoryData = ref([]) const isLoading = ref(false) const statAnalysisOperate = () => { const deviceId = statAnalysisDeviceId.value.split(':')[2] @@ -359,9 +359,7 @@ const statAnalysisOperate = () => { const seriesData = iGenPower.map((item: any, index: number) => { return [getCutDecimalsValue(iWindSpeed[index], 2), getCutDecimalsValue(item, 2)] }) - // seriesData.sort((a: any, b: any) => { - // return a[0] - b[0] - // }) + seriesDataInit.value = seriesData calculateData.value = calculateAverages(seriesDataInit.value) updateChart() @@ -371,6 +369,7 @@ const statAnalysisOperate = () => { const seriesData = resData1.map((item: any) => { return [getCutDecimalsValue(item.speed, 2), getCutDecimalsValue(item.power, 2)] }) + theoryData.value = seriesData const series = { type: 'line', data: seriesData, @@ -391,33 +390,49 @@ const statAnalysisOperate = () => { }) } -const statAnalysisExport = () => { - const params = statAnalysisFatory.value ? statAnalysisFatory.value : statAnalysisDeviceId.value - const windSource = statAnalysisSelectOptions.speedSource.filter((item: any) => item.value == statAnalysisSpeedSource.value) - const requestData = { - devices: [ - { - deviceId: statAnalysisDeviceId.value.split(':')[2], - attributes: [statAnalysisSpeedSource.value, 'AvgActivePower_10min'], - }, - ], - startTime: new Date(statAnalysisTime.value[0]).getTime(), - endTime: new Date(statAnalysisTime.value[1]).getTime(), - madeinfactory: params.split(':')[0], - model: params.split(':')[1], - windSource: windSource[0]['label'], - displayCurve: AvgWindSpeedSwitch.value ? 1 : 0, +const escapeCsvValue = (value: any) => { + if (typeof value === 'string') { + // 如果值包含逗号、双引号或换行符,进行转义 + return `"${value.replace(/"/g, '""')}"` } - powerCurveExport(requestData).then((res: any) => { - const downloadUrl = window.URL.createObjectURL(res) - const a = document.createElement('a') - a.href = downloadUrl - a.download = '功率曲线' + new Date().getTime() - document.body.appendChild(a) - a.click() - window.URL.revokeObjectURL(downloadUrl) - document.body.removeChild(a) + return value +} + +const statAnalysisExport = () => { + const windSource = statAnalysisSelectOptions.speedSource.filter((item: any) => item.value == statAnalysisSpeedSource.value) + const csvHeaders = ['风机名称' + '\t', windSource[0]['label'] + '\t', '功率' + '\t', '理论风速' + '\t', '理论功率' + '\t'].join(',') + '\n' + const deviceRow = statAnalysisSelectOptions.deviceId.filter((item: any) => item.value == statAnalysisDeviceId.value) + let sortseriesDataInit = [...seriesDataInit.value] + sortseriesDataInit.sort((a: any, b: any) => { + return a[0] - b[0] }) + const exportExcelData1 = chartType.value === 'scatter' ? sortseriesDataInit : calculateData.value + const exportExcelData: any = [] + exportExcelData1.forEach((item: any, index: number) => { + let theoryItem0 = (theoryData.value[index] && theoryData.value[index][0]) || '' + let theoryItem1 = (theoryData.value[index] && theoryData.value[index][1]) || '' + const dataItem = [ + escapeCsvValue(deviceRow[0]['label']) + '\t', + escapeCsvValue(item[0]) + '\t', + escapeCsvValue(item[1]) + '\t', + escapeCsvValue(theoryItem0) + '\t', + escapeCsvValue(theoryItem1) + '\t', + ] + exportExcelData.push(dataItem.join(',')) + }) + + const csvContent = csvHeaders + exportExcelData.join('\n') + 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', '功率曲线' + new Date().getTime() + '.csv') + link.style.visibility = 'hidden' + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + } } const calculateAverages = (data: any) => { diff --git a/ui/dasadmin/src/views/backend/statAnalysis/trendAnalysis.vue b/ui/dasadmin/src/views/backend/statAnalysis/trendAnalysis.vue index cc31de55..618def28 100644 --- a/ui/dasadmin/src/views/backend/statAnalysis/trendAnalysis.vue +++ b/ui/dasadmin/src/views/backend/statAnalysis/trendAnalysis.vue @@ -637,7 +637,7 @@ const statAnalysisExport = () => { if (link.download !== undefined) { const url = URL.createObjectURL(blob) link.setAttribute('href', url) - link.setAttribute('download', '趋势分析_' + new Date().getTime() + '.csv') + link.setAttribute('download', '单机分析_' + new Date().getTime() + '.csv') link.style.visibility = 'hidden' document.body.appendChild(link) link.click() diff --git a/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue b/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue index 3dad6dab..65c82070 100644 --- a/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue +++ b/ui/dasadmin/src/views/backend/statAnalysis/trendComparison.vue @@ -689,8 +689,8 @@ const escapeCsvValue = (value: any) => { } const statAnalysisExport = () => { const tables = [ - { data: highcsvContent.value, filename: '高频.csv' }, - { data: lowcsvContent.value, filename: '低频.csv' }, + { data: highcsvContent.value, filename: '多机对比_高频' + new Date().getTime() + '.csv' }, + { data: lowcsvContent.value, filename: '多机对比_低频' + new Date().getTime() + '.csv' }, ] tables.forEach((table) => {