修改测试问题

This commit is contained in:
guanj
2026-01-15 15:59:13 +08:00
parent 054d84778b
commit 5ceb9be9e2
20 changed files with 535 additions and 471 deletions

View File

@@ -1,7 +1,14 @@
<template> <template>
<div> <div>
<!--F47曲线 --> <!--F47曲线 -->
<TableHeader ref="TableHeaderRef" :showReset="false" :timeKeyList="prop.timeKey" @selectChange="selectChange" datePicker v-if="fullscreen"></TableHeader> <TableHeader
ref="TableHeaderRef"
:showReset="false"
:timeKeyList="prop.timeKey"
@selectChange="selectChange"
datePicker
v-if="fullscreen"
></TableHeader>
<el-descriptions class="mt2" direction="vertical" :column="4" border> <el-descriptions class="mt2" direction="vertical" :column="4" border>
<el-descriptions-item align="center" label="名称">{{ data.name }}</el-descriptions-item> <el-descriptions-item align="center" label="名称">{{ data.name }}</el-descriptions-item>
<el-descriptions-item align="center" label="事件总数">{{ data.gs }}</el-descriptions-item> <el-descriptions-item align="center" label="事件总数">{{ data.gs }}</el-descriptions-item>
@@ -44,7 +51,7 @@ const prop = defineProps({
h: { type: [String, Number] }, h: { type: [String, Number] },
width: { type: [String, Number] }, width: { type: [String, Number] },
height: { type: [String, Number] }, height: { type: [String, Number] },
timeKey: { type: Array as () => string[] }, timeKey: { type: Array as () => string[] },
timeValue: { type: Object }, timeValue: { type: Object },
interval: { type: Number } interval: { type: Number }
}) })
@@ -162,11 +169,16 @@ const tableStore: any = new TableStore({
yAxis: [ yAxis: [
{ {
type: 'value', type: 'value',
max: function (value: any) { // max: function (value: any) {
return value.max + 20 // return value.max + 20
// },
max: function (value) {
// 先取原始最大值+20再向上取整到最近的10的倍数确保刻度够用且规整
return Math.ceil((value.max + 20) / 10) * 10
}, },
splitNumber: 10, // splitNumber: 10,
minInterval: 0.1, // interval: 10,
// minInterval: 10,
name: '%' name: '%'
} }
], ],
@@ -449,7 +461,7 @@ const handleTolerableEventClick = async (row: any) => {
// waveFormAnalysisRef.value.setHeight(999, 130, 1.6666666) // waveFormAnalysisRef.value.setHeight(999, 130, 1.6666666)
} }
}) })
const messageInstance = ElMessage.info(`正在加载,请稍等...`) const messageInstance = ElMessage.info(`正在加载,请稍等...`)
await analyseWave(row.value[3]) //eventId await analyseWave(row.value[3]) //eventId
.then(res => { .then(res => {
row.loading1 = false row.loading1 = false
@@ -474,7 +486,7 @@ const handleTolerableEventClick = async (row: any) => {
}) })
nextTick(() => { nextTick(() => {
waveFormAnalysisRef.value && waveFormAnalysisRef.value.setHeight(999, 130, 1.6666666) waveFormAnalysisRef.value && waveFormAnalysisRef.value.setHeight(999, 130, 1.6666666)
waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value, true) waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value, true)
}) })
} }

View File

@@ -66,7 +66,7 @@
<el-option <el-option
v-for="vv in item.countOptions" v-for="vv in item.countOptions"
:key="vv" :key="vv"
:label="vv" :label="item.name.includes('间谐波') ? vv - 0.5 : vv"
:value="vv" :value="vv"
></el-option> ></el-option>
</el-select> </el-select>

View File

@@ -66,7 +66,7 @@
<el-option <el-option
v-for="vv in item.countOptions" v-for="vv in item.countOptions"
:key="vv" :key="vv"
:label="vv" :label="item.name.includes('间谐波') ? vv - 0.5 : vv"
:value="vv" :value="vv"
></el-option> ></el-option>
</el-select> </el-select>

View File

@@ -66,7 +66,7 @@
<el-option <el-option
v-for="vv in item.countOptions" v-for="vv in item.countOptions"
:key="vv" :key="vv"
:label="vv" :label="item.name.includes('间谐波') ? vv - 0.5 : vv"
:value="vv" :value="vv"
></el-option> ></el-option>
</el-select> </el-select>

View File

@@ -214,8 +214,8 @@ onMounted(() => {
overflow-x: auto; overflow-x: auto;
overflow-y: hidden; overflow-y: hidden;
margin-right: var(--ba-main-space); margin-right: var(--ba-main-space);
scrollbar-width: none; // scrollbar-width: none;
// overflow-x: auto;
&::-webkit-scrollbar { &::-webkit-scrollbar {
height: 5px; height: 5px;
} }

View File

@@ -26,7 +26,7 @@ router.beforeEach((to, from, next) => {
const token = adminInfo.getToken() const token = adminInfo.getToken()
// token 不存在 // token 不存在
if (token === null || token === '') { if (token === null || token === '') {
ElMessage.error('您还没有登录,请先登录') // ElMessage.error('您还没有登录,请先登录')
next('/login') next('/login')
} else { } else {
next() next()

View File

@@ -44,7 +44,8 @@ const calculateValue = (o: number, value: number, num: number, isMin: boolean) =
} }
if (base === 0.1) { if (base === 0.1) {
return parseFloat(calculatedValue.toFixed(1)) // return parseFloat(calculatedValue.toFixed(1))
return Math.ceil(calculatedValue * 10) / 10
} else if (isMin) { } else if (isMin) {
return Math.floor(calculatedValue / base) * base return Math.floor(calculatedValue / base) * base
} else { } else {

View File

@@ -1,5 +1,5 @@
<template> <template>
<div ref="refheader" v-if="!isWaveCharts"> <div ref="refheader" v-show="!isWaveCharts" style="width: 100%;">
<TableHeader datePicker showExport> <TableHeader datePicker showExport>
<template v-slot:select> <template v-slot:select>
<el-form-item label="数据来源"> <el-form-item label="数据来源">

View File

@@ -7,15 +7,15 @@
<el-tab-pane label="前置告警" name="2"> <el-tab-pane label="前置告警" name="2">
<Front v-if="activeName == '2'" :deviceTree="deviceTree" :key="key" /> <Front v-if="activeName == '2'" :deviceTree="deviceTree" :key="key" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="稳态越限告警" name="3"> <!-- <el-tab-pane label="稳态越限告警" name="3">
<Steady v-if="activeName == '3'" :deviceTree="deviceTree" :key="key" /> <Steady v-if="activeName == '3'" :deviceTree="deviceTree" :key="key" />
</el-tab-pane> </el-tab-pane> -->
<el-tab-pane label="暂态事件" name="4"> <el-tab-pane label="暂态事件" name="4">
<Transient v-if="activeName == '4'" :deviceTree="deviceTree" :key="key" /> <Transient v-if="activeName == '4'" :deviceTree="deviceTree" :key="key" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="异常事件" name="5"> <!-- <el-tab-pane label="异常事件" name="5">
<Abnormal v-if="activeName == '5'" :deviceTree="deviceTree" :key="key" /> <Abnormal v-if="activeName == '5'" :deviceTree="deviceTree" :key="key" />
</el-tab-pane> </el-tab-pane> -->
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
@@ -31,7 +31,7 @@ defineOptions({
name: 'govern/alarm/index' name: 'govern/alarm/index'
}) })
const deviceTree = ref([]) const deviceTree = ref([])
const activeName = ref('1') const activeName = ref('0')
const key = ref(0) const key = ref(0)
getDeviceTree().then(res => { getDeviceTree().then(res => {
// res.data.forEach((item: any) => { // res.data.forEach((item: any) => {
@@ -49,6 +49,7 @@ getDeviceTree().then(res => {
// }) // })
deviceTree.value = res.data deviceTree.value = res.data
key.value += 1 key.value += 1
activeName.value = '1'
}) })
onMounted(() => { }) onMounted(() => { })

View File

@@ -781,7 +781,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="form-item" class="form-item"
label="设备容量(MW):" label="设备容量(MVA):"
:prop="'lineInfoList[' + lIndex + '].devCapacity'" :prop="'lineInfoList[' + lIndex + '].devCapacity'"
:rules="{ required: true, message: '请输入设备容量', trigger: 'blur' }" :rules="{ required: true, message: '请输入设备容量', trigger: 'blur' }"
> >
@@ -803,7 +803,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="form-item" class="form-item"
label="协议容量(MW):" label="协议容量(MVA):"
:prop="'lineInfoList[' + lIndex + '].protocolCapacity'" :prop="'lineInfoList[' + lIndex + '].protocolCapacity'"
:rules="{ required: true, message: '请输入协议容量', trigger: 'blur' }" :rules="{ required: true, message: '请输入协议容量', trigger: 'blur' }"
> >
@@ -820,7 +820,7 @@
pageStatus == 2) pageStatus == 2)
) )
" "
placeholder="请输入协议容量(MW)" placeholder="请输入协议容量(MVA)"
></el-input> ></el-input>
</el-form-item> </el-form-item>

View File

@@ -4,8 +4,8 @@
<div class="harmonic_select" v-if="!loading"> <div class="harmonic_select" v-if="!loading">
<el-form :model="searchForm" id="history_select"> <el-form :model="searchForm" id="history_select">
<el-form-item label="稳态指标"> <el-form-item label="稳态指标">
<el-select multiple collapse-tags collapse-tags-tooltip v-model.trim="searchForm.index" <el-select multiple collapse-tags collapse-tags-tooltip filterable v-model.trim="searchForm.index"
placeholder="请选择统计指标" :multiple-limit="3" value-key="id"> placeholder="请选择统计指标" :multiple-limit="3" value-key="id">
<el-option v-for="(item, index) in indexOptions" :label="item.name" :key="index" <el-option v-for="(item, index) in indexOptions" :label="item.name" :key="index"
:value="item"></el-option> :value="item"></el-option>
</el-select> </el-select>
@@ -347,7 +347,7 @@ const init = () => {
// } // }
// }, // },
boundaryGap: false, boundaryGap: false,
data: xAixsTimeList.value // data: xAixsTimeList.value
}, },
yAxis: { yAxis: {
// type: 'value', // type: 'value',

View File

@@ -1,7 +1,9 @@
<template> <template>
<div class="view"> <div class="view">
<TableHeader datePicker ref="headerRef" v-if="!isWaveCharts" :showReset="false"></TableHeader> <div v-show="!isWaveCharts">
<Table ref="tableRef" v-if="!isWaveCharts" /> <TableHeader datePicker ref="headerRef" :showReset="false"></TableHeader>
<Table ref="tableRef" />
</div>
<waveFormAnalysis <waveFormAnalysis
v-loading="loading" v-loading="loading"
v-if="isWaveCharts" v-if="isWaveCharts"
@@ -62,8 +64,7 @@ const tableStore: any = new TableStore({
title: '相别', title: '相别',
minWidth: 80, minWidth: 80,
formatter: (row: any) => { formatter: (row: any) => {
row.cellValue = row.cellValue ? row.cellValue : '/' return row.cellValue || '/'
return row.cellValue
} }
}, },
{ {
@@ -71,9 +72,9 @@ const tableStore: any = new TableStore({
title: '持续时间(s)', title: '持续时间(s)',
minWidth: 110, minWidth: 110,
formatter: (row: any) => { formatter: (row: any) => {
console.log('row.cellValue', row.cellValue) console.log('🚀 ~ row.cellValue:', row.cellValue)
row.cellValue = row.cellValue ? row.cellValue.toFixed(2) : '/'
return row.cellValue return row.cellValue ? (row.cellValue - 0).toFixed(2) : '/'
}, },
sortable: true sortable: true
}, },
@@ -91,7 +92,8 @@ const tableStore: any = new TableStore({
} }
}, },
{ {
title: '操作', fixed: 'right', title: '操作',
fixed: 'right',
width: 180, width: 180,
render: 'buttons', render: 'buttons',
@@ -196,7 +198,6 @@ const tableStore: any = new TableStore({
tableStore.table.params.devId = tableParams.value.devId tableStore.table.params.devId = tableParams.value.devId
tableStore.table.params.lineId = tableParams.value.lineId tableStore.table.params.lineId = tableParams.value.lineId
tableStore.table.params.list = tableParams.value.list tableStore.table.params.list = tableParams.value.list
console.log('🚀 ~ ableParams.value:', tableParams.value)
tableStore.table.params.type = 3 tableStore.table.params.type = 3
}, },
loadCallback: () => {} loadCallback: () => {}

View File

@@ -69,8 +69,8 @@
<br /> <br />
<vxe-table border height="" :data="realList" :column-config="{ resizable: true, tooltip: true }" <vxe-table border height="" :data="realList" :column-config="{ resizable: true, tooltip: true }"
:tooltip-config="{ enterable: true }"> :tooltip-config="{ enterable: true }">
<vxe-column align="center" field="freqDev" width="140" title="频率(Hz)"></vxe-column> <vxe-column align="center" field="freq" width="140" title="频率(Hz)"></vxe-column>
<vxe-column align="center" field="freq" width="120" title="频率偏差(Hz)"></vxe-column> <vxe-column align="center" field="freqDev" width="120" title="频率偏差(Hz)"></vxe-column>
<vxe-column align="center" width="180" field="vUnbalance" title="电压不平衡度(%)"></vxe-column> <vxe-column align="center" width="180" field="vUnbalance" title="电压不平衡度(%)"></vxe-column>
<vxe-column align="center" width="180" field="iUnbalance" title="电流不平衡度(%)"></vxe-column> <vxe-column align="center" width="180" field="iUnbalance" title="电流不平衡度(%)"></vxe-column>
<vxe-colgroup align="center" :title="`基波电压幅值(${voltageUnit})`"> <vxe-colgroup align="center" :title="`基波电压幅值(${voltageUnit})`">
@@ -128,13 +128,13 @@
<vxe-column align="center" field="sC" title="C相"></vxe-column> <vxe-column align="center" field="sC" title="C相"></vxe-column>
<vxe-column align="center" field="sTot" title="总"></vxe-column> <vxe-column align="center" field="sTot" title="总"></vxe-column>
</vxe-colgroup> </vxe-colgroup>
<vxe-colgroup align="center" title="功率因数"> <vxe-colgroup align="center" title="视在功率因数">
<vxe-column align="center" field="pfA" title="A相"></vxe-column> <vxe-column align="center" field="pfA" title="A相"></vxe-column>
<vxe-column align="center" field="pfB" title="B相"></vxe-column> <vxe-column align="center" field="pfB" title="B相"></vxe-column>
<vxe-column align="center" field="pfC" title="C相"></vxe-column> <vxe-column align="center" field="pfC" title="C相"></vxe-column>
<vxe-column align="center" field="pfTot" title="总"></vxe-column> <vxe-column align="center" field="pfTot" title="总"></vxe-column>
</vxe-colgroup> </vxe-colgroup>
<vxe-colgroup align="center" title="基波功率因数"> <vxe-colgroup align="center" title="位移功率因数">
<vxe-column align="center" field="dpfA" title="A相"></vxe-column> <vxe-column align="center" field="dpfA" title="A相"></vxe-column>
<vxe-column align="center" field="dpfB" title="B相"></vxe-column> <vxe-column align="center" field="dpfB" title="B相"></vxe-column>
<vxe-column align="center" field="dpfC" title="C相"></vxe-column> <vxe-column align="center" field="dpfC" title="C相"></vxe-column>

View File

@@ -12,6 +12,7 @@
multiple multiple
:multiple-limit="3" :multiple-limit="3"
collapse-tags collapse-tags
filterable
collapse-tags-tooltip collapse-tags-tooltip
v-model="searchForm.index" v-model="searchForm.index"
placeholder="请选择统计指标" placeholder="请选择统计指标"
@@ -67,7 +68,7 @@
<el-option <el-option
v-for="vv in item.countOptions" v-for="vv in item.countOptions"
:key="vv" :key="vv"
:label="vv" :label="item.name.includes('间谐波') ? vv - 0.5 : vv"
:value="vv" :value="vv"
></el-option> ></el-option>
</el-select> </el-select>
@@ -157,7 +158,13 @@ const countOptions: any = ref([])
// Harmonic_Type // Harmonic_Type
// portable-harmonic // portable-harmonic
const legendDictList: any = ref([]) const legendDictList: any = ref([])
queryByCode(props?.TrendList?.lineType == 0 ? 'apf-harmonic' : 'portable-harmonic').then(res => { queryByCode(
props?.TrendList?.lineType == 0
? 'apf-harmonic'
: props?.TrendList?.conType == 1
? 'portable-harmonic-jx'
: 'portable-harmonic'
).then(res => {
queryCsDictTree(res.data.id).then(item => { queryCsDictTree(res.data.id).then(item => {
//排序 //排序
indexOptions.value = item.data.sort((a: any, b: any) => { indexOptions.value = item.data.sort((a: any, b: any) => {
@@ -185,15 +192,15 @@ queryByCode(props?.TrendList?.lineType == 0 ? 'apf-harmonic' : 'portable-harmoni
if (kk.harmStart && kk.harmEnd) { if (kk.harmStart && kk.harmEnd) {
range(0, 0, 0) range(0, 0, 0)
if (kk.showName == '间谐波电压含有率') { // if (kk.showName == '间谐波电压含有率') {
countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map( // countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map(
(item: any) => { // (item: any) => {
return item - 0.5 // return item - 0.5
} // }
) // )
} else { // } else {
countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1) countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1)
} // }
if (!countDataCopy.value[index].count || countDataCopy.value[index].count.length == 0) { if (!countDataCopy.value[index].count || countDataCopy.value[index].count.length == 0) {
countDataCopy.value[index].count = countDataCopy.value[index].countOptions[0] countDataCopy.value[index].count = countDataCopy.value[index].countOptions[0]
} }
@@ -232,7 +239,7 @@ const init = async () => {
loading.value = true loading.value = true
// 选择指标的时候切换legend内容和data数据 // 选择指标的时候切换legend内容和data数据
let list: any = [] let list: any = []
echartsData.value={} echartsData.value = {}
legendDictList.value?.selectedList?.map((item: any) => { legendDictList.value?.selectedList?.map((item: any) => {
searchForm.value.index.map((vv: any) => { searchForm.value.index.map((vv: any) => {
if (item.dataType == vv) { if (item.dataType == vv) {
@@ -260,7 +267,7 @@ const init = async () => {
let frequencys: any = null let frequencys: any = null
countData.value.map((item: any, index: any) => { countData.value.map((item: any, index: any) => {
if (item.name.includes('间谐波电压')) { if (item.name.includes('间谐波电压')) {
frequencys = item.count + 0.5 frequencys = item.count //+ 0.5
} else { } else {
frequencys = item.count frequencys = item.count
} }

View File

@@ -13,50 +13,67 @@
> >
模版数据分组 模版数据分组
</el-button> --> </el-button> -->
<el-button icon="el-icon-Refresh" v-if="showButtom" @click="handleRestartDevice" type="primary" <el-button
:loading="deviceRestartLoading"> icon="el-icon-Refresh"
v-if="showButtom"
@click="handleRestartDevice"
type="primary"
:loading="deviceRestartLoading"
>
装置重启 装置重启
</el-button> </el-button>
</template> </template>
<el-descriptions-item label="名称"> <el-descriptions-item label="名称">
{{ deviceData.name }} {{ deviceData.name || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="类型"> <el-descriptions-item label="类型">
{{ echoName(deviceData.devType, devTypeOptions) }} {{ echoName(deviceData.devType, devTypeOptions) || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="接入方式"> <el-descriptions-item label="接入方式">
{{ deviceData.devAccessMethod }} {{ deviceData.devAccessMethod || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="网络设备ID"> <el-descriptions-item label="网络设备ID">
{{ deviceData.ndid }} {{ deviceData.ndid || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="型号"> <el-descriptions-item label="型号">
{{ echoName(deviceData.devModel, devModelOptions) }} {{ echoName(deviceData.devModel, devModelOptions) || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="首次接入日期"> <el-descriptions-item label="首次接入日期">
{{ deviceData.time }} {{ deviceData.time || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="应用程序版本号"> <el-descriptions-item label="应用程序版本号">
{{ deviceData.appVersion }} {{ deviceData.appVersion || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="应用程序发布日期"> <el-descriptions-item label="应用程序发布日期">
{{ deviceData.appDate }} {{ deviceData.appDate || '/' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="应用程序校验码"> <el-descriptions-item label="应用程序校验码">
{{ deviceData.appCheck }} {{ deviceData.appCheck || '/' }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<div style="position: relative"> <div style="position: relative">
<el-tabs
v-model.trim="dataSet"
<el-tabs v-model.trim="dataSet" type="border-card" class="device-manage-box-card" type="border-card"
@tab-click="handleClick"> class="device-manage-box-card"
<el-tab-pane lazy :label="item.name" :name="item.id" v-for="(item, index) in deviceData.dataSetList" @tab-click="handleClick"
:key="index"></el-tab-pane> >
<el-tab-pane
lazy
:label="item.name"
:name="item.id"
v-for="(item, index) in deviceData.dataSetList"
:key="index"
></el-tab-pane>
<div :style="{ height: tableHeight }" v-loading="tableLoading"> <div :style="{ height: tableHeight }" v-loading="tableLoading">
<vxe-table v-bind="defaultAttribute" :data="tableData" height="auto" ref="xTableRef" <vxe-table
style="width: 100%"> v-bind="defaultAttribute"
:data="tableData"
height="auto"
ref="xTableRef"
style="width: 100%"
>
<vxe-column type="seq" title="序号" width="80"></vxe-column> <vxe-column type="seq" title="序号" width="80"></vxe-column>
<vxe-column field="name" title="数据名称"></vxe-column> <vxe-column field="name" title="数据名称"></vxe-column>
<vxe-column field="phasic" title="相别"></vxe-column> <vxe-column field="phasic" title="相别"></vxe-column>
@@ -65,11 +82,11 @@
<vxe-column field="startTimes" title="开始次数"></vxe-column> <vxe-column field="startTimes" title="开始次数"></vxe-column>
<vxe-column field="endTimes" title="结束次数"></vxe-column> <vxe-column field="endTimes" title="结束次数"></vxe-column>
</vxe-table> </vxe-table>
</div> </div>
</el-tabs> </el-tabs>
<el-button icon="el-icon-Download" type="primary" @click="exportData" class="export-btn">导出</el-button> <el-button icon="el-icon-Download" type="primary" @click="exportData" class="export-btn">
导出
</el-button>
</div> </div>
</div> </div>
<el-empty v-else description="请选择设备" class="device-manage-right" /> <el-empty v-else description="请选择设备" class="device-manage-right" />
@@ -93,12 +110,10 @@ import { ref } from 'vue'
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
import { passwordConfirm } from '@/api/user-boot/user' import { passwordConfirm } from '@/api/user-boot/user'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { import { reStartDevice } from '@/api/cs-device-boot/fileService'
reStartDevice,
} from '@/api/cs-device-boot/fileService'
import { defaultAttribute } from '@/components/table/defaultAttribute' import { defaultAttribute } from '@/components/table/defaultAttribute'
const pageHeight = mainHeight(20) const pageHeight = mainHeight(20)
const adminInfo = useAdminInfo() const adminInfo = useAdminInfo()
const showButtom = ref(adminInfo.roleCode.includes('operation_manager') || adminInfo.roleCode.includes('root')) const showButtom = ref(adminInfo.roleCode.includes('operation_manager') || adminInfo.roleCode.includes('root'))
const loading = ref(true) const loading = ref(true)
@@ -107,7 +122,7 @@ const tableLoading = ref(false)
const getGroupLoading = ref(false) const getGroupLoading = ref(false)
const deviceData = ref<any>(null) const deviceData = ref<any>(null)
const dataSet = ref('') const dataSet = ref('')
const devTypeOptions = ref([]) const devTypeOptions: any = ref([])
const devModelOptions = ref([]) const devModelOptions = ref([])
const tableData = ref([]) const tableData = ref([])
const tableHeight = mainHeight(260).height const tableHeight = mainHeight(260).height
@@ -119,7 +134,6 @@ const deviceType = ref('0')
const deviceTypeChange = (val: any, obj: any) => { const deviceTypeChange = (val: any, obj: any) => {
deviceType.value = val deviceType.value = val
nodeClick(obj) nodeClick(obj)
} }
// 树节点点击 // 树节点点击
const nodeClick = (e: anyObj) => { const nodeClick = (e: anyObj) => {
@@ -159,8 +173,8 @@ const handleClick = () => {
}) })
}, 100) }, 100)
} }
queryByCode('Device_Type').then(res => { queryByCode('Device_Type').then(async res => {
queryCsDictTree(res.data.id).then(res => { await queryCsDictTree(res.data.id).then(res => {
devTypeOptions.value = res.data.map((item: any) => { devTypeOptions.value = res.data.map((item: any) => {
return { return {
value: item.id, value: item.id,
@@ -169,7 +183,7 @@ queryByCode('Device_Type').then(res => {
} }
}) })
}) })
queryByid(res.data.id).then(res => { await queryByid(res.data.id).then(res => {
devModelOptions.value = res.data.map((item: any) => { devModelOptions.value = res.data.map((item: any) => {
return { return {
value: item.id, value: item.id,
@@ -178,9 +192,23 @@ queryByCode('Device_Type').then(res => {
} }
}) })
}) })
await queryByCode('DEV_CLD').then(k => {
devTypeOptions.value.push(k.data)
return queryCsDictTree(k.data.id).then(s => {
let list = s.data.map((item: any) => {
return {
value: item.id,
label: item.name,
...item
}
})
devModelOptions.value.push(...list)
})
})
}) })
const echoName = (value: any, arr: any[]) => { const echoName = (value: any, arr: any[]) => {
return arr.find(item => item.value == value)?.label return arr.find(item => item.id == value)?.name
} }
const openGroup = () => { const openGroup = () => {
if (!dataSet.value) { if (!dataSet.value) {
@@ -217,18 +245,16 @@ const handleRestartDevice = () => {
customClass: 'customInput', customClass: 'customInput',
inputType: 'text', inputType: 'text',
beforeClose: (action, instance, done) => { beforeClose: (action, instance, done) => {
if (action === 'confirm') { if (action === 'confirm') {
if (instance.inputValue == null) { if (instance.inputValue == null) {
return ElMessage.warning('请输入密码') return ElMessage.warning('请输入密码')
} else if (instance.inputValue?.length > 32) { } else if (instance.inputValue?.length > 32) {
return ElMessage.warning('密码长度不能超过32位,当前密码长度为' + instance.inputValue.length) return ElMessage.warning('密码长度不能超过32位,当前密码长度为' + instance.inputValue.length)
} else { } else {
done(); done()
} }
} else { } else {
done(); done()
} }
} }
}) })
@@ -241,18 +267,17 @@ const handleRestartDevice = () => {
passwordConfirm(value) passwordConfirm(value)
.then((resp: any) => { .then((resp: any) => {
if (resp.code == 'A0000') { if (resp.code == 'A0000') {
reStartDevice({ nDid: nDid.value }).then((res: any) => { reStartDevice({ nDid: nDid.value })
deviceRestartLoading.value = false .then((res: any) => {
ElMessage({ message: res.message, type: 'success', duration: 3000 }) deviceRestartLoading.value = false
ElMessage({ message: res.message, type: 'success', duration: 3000 })
}).catch(e => { })
.catch(e => {
deviceRestartLoading.value = false deviceRestartLoading.value = false
}) })
} }
}) })
.catch(e => { .catch(e => {
deviceRestartLoading.value = false deviceRestartLoading.value = false
}) })
} }
@@ -262,8 +287,6 @@ const handleRestartDevice = () => {
}) })
} }
const exportData = () => { const exportData = () => {
xTableRef.value.exportData({ xTableRef.value.exportData({
filename: deviceData.value.dataSetList.filter((item: any) => item.id == dataSet.value)[0]?.name, // 文件名字 filename: deviceData.value.dataSetList.filter((item: any) => item.id == dataSet.value)[0]?.name, // 文件名字
sheetName: 'Sheet1', sheetName: 'Sheet1',

View File

@@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<Table ref="tableRef" v-if="!isWaveCharts" /> <Table ref="tableRef" v-show="!isWaveCharts" />
<waveFormAnalysis v-loading="loading" v-if="isWaveCharts" ref="waveFormAnalysisRef" <waveFormAnalysis v-loading="loading" v-if="isWaveCharts" ref="waveFormAnalysisRef"
@handleHideCharts="isWaveCharts = false" :wp="wp" /> @handleHideCharts="isWaveCharts = false" :wp="wp" />
</div> </div>

View File

@@ -83,12 +83,12 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="起始时间" width="160"> <el-descriptions-item label="起始时间" width="160">
<span style="width: 140px; overflow: hidden; display: block"> <span style="width: 140px; overflow: hidden; display: block">
{{ item.startTime }} {{ item.startTime ||'/' }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="结束时间" width="160"> <el-descriptions-item label="结束时间" width="160">
<span style="width: 140px; overflow: hidden; display: block"> <span style="width: 140px; overflow: hidden; display: block">
{{ item.endTime }} {{ item.endTime||'/' }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="监测位置" width="160"> <el-descriptions-item label="监测位置" width="160">
@@ -121,6 +121,7 @@
<el-form-item for="-" label="统计指标"> <el-form-item for="-" label="统计指标">
<el-select <el-select
style="min-width: 200px" style="min-width: 200px"
filterable
collapse-tags collapse-tags
collapse-tags-tooltip collapse-tags-tooltip
v-model.trim="searchForm.index" v-model.trim="searchForm.index"
@@ -266,6 +267,11 @@ const dictData = useDictData()
defineOptions({ defineOptions({
// name: 'govern/device/planData/index' // name: 'govern/device/planData/index'
}) })
const props = defineProps({
TrendList: {
type: Array
}
})
const childTab = ref('0') const childTab = ref('0')
const num = ref(0) const num = ref(0)
const config = useConfig() const config = useConfig()
@@ -313,53 +319,60 @@ const countOptions: any = ref([])
// Harmonic_Type // Harmonic_Type
// portable-harmonic // portable-harmonic
const legendDictList: any = ref([]) const legendDictList: any = ref([])
queryByCode('portable-harmonic').then(res => { // queryByCode('portable-harmonic').then(res => {
queryCsDictTree(res.data.id).then(item => { const getCode = (conType: string) => {
indexOptions.value = item.data.sort((a: any, b: any) => { let code = volConTypeList.find(vv => {
return a.sort - b.sort return vv.id == conType
})?.code
queryByCode(code == 'Star_Triangle' ? 'portable-harmonic-jx' : 'portable-harmonic').then(res => {
queryCsDictTree(res.data.id).then(item => {
indexOptions.value = item.data.sort((a: any, b: any) => {
return a.sort - b.sort
})
searchForm.value.index[0] = indexOptions.value[0].id
// searchForm.value.index = indexOptions.value[0].id
}) })
searchForm.value.index[0] = indexOptions.value[0].id queryStatistical(res.data.id).then(vv => {
// searchForm.value.index = indexOptions.value[0].id legendDictList.value = vv.data
}) indexOptions.value.map((item: any, index: any) => {
queryStatistical(res.data.id).then(vv => { if (!countDataCopy.value[index]) {
legendDictList.value = vv.data countDataCopy.value[index] = {
indexOptions.value.map((item: any, index: any) => { index: item.id,
if (!countDataCopy.value[index]) { countOptions: [],
countDataCopy.value[index] = { count: [],
index: item.id, name: indexOptions.value.find((vv: any) => {
countOptions: [], return vv.id == item.id
count: [], })?.name
name: indexOptions.value.find((vv: any) => { }
return vv.id == item.id
})?.name
} }
} legendDictList.value?.selectedList?.map((vv: any, vvs: any) => {
legendDictList.value?.selectedList?.map((vv: any, vvs: any) => { //查找相等的指标
//查找相等的指标 if (item.id == vv.dataType) {
if (item.id == vv.dataType) { vv.eleEpdPqdVOS.map((kk: any, kks: any) => {
vv.eleEpdPqdVOS.map((kk: any, kks: any) => { if (kk.harmStart && kk.harmEnd) {
if (kk.harmStart && kk.harmEnd) { range(0, 0, 0)
range(0, 0, 0)
if (kk.showName == '间谐波电压含有率') { // if (kk.showName == '间谐波电压含有率') {
countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map( // countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1).map(
(item: any) => { // (item: any) => {
return item - 0.5 // return item - 0.5
} // }
) // )
} else { // } else {
countDataCopy.value[index].countOptions = range(kk.harmStart, kk.harmEnd, 1) 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]
}
} }
if (!countDataCopy.value[index].count || countDataCopy.value[index].count.length == 0) { })
countDataCopy.value[index].count = countDataCopy.value[index].countOptions[0] }
} })
}
})
}
}) })
}) })
}) })
}) }
// getCode(1)
const activeName: any = ref() const activeName: any = ref()
const activeColName: any = ref('0') const activeColName: any = ref('0')
const deviceData: any = ref([]) const deviceData: any = ref([])
@@ -368,11 +381,15 @@ const schemeTreeRef = ref()
const historyDevId: any = ref('') const historyDevId: any = ref('')
const chartTitle: any = ref('') const chartTitle: any = ref('')
//点击测试项切换树节点 //点击测试项切换树节点
const handleClickTabs = () => { const handleClickTabs = async () => {
searchForm.value.index = [indexOptions.value[0].id] await getCode(deviceData.value.records.filter(item => item.id == activeName.value)[0].volConType)
historyDevId.value = activeName.value await setTimeout(() => {
schemeTreeRef.value.setCheckedNode(activeName.value) searchForm.value.index = [indexOptions.value[0].id]
setTimeout(() => { historyDevId.value = activeName.value
schemeTreeRef.value.setCheckedNode(activeName.value)
}, 100)
await setTimeout(() => {
init(true) init(true)
transientRef.value && transientRef.value.init() transientRef.value && transientRef.value.init()
}, 100) }, 100)
@@ -391,6 +408,7 @@ const nodeClick = async (e: anyObj) => {
await getTestRecordInfo(id) await getTestRecordInfo(id)
.then(async res => { .then(async res => {
deviceData.value = res.data deviceData.value = res.data
if (res.data.records.length == 1) { if (res.data.records.length == 1) {
activeName.value = res.data.records[0].id activeName.value = res.data.records[0].id
} else { } else {
@@ -406,6 +424,7 @@ const nodeClick = async (e: anyObj) => {
activeName.value = res.data.records[0].id activeName.value = res.data.records[0].id
} }
} }
getCode(deviceData.value.records.filter(item => item.id == activeName.value)[0].volConType)
// if (searchForm.value.index.length == 0) { // if (searchForm.value.index.length == 0) {
// searchForm.value.index = [indexOptions.value[0].id] // searchForm.value.index = [indexOptions.value[0].id]
@@ -547,7 +566,7 @@ const init = (flag: boolean) => {
let frequencys: any = null let frequencys: any = null
countData.value.map((item: any, index: any) => { countData.value.map((item: any, index: any) => {
if (item.name.includes('间谐波电压')) { if (item.name.includes('间谐波电压')) {
frequencys = item.count + 0.5 frequencys = item.count //+ 0.5
} else { } else {
frequencys = item.count frequencys = item.count
} }
@@ -574,8 +593,8 @@ const init = (flag: boolean) => {
}).then(res => { }).then(res => {
if (res.data.length == 0) { if (res.data.length == 0) {
titleList.value = '(未绑定数据)' titleList.value = '(未绑定数据)'
}else{ } else {
titleList.value = '' titleList.value = ''
} }
chartTitle.value = chartTitle.value + titleList.value chartTitle.value = chartTitle.value + titleList.value
}) })

View File

@@ -109,10 +109,10 @@
:title="dialogTitle" :title="dialogTitle"
v-model="dialogFormVisible" v-model="dialogFormVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
width="700px" width="500px"
:before-close="resetForm" :before-close="resetForm"
> >
<el-form :model="formData" label-width="120px" :rules="rules" ref="ruleFormRef"> <el-form :model="formData" label-width="120px" :rules="rules" ref="ruleFormRef" class="form-one">
<el-form-item label="名称:" prop="name"> <el-form-item label="名称:" prop="name">
<el-input <el-input
v-model="formData.name" v-model="formData.name"
@@ -178,8 +178,8 @@
</el-dialog> </el-dialog>
<!-- 绑定进程号 --> <!-- 绑定进程号 -->
<el-dialog draggable title="绑定进程号" v-model="popUps" :close-on-click-modal="false" width="400px"> <el-dialog draggable title="绑定进程号" v-model="popUps" :close-on-click-modal="false" width="400px" >
<el-form :model="bindProcessForm" ref="bindProcessFormRef" label-width="80px" :rules="rules2"> <el-form :model="bindProcessForm" ref="bindProcessFormRef" label-width="80px" :rules="rules2" class="form-one">
<el-form-item label="前置机" prop="nodeId"> <el-form-item label="前置机" prop="nodeId">
<el-select <el-select
v-model="bindProcessForm.nodeId" v-model="bindProcessForm.nodeId"

View File

@@ -44,7 +44,7 @@
<div class="tableBox" v-if="show"> <div class="tableBox" v-if="show">
<vxe-table border auto-resize height="230px" :data="tableData" ref="tableRef"> <vxe-table border auto-resize height="230px" :data="tableData" ref="tableRef">
<vxe-column type="seq" title="序号" align="center" width="80px"></vxe-column> <vxe-column type="seq" title="序号" align="center" width="80px"></vxe-column>
<vxe-column field="date" align="center" title="时间" width="200px"></vxe-column> <vxe-column field="date" align="center" sortable title="时间" width="200px"></vxe-column>
<vxe-column field="name" align="center" title="监测点名" width="200px"></vxe-column> <vxe-column field="name" align="center" title="监测点名" width="200px"></vxe-column>
<vxe-column field="address" align="center" title="事件描述"></vxe-column> <vxe-column field="address" align="center" title="事件描述"></vxe-column>
</vxe-table> </vxe-table>