修改测试问题

This commit is contained in:
guanj
2026-07-02 09:53:56 +08:00
parent 536f22584d
commit 2106e2e9c1
19 changed files with 105 additions and 116 deletions

View File

@@ -45,7 +45,7 @@ import OverLimitDetails from '@/components/cockpit/monitoringPointList/component
import TableHeader from '@/components/table/header/index.vue'
import { uploadReport, getReportUrl } from '@/api/harmonic-boot/cockpit/cockpit'
import { downLoadFile } from '@/api/cs-system-boot/manage'
const prop = defineProps({
w: { type: [String, Number] },
h: { type: [String, Number] },
@@ -110,7 +110,7 @@ const tableStore: any = new TableStore({
minWidth: 150,
render: 'customTemplate',
customTemplate: (row: any) => {
return `<span style='cursor: pointer;text-decoration: underline;'>${row.lineName}</span>`
return `<span style='cursor: pointer;text-decoration: underline;'>${row?.cellValue || '/'}</span>`
}
},
{ title: '设备名称', field: 'devName', minWidth: 150, align: 'center' },
@@ -237,7 +237,7 @@ const tableStore: any = new TableStore({
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
downloadTheReport(row.lineId, row.reportFilePath)
downloadTheReport(row.reportFilePath)
},
disabled: row => {
return row.reportFilePath == null || row.reportFilePath.length == 0
@@ -302,46 +302,32 @@ const cellClickEvent = ({ row, column }: any) => {
}
}
// 下载报告
const downloadTheReport = (lineId: string, name: string) => {
getReportUrl({ lineId: lineId }).then((res: any) => {
ElMessage.info('下载中......')
forceDownloadPdf(res.data, name.split('/').pop() || '')
})
}
const forceDownloadPdf = async (pdfUrl: any, fileName = '文件.pdf') => {
// 下载报告(支持 doc/docx/pdf
const downloadTheReport = async (reportFilePath: string) => {
if (!reportFilePath) {
ElMessage.warning('暂无报告可下载')
return
}
ElMessage.info('下载中......')
try {
// 1. 请求 PDF 并转为 Blob关键绕开浏览器直接解析
const response = await fetch(pdfUrl, {
method: 'GET'
// 若需要鉴权,添加请求头(如 token
})
// 校验响应是否成功
if (!response.ok) throw new Error(`请求失败:${response.status}`)
// 2. 将响应转为 Blob指定类型为 PDF确保兼容性
const blob = await response.blob()
const pdfBlob = new Blob([blob], { type: 'application/pdf' })
// 3. 创建临时 URL 并触发下载
const blobUrl = URL.createObjectURL(pdfBlob)
const a = document.createElement('a')
a.href = blobUrl
a.download = fileName // 此时 Blob URL 是同源的download 必生效
a.style.display = 'none'
document.body.appendChild(a)
a.click() // 触发下载
// 4. 清理资源(避免内存泄漏)
document.body.removeChild(a)
URL.revokeObjectURL(blobUrl)
setTimeout(() => {
ElMessage.success('下载成功')
}, 2000)
} catch (error) {
console.error('下载失败:', error)
// ElMessage.error('文件下载失败,请检查网络或文件地址') // 适配 Element Plus
const resp = (await downLoadFile(reportFilePath)) as unknown as Blob
if (resp?.type === 'application/json') {
ElMessage.error('下载失败')
return
}
const fileName = reportFilePath.split('/').pop() || '报告'
const blob = new Blob([resp], { type: resp.type || 'application/octet-stream' })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = fileName
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
ElMessage.success('下载成功')
} catch (error: any) {
ElMessage.error('下载失败: ' + (error.message || '未知错误'))
}
}

View File

@@ -105,7 +105,7 @@ const tableStore: any = new TableStore({
field: 'sagSource',
minWidth: 120,
align: 'center',
formatter: (row: any) => row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '未知'
formatter: (row: any) => row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '暂无'
},
{
title: '操作',

View File

@@ -131,7 +131,7 @@ const tableStore: any = new TableStore({
field: 'sagSource',
minWidth: 120,
align: 'center',
formatter: (row: any) => row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '未知'
formatter: (row: any) => row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '暂无'
},
{
title: '操作',

View File

@@ -711,7 +711,6 @@ const drawPics = (
if (props.boxoList.systemType == 'ZL' || props.boxoList.systemType == 'YPT') {
const str = waveId.split('e')
const str1 = Number(str[1])
console.log("🚀 ~ drawPics ~ props.wp.channelNames:", props.wp.channelNames)
props.wp.channelNames.forEach((element: string, i: number) => {
if ((str1 == 1 && i == 4) || (str1 == 2 && i == 7) || (str1 == 3 && i == 10)) {

View File

@@ -242,5 +242,5 @@
}
.el-tree > .el-tree-node {
min-width: 100% !important;
display: inline-block !important;
// display: inline-block !important;
}

View File

@@ -15,7 +15,7 @@
</el-form-item> -->
<el-form-item label="关键字筛选">
<el-input maxlength="32" show-word-limit style="width: 240px"
v-model.trim="tableStore.table.params.searchValue" clearable placeholder="请输入设备名称" />
v-model.trim="tableStore.table.params.searchValue" clearable placeholder="请输入设备名称/告警代码" />
</el-form-item>
<el-form-item label="级别">
<el-select v-model.trim="tableStore.table.params.level" placeholder="请选择级别" clearable>

View File

@@ -3,10 +3,8 @@
<template v-slot:select>
<el-form-item label="关键字筛选">
<el-input maxlength="32" show-word-limit
v-model.trim="tableStore.table.params.searchValue"
placeholder="请输入前置服务器名称、ip"
placeholder="请输入服务器/IP/告警代码"
/>
</el-form-item>
<el-form-item label="级别">
@@ -79,9 +77,9 @@ const tableStore = new TableStore({
}
},
{ title: '发生时刻', field: 'startTime', align: 'center', width: 180, sortable: true },
{ title: '前置服务器名称', field: 'lineId', align: 'center', width: 150 },
{ title: '服务器名称', field: 'lineId', align: 'center', width: 150 },
{ title: 'IP', field: 'wavePath', align: 'center', width: 150 },
{ title: '进程号', field: 'clDid', align: 'center', width: 70 },
{ title: '前置服务器ip', field: 'wavePath', align: 'center', width: 150 },
{
title: '事件描述',

View File

@@ -109,7 +109,7 @@ const tableStore = new TableStore({
{ title: '工程名称', field: 'engineeringName', minWidth: 150, align: 'center' },
{
title: '发生位置', field: 'sagSource', minWidth: 120, align: 'center', formatter: (row: any) => {
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '未知'
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '暂无'
}
},
{

View File

@@ -123,7 +123,7 @@ const tableStore = new TableStore({
{ title: '工程名称', field: 'engineeringName', minWidth: 150, align: 'center' },
{
title: '发生位置', field: 'sagSource', minWidth: 120, align: 'center', formatter: (row: any) => {
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '未知'
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '暂无'
}
},

View File

@@ -698,7 +698,7 @@ const nodeClick = async (e: anyObj, node?: any) => {
if (e == undefined) {
return (loading.value = false)
}
if (e?.pname.includes('便携')) {
if (e?.pname?.includes?.('便携')) {
deviceType.value = '1'
} else {
deviceType.value = '2'

View File

@@ -121,7 +121,7 @@ const tableStore: any = new TableStore({
{
title: '发生位置', field: 'sagSource', minWidth: 120, align: 'center', formatter: (row: any) => {
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '未知'
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '暂无'
}
},

View File

@@ -56,77 +56,77 @@
<div class="view_bot">
<vxe-table border height="" :data="realList" :column-config="{ resizable: true, tooltip: true }"
:tooltip-config="{ enterable: true }">
<vxe-colgroup align="center" :title="`电压有效值(${voltageUnit})`">
<vxe-column align="center" field="vRmsA" title="A相"></vxe-column>
<vxe-column align="center" field="vRmsB" title="B相"></vxe-column>
<vxe-column align="center" field="vRmsC" title="C相"></vxe-column>
<vxe-colgroup align="center" :title="`电压有效值(${voltageUnit})`" >
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vRmsA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vRmsB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vRmsC" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="电流有效值(A)">
<vxe-column align="center" field="iRmsA" title="A相"></vxe-column>
<vxe-column align="center" field="iRmsB" title="B相"></vxe-column>
<vxe-column align="center" field="iRmsC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="iRmsA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="iRmsB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="iRmsC" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="基波电压相位(°)">
<vxe-column align="center" field="v1AngA" title="A相"></vxe-column>
<vxe-column align="center" field="v1AngB" title="B相"></vxe-column>
<vxe-column align="center" field="v1AngC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="v1AngA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="v1AngB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="v1AngC" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="基波电流相位(°)">
<vxe-column align="center" field="i1AngA" title="A相"></vxe-column>
<vxe-column align="center" field="i1AngB" title="B相"></vxe-column>
<vxe-column align="center" field="i1AngC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="i1AngA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="i1AngB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="i1AngC" title="C相"></vxe-column>
</vxe-colgroup>
</vxe-table>
<br />
<vxe-table border height="" :data="realList" :column-config="{ resizable: true, tooltip: true }"
:tooltip-config="{ enterable: true }">
<vxe-column align="center" field="freq" width="140" 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="iUnbalance" title="电流不平衡度(%)"></vxe-column>
<vxe-column align="center" field="freq"how-overflow-tooltip min-width="160" title="频率(Hz)"></vxe-column>
<vxe-column align="center" field="freqDev"how-overflow-tooltip min-width="160" title="频率偏差(Hz)"></vxe-column>
<vxe-column align="center"how-overflow-tooltip min-width="160" field="vUnbalance" title="电压不平衡度(%)"></vxe-column>
<vxe-column align="center"how-overflow-tooltip min-width="160" field="iUnbalance" title="电流不平衡度(%)"></vxe-column>
<vxe-colgroup align="center" :title="`基波电压幅值(${voltageUnit})`">
<vxe-column align="center" field="v1A" title="A相"></vxe-column>
<vxe-column align="center" field="v1B" title="B相"></vxe-column>
<vxe-column align="center" field="v1C" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="v1A" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="v1B" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="v1C" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="基波电流幅值(A)">
<vxe-column align="center" field="i1A" title="A相"></vxe-column>
<vxe-column align="center" field="i1B" title="B相"></vxe-column>
<vxe-column align="center" field="i1C" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="i1A" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="i1B" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="i1C" title="C相"></vxe-column>
</vxe-colgroup>
</vxe-table>
<br />
<vxe-table border height="" :data="realList" :column-config="{ resizable: true, tooltip: true }"
:tooltip-config="{ enterable: true }">
<vxe-colgroup align="center" title="电压偏差(%)">
<vxe-column align="center" field="vDevA" title="A相"></vxe-column>
<vxe-column align="center" field="vDevB" title="B相"></vxe-column>
<vxe-column align="center" field="vDevC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vDevA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vDevB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vDevC" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="电压总谐波畸变率(%)">
<vxe-column align="center" field="vThdA" title="A相"></vxe-column>
<vxe-column align="center" field="vThdB" title="B相"></vxe-column>
<vxe-column align="center" field="vThdC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vThdA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vThdB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="vThdC" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="电流总谐波畸变率(%)">
<vxe-column align="center" field="iThdA" title="A相"></vxe-column>
<vxe-column align="center" field="iThdB" title="B相"></vxe-column>
<vxe-column align="center" field="iThdC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="iThdA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="iThdB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="iThdC" title="C相"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" :title="`有功功率(${powerUnit})`">
<vxe-column align="center" field="pA" title="A相"></vxe-column>
<vxe-column align="center" field="pB" title="B相"></vxe-column>
<vxe-column align="center" field="pC" title="C相"></vxe-column>
<vxe-column align="center" field="pTot" title="总"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pTot" title="总"></vxe-column>
</vxe-colgroup>
</vxe-table>
<br />
<vxe-table border height="" :data="realList" :column-config="{ resizable: true, tooltip: true }"
:tooltip-config="{ enterable: true }">
<vxe-colgroup align="center" :title="`无功功率(${reactivePowerUnit})`">
<vxe-column align="center" field="qA" title="A相"></vxe-column>
<vxe-column align="center" field="qB" title="B相"></vxe-column>
<vxe-column align="center" field="qC" title="C相">
<vxe-column align="center" how-overflow-tooltip min-width="80" field="qA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="qB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="qC" title="C相">
<template #default="{ row }">
{{ row.qC }}
</template>
@@ -134,22 +134,22 @@
<vxe-column align="center" field="qTot" title="总"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" :title="`视在功率(${apparentPowerUnit})`">
<vxe-column align="center" field="sA" title="A相"></vxe-column>
<vxe-column align="center" field="sB" title="B相"></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" how-overflow-tooltip min-width="80" field="sA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="sB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="sC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="sTot" title="总"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="视在功率因数(P/S)">
<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="pfC" title="C相"></vxe-column>
<vxe-column align="center" field="pfTot" title="总"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pfA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pfB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pfC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="pfTot" title="总"></vxe-column>
</vxe-colgroup>
<vxe-colgroup align="center" title="位移功率因数(P/S1)">
<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="dpfC" title="C相"></vxe-column>
<vxe-column align="center" field="dpfTot" title="总"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="dpfA" title="A相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="dpfB" title="B相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="dpfC" title="C相"></vxe-column>
<vxe-column align="center" how-overflow-tooltip min-width="80" field="dpfTot" title="总"></vxe-column>
</vxe-colgroup>
</vxe-table>
</div>

View File

@@ -124,7 +124,7 @@ const tableStore = new TableStore({
{
title: '发生位置', field: 'sagSource', minWidth: 120, align: 'center', formatter: (row: any) => {
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '未知'
return row.cellValue == 1 ? '上游' : row.cellValue == 2 ? '下游' : '暂无'
}
},
{

View File

@@ -18,7 +18,7 @@
</el-form-item>
<el-form-item label="关键字筛选">
<el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue"
placeholder="数据名称别名展示名称" clearable></el-input>
placeholder="数据名称/别名/展示名称" clearable></el-input>
</el-form-item>
</template>
<template #operation>

View File

@@ -69,7 +69,7 @@ const nodeClick = (node: any) => {
if(node==undefined){
return
}
if (node?.pname.includes('便携')) {
if (node?.pname?.includes?.('便携')) {
activeTab.value = '3'
showTab.value = false
nextTick(() => {

View File

@@ -173,7 +173,7 @@ const open = ref((row: any) => {
}
// item.children = item.newList
}
if (item.name.includes('便携式')) {
if (item.name?.includes?.('便携式')) {
if (vv.level === 1) {
vv.disabled = false
} else {
@@ -182,7 +182,7 @@ const open = ref((row: any) => {
}
if (vv.children && vv.children.length != 0) {
vv.children.forEach((kk: any, kks: any) => {
if (item.name.includes('便携式') && kk.level === 2) {
if (item.name?.includes?.('便携式') && kk.level === 2) {
kk.disabled = true
vv.children.splice(kks, 1)
}

View File

@@ -1,6 +1,6 @@
<template>
<div class="report-sheet-panel">
<TableHeader ref="tableHeaderRef" datePicker :show-reset="false">
<TableHeader ref="tableHeaderRef" datePicker :showSearch="false">
<template #select>
<el-form-item label="模板策略">
<el-select
@@ -19,6 +19,7 @@
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Search" type="primary" @click="loadSheetData">查询</el-button>
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">报表生成</el-button>
</template>
</TableHeader>
@@ -96,7 +97,12 @@ const changeType = (val: any) => {
}
const loadSheetData = () => {
if (!props.active || !props.lineFlag || !props.dotList?.id || !template.value?.id) {
if(!props.lineFlag){
tableStore.table.loading = false
ElMessage.warning('治理监测点暂不支持出报表!')
return
}
if (!props.active || !props.dotList?.id || !template.value?.id) {
tableStore.table.loading = false
return
}

View File

@@ -26,7 +26,7 @@
</el-form-item>
<el-form-item label="关键字筛选">
<el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue"
placeholder="根据变电站,终端编号,型号网络参数查询" />
placeholder="请输入变电站/终端编号/型号/网络参数" />
</el-form-item>
</template>
</TableHeader>

View File

@@ -24,7 +24,7 @@
</el-form-item>
<el-form-item label="关键字筛选">
<el-input maxlength="32" show-word-limit v-model.trim="tableStore.table.params.searchValue"
placeholder="根据变电站,终端编号,型号网络参数查询" />
placeholder="请是输入变电站/终端编号/型号/网络参数查询" />
</el-form-item>
</template>
</TableHeader>