修改浙江无线测试用例bug

This commit is contained in:
GGJ
2024-12-17 20:57:07 +08:00
parent e10ca83ec5
commit 21831dda90
32 changed files with 873 additions and 254 deletions

View File

@@ -4,7 +4,7 @@
<!-- @init="nodeClick" -->
<PointTree @node-click="nodeClick" @pointTypeChange="pointTypeChange"></PointTree>
<div class="device-control-right" v-if="deviceData">
<el-descriptions title="监测点信息" class="mb10" :column="3" border>
<el-descriptions title="监测点信息" class="mb10" width="180" :column="3" border>
<template #extra>
<!-- <el-button v-if="deviceType == '1'" type="primary" @click="handleDownLoadTemplate">
模版下载
@@ -21,24 +21,49 @@
</el-button>
</template>
<el-descriptions-item label="名称">
{{ deviceData.name ? deviceData.name : '/' }}
{{ devData.name || '/' }}
</el-descriptions-item>
<el-descriptions-item label="测量间隔" width="160">
{{ devData.lineInterval }}分钟
</el-descriptions-item>
<el-descriptions-item label="电压等级" width="160">
{{ devData.volGrade }}kV
</el-descriptions-item>
<el-descriptions-item label="接线方式" width="160">
{{ devData.conType == 0 ? '星型接线' : devData.conType == 1 ? '角型接线' : devData.conType == 2 ? 'V型接线' : '/' }}
</el-descriptions-item>
<!-- <el-descriptions-item label="安装位置" width="160">
{{ devData.position || '/' }}
</el-descriptions-item> -->
<el-descriptions-item label="PT变比" width="160">
{{ devData.ptRatio || '/' }}
</el-descriptions-item>
<el-descriptions-item label="CT变比" width="160">
{{ devData.ctRatio || '/' }}
</el-descriptions-item>
<!-- <el-descriptions-item label="名称">
{{ devData.name ? devData.name : '/' }}
</el-descriptions-item>
<el-descriptions-item label="类型">
{{ echoName(deviceData.devType, devTypeOptions) }}
{{ echoName(devData.devType, devTypeOptions) }}
</el-descriptions-item>
<el-descriptions-item label="接入方式">
{{ deviceData.devAccessMethod ? deviceData.devAccessMethod : '/' }}
{{ devData.devAccessMethod ? devData.devAccessMethod : '/' }}
</el-descriptions-item>
<el-descriptions-item label="网络设备ID">
{{ deviceData.ndid ? deviceData.ndid : '/' }}
{{ devData.ndid ? devData.ndid : '/' }}
</el-descriptions-item>
<el-descriptions-item label="型号">
{{ echoName(deviceData.devModel, devModelOptions) }}
{{ echoName(devData.devModel, devModelOptions) }}
</el-descriptions-item>
<el-descriptions-item label="接入日期">
{{ deviceData.time ? deviceData.time : '/' }}
</el-descriptions-item>
{{ devData.time ? devData.time : '/' }}
</el-descriptions-item> -->
</el-descriptions>
<el-tabs v-model="dataSet" type="border-card" class="device-control-box-card" @tab-click="handleClick">
<el-tab-pane lazy :label="item.name" :name="item.id" v-for="(item, index) in deviceData.dataSetList"
@@ -110,15 +135,15 @@
</el-select>
</el-form-item>
<el-form-item label="数据来源" v-if="dataSet.includes('_items')">
<el-select v-model="formInline.targetType">
<el-select v-model="formInline.dataSource" placeholder="请选择数据来源" clearable>
<el-option v-for="item in dataSource" :key="item.id" :label="item.name"
<el-option v-for="item in dataSourceList" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="关键字" v-if="!dataSet.includes('_')">
<el-input maxlength="32" show-word-limit v-model="searchValue"
autocomplete="off" clearable @input="handleSearch" placeholder="请输入关键词"></el-input>
<el-input maxlength="32" show-word-limit v-model="searchValue" autocomplete="off" clearable
@input="handleSearch" placeholder="请输入关键词"></el-input>
</el-form-item>
</template>
<template #operation>
@@ -139,7 +164,7 @@
height: realTimeFlag ? '30px' : '40px',
alignItems: realTimeFlag ? 'flex-end' : 'center'
}" v-if="dataSet.includes('_realtimedata') && mqttMessage && mqttMessage.dataTime && sonTab != 2">
<p>
<p class="mb5">
<span v-if="trendDataTime && !realTimeFlag">数据时间:{{ trendDataTime }}</span>
<span v-if="realTimeFlag">数据时间:{{ mqttMessage.dataTime }}</span>
</p>
@@ -360,7 +385,7 @@
<div v-if="!tableData" style="height: 42px"></div>
</el-tabs>
</div>
<el-empty v-else description="请选择设备" class="device-control-right" />
<el-empty v-else description="请添加设备" class="device-control-right" />
<Detail ref="detailRef" :detail="detail" @close="detail = null" :dataLevel="dataLevel" v-if="detail"></Detail>
<!-- 离线数据导入组件 -->
<!-- <offLineDataImport ref="offLineDataImportRef"></offLineDataImport> -->
@@ -379,6 +404,7 @@ import {
getHarmRealData,
getOverLimitData,
queryDictType,
getById
} from '@/api/cs-device-boot/EquipmentDelivery'
import { deviceHisData, deviceRtData, realTimeData, getTestData } from '@/api/cs-device-boot/csGroup'
@@ -394,6 +420,7 @@ import offLineDataImport from './offLineDataImport/index.vue'
import Event from './tabs/event.vue'
import nearRealTimeData from './nearRealTimeData.vue'
import testItemRecords from './testItemRecords.vue'
import { useDictData } from '@/stores/dictData'
import { useRouter } from 'vue-router'
import TableHeader from '@/components/table/header/index.vue'
import { useAdminInfo } from '@/stores/adminInfo'
@@ -401,7 +428,7 @@ import { Histogram, TrendCharts, DataLine, DataAnalysis, Odometer, Monitor, Time
import analysisList from './analysisList/index.vue'
import mqtt from 'mqtt'
defineOptions({
name: 'govern/device/control'
// name: 'govern/device/control'
})
const adminInfo = useAdminInfo()
const pageHeight = mainHeight(20)
@@ -432,8 +459,16 @@ const formInline = reactive({
id: '',
lineId: '',
targetType: '',
dataSource: '',
dataLevel: 'Secondary'
})
const dataSourceList = [{
id: '0',
name: '补召'
}, {
id: '1',
name: '在线监测'
}]
const oddAndEvenList = [
{
value: '3',
@@ -455,6 +490,11 @@ const detail = ref<any>(null)
const realTimeFlag = ref(true)
//实时数据子菜单
const sonTab = ref()
const dictData = useDictData()
//电压等级
const voltageLevelList = dictData.getBasicData('Dev_Voltage_Stand')
//接线方式
const volConTypeList = dictData.getBasicData('Dev_Connect')
//实时录波
// const handleRecordWaves = () => {
// realTimeFlag.value = false
@@ -645,12 +685,17 @@ const handleaddDevice = () => {
}
//树节点点击事件
const deviceId: any = ref('')
const devData: any = ref({})
const lineId: any = ref('')
const dataLevel: any = ref('')
const dataSource = ref([])
const nodeClick = async (e: anyObj) => {
// console.log("🚀 ~ nodeClick ~ e:", e)
if (e.level == 2) return
console.log("🚀 ~ nodeClick ~ e:", e)
if (e==undefined || e.level == 2){
return loading.value = false
}
searchValue.value = ''
await queryDictType({
lineId: e?.id,
@@ -676,6 +721,10 @@ const nodeClick = async (e: anyObj) => {
formInline.lineId = e.level == 3 ? e.id : e.children[0].id
await getDeviceData(e.level == 3 ? e.pid : e.id, 'history', e.level == 3 ? e.id : e.children[0].id)
.then((res: any) => {
getById({ lineId: e.level == 3 ? e.id : e.children[0].id }).then((res: any) => {
devData.value = res.data
})
deviceData.value = res.data
formInline.dataLevel = res.data.dataLevel
@@ -784,6 +833,7 @@ const getRealDataMqttMsg = async () => {
// JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
// )
let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
// console.log("🚀 ~ mqttRef.value.on ~ obj:", obj)
if (lineId.value != obj.lineId && adminInfo.userIndex != obj.userId) return
// console.log("🚀 ~ mqttRef.value.on ~ obj:", obj)
// console.log("🚀 ~ mqttRef.value.on ~ formInline.dataLevel:", obj.dataLevel, formInline.dataLevel)

View File

@@ -2,7 +2,7 @@
<template>
<div class="home">
<div class="home_header">
<el-form-item label="值类型选择">
<!-- <el-form-item label="值类型选择">
<el-select @change="changeView" v-model="value" placeholder="请选择值类型">
<el-option
v-for="(item, index) in options"
@@ -11,27 +11,27 @@
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-radio-group v-model="value" @change="changeView">
<el-radio-button label="一次值" :value="1" />
<el-radio-button label="二次值" :value="2" />
</el-radio-group>
<el-form-item label="">
<el-button @click="handleBack" :icon="Back">返回</el-button>
</el-form-item>
</div>
<el-tabs class="home_body" type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="瞬时波形" name="ssbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'">
<shushiboxi
v-if="isWp && wp && activeName == 'ssbx'"
:value="value"
:boxoList="boxoList"
:wp="wp"
></shushiboxi>
<shushiboxi v-if="isWp && wp && activeName == 'ssbx' && showBoxi" :value="value" :boxoList="boxoList"
:wp="wp">
</shushiboxi>
</el-tab-pane>
<el-tab-pane label="RMS波形" name="rmsbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'">
<rmsboxi
v-if="isWp && wp && activeName == 'rmsbx'"
:value="value"
:boxoList="boxoList"
:wp="wp"
></rmsboxi>
<rmsboxi v-if="isWp && wp && activeName == 'rmsbx' && showBoxi" :value="value" :boxoList="boxoList"
:wp="wp">
</rmsboxi>
</el-tab-pane>
</el-tabs>
</div>
@@ -127,7 +127,7 @@ const handleClick = (tab: any, event: any) => {
const handleBack = () => {
emit('handleHideCharts')
}
onMounted(() => {})
onMounted(() => { })
defineExpose({ getWpData })
</script>
<style lang="scss" scoped>

View File

@@ -1,6 +1,6 @@
<template>
<div class="view">
<TableHeader datePicker ref="headerRef" v-if="!isWaveCharts"></TableHeader>
<TableHeader datePicker ref="headerRef" v-if="!isWaveCharts" :showReset="false"></TableHeader>
<Table ref="tableRef" v-if="!isWaveCharts" />
<waveFormAnalysis
v-if="isWaveCharts"

View File

@@ -49,7 +49,8 @@
</TableHeader>
</div>
<div class="history_chart" :style="pageHeight" v-loading="loading">
<MyEchart ref="historyChart" :options="echartsData" />
<MyEchart ref="historyChart" :options="echartsData" v-if="showEchart" />
<el-empty :style="pageHeight" v-else description="暂无数据" />
</div>
</div>
</template>
@@ -76,7 +77,7 @@ const props = defineProps({
}
})
console.log("🚀 ~ props:", props.TrendList)
const showEchart = ref(true)
//电压等级
const voltageLevelList = dictData.getBasicData('Dev_Voltage_Stand')
//接线方式
@@ -132,6 +133,41 @@ queryByCode(props?.TrendList?.lineType == 0 ? 'apf-harmonic' : 'portable-harmoni
})
queryStatistical(res.data.id).then(vv => {
legendDictList.value = vv.data
indexOptions.value.map((item: any, index: any) => {
if (!countDataCopy.value[index]) {
countDataCopy.value[index] = {
index: item.id,
countOptions: [],
count: [],
name: indexOptions.value.find((vv: any) => {
return vv.id == item.id
})?.name
}
}
legendDictList.value?.selectedList?.map((vv: any, vvs: any) => {
//查找相等的指标
if (item.id == vv.dataType) {
vv.eleEpdPqdVOS.map((kk: any, kks: any) => {
if (kk.harmStart && kk.harmEnd) {
range(0, 0, 0)
if (kk.showName == '间谐波电压含有率') {
countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map(
(item: any) => {
return item - 0.5
}
)
} else {
countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1)
}
if (!countDataCopy.value[index].count || countDataCopy.value[index].count.length == 0) {
countDataCopy.value[index].count = countDataCopy.value[index].countOptions[0]
}
}
})
}
})
})
})
})
const activeName: any = ref()
@@ -171,7 +207,7 @@ const init = async () => {
//颜色数组
const colorList = color
//选择的指标使用方法处理
formatCountOptions(searchForm.value.index)
formatCountOptions()
//查询历史趋势
historyDataList.value = []
chartTitle.value = ''
@@ -212,9 +248,15 @@ const init = async () => {
}
if (obj.devId && obj.list.length != 0) {
try {
showEchart.value = true
await getTabsDataByType(obj)
.then((res: any) => {
if (res.code == 'A0000') {
if (res.data.length == 0) {
loading.value = false
showEchart.value = false
return
}
historyDataList.value = res.data
let chartsList = JSON.parse(JSON.stringify(res.data))
echartsData.value = {}
@@ -578,47 +620,56 @@ const handleExport = async () => {
return
}
const countData: any = ref([])
const countDataCopy: any = ref([])
//根据选择的指标处理谐波次数
const formatCountOptions = (list: any) => {
const formatCountOptions = () => {
countData.value = []
if (list.length != 0) {
list.map((item: any, index: any) => {
if (!countData.value[index]) {
countData.value[index] = {
index: item,
countOptions: [],
count: '',
name: indexOptions.value.find((vv: any) => {
return vv.id == item
})?.name
}
}
legendDictList.value?.selectedList?.map((vv: any, vvs: any) => {
//查找相等的指标
if (item == vv.dataType) {
vv.eleEpdPqdVOS.map((kk: any, kks: any) => {
if (kk.harmStart && kk.harmEnd) {
range(0, 0, 0)
countData.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1)
if (kk.showName == '间谐波电压含有率') {
countData.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map(
(item: any) => {
return item - 0.5
}
)
} else {
countData.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1)
}
//添加默认值
if (countData.value[index].count.length == 0) {
countData.value[index].count = countData.value[index].countOptions[0]
}
}
})
if (searchForm.value.index.length != 0) {
searchForm.value.index.forEach((item: any, index: any) => {
countDataCopy.value.forEach((vv: any, vvs: any) => {
if (vv.index == item) {
countData.value.push(vv)
}
})
})
// list.map((item: any, index: any) => {
// if (!countData.value[index]) {
// countData.value[index] = {
// index: item,
// countOptions: [],
// count: '',
// name: indexOptions.value.find((vv: any) => {
// return vv.id == item
// })?.name
// }
// }
// legendDictList.value?.selectedList?.map((vv: any, vvs: any) => {
// //查找相等的指标
// if (item == vv.dataType) {
// vv.eleEpdPqdVOS.map((kk: any, kks: any) => {
// if (kk.harmStart && kk.harmEnd) {
// range(0, 0, 0)
// countData.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1)
// if (kk.showName == '间谐波电压含有率') {
// countData.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map(
// (item: any) => {
// return item - 0.5
// }
// )
// } else {
// countData.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1)
// }
// //添加默认值
// if (countData.value[index].count.length == 0) {
// countData.value[index].count = countData.value[index].countOptions[0]
// }
// }
// })
// }
// })
// })
countData.value.map((item: any, key: any) => {
if (item.name == '谐波电流有效值') {
item.name = '谐波电流次数'
@@ -651,7 +702,7 @@ const onIndexChange = (val: any) => {
})
searchForm.value.index = pp
flag.value = true
formatCountOptions()
// if (val.length == 0) {
// searchForm.value.index = [indexOptions.value[0].id]
@@ -660,23 +711,23 @@ const onIndexChange = (val: any) => {
watch(
() => searchForm.value.index,
(val: any, oldval: any) => {
if (val) {
setTimeout(() => {
formatCountOptions(val)
}, 100)
if (val == 0) {
countData.value = []
}
countData.value.map((item: any, key: any) => {
if (
val.findIndex((vv: any) => {
return vv == item.index
}) == -1
) {
countData.value.splice(key, 1)
}
})
}
// if (val) {
// setTimeout(() => {
// formatCountOptions(val)
// }, 100)
// if (val == 0) {
// countData.value = []
// }
// countData.value.map((item: any, key: any) => {
// if (
// val.findIndex((vv: any) => {
// return vv == item.index
// }) == -1
// ) {
// countData.value.splice(key, 1)
// }
// })
// }
},
{
deep: true,

View File

@@ -35,12 +35,11 @@ const column: any = ref([
{ field: 'itemName', title: '数据来源', width: '100px' },
{ field: 'statisticalInterval', title: '时间间隔(分钟)', width: '120px', },
{ field: 'voltageLevel', title: '电压等级', width: '100px', sortable: true },
{ field: 'volConType', title: ' 电压接线方式', width: '120px', sortable: true },
{
field: 'pt', title: 'PT变比', width: '100px',
field: 'pt', title: 'PT', width: '100px',
},
{ field: 'ct', title: 'CT变比', width: '100px', },
{ field: 'ct', title: 'CT', width: '100px', },
{ field: 'capacitySi', title: '用户协议容量(MVA)', width: '140px', },
{ field: 'capacitySt', title: '供电设备容量(MVA)', width: '140px', },
{ field: 'capacitySscb', title: '基准短路容量(MVA)', width: '140px', },
@@ -58,10 +57,6 @@ const setData = (data: any) => {
const formatter = (row: any) => {
if (row.column.field == 'voltageLevel') {
return row.cellValue == null ? '/' : voltageLevelList.filter((item: any) => item.id == row.cellValue)[0]?.name
} else if (row.column.field == 'pt') {
return row.row.pt == null ? '/' : (row.row.pt + '/' + row.row.pt1)
} else if (row.column.field == 'ct') {
return row.row.ct == null ? '/' : (row.row.ct + '/' + row.row.ct1)
} else if (row.column.field == 'volConType') {
return row.cellValue == null ? '/' : volConTypeList.filter((item: any) => item.id == row.cellValue)[0]?.name
} else {
@@ -77,8 +72,22 @@ const remove = (row: any) => {
confirmButtonText: '确认',
cancelButtonText: '取消',
customClass: 'customInput',
inputType: 'text'
inputType: 'text',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
if (instance.inputValue == null) {
return ElMessage.warning('请输入密码')
} else if (instance.inputValue?.length > 32) {
return ElMessage.warning('密码长度不能超过32位,当前密码长度为' + instance.inputValue.length)
} else {
done();
}
} else {
done();
}
}
}).then(({ value }) => {
passwordConfirm(value).then(res => {
console.log('密码正确');