|
@@ -1,3 +1,589 @@
|
|
|
+<script setup name="rateAnalysis">
|
|
|
+import excelCop from '@/components/excel.vue'
|
|
|
+import treeCop from '@/components/tree.vue'
|
|
|
+import barChartCop from './components/barChart.vue'
|
|
|
+import SubmitBtn from '../../../components/SubmitBtn.vue'
|
|
|
+// import { ElMessage } from 'element-plus';
|
|
|
+import { onMounted, ref, onActivated, shallowRef, reactive, nextTick } from 'vue'
|
|
|
+import request from '@/api/axios.js'
|
|
|
+import tools from '@tools/htmlToPdf.js'
|
|
|
+// import flowerRes from '@/data/flower.json'
|
|
|
+// import lineChartRes from '@/data/lineNew.json'
|
|
|
+/**配置参数 */
|
|
|
+const treeHeight = ref(window.innerHeight - 150 + 'px') //tree高度
|
|
|
+const excelHeight = ref(window.innerHeight - 150 + 'px') //excel高度
|
|
|
+const tableHeight = ref(window.innerHeight - 150 + 'px')
|
|
|
+/**excel 开始 */
|
|
|
+const excelCheckIds = ref([])
|
|
|
+const excelList = ref([])
|
|
|
+const excelCheckboxShow = ref(false)
|
|
|
+/** 额定功率 */
|
|
|
+const powerproduction = ref("")
|
|
|
+//点击excel项时
|
|
|
+const funExcelChange = async (obj) => {
|
|
|
+ console.log('ha',obj);
|
|
|
+ excelCheckIds.value = [obj.id] //当为单选展示风机图表时
|
|
|
+ chartExcelList.value = excelList.value.map(o=> {
|
|
|
+ return {
|
|
|
+ ...o,
|
|
|
+ name: o.windturbine
|
|
|
+ }
|
|
|
+ }) // 选中excel当前项时, excel列表赋值给dialog 下拉框
|
|
|
+ queryForm.checkIds = excelList.value.map(o => o.id)
|
|
|
+ checkAll.value = true
|
|
|
+ funSubmit()
|
|
|
+}
|
|
|
+const funExcelCheckChange = ({ checkArr, data }) => {
|
|
|
+ excelCheckIds.value = checkArr
|
|
|
+ funSubmit()
|
|
|
+}
|
|
|
+/**tree 开始 */
|
|
|
+const treeCopRef = ref() //treeCop ref
|
|
|
+const treeData = ref([])
|
|
|
+const actTreeNode = ref(null)
|
|
|
+const funRepeatMap = (arr) => {
|
|
|
+ return arr.map(o => {
|
|
|
+ if (o.children) {
|
|
|
+ const findIndex = o.children.findIndex(p => !!p.type)
|
|
|
+ if (findIndex !== -1) {
|
|
|
+ o.childs = o.children
|
|
|
+ o.children = []
|
|
|
+ if(!actTreeNode.value){
|
|
|
+ actTreeNode.value = o
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ ...o,
|
|
|
+ children: o.children?.length ? funRepeatMap(o.children) : []
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+const funGetTree = async () => {
|
|
|
+ const res = await request.get("/power/process/tree")
|
|
|
+ actTreeNode.value = null
|
|
|
+ excelList.value = []
|
|
|
+ treeData.value = funRepeatMap(res.data)
|
|
|
+ if(actTreeNode.value){
|
|
|
+ funCurrentChange({current: actTreeNode.value, currentNode: null})
|
|
|
+ if(treeCopRef.value){
|
|
|
+ treeCopRef.value.setCheckedKeys([actTreeNode.value.id])
|
|
|
+ excelCheckIds.value = actTreeNode.value.childs.map(o => o.id)
|
|
|
+ funSubmit()
|
|
|
+ }
|
|
|
+ const child = actTreeNode.value.childs[0]
|
|
|
+ const obj = {
|
|
|
+ id: child.id,
|
|
|
+ interval: child.interval,
|
|
|
+ path: child.path,
|
|
|
+ prepareid: child.prepareid,
|
|
|
+ station: child.station,
|
|
|
+ time: child.time,
|
|
|
+ type: child.type,
|
|
|
+ windturbine: child.windturbine,
|
|
|
+ name: child.path.substring(child.path.indexOf(child.station + '_') + (child.station + '_').length)
|
|
|
+ }
|
|
|
+ funExcelChange(obj)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const funTreeCheckChange = ({ current, checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys }) => { //tree change -> excel change
|
|
|
+ funCurrentChange({ current, currentNode: '' })
|
|
|
+ const checkIds = []
|
|
|
+ if (checkedNodes.length) {
|
|
|
+ for (const node of checkedNodes) {
|
|
|
+ if (node.childs && node.childs.length) {
|
|
|
+ for (const child of node.childs) {
|
|
|
+ checkIds.push(child.id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ excelCheckIds.value = checkIds
|
|
|
+ funSubmit()
|
|
|
+}
|
|
|
+
|
|
|
+const funCurrentChange = ({ current, currentNode }) => {
|
|
|
+ excelCheckboxShow.value = true
|
|
|
+ if (current.childs) {
|
|
|
+ excelList.value = current.childs.map(o => {
|
|
|
+ return {
|
|
|
+ id: o.id,
|
|
|
+ interval: o.interval,
|
|
|
+ path: o.path,
|
|
|
+ prepareid: o.prepareid,
|
|
|
+ station: o.station,
|
|
|
+ time: o.time,
|
|
|
+ type: o.type,
|
|
|
+ windturbine: o.windturbine,
|
|
|
+ name: o.path.substring(o.path.indexOf(o.station + '_') + (o.station + '_').length)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ excelList.value = []
|
|
|
+ }
|
|
|
+}
|
|
|
+/**chart */
|
|
|
+let chartId = 1
|
|
|
+const powerproductionNum = ref(0)
|
|
|
+const avgSpeed = ref('')
|
|
|
+const avgMrxs = ref('')
|
|
|
+const windName = ref('')
|
|
|
+/**submit */
|
|
|
+const funSubmit = async () => {
|
|
|
+ // if (!excelCheckIds.value.length) {
|
|
|
+ // ElMessage.error('请勾选要执行的项')
|
|
|
+ // return false
|
|
|
+ // }
|
|
|
+ wtData.value = []
|
|
|
+ const tempRes = await request.get('/blade/angle', {
|
|
|
+ params: {
|
|
|
+ ids: excelCheckIds.value.join(','),
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (tempRes.code === 200) {
|
|
|
+ console.log('123',tempRes);
|
|
|
+ const xAxisData = [],xAxisData1 = [], barData1 = [], lineData1 = []
|
|
|
+ let avgSpeedSum = 0, avgMrxsSum = 1
|
|
|
+
|
|
|
+ const chart = tempRes.data
|
|
|
+ if(chart.bw){
|
|
|
+
|
|
|
+
|
|
|
+ chart.bw.forEach((ele)=>{
|
|
|
+ xAxisData.push(ele.time)
|
|
|
+ barData1.push(ele.value)
|
|
|
+ // lineData1.push(chart.tj.value)
|
|
|
+ avgSpeedSum += ele.value
|
|
|
+ })
|
|
|
+ chart.tj.forEach((ele)=>{
|
|
|
+ // ele.value.toFixed(2)
|
|
|
+ // let newArr = arr.map(num => num.toFixed(2));
|
|
|
+ xAxisData1.push(ele.time)
|
|
|
+ // barData1.push(ele.value)
|
|
|
+ lineData1.push(ele.value)
|
|
|
+ // lineData1.value.toFixed(2)
|
|
|
+ avgMrxsSum += ele.value
|
|
|
+ })
|
|
|
+
|
|
|
+ // xAxisData.push(chart.bw[value])
|
|
|
+ // xAxisData1.push(chart.tj[value])
|
|
|
+ // if (chart.bw) {
|
|
|
+ // barData1.push(chart.bw.value)
|
|
|
+ // lineData1.push(chart.tj.value)
|
|
|
+ // avgSpeedSum += chart.currentData.avgspeed
|
|
|
+ // avgMrxsSum += chart.currentData.mrxs
|
|
|
+ // }
|
|
|
+
|
|
|
+ avgSpeed.value = (avgSpeedSum / barData1.length).toFixed(2)+'度'
|
|
|
+ avgMrxs.value = (avgMrxsSum / lineData1.length).toFixed(2)+'度'
|
|
|
+ console.log('12',avgMrxs.value);
|
|
|
+ windName.value = chart.wtId
|
|
|
+ barxAxis.data = xAxisData
|
|
|
+ linexAxis.data = xAxisData1
|
|
|
+ barSeries[0].data = barData1
|
|
|
+ chartId++
|
|
|
+ lineSeries[0].data = lineData1
|
|
|
+ chartId++
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+/**lineChart */
|
|
|
+const linexAxis = reactive({
|
|
|
+ type: 'category',
|
|
|
+ name: '时间',
|
|
|
+ data: [],
|
|
|
+ splitLine: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ axisTick: {
|
|
|
+ show: true
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ onZero: false
|
|
|
+ }
|
|
|
+})
|
|
|
+const lineyAxis = reactive({
|
|
|
+ type: 'value',
|
|
|
+ name: '角度',
|
|
|
+ splitLine: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ axisTick: {
|
|
|
+ show: true
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ onZero: false
|
|
|
+ }
|
|
|
+})
|
|
|
+const lineSeries = reactive([{
|
|
|
+ name: "停机",
|
|
|
+ type: "line",
|
|
|
+ data: [],
|
|
|
+ symbol: "line", //设定为实心点
|
|
|
+ symbolSize: 0, //设定实心点的大小
|
|
|
+ markLine: {
|
|
|
+ symbol: 'none',
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ },
|
|
|
+ lineStyle: {
|
|
|
+ color: '#F72C5B'
|
|
|
+ },
|
|
|
+ data: []
|
|
|
+ }
|
|
|
+}
|
|
|
+])
|
|
|
+// 圈选散点触发函数
|
|
|
+const funChartSelect = async (batch) => {
|
|
|
+ const wDataArr = []
|
|
|
+ const yDataArr = []
|
|
|
+ let scatterls = []
|
|
|
+ let dataSetObj = []
|
|
|
+ wtData.value = []
|
|
|
+ if (batch?.length && actCopList.value[0]?.dataset) {
|
|
|
+ scatterls = batch[0].selected[1].dataIndex
|
|
|
+ if (scatterls?.length) {
|
|
|
+ dataSetObj = JSON.parse(actCopList.value[0].dataset)
|
|
|
+ if (scatterls?.length) {
|
|
|
+ for (const scatterIndex of scatterls) {
|
|
|
+ wDataArr.push(dataSetObj[0].source[scatterIndex].k)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const wtRes = await request.get('/power/fitting/filter', { params: { yk: yDataArr.join(','), wk: wDataArr.join(',') } })
|
|
|
+ if (wtRes.code === 200) {
|
|
|
+ let id = 1
|
|
|
+ const tempArr = [] //用于以风机id 聚合dataArr
|
|
|
+ if (wtRes.data?.length) {
|
|
|
+ for (const data of wtRes.data) {
|
|
|
+ if (tempArr.length) {
|
|
|
+ const findIndex = tempArr.findIndex(o => o.wtId === data.wtId)
|
|
|
+ if (findIndex !== -1) {
|
|
|
+ if (!tempArr[findIndex].children) {
|
|
|
+ tempArr[findIndex].children = []
|
|
|
+ }
|
|
|
+ tempArr[findIndex].children.push({ ...data, id: id, filter: data.filter === 0 ? '是' : '否' })
|
|
|
+ id++
|
|
|
+ } else {
|
|
|
+ tempArr.push({ ...data, id: id, filter: data.filter === 0 ? '是' : '否' })
|
|
|
+ id++
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tempArr.push({ ...data, id: id, filter: data.filter === 0 ? '是' : '否' })
|
|
|
+ id++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ wtDialog.value = true
|
|
|
+ nextTick(() => {
|
|
|
+ wtTab.value = 'table'
|
|
|
+ wtData.value = tempArr
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+/**barChart */
|
|
|
+const barxAxis = reactive({
|
|
|
+ type: 'category',
|
|
|
+ name: '时间',
|
|
|
+ data: [],
|
|
|
+ splitLine: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ axisTick: {
|
|
|
+ show: true
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ onZero: false
|
|
|
+ }
|
|
|
+})
|
|
|
+const baryAxis = reactive({
|
|
|
+ type: 'value',
|
|
|
+ name: '角度',
|
|
|
+ splitLine: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ axisTick: {
|
|
|
+ show: true
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ onZero: false
|
|
|
+ }
|
|
|
+})
|
|
|
+const barSeries = reactive([{
|
|
|
+ name: "并网",
|
|
|
+ type: "line",
|
|
|
+ symbol: "line", //设定为实心点
|
|
|
+ symbolSize: 0, //设定实心点的大小
|
|
|
+ data: [],
|
|
|
+ markLine: {
|
|
|
+ symbol: 'none',
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ },
|
|
|
+ lineStyle: {
|
|
|
+ color: '#F72C5B'
|
|
|
+ },
|
|
|
+ data: []
|
|
|
+ },
|
|
|
+}])
|
|
|
+/**dialog 数据 */
|
|
|
+const wtDialog = ref(false)
|
|
|
+const wtData = ref([])
|
|
|
+const wtTab = ref('table')
|
|
|
+/**dialog */
|
|
|
+const dialog = ref(false)
|
|
|
+const actChartName = ref('')
|
|
|
+const actDiaTitle = ref('')
|
|
|
+const diaPanelRef = ref()
|
|
|
+const exportLoading = ref(false)
|
|
|
+const actCopList = ref([
|
|
|
+ // {
|
|
|
+ // xAxis: [],
|
|
|
+ // subtext: '',
|
|
|
+ // title: '',
|
|
|
+ // isRadar: false,
|
|
|
+ // series: [],
|
|
|
+ // yAxis: [],
|
|
|
+ // dataset: []
|
|
|
+ // }
|
|
|
+])
|
|
|
+// 作为actCopList的备份 在actCopList赋值多个时 同时赋值, 在dialog弹出时清空. 作用: 在actCopList变化时, 重新赋值原始数据
|
|
|
+const actCopListBak = ref([])
|
|
|
+const checkAll = ref(true)
|
|
|
+const queryForm = reactive({
|
|
|
+ checkIds: []
|
|
|
+})
|
|
|
+const funCheckAll = () => {
|
|
|
+ checkAll.value = !checkAll.value
|
|
|
+ if(checkAll.value){
|
|
|
+ queryForm.checkIds = chartExcelList.value.map(o => o.id)
|
|
|
+ }else{
|
|
|
+ queryForm.checkIds = []
|
|
|
+ }
|
|
|
+}
|
|
|
+const chartExcelList = ref([]) //dialog 下拉项
|
|
|
+const funActCop = (obj, type) => {
|
|
|
+ switch(type){
|
|
|
+ case 'barChartCop':
|
|
|
+ actChartName.value = 'barChartCop'
|
|
|
+ obj.actCop = shallowRef(barChartCop)
|
|
|
+ actDiaTitle.value = '风速'
|
|
|
+ break
|
|
|
+ case 'lineChartCop':
|
|
|
+ actChartName.value = 'lineChartCop'
|
|
|
+ obj.actCop = shallowRef(barChartCop)
|
|
|
+ actDiaTitle.value = '毛容量系数'
|
|
|
+ break
|
|
|
+ // case 'CurrentScatterChartCop':
|
|
|
+ // actChartName.value = 'CurrentScatterChartCop'
|
|
|
+ // obj.actCop = shallowRef(CurrentScatte // console.log(res)rChartCop)
|
|
|
+ // actDiaTitle.value = '静态偏航对风分析图'
|
|
|
+ // break
|
|
|
+ }
|
|
|
+ obj.isBrush = false
|
|
|
+ obj.id = chartId
|
|
|
+ chartId ++
|
|
|
+ dialog.value = true
|
|
|
+ actCopListBak.value = []
|
|
|
+ nextTick(() => {
|
|
|
+ actCopList.value = [obj]
|
|
|
+ })
|
|
|
+}
|
|
|
+// const funDiaSubmit = async () => {
|
|
|
+// let url = ''
|
|
|
+// switch(actChartName.value){
|
|
|
+// case 'barChartCop':
|
|
|
+// url = '/wind/avg/speed'
|
|
|
+// break
|
|
|
+// case 'lineChartCop':
|
|
|
+// url = '/wind/avg/speed'
|
|
|
+// break
|
|
|
+// // case 'CurrentScatterChartCop':
|
|
|
+// // url = '' //暂无接口
|
|
|
+// // break
|
|
|
+// }
|
|
|
+// if(url){
|
|
|
+// const res = await request.get(url, {
|
|
|
+// params: {
|
|
|
+// ids: queryForm.checkIds.join(','),
|
|
|
+// mode: 0
|
|
|
+// }
|
|
|
+// })
|
|
|
+// if(res.code===200){
|
|
|
+// actCopList.value = []
|
|
|
+// actCopListBak.value = [] //清空备份
|
|
|
+// if(res.data?.length){
|
|
|
+// for(const chart of res.data){
|
|
|
+// chart.currentData.sort((a,b) => {
|
|
|
+// return new Date(a.time).getTime() - new Date(b.time).getTime()
|
|
|
+// })
|
|
|
+// chart.preData.sort((a,b) => {
|
|
|
+// return new Date(a.time).getTime() - new Date(b.time).getTime()
|
|
|
+// })
|
|
|
+// const xAxisData = [], barData1 = [], barData2 = [], lineData1 = [], lineData2 = []
|
|
|
+// let avgSpeedSum = 0, avgMrxsSum = 0
|
|
|
+// let avgSpeedDesc = '', avgMrxsDesc = ''
|
|
|
+// for(const current of chart.currentData){
|
|
|
+// xAxisData.push(current.time)
|
|
|
+// barData1.push(current.avgspeed)
|
|
|
+// avgSpeedSum += current.avgspeed
|
|
|
+// avgMrxsSum += current.mrxs
|
|
|
+// lineData1.push((current.mrxs*100).toFixed(2))
|
|
|
+// }
|
|
|
+// for(const current of chart.preData){
|
|
|
+// barData2.push(current.avgspeed)
|
|
|
+// lineData2.push((current.mrxs*100).toFixed(2))
|
|
|
+// }
|
|
|
+// avgSpeedDesc = (avgSpeedSum / barData1.length).toFixed(2)+' m/s'
|
|
|
+// avgMrxsDesc = (avgMrxsSum / lineData1.length * 100).toFixed(2)+' %'
|
|
|
+// if(actChartName.value==='barChartCop'){
|
|
|
+// actCopList.value.push({
|
|
|
+// id: chartId,
|
|
|
+// isBrush: false,
|
|
|
+// actCop: shallowRef(barChartCop),
|
|
|
+// // title: chart.windturbine,
|
|
|
+// subtext: `${chart.wtId} 平均角度 ${avgSpeedDesc}`,
|
|
|
+// xAxis: {
|
|
|
+// ...barxAxis,
|
|
|
+// data: xAxisData
|
|
|
+// },
|
|
|
+// yAxis: baryAxis,
|
|
|
+// series: [{
|
|
|
+// ...barSeries[0],
|
|
|
+// data: barData1
|
|
|
+// }]
|
|
|
+// })
|
|
|
+// chartId++
|
|
|
+// }
|
|
|
+// if(actChartName.value === 'lineChartCop'){
|
|
|
+// actCopList.value.push({
|
|
|
+// id: chartId,
|
|
|
+// isBrush: false,
|
|
|
+// actCop: shallowRef(barChartCop),
|
|
|
+// // title: chart.windturbine,
|
|
|
+// subtext: `${chart.wtId} 平均角度 ${avgMrxsDesc}`,
|
|
|
+// xAxis: {
|
|
|
+// ...linexAxis,
|
|
|
+// data: xAxisData
|
|
|
+// },
|
|
|
+// yAxis: lineyAxis,
|
|
|
+// series: [{
|
|
|
+// ...lineSeries[0],
|
|
|
+// data: lineData1
|
|
|
+// }]
|
|
|
+
|
|
|
+// })
|
|
|
+// chartId++
|
|
|
+// }
|
|
|
+// }
|
|
|
+// actCopListBak.value = actCopList.value
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+const funDiaExport = () => {
|
|
|
+ exportLoading.value = true
|
|
|
+ tools.scrollToPDF(diaPanelRef.value, actDiaTitle.value, () => {
|
|
|
+ exportLoading.value = false
|
|
|
+ })
|
|
|
+}
|
|
|
+const funDbClick = (obj) => {
|
|
|
+ if(actCopListBak.value.length > 1){ //判断大于1时, 才有双击放大功能
|
|
|
+ if(actCopList.value.length === 1){
|
|
|
+ actCopList.value = actCopListBak.value
|
|
|
+ }else{
|
|
|
+ actCopList.value = [obj]
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+/**created */
|
|
|
+// funGetTree()
|
|
|
+/**activated */
|
|
|
+onMounted(() => {
|
|
|
+ //test
|
|
|
+ funSubmit()
|
|
|
+ //
|
|
|
+ tableHeight.value = window.innerHeight - 150 + 'px'
|
|
|
+ excelHeight.value =(window.innerHeight - 150) + 'px'
|
|
|
+ treeHeight.value = (window.innerHeight - 150) + 'px'
|
|
|
+ window.addEventListener('resize', () => {
|
|
|
+ tableHeight.value = window.innerHeight - 150 + 'px'
|
|
|
+ excelHeight.value = (window.innerHeight - 150) + 'px'
|
|
|
+ treeHeight.value = (window.innerHeight - 150) + 'px'
|
|
|
+ })
|
|
|
+ // funSubmit()
|
|
|
+})
|
|
|
+onActivated(() => {
|
|
|
+ funGetTree()
|
|
|
+})
|
|
|
+</script>
|
|
|
<template>
|
|
|
- sfagag
|
|
|
-</template>
|
|
|
+ <div class="bg-white py-[10px] px-[10px] relative s-dialog-body">
|
|
|
+ <el-dialog draggable width="80%" v-model="dialog" :title="actDiaTitle">
|
|
|
+ <el-form class="whitespace-nowrap" :inline="true" :model="queryForm">
|
|
|
+ <el-form-item label="" class="!mb-0">
|
|
|
+ <el-select v-model="queryForm.checkIds" clearable @clear="checkAll = false" collapse-tags multiple>
|
|
|
+ <el-option label="全选" :class="{'selected': checkAll}" @click="funCheckAll"></el-option>
|
|
|
+ <el-option v-for="item in chartExcelList" :key="item.id" :value="item.id" :label="item.name"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item class="!mb-0">
|
|
|
+ <submit-btn desc="查询" @click="funDiaSubmit"></submit-btn>
|
|
|
+ <submit-btn desc="导出" @click="funDiaExport"></submit-btn>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div v-loading="exportLoading">
|
|
|
+ <div ref="diaPanelRef" class="flex flex-wrap justify-center items-center h-[650px] overflow-y-auto overflow-x-hidden">
|
|
|
+ <component :is="item.actCop" :width="actCopList.length > 1 ? '50%' : '100%'" height="100%" v-for="item in actCopList"
|
|
|
+ :key="item.id" :xAxis="item.xAxis" :subtext="item.subtext" :title="item.title"
|
|
|
+ :series="item.series" :isDiaAlone="(actCopList.length === 1)" @dblclick="funDbClick(item)" :yAxis="item.yAxis" :dataset="item.dataset" :brush="item.isBrush" @getSelected="funChartSelect"></component>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ <div class="relative shadow rounded-[6px] shadow-blue-500 px-[10px] pt-[10px] pb-[10px]">
|
|
|
+ <div class="text-[14px] absolute top-[-7px] text-[#838383] left-[20px]">数据展示</div>
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="5">
|
|
|
+ <tree-cop :data="treeData" :height="treeHeight"
|
|
|
+ @currentChange="funCurrentChange" @refresh="funGetTree">
|
|
|
+ </tree-cop>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="3">
|
|
|
+ <excel-cop :data="excelList" :height="excelHeight"
|
|
|
+ @excelChange="funExcelChange" ></excel-cop>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="16">
|
|
|
+ <div :style="{ height: tableHeight }"
|
|
|
+ class="flex flex-wrap justify-center items-center overflow-x-hidden overflow-y-auto ">
|
|
|
+ <div class="mb-[10px] w-[100%] h-[49%] flex flex-col items-end shadow rounded-[6px] shadow-blue-500">
|
|
|
+ <!-- <el-icon class="mr-[10px] mt-[10px] cursor-pointer" size="18"
|
|
|
+ @click="funActCop({xAxis:barxAxis, yAxis:baryAxis, series: barSeries}, 'barChartCop')">
|
|
|
+ <ZoomIn />
|
|
|
+ </el-icon> -->
|
|
|
+ <!-- <bar-chart-cop width="100%" height="100%" :subtext="`月平均风速`" :xAxis="barxAxis" :yAxis="baryAxis" :series="barSeries"></bar-chart-cop> -->
|
|
|
+ <!-- </el-icon> -->
|
|
|
+ <bar-chart-cop width="100%" height="100%" :subtext="`平均角度 ${avgSpeed}`" :xAxis="barxAxis" :yAxis="baryAxis" :series="barSeries"></bar-chart-cop>
|
|
|
+ </div>
|
|
|
+ <div class="w-[100%] h-[49%] flex flex-col items-end shadow rounded-[6px] shadow-blue-500">
|
|
|
+ <!-- <el-icon class="mr-[10px] mt-[10px] cursor-pointer" size="18"
|
|
|
+ @click="funActCop({xAxis:linexAxis, yAxis:lineyAxis, series: lineSeries}, 'lineChartCop')">
|
|
|
+ <ZoomIn />
|
|
|
+
|
|
|
+ </el-icon> -->
|
|
|
+ <!-- <bar-chart-cop width="100%" height="100%" :subtext="`毛容量系数`" :xAxis="linexAxis" :yAxis="lineyAxis" :series="lineSeries"></bar-chart-cop> -->
|
|
|
+ <!-- </el-icon> -->
|
|
|
+ <bar-chart-cop width="100%" height="100%" :subtext="`平均角度 ${avgMrxs=='Infinity度'?0:avgMrxs}`" :xAxis="linexAxis" :yAxis="lineyAxis" :series="lineSeries"></bar-chart-cop>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<style scoped>
|
|
|
+.s-dialog-body /deep/ .el-dialog__body{
|
|
|
+ padding: 0px 20px;
|
|
|
+}
|
|
|
+</style>
|