diff --git a/src/components/echarts/rmsWorker.js b/src/components/echarts/rmsWorker.js new file mode 100644 index 0000000..7c7f58d --- /dev/null +++ b/src/components/echarts/rmsWorker.js @@ -0,0 +1,311 @@ +// 辅助函数 +const getMax = (temp, tempA, tempB, tempC) => { + temp = temp > tempA ? temp : tempA; + temp = temp > tempB ? temp : tempB; + if (tempC !== undefined) { + temp = temp > tempC ? temp : tempC; + } + return temp; +}; + +const getMaxTwo = (temp, tempA, tempB) => { + temp = temp > tempA ? temp : tempA; + temp = temp > tempB ? temp : tempB; + return temp; +}; + +const getMin = (temp, tempA, tempB, tempC) => { + temp = temp < tempA ? temp : tempA; + temp = temp < tempB ? temp : tempB; + if (tempC !== undefined) { + temp = temp < tempC ? temp : tempC; + } + return temp; +}; + +const getMinOpen = (temp, tempA, tempB) => { + temp = temp < tempA ? temp : tempA; + temp = temp < tempB ? temp : tempB; + return temp; +}; + +// 数据处理函数 +const fliteWaveData = (wp, step, iphasicValue, isOpen) => { + const rmsData = wp.listRmsData; + const pt = Number(wp.pt) / 1000; + const ct = Number(wp.ct); + const titleList = wp.waveTitle; + let xishu = pt; + let aTitle = "", + bTitle = "", + cTitle = "", + unit = "电压"; + let rmsvFirstX = 0, + rmsvFirstY = 0, + rmsvSecondX = 0, + rmsvSecondY = 0, + firstZhou = "a", + secondeZhou = "a"; + let ifmax = 0, + ifmin = 0, + ismax = 0, + ismin = 0, + rfmax = 0, + rfmin = 0, + rsmax = 0, + rsmin = 0; + + const shunshiFA = []; + const shunshiFB = []; + const shunshiFC = []; + const shunshiSA = []; + const shunshiSB = []; + const shunshiSC = []; + const rmsFA = []; + const rmsFB = []; + const rmsFC = []; + const rmsSA = []; + const rmsSB = []; + const rmsSC = []; + + + + if (titleList[iphasicValue * step + 1]?.substring(0, 1) !== "U") { + xishu = ct; + unit = "电流"; + } + + for (let i = 1; i <= iphasicValue; i++) { + switch (i) { + case 1: + aTitle = titleList[iphasicValue * step + i]?.substring(1) || ""; + break; + case 2: + bTitle = titleList[iphasicValue * step + i]?.substring(1) || ""; + break; + case 3: + cTitle = titleList[iphasicValue * step + i]?.substring(1) || ""; + break; + } + } + + if (rmsData[0] && rmsData[0][iphasicValue * step + 1] !== undefined) { + rfmax = rmsData[0][iphasicValue * step + 1] * xishu; + rfmin = rmsData[0][iphasicValue * step + 1] * xishu; + rmsvFirstY = rmsData[0][iphasicValue * step + 1] * xishu; + rmsvFirstX = rmsData[0][0]; + rsmax = rmsData[0][iphasicValue * step + 1]; + rsmin = rmsData[0][iphasicValue * step + 1]; + rmsvSecondY = rmsData[0][iphasicValue * step + 1]; + rmsvSecondX = rmsData[0][0]; + } + + for (let rms = 0; rms < rmsData.length; rms++) { + if (!rmsData[rms] || rmsData[rms][iphasicValue * step + 1] === undefined) { + break; + } + + switch (iphasicValue) { + case 1: + const rmsFirstA = rmsData[rms][iphasicValue * step + 1] * xishu; + rmsFA.push([rmsData[rms][0], rmsFirstA]); + rfmax = rfmax > rmsFirstA ? rfmax : rmsFirstA; + rfmin = rfmin < rmsFirstA ? rfmin : rmsFirstA; + if (rfmin < rmsvFirstY) { + rmsvFirstY = rfmin; + firstZhou = "a"; + rmsvFirstX = rmsData[rms][0]; + } + + const rmsSecondA = rmsData[rms][iphasicValue * step + 1]; + rmsSA.push([rmsData[rms][0], rmsSecondA]); + rsmax = rsmax > rmsSecondA ? rsmax : rmsSecondA; + rsmin = rsmin < rmsSecondA ? rsmin : rmsSecondA; + if (rsmin < rmsvSecondY) { + rmsvSecondY = rsmin; + secondeZhou = "a"; + rmsvSecondX = rmsData[rms][0]; + } + break; + case 2: + const rmsFirstA2 = rmsData[rms][iphasicValue * step + 1] * xishu; + const rmsFirstB2 = rmsData[rms][iphasicValue * step + 2] * xishu; + rmsFA.push([rmsData[rms][0], rmsFirstA2]); + rmsFB.push([rmsData[rms][0], rmsFirstB2]); + rfmax = getMaxTwo(rfmax, rmsFirstA2, rmsFirstB2); + rfmin = getMinOpen(rfmin, rmsFirstA2, rmsFirstB2); + if (rfmin < rmsvFirstY) { + rmsvFirstY = rfmin; + if (rfmin === rmsFirstA2) { + firstZhou = "a"; + } else if (rfmin === rmsFirstB2) { + firstZhou = "b"; + } + rmsvFirstX = rmsData[rms][0]; + } + + const rmsSecondA2 = rmsData[rms][iphasicValue * step + 1]; + const rmsSecondB2 = rmsData[rms][iphasicValue * step + 2]; + rmsSA.push([rmsData[rms][0], rmsSecondA2]); + rmsSB.push([rmsData[rms][0], rmsSecondB2]); + rsmax = getMaxTwo(rsmax, rmsSecondA2, rmsSecondB2); + rsmin = getMinOpen(rsmin, rmsSecondA2, rmsSecondB2); + if (rsmin < rmsvSecondY) { + rmsvSecondY = rsmin; + if (rsmin === rmsSecondA2) { + secondeZhou = "a"; + } else if (rsmin === rmsSecondB2) { + secondeZhou = "b"; + } + rmsvSecondX = rmsData[rms][0]; + } + break; + case 3: + const rmsFirstA3 = rmsData[rms][iphasicValue * step + 1] * xishu; + const rmsFirstB3 = rmsData[rms][iphasicValue * step + 2] * xishu; + const rmsFirstC3 = rmsData[rms][iphasicValue * step + 3] * xishu; + rmsFA.push([rmsData[rms][0], rmsFirstA3]); + rmsFB.push([rmsData[rms][0], rmsFirstB3]); + rmsFC.push([rmsData[rms][0], rmsFirstC3]); + rfmax = getMax(rfmax, rmsFirstA3, rmsFirstB3, rmsFirstC3); + rfmin = isOpen + ? getMinOpen(rfmin, rmsFirstA3, rmsFirstC3) + : getMin(rfmin, rmsFirstA3, rmsFirstB3, rmsFirstC3); + if (rfmin < rmsvFirstY) { + rmsvFirstY = rfmin; + if (rfmin === rmsFirstA3) { + firstZhou = "a"; + } else if (rfmin === rmsFirstB3) { + firstZhou = "b"; + } else { + firstZhou = "c"; + } + rmsvFirstX = rmsData[rms][0]; + } + + const rmsSecondA3 = rmsData[rms][iphasicValue * step + 1]; + const rmsSecondB3 = rmsData[rms][iphasicValue * step + 2]; + const rmsSecondC3 = rmsData[rms][iphasicValue * step + 3]; + rmsSA.push([rmsData[rms][0], rmsSecondA3]); + rmsSB.push([rmsData[rms][0], rmsSecondB3]); + rmsSC.push([rmsData[rms][0], rmsSecondC3]); + rsmax = getMax(rsmax, rmsSecondA3, rmsSecondB3, rmsSecondC3); + rsmin = isOpen + ? getMinOpen(rsmin, rmsSecondA3, rmsSecondC3) + : getMin(rsmin, rmsSecondA3, rmsSecondB3, rmsSecondC3); + if (rsmin < rmsvSecondY) { + rmsvSecondY = rsmin; + if (rsmin === rmsSecondA3) { + secondeZhou = "a"; + } else if (rsmin === rmsSecondB3) { + secondeZhou = "b"; + } else { + secondeZhou = "c"; + } + rmsvSecondX = rmsData[rms][0]; + } + break; + } + } + + const instantF = { max: ifmax, min: ifmin }; + const instantS = { max: ismax, min: ismin }; + const RMSF = { max: rfmax, min: rfmin }; + const RMSS = { max: rsmax, min: rsmin }; + const RMSFMinDetail = { rmsvFirstX, rmsvFirstY, firstZhou }; + const RMSSMinDetail = { rmsvSecondX, rmsvSecondY, secondeZhou }; + const shunshiF = { shunshiFA, shunshiFB, shunshiFC }; + const shunshiS = { shunshiSA, shunshiSB, shunshiSC }; + const RMSFWave = { rmsFA, rmsFB, rmsFC }; + const RMSSWave = { rmsSA, rmsSB, rmsSC }; + const title = { aTitle, bTitle, cTitle, unit }; + + + return { + + instantF, + instantS, + RMSF, + RMSS, + RMSFMinDetail, + RMSSMinDetail, + shunshiF, + shunshiS, + RMSFWave, + RMSSWave, + title, + unit, + }; +}; + +// 监听消息 +self.onmessage = function (e) { + const { wp, isOpen, value, boxoList } = JSON.parse(e.data); + + try { + const iphasicValue = wp.iphasic || 1; + + const picCounts = (wp.waveTitle.length - 1) / iphasicValue; + const waveDatas = []; + + for (let i = 0; i < picCounts; i++) { + const data = fliteWaveData(wp, i, iphasicValue, isOpen,boxoList); + waveDatas.push(data); + } +// 处理标题 + let titles = ""; + if (boxoList.systemType == "pms") { + titles = + "变电站名称:" + + boxoList.powerStationName + + " 监测点名称:" + + boxoList.measurementPointName + + " 发生时刻:" + + boxoList.startTime + + " 残余电压:" + + (boxoList.featureAmplitude * 100).toFixed(2) + + "% 持续时间:" + + boxoList.duration + + "s"; + } else if (boxoList.systemType == "ZL") { + titles = + " 监测点名称:" + + boxoList.equipmentName + + " 发生时刻:" + + boxoList.startTime + + " 残余电压:" + + boxoList.evtParamVVaDepth + + " 持续时间:" + + boxoList.evtParamTm + + "s"; + } else { + titles = + "变电站名称:" + + boxoList.subName + + " 监测点名称:" + + boxoList.lineName + + " 发生时刻:" + + boxoList.startTime + + " 残余电压:" + + (boxoList.featureAmplitude * 100).toFixed(2) + + "% 持续时间:" + + boxoList.duration + + "s"; + } + // 发送处理结果回主线程 + self.postMessage({ + titles: titles, + success: true, + waveDatas, + time: wp.time, + type: wp.waveType, + severity: wp.yzd, + iphasic: iphasicValue, + }); + } catch (error) { + self.postMessage({ + success: false, + error: error.message, + }); + } +}; diff --git a/src/components/echarts/rmsboxi.vue b/src/components/echarts/rmsboxi.vue index 3f5cfb9..0d0c12a 100644 --- a/src/components/echarts/rmsboxi.vue +++ b/src/components/echarts/rmsboxi.vue @@ -1,646 +1,228 @@ - + { + name: c, + type: 'line', + smooth: true, + symbol: 'none', + sampling: 'average', + itemStyle: { color: '#A52a2a' }, + data: rcdata + } + ] + } + + myChartes.setOption(option) + + switch (step) { + case 1: myChartess1.value = myChartes; break + case 2: myChartess2.value = myChartes; break + case 3: myChartess3.value = myChartes; break + case 4: myChartess4.value = myChartes; break + case 5: myChartess5.value = myChartes; break + } + + setTimeout(() => { + myChartes.resize() + loading.value = false + }, 500) + + echarts.connect([myChartes1, myChartes]) +} + +const backbxlb = () => { + waveDatas.value = [] + const charts = [myChartess.value, myChartess1.value, myChartess2.value, myChartess3.value, myChartess4.value, myChartess5.value] + + charts.forEach(chart => { + if (chart) { + chart.dispose() + } + }) + + myChartess.value = null + myChartess1.value = null + myChartess2.value = null + myChartess3.value = null + myChartess4.value = null + myChartess5.value = null + + // echarts.disconnect(charts.filter(Boolean) as echarts.ECharts[]) + charts + .filter(Boolean) + .forEach(chart => { + if (chart && typeof chart.dispose === 'function') { + chart.dispose(); + } + }); +} + +const getMax = (temp: number, tempA: number, tempB: number, tempC: number): number => { + temp = temp > tempA ? temp : tempA + temp = temp > tempB ? temp : tempB + temp = temp > tempC ? temp : tempC + return temp +} + +const getMaxTwo = (temp: number, tempA: number, tempB: number): number => { + temp = temp > tempA ? temp : tempA + temp = temp > tempB ? temp : tempB + return temp +} + +const getMin = (temp: number, tempA: number, tempB: number, tempC: number): number => { + temp = temp < tempA ? temp : tempA + temp = temp < tempB ? temp : tempB + temp = temp < tempC ? temp : tempC + return temp +} + +const getMinOpen = (temp: number, tempA: number, tempB: number): number => { + temp = temp < tempA ? temp : tempA + temp = temp < tempB ? temp : tempB + return temp +} + \ No newline at end of file diff --git a/src/components/echarts/rmsboxi1.vue b/src/components/echarts/rmsboxi1.vue new file mode 100644 index 0000000..3f5cfb9 --- /dev/null +++ b/src/components/echarts/rmsboxi1.vue @@ -0,0 +1,1596 @@ + + diff --git a/src/components/echarts/shuWorker.js b/src/components/echarts/shuWorker.js new file mode 100644 index 0000000..11d7758 --- /dev/null +++ b/src/components/echarts/shuWorker.js @@ -0,0 +1,179 @@ +// waveData.worker.js +self.addEventListener('message', function(e) { + const { wp, value, iphasic, isOpen, boxoList } = JSON.parse(e.data); + + // 处理波形数据的函数 + const fliteWaveData = (wp, step) => { + // 将原有的fliteWaveData函数实现复制到这里 + const shunData = wp.listWaveData; + const pt = Number(wp.pt) / 1000; + const ct = Number(wp.ct); + const titleList = wp.waveTitle; + let xishu = pt; + let aTitle = '', bTitle = '', cTitle = '', unit = '电压'; + let ifmax = 0, ifmin = 0, ismax = 0, ismin = 0; + + const shunshiFA = []; + const shunshiFB = []; + const shunshiFC = []; + const shunshiSA = []; + const shunshiSB = []; + const shunshiSC = []; + + if (shunData.length > 0) { + if (titleList[iphasic * step + 1]?.substring(0, 1) !== 'U') { + xishu = ct; + unit = '电流'; + } + + for (let i = 1; i <= iphasic; i++) { + switch (i) { + case 1: + aTitle = titleList[iphasic * step + i]?.substring(1) || ''; + break; + case 2: + bTitle = titleList[iphasic * step + i]?.substring(1) || ''; + break; + case 3: + cTitle = titleList[iphasic * step + i]?.substring(1) || ''; + break; + } + } + + if (shunData[0][iphasic * step + 1] !== undefined) { + ifmax = shunData[0][iphasic * step + 1] * xishu; + ifmin = shunData[0][iphasic * step + 1] * xishu; + ismax = shunData[0][iphasic * step + 1]; + ismin = shunData[0][iphasic * step + 1]; + } + + for (let shun = 0; shun < shunData.length; shun++) { + if (shunData[shun][iphasic * step + 1] === undefined) { + break; + } + + switch (iphasic) { + case 1: + const shunFirstA = shunData[shun][iphasic * step + 1] * xishu; + shunshiFA.push([shunData[shun][0], shunFirstA]); + ifmax = Math.max(ifmax, shunFirstA); + ifmin = Math.min(ifmin, shunFirstA); + + const shunSecondA = shunData[shun][iphasic * step + 1]; + shunshiSA.push([shunData[shun][0], shunSecondA]); + ismax = Math.max(ismax, shunSecondA); + ismin = Math.min(ismin, shunSecondA); + break; + case 2: + const shunFirstA2 = shunData[shun][iphasic * step + 1] * xishu; + const shunFirstB2 = shunData[shun][iphasic * step + 2] * xishu; + shunshiFA.push([shunData[shun][0], shunFirstA2]); + shunshiFB.push([shunData[shun][0], shunFirstB2]); + ifmax = Math.max(ifmax, shunFirstA2, shunFirstB2); + ifmin = Math.min(ifmin, shunFirstA2, shunFirstB2); + + const shunSecondA2 = shunData[shun][iphasic * step + 1]; + const shunSecondB2 = shunData[shun][iphasic * step + 2]; + shunshiSA.push([shunData[shun][0], shunSecondA2]); + shunshiSB.push([shunData[shun][0], shunSecondB2]); + ismax = Math.max(ismax, shunSecondA2, shunSecondB2); + ismin = Math.min(ismin, shunSecondA2, shunSecondB2); + break; + case 3: + const shunFirstA3 = shunData[shun][iphasic * step + 1] * xishu; + const shunFirstB3 = shunData[shun][iphasic * step + 2] * xishu; + const shunFirstC3 = shunData[shun][iphasic * step + 3] * xishu; + shunshiFA.push([shunData[shun][0], shunFirstA3]); + shunshiFB.push([shunData[shun][0], shunFirstB3]); + shunshiFC.push([shunData[shun][0], shunFirstC3]); + ifmax = Math.max(ifmax, shunFirstA3, shunFirstB3, shunFirstC3); + ifmin = isOpen ? Math.min(ifmin, shunFirstA3, shunFirstC3) : Math.min(ifmin, shunFirstA3, shunFirstB3, shunFirstC3); + + const shunSecondA3 = shunData[shun][iphasic * step + 1]; + const shunSecondB3 = shunData[shun][iphasic * step + 2]; + const shunSecondC3 = shunData[shun][iphasic * step + 3]; + shunshiSA.push([shunData[shun][0], shunSecondA3]); + shunshiSB.push([shunData[shun][0], shunSecondB3]); + shunshiSC.push([shunData[shun][0], shunSecondC3]); + ismax = Math.max(ismax, shunSecondA3, shunSecondB3, shunSecondC3); + ismin = isOpen ? Math.min(ismin, shunSecondA3, shunSecondC3) : Math.min(ismin, shunSecondA3, shunSecondB3, shunSecondC3); + break; + } + } + } + + const instantF = { max: ifmax, min: ifmin }; + const instantS = { max: ismax, min: ismin }; + const shunshiF = { shunshiFA, shunshiFB, shunshiFC }; + const shunshiS = { shunshiSA, shunshiSB, shunshiSC }; + const title = { aTitle, bTitle, cTitle, unit }; + + return { instantF, instantS, shunshiF, shunshiS, title, unit }; + }; + + // 处理标题 + let titles = ''; + if (boxoList.systemType == 'pms') { + titles = '变电站名称:' + + boxoList.powerStationName + + ' 监测点名称:' + + boxoList.measurementPointName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + (boxoList.featureAmplitude * 100).toFixed(2) + + '% 持续时间:' + + boxoList.duration + + 's'; + } else if (boxoList.systemType == 'ZL') { + titles = ' 监测点名称:' + + boxoList.equipmentName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + boxoList.evtParamVVaDepth + + ' 持续时间:' + + boxoList.evtParamTm + + 's'; + } else { + titles = '变电站名称:' + + boxoList.subName + + ' 监测点名称:' + + boxoList.lineName + + ' 发生时刻:' + + boxoList.startTime + + ' 残余电压:' + + (boxoList.featureAmplitude * 100).toFixed(2) + + '% 持续时间:' + + boxoList.duration + + 's'; + } + + const iphasicValue = wp.iphasic || 1; + const picCounts = (wp.waveTitle.length - 1) / iphasicValue; + const waveDatas = []; + + for (let i = 0; i < picCounts; i++) { + const data = fliteWaveData(wp, i); + waveDatas.push(data); + } + + const time = wp.time; + const type = wp.waveType; + let severity = wp.yzd; + + if (severity < 0) { + severity = '/'; + type = '/'; + } + + // 将处理结果发送回主线程 + self.postMessage({ + waveDatas, + time, + type, + severity, + titles, + iphasic: iphasicValue + }); +}); \ No newline at end of file diff --git a/src/components/echarts/shushiboxi.vue b/src/components/echarts/shushiboxi.vue index d3d8f13..6828bb4 100644 --- a/src/components/echarts/shushiboxi.vue +++ b/src/components/echarts/shushiboxi.vue @@ -1,1201 +1,863 @@ - + +const drawPics = (waveDataTemp: WaveData, picHeight: string, step: number, show: boolean, myChartes1: echarts.ECharts, title: string) => { + step = step + 1 + const waveId = 'wave' + step + let a: string | null = null, b: string | null = null, c: string | null = null + let max: any = 0, min: any = 0, unit = '' + let adata: number[][] = [], bdata: number[][] = [], cdata: number[][] = [] + const colors: string[] = [] + + switch (iphasic.value) { + case 1: + a = waveDataTemp.title.aTitle + colors.push('#DAA520', '#fff', '#fff') + break + case 2: + a = waveDataTemp.title.aTitle + b = waveDataTemp.title.bTitle + colors.push('#DAA520', '#2E8B57', '#fff') + break + case 3: + a = waveDataTemp.title.aTitle + b = waveDataTemp.title.bTitle + c = waveDataTemp.title.cTitle + colors.push('#DAA520', '#2E8B57', '#A52a2a') + break + } + + if (props.value === 1) { + max = waveDataTemp.instantF.max + min = waveDataTemp.instantF.min + adata = waveDataTemp.shunshiF.shunshiFA + bdata = waveDataTemp.shunshiF.shunshiFB + cdata = waveDataTemp.shunshiF.shunshiFC + } else { + max = waveDataTemp.instantS.max + min = waveDataTemp.instantS.min + adata = waveDataTemp.shunshiS.shunshiSA + bdata = waveDataTemp.shunshiS.shunshiSB + cdata = waveDataTemp.shunshiS.shunshiSC + } + + if (waveDataTemp.title.unit === '电压') { + unit = props.value === 1 ? 'kV' : 'V' + } else { + unit = 'A' + } + + let titlename = '' + if (props.boxoList.systemType == 'ZL') { + const str = waveId.split('e') + const str1 = Number(str[1]) + props.wp.channelNames.forEach((element: string, i: number) => { + if (i == 4 || i == 7 || i == 10) { + if (str1 == 1 && i == 4) { + const s = element.split('A') + const s1 = s[0] == 'LI' ? '电网侧-电流' : s[0] + '侧' + s[1] + titlename = s1 + ' ' + title + } + if (str1 == 2 && i == 7) { + const s = element.split('A') + const s1 = s[0] == 'SU' ? '负载侧-电压' : s[0] + '侧' + s[1] + titlename = s1 + ' ' + title + } + if (str1 == 3 && i == 10) { + const s = element.split('A') + const s1 = s[0] == 'SI' ? '负载侧-电流' : s[0] + '侧' + s[1] + titlename = s1 + ' ' + title + } + } + }) + } + + const waveIds = document.getElementById(waveId) + if (!waveIds) return + + const myChartes = echarts.init(waveIds) + const echartsColor = { WordColor: "#fff", thread: "#fff", FigureColor: ["#07CCCA ", "#00BFF5", "#FFBF00", "#77DA63", "#D5FF6B", "#Ff6600", "#FF9100", "#5B6E96", "#66FFCC", "#B3B3B3", "#FF00FF", "#CC00FF", "#FF9999"] } + + const option = { + tooltip: { + trigger: 'axis', + borderColor: 'grey', + formatter: function (params: any) { + let tips = '时刻:' + params[0].data[0] + '
' + for (let i = 0; i < params.length; i++) { + if (params[i].seriesName != '暂降触发点') { + tips += params[i].seriesName + ':' + (params[i].value[1] - 0).toFixed(2) + '
' + } + } + return tips + }, + textStyle: { + color: '#fff', + fontStyle: 'normal', + opacity: 0.35, + fontSize: 14 + }, + backgroundColor: 'rgba(0,0,0,0.55)', + borderWidth: 0 + }, + title: { + left: 'center', + text: '',//titlename || title, + textStyle: { + fontSize: '0.8rem', + color: props.DColor ? '#fff' : echartsColor.WordColor + } + }, + legend: { + right: 50, + top: 25, + verticalAlign: 'top', + enabled: true, + itemDistance: 5, + textStyle: { + fontSize: '0.6rem', + color: props.DColor ? '#fff' : echartsColor.WordColor, + rich: { a: { verticalAlign: 'middle' } }, + padding: [0, 0, 0, 0] + } + }, + xAxis: { + type: 'value', + name: '时间\n(ms)', + boundaryGap: false, + min: props.wp.listWaveData[0][0], + max: props.wp.listWaveData[props.wp.listWaveData.length - 1][0] + 1, + title: { + text: 'ms', + textStyle: { + fontSize: '0.6rem', + color: props.DColor ? '#fff' : echartsColor.WordColor + }, + enabled: true, + align: 'high' + }, + splitLine: { show: false }, + axisTick: { alignWithLabel: true }, + axisLine: { + lineStyle: { + color: props.DColor ? '#fff' : echartsColor.thread + }, + onZero: false + }, + nameTextStyle: { fontSize: '0.6rem' }, + axisLabel: { + fontSize: '0.6rem', + color: props.DColor ? '#fff' : echartsColor.WordColor, + formatter: function (value: number) { + if (valB.value != (value - 0).toFixed(0)) { + valB.value = Number((value - 0).toFixed(0)) + return (value - 0).toFixed(0) + } + return '' + } + } + }, + yAxis: { + type: 'value', + name: unit, + title: { + align: 'high', + offset: 0, + text: unit, + rotation: 0, + y: -10 + }, + boundaryGap: [0, '100%'], + showLastLabel: true, + max: max.toFixed(2) * 1.1, + min: min.toFixed(2) > 0 ? min.toFixed(2) - min.toFixed(2) * 0.1 : min.toFixed(2) * 1.1, + opposite: false, + nameTextStyle: { + fontSize: '0.6rem', + color: props.DColor ? '#fff' : echartsColor.WordColor + }, + axisLine: { + show: true, + lineStyle: { + color: props.DColor ? '#fff' : echartsColor.thread + }, + onZero: false + }, + axisLabel: { + fontSize: '0.6rem', + color: props.DColor ? '#fff' : echartsColor.WordColor, + formatter: function (value: number) { + return (value - 0).toFixed(2) + } + }, + splitLine: { + lineStyle: { + color: [props.DColor ? '#fff' : echartsColor.thread], + type: 'dashed', + opacity: 0.5 + } + } + }, + grid: { + left: '1%', + right: '2.8%', + bottom: '40px', + top: '70px', + containLabel: true + }, + dataZoom: [ + { + type: 'inside', + height: 13, + start: 0, + bottom: '20px', + end: 100 + }, + { + start: 0, + height: 13, + bottom: '20px', + end: 100 + } + ], + series: [ + { + name: a, + type: 'line', + large: true, + smooth: true, + symbol: 'none', + sampling: 'average', + itemStyle: { color: '#DAA520' }, + data: adata + }, + { + name: b, + type: 'line', + large: true, + smooth: true, + symbol: 'none', + sampling: 'average', + itemStyle: { color: '#2E8B57' }, + data: bdata + }, + { + name: c, + type: 'line', + large: true, + smooth: true, + symbol: 'none', + sampling: 'average', + itemStyle: { color: '#A52a2a' }, + data: cdata + } + ] + } + + myChartes.setOption(option) + + switch (step) { + case 1: myChartess1.value = myChartes; break + case 2: myChartess2.value = myChartes; break + case 3: myChartess3.value = myChartes; break + case 4: myChartess4.value = myChartes; break + case 5: myChartess5.value = myChartes; break + } + + setTimeout(() => { + myChartes.resize() + loading.value = false + }, 400) + + echarts.connect([myChartes1, myChartes]) +} + +const backbxlb = () => { + waveDatas.value = [] + const charts = [myChartess.value, myChartess1.value, myChartess2.value, myChartess3.value, myChartess4.value, myChartess5.value] + + charts.forEach(chart => { + if (chart) { + chart.dispose() + } + }) + + myChartess.value = null + myChartess1.value = null + myChartess2.value = null + myChartess3.value = null + myChartess4.value = null + myChartess5.value = null + + // echarts.disconnect(charts.filter(Boolean) as echarts.ECharts[]) + charts + .filter(Boolean) + .forEach(chart => { + if (chart && typeof chart.dispose === 'function') { + chart.dispose(); + } + }); +} + +const getMax = (temp: number, tempA: number, tempB: number, tempC: number): number => { + temp = temp > tempA ? temp : tempA + temp = temp > tempB ? temp : tempB + temp = temp > tempC ? temp : tempC + return temp +} + +const getMaxTwo = (temp: number, tempA: number, tempB: number): number => { + temp = temp > tempA ? temp : tempA + temp = temp > tempB ? temp : tempB + return temp +} + +const getMin = (temp: number, tempA: number, tempB: number, tempC: number): number => { + temp = temp < tempA ? temp : tempA + temp = temp < tempB ? temp : tempB + temp = temp < tempC ? temp : tempC + return temp +} + +const getMinOpen = (temp: number, tempA: number, tempB: number): number => { + temp = temp < tempA ? temp : tempA + temp = temp < tempB ? temp : tempB + return temp +} + \ No newline at end of file diff --git a/src/components/echarts/shushiboxi1.vue b/src/components/echarts/shushiboxi1.vue new file mode 100644 index 0000000..d3d8f13 --- /dev/null +++ b/src/components/echarts/shushiboxi1.vue @@ -0,0 +1,1201 @@ + +