冀北数据总览添加导出功能
This commit is contained in:
@@ -45,3 +45,13 @@ export const getLineOverLimitData = (id: string) => {
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
//导出数据总览
|
||||
export function dataVerifyExcel(params: any) {
|
||||
return request({
|
||||
url: '/device-boot/dataVerify/dataVerifyExcel',
|
||||
method: 'get',
|
||||
params,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
@@ -1,106 +1,114 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function getTypeIdData(data: any) {
|
||||
return request({
|
||||
url: '/system-boot/dictData/getTypeIdData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getOnlineRateData2(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/onlineRateData/getOnlineRateData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getAreaDept() {
|
||||
return request({
|
||||
url: '/user-boot/dept/loginDeptTree',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
export function getOnlineRateDataCensus(data:any) {
|
||||
return request({
|
||||
url: '/device-boot/terminalOnlineRateData/getOnlineRateDataCensus',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function IntegrityIcon(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/integrity/getIntegrityIcon',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getDeptIdAreaTree() {
|
||||
return request({
|
||||
url: '/system-boot/area/getDeptIdAreaTree',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
export function getOnlineRateData(data:any) {
|
||||
return request({
|
||||
url: '/device-boot/terminalOnlineRateData/getOnlineRateData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getSubstationInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/PollutionSubstation/getSubstationInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getLineInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/PollutionSubstation/getLineInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getLineRank(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/PollutionSubstation/getLineRank',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function deptInfo(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/deptInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getXbLineInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/getXbLineInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getSubInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/getSubInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getXbLineRank(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/getXbLineRank',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
// 数据补招
|
||||
export function FullRecall(data:any) {
|
||||
return request({
|
||||
url: '/data-processing-boot/data/FullRecall',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function getTypeIdData(data: any) {
|
||||
return request({
|
||||
url: '/system-boot/dictData/getTypeIdData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getOnlineRateData2(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/onlineRateData/getOnlineRateData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getAreaDept() {
|
||||
return request({
|
||||
url: '/user-boot/dept/loginDeptTree',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
// 承载能力评估去除前缀
|
||||
export function getAreaDeptRemoveMode(params) {
|
||||
return request({
|
||||
url: '/user-boot/dept/loginDeptTree',
|
||||
method: 'GET',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
export function getOnlineRateDataCensus(data:any) {
|
||||
return request({
|
||||
url: '/device-boot/terminalOnlineRateData/getOnlineRateDataCensus',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function IntegrityIcon(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/integrity/getIntegrityIcon',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getDeptIdAreaTree() {
|
||||
return request({
|
||||
url: '/system-boot/area/getDeptIdAreaTree',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
export function getOnlineRateData(data:any) {
|
||||
return request({
|
||||
url: '/device-boot/terminalOnlineRateData/getOnlineRateData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getSubstationInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/PollutionSubstation/getSubstationInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getLineInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/PollutionSubstation/getLineInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getLineRank(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/PollutionSubstation/getLineRank',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function deptInfo(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/deptInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getXbLineInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/getXbLineInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getSubInfoById(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/getSubInfoById',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
export function getXbLineRank(data:any) {
|
||||
return request({
|
||||
url: '/harmonic-boot/detailAnalysis/getXbLineRank',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
// 数据补招
|
||||
export function FullRecall(data:any) {
|
||||
return request({
|
||||
url: '/data-processing-boot/data/FullRecall',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -6,29 +6,40 @@
|
||||
</div>
|
||||
<el-tabs type="border-card">
|
||||
<el-tab-pane label="暂态波形上送" :style="'height:' + vhh">
|
||||
<el-table stripe :data="Data" :height="height" border style="width: 100%"
|
||||
header-cell-class-name="table_header">
|
||||
<el-table-column align="center" prop="number" label="事件段"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="波形起始点相位(°)">
|
||||
<el-table-column align="center" prop="number" label="A相"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="B相"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="C相"></el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="number" label="跳变段电压变化率(V/ms)">
|
||||
<el-table-column align="center" prop="number" label="A相"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="B相"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="C相"></el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="number" label="相位跳变(°)">
|
||||
<el-table-column align="center" prop="number" label="A相"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="B相"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="C相"></el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="number" label="总分段数目"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="三相电压不平衡度(%)" width="180"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="触发类型"></el-table-column>
|
||||
<el-table-column align="center" prop="number" label="暂降原因"></el-table-column>
|
||||
</el-table>
|
||||
<vxe-table
|
||||
stripe
|
||||
:data="Data"
|
||||
:height="height"
|
||||
border
|
||||
style="width: 100%"
|
||||
header-cell-class-name="table_header"
|
||||
>
|
||||
<vxe-column align="center" field="number" title="事件段"></vxe-column>
|
||||
<vxe-colgroup align="center" field="number1" title="波形起始点相位(°)">
|
||||
<vxe-column align="center" field="number2" title="A相"></vxe-column>
|
||||
<vxe-column align="center" field="number3" title="B相"></vxe-column>
|
||||
<vxe-column align="center" field="number4" title="C相"></vxe-column>
|
||||
</vxe-colgroup>
|
||||
<vxe-colgroup align="center" field="number" title="跳变段电压变化率(V/ms)">
|
||||
<vxe-column align="center" field="number5" title="A相"></vxe-column>
|
||||
<vxe-column align="center" field="number6" title="B相"></vxe-column>
|
||||
<vxe-column align="center" field="number7" title="C相"></vxe-column>
|
||||
</vxe-colgroup>
|
||||
<vxe-colgroup align="center" field="number" title="相位跳变(°)">
|
||||
<vxe-column align="center" field="number8" title="A相"></vxe-column>
|
||||
<vxe-column align="center" field="number9" title="B相"></vxe-column>
|
||||
<vxe-column align="center" field="number10" title="C相"></vxe-column>
|
||||
</vxe-colgroup>
|
||||
<vxe-column align="center" field="number11" title="总分段数目"></vxe-column>
|
||||
<vxe-column
|
||||
align="center"
|
||||
field="number12"
|
||||
title="三相电压不平衡度(%)"
|
||||
width="180"
|
||||
></vxe-column>
|
||||
<vxe-column align="center" field="number13" title="触发类型"></vxe-column>
|
||||
<vxe-column align="center" field="number14" title="暂降原因"></vxe-column>
|
||||
</vxe-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
@@ -73,7 +84,25 @@ export default {
|
||||
subName: '',
|
||||
waveDatas: [],
|
||||
|
||||
Data: [],
|
||||
Data: [
|
||||
{
|
||||
number: 1,
|
||||
number1: 0,
|
||||
number2: 0,
|
||||
number3: 0,
|
||||
number4: 0,
|
||||
number5: 0,
|
||||
number6: 0,
|
||||
number7: 0,
|
||||
number8: 0,
|
||||
number9: 0,
|
||||
number10: 0,
|
||||
number11: 1,
|
||||
number12: 0,
|
||||
number13: '其他',
|
||||
number14: '其他'
|
||||
}
|
||||
],
|
||||
height: null,
|
||||
vhh: null,
|
||||
ptpass: '',
|
||||
@@ -88,7 +117,7 @@ export default {
|
||||
zoom: ''
|
||||
}
|
||||
},
|
||||
created() { },
|
||||
created() {},
|
||||
watch: {
|
||||
value: function (a, b) {
|
||||
if (a == 2) {
|
||||
@@ -116,10 +145,10 @@ export default {
|
||||
this.zoom = 1 / document.body.style.zoom
|
||||
if (this.flag) {
|
||||
// console.log(123);
|
||||
this.vh = mainHeight(250).height
|
||||
this.vh = mainHeight(280).height
|
||||
} else {
|
||||
// console.log(3333);
|
||||
this.vh = mainHeight(270).height
|
||||
this.vh = mainHeight(305).height
|
||||
}
|
||||
},
|
||||
query() {
|
||||
@@ -197,6 +226,8 @@ export default {
|
||||
'#FF9999'
|
||||
]
|
||||
}
|
||||
console.log('🚀 ~ this.boxoList:', this.boxoList)
|
||||
|
||||
var option = {
|
||||
tooltip: {
|
||||
top: '10px',
|
||||
@@ -239,7 +270,7 @@ export default {
|
||||
|
||||
title: {
|
||||
left: 'center',
|
||||
text: '发生时刻:' + this.boxoList.startTime + ' PT变化:' + this.boxoList.measurementPointName,
|
||||
text: '发生时刻:' + this.boxoList.startTime + ' PT变化:' + this.boxoList.pt,
|
||||
textStyle: {
|
||||
fontSize: 16,
|
||||
color: _this.DColor ? '#fff' : echartsColor.WordColor
|
||||
@@ -378,6 +409,33 @@ export default {
|
||||
}
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: '跳变期',
|
||||
type: 'line',
|
||||
data: [],
|
||||
showSymbol: true, // 强制显示标记
|
||||
symbol: 'rect', // 标记形状为方块
|
||||
symbolSize: 10, // 方块大小
|
||||
itemStyle: {
|
||||
color: '#888888', // 方块颜色为灰色
|
||||
borderWidth: 0
|
||||
},
|
||||
|
||||
markArea: {
|
||||
silent: true, // 不响应交互
|
||||
itemStyle: { color: '#ccc' },
|
||||
data: [
|
||||
[
|
||||
{ xAxis: '0' }, // 第一个跳变期起始
|
||||
{ xAxis: '5' } // 第一个跳变期结束
|
||||
],
|
||||
[
|
||||
{ xAxis: '210' }, // 第二个跳变期起始
|
||||
{ xAxis: '220' } // 第二个跳变期结束
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'A相',
|
||||
type: 'line',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,286 +1,337 @@
|
||||
//指标类型
|
||||
export const indexOptions = [
|
||||
{
|
||||
label: '电压趋势',
|
||||
options: [
|
||||
{
|
||||
value: '10',
|
||||
label: '相电压有效值'
|
||||
},
|
||||
{
|
||||
value: '11',
|
||||
label: '线电压有效值'
|
||||
},
|
||||
{
|
||||
value: '12',
|
||||
label: '电压偏差'
|
||||
},
|
||||
{
|
||||
value: '13',
|
||||
label: '三相电压不平衡'
|
||||
},
|
||||
{
|
||||
value: '14',
|
||||
label: '电压不平衡'
|
||||
},
|
||||
{
|
||||
value: '15',
|
||||
label: '电压总谐波畸变率'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '电流趋势',
|
||||
options: [
|
||||
{
|
||||
value: '20',
|
||||
label: '电流有效值'
|
||||
},
|
||||
{
|
||||
value: '21',
|
||||
label: '电流总谐波畸变率'
|
||||
},
|
||||
{
|
||||
value: '22',
|
||||
label: '负序电流'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '频率趋势',
|
||||
options: [
|
||||
{
|
||||
value: '30',
|
||||
label: '频率'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '谐波趋势',
|
||||
options: [
|
||||
{
|
||||
value: '40',
|
||||
label: '谐波电压含有率'
|
||||
},
|
||||
{
|
||||
value: '43',
|
||||
label: '谐波电流幅值'
|
||||
},
|
||||
{
|
||||
value: '44',
|
||||
label: '谐波电压相角'
|
||||
},
|
||||
{
|
||||
value: '45',
|
||||
label: '谐波电流相角'
|
||||
},
|
||||
{
|
||||
value: '46',
|
||||
label: '间谐波电压含有率'
|
||||
},
|
||||
// {
|
||||
// value: '47',
|
||||
// label: '间谐波电流含有率'
|
||||
// },
|
||||
// {
|
||||
// value: '48',
|
||||
// label: '间谐波电压幅值'
|
||||
// },
|
||||
{
|
||||
value: '49',
|
||||
label: '间谐波电流幅值'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '功率趋势',
|
||||
options: [
|
||||
{
|
||||
value: '50',
|
||||
label: '谐波有功功率'
|
||||
},
|
||||
{
|
||||
value: '51',
|
||||
label: '谐波无功功率'
|
||||
},
|
||||
{
|
||||
value: '52',
|
||||
label: '谐波视在功率'
|
||||
},
|
||||
{
|
||||
value: '53',
|
||||
label: '三相有功功率'
|
||||
},
|
||||
{
|
||||
value: '54',
|
||||
label: '三相无功功率'
|
||||
},
|
||||
{
|
||||
value: '55',
|
||||
label: '三相视在功率'
|
||||
},
|
||||
{
|
||||
value: '56',
|
||||
label: '三相总有功功率'
|
||||
},
|
||||
{
|
||||
value: '57',
|
||||
label: '三相总无功功率'
|
||||
},
|
||||
{
|
||||
value: '58',
|
||||
label: '三相总视在功率'
|
||||
},
|
||||
{
|
||||
value: '59',
|
||||
label: '视在功率因数'
|
||||
},
|
||||
{
|
||||
value: '591',
|
||||
label: '位移功率因数'
|
||||
},
|
||||
{
|
||||
value: '592',
|
||||
label: '总视在功率因数'
|
||||
},
|
||||
{
|
||||
value: '593',
|
||||
label: '总位移功率因数'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '闪变趋势',
|
||||
options: [
|
||||
{
|
||||
value: '60',
|
||||
label: '短时电压闪变'
|
||||
},
|
||||
{
|
||||
value: '61',
|
||||
label: '长时电压闪变'
|
||||
},
|
||||
{
|
||||
value: '62',
|
||||
label: '电压波动'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
//谐波次数
|
||||
export const harmonicOptions = [
|
||||
{ label: '基波', value: 1 },
|
||||
{ label: '2次', value: 2 },
|
||||
{ label: '3次', value: 3 },
|
||||
{ label: '4次', value: 4 },
|
||||
{ label: '5次', value: 5 },
|
||||
{ label: '6次', value: 6 },
|
||||
{ label: '7次', value: 7 },
|
||||
{ label: '8次', value: 8 },
|
||||
{ label: '9次', value: 9 },
|
||||
{ label: '10次', value: 10 },
|
||||
{ label: '11次', value: 11 },
|
||||
{ label: '12次', value: 12 },
|
||||
{ label: '13次', value: 13 },
|
||||
{ label: '14次', value: 14 },
|
||||
{ label: '15次', value: 15 },
|
||||
{ label: '16次', value: 16 },
|
||||
{ label: '17次', value: 17 },
|
||||
{ label: '18次', value: 18 },
|
||||
{ label: '19次', value: 19 },
|
||||
{ label: '20次', value: 20 },
|
||||
{ label: '21次', value: 21 },
|
||||
{ label: '22次', value: 22 },
|
||||
{ label: '23次', value: 23 },
|
||||
{ label: '24次', value: 24 },
|
||||
{ label: '25次', value: 25 },
|
||||
{ label: '26次', value: 26 },
|
||||
{ label: '27次', value: 27 },
|
||||
{ label: '28次', value: 28 },
|
||||
{ label: '29次', value: 29 },
|
||||
{ label: '30次', value: 30 },
|
||||
{ label: '31次', value: 31 },
|
||||
{ label: '32次', value: 32 },
|
||||
{ label: '33次', value: 33 },
|
||||
{ label: '34次', value: 34 },
|
||||
{ label: '35次', value: 35 },
|
||||
{ label: '36次', value: 36 },
|
||||
{ label: '37次', value: 37 },
|
||||
{ label: '38次', value: 38 },
|
||||
{ label: '39次', value: 39 },
|
||||
{ label: '40次', value: 40 },
|
||||
{ label: '41次', value: 41 },
|
||||
{ label: '42次', value: 42 },
|
||||
{ label: '43次', value: 43 },
|
||||
{ label: '44次', value: 44 },
|
||||
{ label: '45次', value: 45 },
|
||||
{ label: '46次', value: 46 },
|
||||
{ label: '47次', value: 47 },
|
||||
{ label: '48次', value: 48 },
|
||||
{ label: '49次', value: 49 },
|
||||
{ label: '50次', value: 50 }
|
||||
]
|
||||
//简谐波次数
|
||||
export const inharmonicOptions = [
|
||||
{ label: '0.5次', value: 1 },
|
||||
{ label: '1.5次', value: 2 },
|
||||
{ label: '2.5次', value: 3 },
|
||||
{ label: '3.5次', value: 4 },
|
||||
{ label: '4.5次', value: 5 },
|
||||
{ label: '5.5次', value: 6 },
|
||||
{ label: '6.5次', value: 7 },
|
||||
{ label: '7.5次', value: 8 },
|
||||
{ label: '8.5次', value: 9 },
|
||||
{ label: '9.5次', value: 10 },
|
||||
{ label: '10.5次', value: 11 },
|
||||
{ label: '11.5次', value: 12 },
|
||||
{ label: '12.5次', value: 13 },
|
||||
{ label: '13.5次', value: 14 },
|
||||
{ label: '14.5次', value: 15 },
|
||||
{ label: '15.5次', value: 16 },
|
||||
{ label: '16.5次', value: 17 },
|
||||
{ label: '17.5次', value: 18 },
|
||||
{ label: '18.5次', value: 19 },
|
||||
{ label: '19.5次', value: 20 },
|
||||
{ label: '20.5次', value: 21 },
|
||||
{ label: '21.5次', value: 22 },
|
||||
{ label: '22.5次', value: 23 },
|
||||
{ label: '23.5次', value: 24 },
|
||||
{ label: '24.5次', value: 25 },
|
||||
{ label: '25.5次', value: 26 },
|
||||
{ label: '26.5次', value: 27 },
|
||||
{ label: '27.5次', value: 28 },
|
||||
{ label: '28.5次', value: 29 },
|
||||
{ label: '29.5次', value: 30 },
|
||||
{ label: '30.5次', value: 31 },
|
||||
{ label: '31.5次', value: 32 },
|
||||
{ label: '32.5次', value: 33 },
|
||||
{ label: '33.5次', value: 34 },
|
||||
{ label: '34.5次', value: 35 },
|
||||
{ label: '35.5次', value: 36 },
|
||||
{ label: '36.5次', value: 37 },
|
||||
{ label: '37.5次', value: 38 },
|
||||
{ label: '38.5次', value: 39 },
|
||||
{ label: '39.5次', value: 40 },
|
||||
{ label: '40.5次', value: 41 },
|
||||
{ label: '41.5次', value: 42 },
|
||||
{ label: '42.5次', value: 43 },
|
||||
{ label: '43.5次', value: 44 },
|
||||
{ label: '44.5次', value: 45 },
|
||||
{ label: '45.5次', value: 46 },
|
||||
{ label: '46.5次', value: 47 },
|
||||
{ label: '47.5次', value: 48 },
|
||||
{ label: '48.5次', value: 49 },
|
||||
{ label: '49.5次', value: 50 },
|
||||
|
||||
|
||||
|
||||
]
|
||||
|
||||
//值类型
|
||||
export const typeOptions = [
|
||||
{ label: '平均值', value: 1 },
|
||||
{ label: '最小值', value: 2 },
|
||||
{ label: '最大值', value: 3 },
|
||||
{ label: 'cp95值', value: 4 }
|
||||
]
|
||||
//指标类型
|
||||
export const indexOptions = [
|
||||
{
|
||||
label: '电压趋势',
|
||||
options: [
|
||||
{
|
||||
value: '10',
|
||||
label: '相电压有效值'
|
||||
},
|
||||
{
|
||||
value: '11',
|
||||
label: '线电压有效值'
|
||||
},
|
||||
{
|
||||
value: '12',
|
||||
label: '电压偏差'
|
||||
},
|
||||
{
|
||||
value: '13',
|
||||
label: '三相电压不平衡'
|
||||
},
|
||||
{
|
||||
value: '14',
|
||||
label: '电压不平衡'
|
||||
},
|
||||
{
|
||||
value: '15',
|
||||
label: '电压总谐波畸变率'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '电流趋势',
|
||||
options: [
|
||||
{
|
||||
value: '20',
|
||||
label: '电流有效值'
|
||||
},
|
||||
{
|
||||
value: '21',
|
||||
label: '电流总谐波畸变率'
|
||||
},
|
||||
{
|
||||
value: '22',
|
||||
label: '负序电流'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '频率趋势',
|
||||
options: [
|
||||
{
|
||||
value: '30',
|
||||
label: '频率'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '谐波趋势',
|
||||
options: [
|
||||
{
|
||||
value: '40',
|
||||
label: '谐波电压含有率'
|
||||
},
|
||||
{
|
||||
value: '43',
|
||||
label: '谐波电流幅值'
|
||||
},
|
||||
{
|
||||
value: '44',
|
||||
label: '谐波电压相角'
|
||||
},
|
||||
{
|
||||
value: '45',
|
||||
label: '谐波电流相角'
|
||||
},
|
||||
{
|
||||
value: '46',
|
||||
label: '间谐波电压含有率'
|
||||
},
|
||||
// {
|
||||
// value: '47',
|
||||
// label: '间谐波电流含有率'
|
||||
// },
|
||||
// {
|
||||
// value: '48',
|
||||
// label: '间谐波电压幅值'
|
||||
// },
|
||||
{
|
||||
value: '49',
|
||||
label: '间谐波电流幅值'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '功率趋势',
|
||||
options: [
|
||||
{
|
||||
value: '50',
|
||||
label: '谐波有功功率'
|
||||
},
|
||||
{
|
||||
value: '51',
|
||||
label: '谐波无功功率'
|
||||
},
|
||||
{
|
||||
value: '52',
|
||||
label: '谐波视在功率'
|
||||
},
|
||||
{
|
||||
value: '53',
|
||||
label: '三相有功功率'
|
||||
},
|
||||
{
|
||||
value: '54',
|
||||
label: '三相无功功率'
|
||||
},
|
||||
{
|
||||
value: '55',
|
||||
label: '三相视在功率'
|
||||
},
|
||||
{
|
||||
value: '56',
|
||||
label: '三相总有功功率'
|
||||
},
|
||||
{
|
||||
value: '57',
|
||||
label: '三相总无功功率'
|
||||
},
|
||||
{
|
||||
value: '58',
|
||||
label: '三相总视在功率'
|
||||
},
|
||||
{
|
||||
value: '59',
|
||||
label: '视在功率因数'
|
||||
},
|
||||
{
|
||||
value: '591',
|
||||
label: '位移功率因数'
|
||||
},
|
||||
{
|
||||
value: '592',
|
||||
label: '总视在功率因数'
|
||||
},
|
||||
{
|
||||
value: '593',
|
||||
label: '总位移功率因数'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: '闪变趋势',
|
||||
options: [
|
||||
{
|
||||
value: '60',
|
||||
label: '短时电压闪变'
|
||||
},
|
||||
{
|
||||
value: '61',
|
||||
label: '长时电压闪变'
|
||||
},
|
||||
{
|
||||
value: '62',
|
||||
label: '电压波动'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
//谐波次数
|
||||
export const harmonicOptions = [
|
||||
{ label: '基波', value: 1 },
|
||||
{ label: '2次', value: 2 },
|
||||
{ label: '3次', value: 3 },
|
||||
{ label: '4次', value: 4 },
|
||||
{ label: '5次', value: 5 },
|
||||
{ label: '6次', value: 6 },
|
||||
{ label: '7次', value: 7 },
|
||||
{ label: '8次', value: 8 },
|
||||
{ label: '9次', value: 9 },
|
||||
{ label: '10次', value: 10 },
|
||||
{ label: '11次', value: 11 },
|
||||
{ label: '12次', value: 12 },
|
||||
{ label: '13次', value: 13 },
|
||||
{ label: '14次', value: 14 },
|
||||
{ label: '15次', value: 15 },
|
||||
{ label: '16次', value: 16 },
|
||||
{ label: '17次', value: 17 },
|
||||
{ label: '18次', value: 18 },
|
||||
{ label: '19次', value: 19 },
|
||||
{ label: '20次', value: 20 },
|
||||
{ label: '21次', value: 21 },
|
||||
{ label: '22次', value: 22 },
|
||||
{ label: '23次', value: 23 },
|
||||
{ label: '24次', value: 24 },
|
||||
{ label: '25次', value: 25 },
|
||||
{ label: '26次', value: 26 },
|
||||
{ label: '27次', value: 27 },
|
||||
{ label: '28次', value: 28 },
|
||||
{ label: '29次', value: 29 },
|
||||
{ label: '30次', value: 30 },
|
||||
{ label: '31次', value: 31 },
|
||||
{ label: '32次', value: 32 },
|
||||
{ label: '33次', value: 33 },
|
||||
{ label: '34次', value: 34 },
|
||||
{ label: '35次', value: 35 },
|
||||
{ label: '36次', value: 36 },
|
||||
{ label: '37次', value: 37 },
|
||||
{ label: '38次', value: 38 },
|
||||
{ label: '39次', value: 39 },
|
||||
{ label: '40次', value: 40 },
|
||||
{ label: '41次', value: 41 },
|
||||
{ label: '42次', value: 42 },
|
||||
{ label: '43次', value: 43 },
|
||||
{ label: '44次', value: 44 },
|
||||
{ label: '45次', value: 45 },
|
||||
{ label: '46次', value: 46 },
|
||||
{ label: '47次', value: 47 },
|
||||
{ label: '48次', value: 48 },
|
||||
{ label: '49次', value: 49 },
|
||||
{ label: '50次', value: 50 }
|
||||
]
|
||||
export const harmonicOptions1 = [
|
||||
{ label: '2次', value: 2 },
|
||||
{ label: '3次', value: 3 },
|
||||
{ label: '4次', value: 4 },
|
||||
{ label: '5次', value: 5 },
|
||||
{ label: '6次', value: 6 },
|
||||
{ label: '7次', value: 7 },
|
||||
{ label: '8次', value: 8 },
|
||||
{ label: '9次', value: 9 },
|
||||
{ label: '10次', value: 10 },
|
||||
{ label: '11次', value: 11 },
|
||||
{ label: '12次', value: 12 },
|
||||
{ label: '13次', value: 13 },
|
||||
{ label: '14次', value: 14 },
|
||||
{ label: '15次', value: 15 },
|
||||
{ label: '16次', value: 16 },
|
||||
{ label: '17次', value: 17 },
|
||||
{ label: '18次', value: 18 },
|
||||
{ label: '19次', value: 19 },
|
||||
{ label: '20次', value: 20 },
|
||||
{ label: '21次', value: 21 },
|
||||
{ label: '22次', value: 22 },
|
||||
{ label: '23次', value: 23 },
|
||||
{ label: '24次', value: 24 },
|
||||
{ label: '25次', value: 25 },
|
||||
{ label: '26次', value: 26 },
|
||||
{ label: '27次', value: 27 },
|
||||
{ label: '28次', value: 28 },
|
||||
{ label: '29次', value: 29 },
|
||||
{ label: '30次', value: 30 },
|
||||
{ label: '31次', value: 31 },
|
||||
{ label: '32次', value: 32 },
|
||||
{ label: '33次', value: 33 },
|
||||
{ label: '34次', value: 34 },
|
||||
{ label: '35次', value: 35 },
|
||||
{ label: '36次', value: 36 },
|
||||
{ label: '37次', value: 37 },
|
||||
{ label: '38次', value: 38 },
|
||||
{ label: '39次', value: 39 },
|
||||
{ label: '40次', value: 40 },
|
||||
{ label: '41次', value: 41 },
|
||||
{ label: '42次', value: 42 },
|
||||
{ label: '43次', value: 43 },
|
||||
{ label: '44次', value: 44 },
|
||||
{ label: '45次', value: 45 },
|
||||
{ label: '46次', value: 46 },
|
||||
{ label: '47次', value: 47 },
|
||||
{ label: '48次', value: 48 },
|
||||
{ label: '49次', value: 49 },
|
||||
{ label: '50次', value: 50 }
|
||||
]
|
||||
//简谐波次数
|
||||
export const inharmonicOptions = [
|
||||
{ label: '0.5次', value: 1 },
|
||||
{ label: '1.5次', value: 2 },
|
||||
{ label: '2.5次', value: 3 },
|
||||
{ label: '3.5次', value: 4 },
|
||||
{ label: '4.5次', value: 5 },
|
||||
{ label: '5.5次', value: 6 },
|
||||
{ label: '6.5次', value: 7 },
|
||||
{ label: '7.5次', value: 8 },
|
||||
{ label: '8.5次', value: 9 },
|
||||
{ label: '9.5次', value: 10 },
|
||||
{ label: '10.5次', value: 11 },
|
||||
{ label: '11.5次', value: 12 },
|
||||
{ label: '12.5次', value: 13 },
|
||||
{ label: '13.5次', value: 14 },
|
||||
{ label: '14.5次', value: 15 },
|
||||
{ label: '15.5次', value: 16 },
|
||||
{ label: '16.5次', value: 17 },
|
||||
{ label: '17.5次', value: 18 },
|
||||
{ label: '18.5次', value: 19 },
|
||||
{ label: '19.5次', value: 20 },
|
||||
{ label: '20.5次', value: 21 },
|
||||
{ label: '21.5次', value: 22 },
|
||||
{ label: '22.5次', value: 23 },
|
||||
{ label: '23.5次', value: 24 },
|
||||
{ label: '24.5次', value: 25 },
|
||||
{ label: '25.5次', value: 26 },
|
||||
{ label: '26.5次', value: 27 },
|
||||
{ label: '27.5次', value: 28 },
|
||||
{ label: '28.5次', value: 29 },
|
||||
{ label: '29.5次', value: 30 },
|
||||
{ label: '30.5次', value: 31 },
|
||||
{ label: '31.5次', value: 32 },
|
||||
{ label: '32.5次', value: 33 },
|
||||
{ label: '33.5次', value: 34 },
|
||||
{ label: '34.5次', value: 35 },
|
||||
{ label: '35.5次', value: 36 },
|
||||
{ label: '36.5次', value: 37 },
|
||||
{ label: '37.5次', value: 38 },
|
||||
{ label: '38.5次', value: 39 },
|
||||
{ label: '39.5次', value: 40 },
|
||||
{ label: '40.5次', value: 41 },
|
||||
{ label: '41.5次', value: 42 },
|
||||
{ label: '42.5次', value: 43 },
|
||||
{ label: '43.5次', value: 44 },
|
||||
{ label: '44.5次', value: 45 },
|
||||
{ label: '45.5次', value: 46 },
|
||||
{ label: '46.5次', value: 47 },
|
||||
{ label: '47.5次', value: 48 },
|
||||
{ label: '48.5次', value: 49 },
|
||||
{ label: '49.5次', value: 50 },
|
||||
|
||||
|
||||
|
||||
]
|
||||
|
||||
//值类型
|
||||
export const typeOptions = [
|
||||
{ label: '平均值', value: 1 },
|
||||
{ label: '最小值', value: 2 },
|
||||
{ label: '最大值', value: 3 },
|
||||
{ label: 'cp95值', value: 4 }
|
||||
]
|
||||
|
||||
@@ -183,7 +183,7 @@ import TableHeader from '@/components/table/header/index.vue'
|
||||
import MyEChart from '@/components/echarts/MyEchart.vue'
|
||||
import { useMonitoringPoint } from '@/stores/monitoringPoint'
|
||||
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||
import { harmonicOptions } from '@/utils/dictionary'
|
||||
import { harmonicOptions1 } from '@/utils/dictionary'
|
||||
import { Select } from '@element-plus/icons-vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import {
|
||||
@@ -202,7 +202,7 @@ import html2canvas from 'html2canvas'
|
||||
import { yMethod } from '@/utils/echartMethod'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
const props = defineProps(['rowList'])
|
||||
const harmonic = harmonicOptions.filter(item => item.value < 26)
|
||||
const harmonic = harmonicOptions1.filter(item => item.value < 26)
|
||||
const currentLod = ref(false)
|
||||
const monitoringPoint = useMonitoringPoint()
|
||||
const size = ref(19)
|
||||
|
||||
@@ -157,7 +157,7 @@ const tableStore: any = new TableStore({
|
||||
},
|
||||
{
|
||||
name: 'del',
|
||||
text: '禁止接入',
|
||||
text: '删除',
|
||||
type: 'danger',
|
||||
icon: 'el-icon-Delete',
|
||||
render: 'confirmButton',
|
||||
@@ -165,11 +165,11 @@ const tableStore: any = new TableStore({
|
||||
confirmButtonText: '确认',
|
||||
cancelButtonText: '取消',
|
||||
confirmButtonType: 'danger',
|
||||
title: '确定禁止接入?'
|
||||
title: '确定删除?'
|
||||
},
|
||||
click: row => {
|
||||
remove({ ids: row.id }).then(() => {
|
||||
ElMessage.success('禁止接入成功')
|
||||
ElMessage.success('删除成功')
|
||||
tableStore.index()
|
||||
})
|
||||
}
|
||||
|
||||
@@ -57,9 +57,15 @@
|
||||
|
||||
<el-form-item label="区域" prop="regionList">
|
||||
<!-- <el-cascader v-model="form.regionList" style="width: 100%" :props="props" :options="areaList" /> -->
|
||||
<el-cascader v-model="form.regionList" :props="props" :options="areaList" style="width: 100%" placeholder="请选择区域" />
|
||||
<el-cascader
|
||||
v-model="form.regionList"
|
||||
:props="props"
|
||||
:options="areaList"
|
||||
style="width: 100%"
|
||||
placeholder="请选择区域"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="详细地址:" prop="area">
|
||||
<el-input
|
||||
clearable
|
||||
@@ -95,7 +101,7 @@ import { mainHeight } from '@/utils/layout'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
import equipment from './equipment.vue'
|
||||
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
|
||||
import { getAreaDept } from '@/api/harmonic-boot/area'
|
||||
import { getAreaDept, getAreaDeptRemoveMode } from '@/api/harmonic-boot/area'
|
||||
|
||||
defineOptions({
|
||||
name: 'estimate/photovoltaic'
|
||||
@@ -108,8 +114,9 @@ const disabled = ref(false)
|
||||
const TableHeaderRef = ref()
|
||||
const equipmentRef = ref()
|
||||
const title = ref('')
|
||||
const VITE_FLAG = import.meta.env.VITE_NAME == 'removeMode'
|
||||
//const areaList: any = dictData.areaSelect()
|
||||
const areaList = ref([])
|
||||
const areaList: any = ref([])
|
||||
const userShow: any = ref('Power_Station_Users')
|
||||
|
||||
const form = ref({
|
||||
@@ -187,7 +194,8 @@ const tableStore: any = new TableStore({
|
||||
{ field: 'createBy', title: '创建者' },
|
||||
{ field: 'createTime', title: '创建日期' },
|
||||
{
|
||||
title: '操作',fixed: 'right',
|
||||
title: '操作',
|
||||
fixed: 'right',
|
||||
width: '180',
|
||||
render: 'buttons',
|
||||
buttons: [
|
||||
@@ -258,9 +266,7 @@ const tableStore: any = new TableStore({
|
||||
}
|
||||
],
|
||||
|
||||
loadCallback: () => {
|
||||
|
||||
}
|
||||
loadCallback: () => {}
|
||||
})
|
||||
|
||||
tableStore.table.params.userType = ''
|
||||
@@ -268,8 +274,6 @@ tableStore.table.params.userType = ''
|
||||
provide('tableStore', tableStore)
|
||||
onMounted(() => {
|
||||
tableStore.index()
|
||||
|
||||
|
||||
})
|
||||
const useChange = (e: string) => {
|
||||
userShow.value = uesrList.filter(item => item.id == e)[0].code
|
||||
@@ -278,10 +282,14 @@ const useChange = (e: string) => {
|
||||
const add = async () => {
|
||||
disabled.value = false
|
||||
title.value = '新增承载能力待评估用户'
|
||||
if (VITE_FLAG) {
|
||||
areaList.value = dictData.state.areaTree
|
||||
} else {
|
||||
await getAreaDept().then(res => {
|
||||
areaList.value = JSON.parse(JSON.stringify(res.data))
|
||||
})
|
||||
}
|
||||
|
||||
await getAreaDept().then(res => {
|
||||
areaList.value = JSON.parse(JSON.stringify(res.data))
|
||||
})
|
||||
dialogVisible.value = true
|
||||
}
|
||||
// 保存
|
||||
|
||||
@@ -54,6 +54,9 @@
|
||||
:value="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关键字筛选:">
|
||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template #operation>
|
||||
<el-button type="primary" icon="el-icon-Tickets" @click="makeUp" v-if="!VITE_FLAG">补招</el-button>
|
||||
@@ -285,7 +288,7 @@ const tableStore = new TableStore({
|
||||
// tableStore.table.params.searchEndTime = tableHeaderRef.value.datePickerRef.timeValue[1]
|
||||
},
|
||||
loadCallback: () => {
|
||||
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
|
||||
tableStore.table.data = tree2List(filterTreeByKeyword( tableStore.table.data,tableStore.table.params.searchValue), Math.random() * 1000)
|
||||
tableStore.table.column[0].title = formData.value.statisticalType.name
|
||||
|
||||
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
|
||||
@@ -305,6 +308,7 @@ const tableStore = new TableStore({
|
||||
|
||||
tableStore.table.params.deptIndex = ''
|
||||
tableStore.table.params.filterName = ''
|
||||
tableStore.table.params.searchValue = ''
|
||||
tableStore.table.params.statisticalType = []
|
||||
tableStore.table.params.scale = []
|
||||
tableStore.table.params.manufacturer = []
|
||||
@@ -339,6 +343,78 @@ const tree2List = (list: any, id?: string) => {
|
||||
return arr
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 树形结构按名称筛选:保留匹配节点+所有上级+所有下级,保持原树形层级
|
||||
* @param {Array} treeData - 原始嵌套树形数据(根节点数组)
|
||||
* @param {string} keyword - 筛选关键词(name包含该关键词即匹配)
|
||||
* @returns {Array} 筛选后的嵌套树形数据,保持原层级
|
||||
*/
|
||||
function filterTreeByKeyword(treeData, keyword) {
|
||||
// 关键词为空,直接返回原树(深拷贝,避免修改原数据)
|
||||
if (!keyword || keyword.trim() === '') {
|
||||
return JSON.parse(JSON.stringify(treeData));
|
||||
}
|
||||
const targetKey = keyword.trim();
|
||||
// 存储需要保留的节点ID(匹配节点+所有上级+所有下级)
|
||||
const keepIdSet = new Set();
|
||||
|
||||
// 第一步:递归遍历树形,标记所有需要保留的节点ID
|
||||
const markKeepNodes = (node, parentNodes = []) => {
|
||||
// 1. 若当前节点名称包含关键词,标记自身+所有上级+所有下级
|
||||
const isMatch = node.name && node.name.includes(targetKey);
|
||||
if (isMatch) {
|
||||
// 标记自身
|
||||
keepIdSet.add(node.id);
|
||||
// 标记所有上级父节点
|
||||
parentNodes.forEach(pNode => keepIdSet.add(pNode.id));
|
||||
// 标记所有下级子节点(递归)
|
||||
const markChildren = (childNode) => {
|
||||
keepIdSet.add(childNode.id);
|
||||
if (childNode.children && childNode.children.length) {
|
||||
childNode.children.forEach(markChildren);
|
||||
}
|
||||
};
|
||||
if (node.children && node.children.length) {
|
||||
node.children.forEach(markChildren);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 递归遍历子节点,传递当前节点的上级链(parentNodes + 当前节点)
|
||||
if (node.children && node.children.length) {
|
||||
node.children.forEach(child => markKeepNodes(child, [...parentNodes, node]));
|
||||
}
|
||||
};
|
||||
|
||||
// 遍历根节点,开始标记
|
||||
treeData.forEach(rootNode => markKeepNodes(rootNode));
|
||||
|
||||
// 第二步:递归重构树形,只保留标记过的节点,保持层级
|
||||
const rebuildTree = (node) => {
|
||||
// 若当前节点无需保留,直接返回null
|
||||
if (!keepIdSet.has(node.id)) {
|
||||
return null;
|
||||
}
|
||||
// 深拷贝当前节点,避免修改原数据
|
||||
const newNode = { ...node };
|
||||
// 递归处理子节点,过滤掉无需保留的,只保留有效子节点
|
||||
if (newNode.children && newNode.children.length) {
|
||||
const newChildren = newNode.children.map(child => rebuildTree(child)).filter(Boolean);
|
||||
newNode.children = newChildren;
|
||||
} else {
|
||||
newNode.children = [];
|
||||
}
|
||||
return newNode;
|
||||
};
|
||||
|
||||
// 重构根节点,过滤掉null的根节点
|
||||
const filteredTree = treeData.map(rootNode => rebuildTree(rootNode)).filter(Boolean);
|
||||
return filteredTree;
|
||||
}
|
||||
|
||||
|
||||
// 禁用超过当前日期的选择
|
||||
const disabledDate = (date: Date) => {
|
||||
return date > new Date() // 如果日期大于当前日期,则禁用
|
||||
|
||||
@@ -102,6 +102,13 @@
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关键字筛选:">
|
||||
<el-input
|
||||
v-model="tableStore.table.params.searchValue"
|
||||
clearable
|
||||
placeholder="请输入关键字"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</TableHeader>
|
||||
</div>
|
||||
@@ -132,7 +139,6 @@ import TableStore from '@/utils/tableStore'
|
||||
import Table from '@/components/table/index.vue'
|
||||
import charts from './components/charts.vue'
|
||||
|
||||
|
||||
defineOptions({
|
||||
name: 'device-boot/getOnlineRateData'
|
||||
})
|
||||
@@ -153,7 +159,6 @@ const treeData = ref([])
|
||||
const idArr = ref([])
|
||||
const activeName = ref(0)
|
||||
const getTreeData = async () => {
|
||||
|
||||
await getAreaDept().then(res => {
|
||||
var data = res.data
|
||||
data.forEach(element => {
|
||||
@@ -205,7 +210,8 @@ const tableStore = new TableStore({
|
||||
{
|
||||
title: '网络参数',
|
||||
field: 'ip',
|
||||
align: 'center' ,width:'120px',
|
||||
align: 'center',
|
||||
width: '120px',
|
||||
formatter: function (row) {
|
||||
return row.cellValue ? row.cellValue : '/'
|
||||
}
|
||||
@@ -257,7 +263,7 @@ const tableStore = new TableStore({
|
||||
formatter: function (row) {
|
||||
return row.cellValue == 3.14159 ? '暂无数据' : row.cellValue.toFixed(2)
|
||||
}
|
||||
},
|
||||
}
|
||||
// {
|
||||
// title: '评估',
|
||||
// field: 'valueOver',
|
||||
@@ -299,23 +305,26 @@ const tableStore = new TableStore({
|
||||
// let treeData = []
|
||||
// treeData = tree2List(tableStore.table.data)
|
||||
// tableStore.table.data = JSON.parse(JSON.stringify(treeData))
|
||||
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
|
||||
tableStore.table.data = tree2List(
|
||||
filterTreeByKeyword(tableStore.table.data, tableStore.table.params.searchValue),
|
||||
Math.random() * 1000
|
||||
)
|
||||
|
||||
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
|
||||
setTimeout(() => {
|
||||
activeName.value == 0 && tableRef.value && tableRef.value.getRef().setAllTreeExpand(true)
|
||||
}, 0)
|
||||
},
|
||||
resetCallback: () => {
|
||||
resetCallback: () => {
|
||||
// 重置表单数据到默认值
|
||||
formData.value.statisticalType = classificationData[0]
|
||||
formData.value.deptIndex = treeData.value[0]?.id
|
||||
formData.value.scale = voltageleveloption
|
||||
formData.value.manufacturer = terminaloption
|
||||
formData.value.loadType = interfereoption
|
||||
formData.value.loadType = interfereoption
|
||||
}
|
||||
})
|
||||
|
||||
tableStore.table.params.searchValue = ''
|
||||
tableStore.table.params.deptIndex = ''
|
||||
tableStore.table.params.statisticalType = []
|
||||
tableStore.table.params.scale = []
|
||||
@@ -342,7 +351,73 @@ const tree2List = (list: any, id?: string) => {
|
||||
})
|
||||
// 返回结果数组
|
||||
return arr
|
||||
|
||||
}
|
||||
/**
|
||||
* 树形结构按名称筛选:保留匹配节点+所有上级+所有下级,保持原树形层级
|
||||
* @param {Array} treeData - 原始嵌套树形数据(根节点数组)
|
||||
* @param {string} keyword - 筛选关键词(name包含该关键词即匹配)
|
||||
* @returns {Array} 筛选后的嵌套树形数据,保持原层级
|
||||
*/
|
||||
function filterTreeByKeyword(treeData, keyword) {
|
||||
// 关键词为空,直接返回原树(深拷贝,避免修改原数据)
|
||||
if (!keyword || keyword.trim() === '') {
|
||||
return JSON.parse(JSON.stringify(treeData))
|
||||
}
|
||||
const targetKey = keyword.trim()
|
||||
// 存储需要保留的节点ID(匹配节点+所有上级+所有下级)
|
||||
const keepIdSet = new Set()
|
||||
|
||||
// 第一步:递归遍历树形,标记所有需要保留的节点ID
|
||||
const markKeepNodes = (node, parentNodes = []) => {
|
||||
// 1. 若当前节点名称包含关键词,标记自身+所有上级+所有下级
|
||||
const isMatch = node.name && node.name.includes(targetKey)
|
||||
if (isMatch) {
|
||||
// 标记自身
|
||||
keepIdSet.add(node.id)
|
||||
// 标记所有上级父节点
|
||||
parentNodes.forEach(pNode => keepIdSet.add(pNode.id))
|
||||
// 标记所有下级子节点(递归)
|
||||
const markChildren = childNode => {
|
||||
keepIdSet.add(childNode.id)
|
||||
if (childNode.children && childNode.children.length) {
|
||||
childNode.children.forEach(markChildren)
|
||||
}
|
||||
}
|
||||
if (node.children && node.children.length) {
|
||||
node.children.forEach(markChildren)
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 递归遍历子节点,传递当前节点的上级链(parentNodes + 当前节点)
|
||||
if (node.children && node.children.length) {
|
||||
node.children.forEach(child => markKeepNodes(child, [...parentNodes, node]))
|
||||
}
|
||||
}
|
||||
|
||||
// 遍历根节点,开始标记
|
||||
treeData.forEach(rootNode => markKeepNodes(rootNode))
|
||||
|
||||
// 第二步:递归重构树形,只保留标记过的节点,保持层级
|
||||
const rebuildTree = node => {
|
||||
// 若当前节点无需保留,直接返回null
|
||||
if (!keepIdSet.has(node.id)) {
|
||||
return null
|
||||
}
|
||||
// 深拷贝当前节点,避免修改原数据
|
||||
const newNode = { ...node }
|
||||
// 递归处理子节点,过滤掉无需保留的,只保留有效子节点
|
||||
if (newNode.children && newNode.children.length) {
|
||||
const newChildren = newNode.children.map(child => rebuildTree(child)).filter(Boolean)
|
||||
newNode.children = newChildren
|
||||
} else {
|
||||
newNode.children = []
|
||||
}
|
||||
return newNode
|
||||
}
|
||||
|
||||
// 重构根节点,过滤掉null的根节点
|
||||
const filteredTree = treeData.map(rootNode => rebuildTree(rootNode)).filter(Boolean)
|
||||
return filteredTree
|
||||
}
|
||||
onMounted(() => {})
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@
|
||||
></DatePicker>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-slot:operation></template>
|
||||
<template v-slot:operation>
|
||||
<el-button type="primary" icon="el-icon-Download" @click="exportTemplate">导出</el-button>
|
||||
</template>
|
||||
</TableHeader>
|
||||
|
||||
<GridLayout
|
||||
@@ -68,9 +70,12 @@ import { useRouter, useRoute } from 'vue-router'
|
||||
import { View } from '@element-plus/icons-vue'
|
||||
import { useTimeCacheStore } from '@/stores/timeCache'
|
||||
import { adminBaseRoutePath } from '@/router/static'
|
||||
import { useAdminInfo } from '@/stores/adminInfo'
|
||||
import { dataVerifyExcel } from '@/api/device-boot/line'
|
||||
const { push } = useRouter()
|
||||
const datePickerRef = ref()
|
||||
const router = useRouter()
|
||||
const adminInfo = useAdminInfo()
|
||||
const route = useRoute()
|
||||
const timeCacheStore = useTimeCacheStore()
|
||||
|
||||
@@ -288,7 +293,29 @@ const fetchLayoutData = async () => {
|
||||
// 可以添加错误提示逻辑
|
||||
}
|
||||
}
|
||||
// 导出
|
||||
const exportTemplate = () => {
|
||||
console.log(123)
|
||||
|
||||
dataVerifyExcel({
|
||||
deptId: adminInfo.$state.deptId,
|
||||
searchBeginTime: datePickerRef.value?.timeValue[0],
|
||||
searchEndTime: datePickerRef.value?.timeValue[1]
|
||||
}).then((res: any) => {
|
||||
let blob = new Blob([res], {
|
||||
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||
})
|
||||
|
||||
const url = window.URL.createObjectURL(blob)
|
||||
const link = document.createElement('a') // 创建a标签
|
||||
link.href = url
|
||||
// link.download = "电压暂降事件分析报告"; // 设置下载的文件名
|
||||
link.download = '数据总览' // 设置下载的文件名
|
||||
document.body.appendChild(link)
|
||||
link.click() //执行下载
|
||||
document.body.removeChild(link)
|
||||
})
|
||||
}
|
||||
// 窗口大小变化处理 - 使用防抖
|
||||
const handleResize = useDebounceFn(() => {
|
||||
initRowHeight()
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
style="width: 100%"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="会话超时时间(分钟):" prop="sessionTime">
|
||||
<el-form-item label="会话超时时间(秒):" prop="sessionTime">
|
||||
<el-input-number v-model.number="form.sessionTime" :min="10" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="token刷新时间(分钟):" prop="sessionRefreshTime">
|
||||
<el-form-item label="token刷新时间(秒):" prop="sessionRefreshTime">
|
||||
<el-input-number
|
||||
v-model.number="form.sessionRefreshTime"
|
||||
:min="10"
|
||||
|
||||
Reference in New Issue
Block a user