报告参数
-
-
-
-
+ 生成报表
- {{ node.label }}
-
- {{ data.time }}
+
- 删除
-
+ />
@@ -177,10 +249,10 @@
@@ -199,7 +271,9 @@ import { mainHeight } from '@/utils/layout'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import MyEchart from '@/components/echarts/MyEchart.vue'
import TimePopUpBox from './components/timePopUpBox.vue'
+import { getDataByLineId, getTargetLimitById, getTargetByTime } from '@/api/harmonic-boot/newEnergyAnalysis'
import detail from './components/detail.vue'
+import { Close } from '@element-plus/icons-vue'
defineOptions({
name: 'newEnergy/newEnergyAnalysis'
})
@@ -212,42 +286,42 @@ const size = ref(0)
const TableHeaderRef = ref()
const detailRef = ref()
const dotList: any = ref({})
-const power = ref([])
+
const timePopUpBoxRef = ref()
-const index = ref([])
+const index = ref(0)
const powerList1: any = ref([
{
label: '0%~10%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '越限',
value: '0%~10%'
},
{
label: '10%~20%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '10%~10%'
},
{
label: '20%~30%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '10%~30%'
},
{
label: '30%~40%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '30%~40%'
},
{
label: '40%~50%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '40%~50%'
@@ -256,28 +330,28 @@ const powerList1: any = ref([
const powerList2: any = ref([
{
label: '50%~60%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '50%~60%'
},
{
label: '60%~70%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '60%~70%'
},
{
label: '70%~80%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '合格',
value: '70%~80%'
},
{
label: '80%~90%',
- quantity: '20',
+ quantity: '0',
percentage: '10%',
crossTheLine: '越限',
value: '80%~90%'
@@ -291,92 +365,88 @@ const powerList2: any = ref([
}
])
-const tableData: any = ref([
- {
- num: '2023-08-08 09:00:00',
- num1: '0',
- num2: '1',
- num3: '3',
- num4: '2',
- num5: '1',
- num6: '1',
- num7: '1',
- num8: '0',
- crossTheLine: '越限'
- }
-])
-const dataSource = ref([
+const tableData: any = ref([])
+const dataSource: any = ref([
{
id: 1,
level: 0,
- label: '0%~10%',
- children: [
- {
- id: 11,
- label: '测试',
- children: []
- }
- ]
+ time: '0%~10%',
+ children: []
},
{
id: 2,
level: 0,
- label: '10%~20%',
+ time: '10%~20%',
children: []
},
{
id: 3,
level: 0,
- label: '20%~30%',
+ time: '20%~30%',
children: []
},
{
id: 4,
level: 0,
- label: '30%~40%',
+ time: '30%~40%',
children: []
},
{
id: 5,
level: 0,
- label: '40%~50%',
+ time: '40%~50%',
children: []
},
{
id: 6,
level: 0,
- label: '50%~60%',
+ time: '50%~60%',
children: []
},
{
id: 7,
level: 0,
- label: '60%~70%',
+ time: '60%~70%',
children: []
},
{
id: 8,
level: 0,
- label: '70%~80%',
+ time: '70%~80%',
children: []
},
{
id: 9,
level: 0,
- label: '80%~90%',
+ time: '80%~90%',
children: []
},
{
id: 10,
level: 0,
- label: '90%~100%',
+ time: '90%~100%',
children: []
}
])
// 添加树
-const addTo = row => {
- console.log('🚀 ~ addTo ~ row:', row)
+const addTo = (row: any) => {
+ // console.log("🚀 ~ addTo ~ uniqueObjectsByJSON([...dataSource.value[index.value].children, row]):", uniqueObjectsByJSON([...dataSource.value[index.value].children, row])[0].time)
+ let list = JSON.parse(JSON.stringify(dataSource.value[index.value].children))
+ dataSource.value[index.value].children = uniqueObjectsByJSON([...list, row])
}
+// 树去重
+const uniqueObjectsByJSON = (arr: any) => {
+ const seen = new Set()
+ return arr.filter((item: any) => {
+ const str = JSON.stringify(item)
+ if (!seen.has(str)) {
+ seen.add(str)
+ return true
+ }
+ return false
+ })
+}
+
// 树删除
const remove = (node: any, data: any) => {
const parent = node.parent
@@ -395,17 +465,182 @@ const tableStore = new TableStore({
loadCallback: () => {}
})
// 卡片点击变色
-const handleClick = (e: string) => {
- flag.value = e
-}
+
// 点击时间
const timeClick = (row: any) => {
- timePopUpBox.value = row
+ let data = {
+ ...row,
+ field: index.value,
+ lineId: dotList.value.id
+ }
+ timePopUpBox.value = data
}
// 点击越限
const detailClick = (row: any) => {
detailRef.value.open()
}
+// 获取有功功率趋势分析数据
+const analyse = (e: any) => {
+ getDataByLineId({
+ lineId: e.id,
+ searchBeginTime: TableHeaderRef.value.datePickerRef.timeValue[0],
+ searchEndTime: TableHeaderRef.value.datePickerRef.timeValue[1]
+ }).then(res => {
+ let mun =
+ res.data.minsNum1 +
+ res.data.minsNum2 +
+ res.data.minsNum3 +
+ res.data.minsNum4 +
+ res.data.minsNum5 +
+ res.data.minsNum6 +
+ res.data.minsNum7 +
+ res.data.minsNum8 +
+ res.data.minsNum9
+ powerList1.value = [
+ {
+ label: '0%~10%',
+ quantity: res.data.minsNum0,
+ percentage: ((res.data.minsNum0 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot0,
+ value: '0%~10%'
+ },
+ {
+ label: '10%~20%',
+ quantity: res.data.minsNum1,
+ percentage: ((res.data.minsNum1 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot1,
+ value: '10%~10%'
+ },
+ {
+ label: '20%~30%',
+ quantity: res.data.minsNum2,
+ percentage: ((res.data.minsNum2 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot2,
+ value: '10%~30%'
+ },
+ {
+ label: '30%~40%',
+ quantity: res.data.minsNum3,
+ percentage: ((res.data.minsNum3 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot3,
+ value: '30%~40%'
+ },
+ {
+ label: '40%~50%',
+ quantity: res.data.minsNum4,
+ percentage: ((res.data.minsNum4 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot4,
+ value: '40%~50%'
+ }
+ ]
+ powerList2.value = [
+ {
+ label: '50%~60%',
+ quantity: res.data.minsNum5,
+ percentage: ((res.data.minsNum5 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot5,
+ value: '50%~60%'
+ },
+ {
+ label: '60%~70%',
+ quantity: res.data.minsNum6,
+ percentage: ((res.data.minsNum6 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot6,
+ value: '60%~70%'
+ },
+ {
+ label: '70%~80%',
+ quantity: res.data.minsNum7,
+ percentage: ((res.data.minsNum7 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot7,
+ value: '70%~80%'
+ },
+ {
+ label: '80%~90%',
+ quantity: res.data.minsNum8,
+ percentage: ((res.data.minsNum8 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot8,
+ value: '80%~90%'
+ },
+ {
+ label: '90%~100%',
+ quantity: res.data.minsNum9,
+ percentage: ((res.data.minsNum9 / mun) * 100).toFixed(2) + '%',
+ crossTheLine: res.data.isOrNot9,
+ value: '90%~100%'
+ }
+ ]
+ options.value = {
+ title: {
+ text: '有功率区间占比',
+ left: '10px'
+ },
+ legend: {
+ show: false
+ },
+ tooltip: {},
+ xAxis: {
+ show: false
+ },
+ yAxis: {
+ show: false
+ },
+ dataZoom: { show: false },
+
+ options: {
+ series: [
+ {
+ type: 'pie',
+ center: ['50%', '60%'],
+ selectedOffset: 30,
+ label: {
+ show: true,
+ color: '#96A2B5',
+ lineHeight: 8,
+ minMargin: 10,
+ formatter: function (e) {
+ return '{name|' + e.name + '}{percent|' + e.data.percentage + '}'
+ },
+ rich: {
+ name: {
+ fontSize: 12
+ },
+
+ percent: {
+ fontSize: 14,
+ color: '#000',
+ padding: [0, 0, 0, 5]
+ }
+ }
+ },
+ data: [
+ ...powerList1.value.map(item => {
+ return { value: item.quantity, name: item.label, percentage: item.percentage }
+ }),
+ ...powerList2.value.map(item => {
+ return { value: item.quantity, name: item.label, percentage: item.percentage }
+ })
+ ]
+ }
+ ]
+ }
+ }
+ })
+}
+// 功率列表
+const analyseList = (e: string, i: number) => {
+ flag.value = e
+ index.value = i
+ getTargetLimitById({
+ lineId: dotList.value.id,
+ searchBeginTime: TableHeaderRef.value.datePickerRef.timeValue[0],
+ searchEndTime: TableHeaderRef.value.datePickerRef.timeValue[1],
+ statisticalId: i
+ }).then(res => {
+ tableData.value = res.data
+ })
+}
+
provide('tableStore', tableStore)
onMounted(() => {
@@ -413,65 +648,18 @@ onMounted(() => {
if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 100)
}
- options.value = {
- title: {
- text: '占比',
- left: '10px'
- },
- legend: {
- show: false
- },
- tooltip: {},
- xAxis: {
- show: false
- },
- yAxis: {
- show: false
- },
- dataZoom: { show: false },
-
- options: {
- series: [
- {
- type: 'pie',
- center: ['50%', '50%'],
- selectedOffset: 30,
- label: {
- show: true,
- color: '#96A2B5',
- lineHeight: 8,
- minMargin: 10,
- formatter: function (e) {
- return '{name|' + e.name + '}{percent|' + e.data.percentage + '}'
- },
- rich: {
- name: {
- fontSize: 12
- },
-
- percent: {
- fontSize: 14,
- color: '#000',
- padding: [0, 0, 0, 5]
- }
- }
- },
- data: [
- ...powerList1.value.map(item => {
- return { value: item.quantity, name: item.label, percentage: item.percentage }
- }),
- ...powerList2.value.map(item => {
- return { value: item.quantity, name: item.label, percentage: item.percentage }
- })
- ]
- }
- ]
+})
+let control = ref(true)
+const handleNodeClick = (data: any, node: any) => {
+ console.log('🚀 ~ handleNodeClick ~ data:', data)
+ if (data.level == 6) {
+ dotList.value = data
+ analyse(data)
+ if (control.value) {
+ analyseList('0%~10%', 0)
+ control.value = false
}
}
-})
-
-const handleNodeClick = (data: any, node: any) => {
- dotList.value = data
}