Merge remote-tracking branch 'origin/master'

This commit is contained in:
2024-05-16 13:44:24 +08:00
15 changed files with 3275 additions and 583 deletions

View File

@@ -194,7 +194,13 @@ body,
.cn-operate-dialog .el-dialog__body .el-scrollbar { .cn-operate-dialog .el-dialog__body .el-scrollbar {
// padding-right: 60px; // padding-right: 60px;
} }
.el-dialog__footer {
padding: 15px;
box-shadow: var(--el-box-shadow);
width: 100%;
bottom: 0;
}
.cn-operate-dialog .el-dialog__footer { .cn-operate-dialog .el-dialog__footer {
padding: 15px; padding: 15px;
box-shadow: var(--el-box-shadow); box-shadow: var(--el-box-shadow);
@@ -379,14 +385,13 @@ body,
//阿里变形字体 //阿里变形字体
@font-face { @font-face {
font-family: "nablaRegular"; font-family: 'nablaRegular';
src: url('../assets/font/ali/Nabla_Regular.woff') format('woff'), src: url('../assets/font/ali/Nabla_Regular.woff') format('woff'),
url("../assets/font/ali/Nabla_Regular.woff2") format('woff2'); url('../assets/font/ali/Nabla_Regular.woff2') format('woff2');
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
} }
@font-face { @font-face {
font-family: 'AlimamaDongFangDaKai'; font-family: 'AlimamaDongFangDaKai';
src: url('../assets/font/ali/AlimamaDongFangDaKai-Regular.woff') format('woff'), src: url('../assets/font/ali/AlimamaDongFangDaKai-Regular.woff') format('woff'),

View File

@@ -83,7 +83,7 @@
></el-input> ></el-input>
</div> --> </div> -->
<template #footer v-if="title != '查看计划'"> <template #footer v-if="title != '查看计划'">
<div class="dialog-footer pd10"> <div class="dialog-footer ">
<el-button type="primary" @click="submitFn">提交</el-button> <el-button type="primary" @click="submitFn">提交</el-button>
<el-button @click="cancelFn">取消</el-button> <el-button @click="cancelFn">取消</el-button>
</div> </div>

View File

@@ -0,0 +1,352 @@
<template>
<div class='default-main'>
<el-descriptions :column='2' border>
<el-descriptions-item label='填报人'>
{{ detailData.reporter }}
</el-descriptions-item>
<el-descriptions-item label='填报日期'>
{{ formatDate(detailData.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label='填报部门'>
{{ detailData.orgName }}
</el-descriptions-item>
<el-descriptions-item label='工程投产日期'>
{{ formatDate(detailData.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label='所属地市'>
{{ detailData.city }}
</el-descriptions-item>
<el-descriptions-item label='用户状态'>
{{
userStateList.find(item => {
return item.value == detailData.userStatus
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label='工程名'>
{{ detailData.projectName }}
</el-descriptions-item>
<!--文件地址-->>
<el-descriptions-item label='终端台账信息'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.preliminaryDesignDescription.url'>
{{ proviteData?.preliminaryDesignDescription.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label='监测点台账信息'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.predictionEvaluationReport.url'>
{{ proviteData?.predictionEvaluationReport.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label='验收检验报告单'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.predictionEvaluationReviewOpinions.url'>
{{ proviteData?.predictionEvaluationReviewOpinions.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label='验收检验报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.sensitiveDevices.url'>{{ proviteData?.sensitiveDevices.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='型式实验报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.antiInterferenceReport.url'>{{ proviteData?.antiInterferenceReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='出厂检验报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.powerQualityReport.url'>{{ proviteData?.powerQualityReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='性能检测报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.antiInterferenceReport.url'>{{ proviteData?.antiInterferenceReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='信息安全检测报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.powerQualityReport.url'>{{ proviteData?.powerQualityReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='其他附件'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.additionalAttachments.url'>{{ proviteData?.additionalAttachments.name }}</a>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script lang='ts' setup>
import { onMounted, ref, reactive } from 'vue'
import { useRoute } from 'vue-router'
import { formatDate } from '@/utils/formatTime'
import { propTypes } from '@/utils/propTypes'
import { getUserReportById } from '@/api/supervision-boot/userReport/form'
import { getDictTreeById } from '@/api/system-boot/dictTree'
import { useDictData } from '@/stores/dictData'
import { getFileNameAndFilePath } from '@/api/system-boot/file'
import { Link } from '@element-plus/icons-vue'
defineOptions({ name: 'BpmUserReportDetail' })
const { query } = useRoute() // 查询参数
const props = defineProps({
id: propTypes.string.def(undefined)
})
const detailLoading = ref(false) // 表单的加载中
const detailData = ref<any>({}) // 详情数据
const queryId = query.id as unknown as string // 从 URL 传递过来的 id 编号
//用户性质数组
const userTypeList = reactive([
{
label: '新建电网工程',
value: '0'
},
{
label: '扩建电网工程',
value: '1'
},
{
label: '新建非线性负荷用户',
value: '2'
},
{
label: '扩建非线性负荷用户',
value: '3'
},
{
label: '新建新能源发电站',
value: '4'
},
{
label: '扩建新能源发电站',
value: '5'
},
{
label: '敏感及重要用户',
value: '6'
}
])
//用户状态数组
const userStateList = reactive([
{
label: '可研',
value: '0'
},
{
label: '建设',
value: '1'
},
{
label: '运行',
value: '2'
},
{
label: '退运',
value: '3'
}
])
const dictData = useDictData()
//字典获取所属地市
const areaOptionList = dictData.getBasicData('jibei_area')
//字典获取敏感电能质量指标
const energyQualityIndexList = dictData.getBasicData('Indicator_Type')
//字典获取行业类型
const industryList = dictData.getBasicData('industry_type_jb')
//字典电压等级
const voltageLevelList = dictData.getBasicData('Dev_Voltage_Stand')
//字典评估类型
const evaluationTypeList = dictData.getBasicData('Evaluation_Type')
//字典预测评估单位
const evaluationDeptList = dictData.getBasicData('evaluation_dept')
/** 获得数据 */
const getInfo = async () => {
detailLoading.value = true
try {
await getUserReportById(props.id || queryId).then(res => {
detailData.value = res.data
getProviteData()
})
} finally {
detailLoading.value = false
}
}
const proviteData = ref()
//判断userType选择取用的对象
const getProviteData = async () => {
if (detailData.value.userType == '0' || detailData.value.userType == '1') {
proviteData.value = detailData.value.userReportProjectPO
//查询非线性设备类型
await getDictTreeById(proviteData.value.nonlinearDeviceType).then(res => {
console.log(res, '==========')
proviteData.value.nonlinearDeviceType = res.data?.name
})
} else if (
detailData.value.userType == '2' ||
detailData.value.userType == '3' ||
detailData.value.userType == '4' ||
detailData.value.userType == '5'
) {
proviteData.value = detailData.value.userReportSubstationPO
//查询非线性负荷类型
await getDictTreeById(proviteData.value.nonlinearLoadType).then(res => {
console.log(res, '==========')
proviteData.value.nonlinearLoadType = res.data?.name
})
} else {
proviteData.value = detailData.value.userReportSensitivePO
}
console.log(proviteData.value, '++++++++++++proviteData.evaluationType')
//可研报告
if (proviteData.value.feasibilityReport) {
await getFileNamePath(proviteData.value.feasibilityReport, 'feasibilityReport')
}
//终端台账信息
if (proviteData.value.preliminaryDesignDescription) {
await getFileNamePath(proviteData.value.preliminaryDesignDescription, 'preliminaryDesignDescription')
}
//预测评估报告
if (proviteData.value.predictionEvaluationReport) {
await getFileNamePath(proviteData.value.predictionEvaluationReport, 'predictionEvaluationReport')
}
//预测评估评审意见报告
if (proviteData.value.predictionEvaluationReviewOpinions) {
await getFileNamePath(
proviteData.value.predictionEvaluationReviewOpinions,
'predictionEvaluationReviewOpinions'
)
}
//用户接入变电站主接线示意图
if (proviteData.value.substationMainWiringDiagram) {
await getFileNamePath(proviteData.value.substationMainWiringDiagram, 'substationMainWiringDiagram')
}
//主要敏感设备清单
if (proviteData.value.sensitiveDevices) {
await getFileNamePath(proviteData.value.sensitiveDevices, 'sensitiveDevices')
}
//抗扰度测试报告
if (proviteData.value.antiInterferenceReport) {
await getFileNamePath(proviteData.value.antiInterferenceReport, 'antiInterferenceReport')
}
//背景电能质量测试报告
if (proviteData.value.powerQualityReport) {
await getFileNamePath(proviteData.value.powerQualityReport, 'powerQualityReport')
}
//其他附件
if (proviteData.value.additionalAttachments) {
getFileNamePath(proviteData.value.additionalAttachments, 'additionalAttachments')
}
}
//根据文件名请求
const getFileNamePath = async (val: any, pathName: any) => {
await getFileNameAndFilePath({ filePath: val }).then(res => {
console.log(111111111)
if (res.data && res.data.name && res.data.url) {
//可研报告
if (pathName == 'feasibilityReport' && proviteData.value.feasibilityReport) {
proviteData.value.feasibilityReport = {
name: res.data.fileName,
url: res.data.url
}
}
//终端台账信息
else if (pathName == 'preliminaryDesignDescription' && proviteData.value.preliminaryDesignDescription) {
proviteData.value.preliminaryDesignDescription = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估报告
else if (pathName == 'predictionEvaluationReport' && proviteData.value.predictionEvaluationReport) {
proviteData.value.predictionEvaluationReport = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估评审意见报告
else if (
pathName == 'predictionEvaluationReviewOpinions' &&
proviteData.value.predictionEvaluationReviewOpinions
) {
proviteData.value.predictionEvaluationReviewOpinions = {
name: res.data.fileName,
url: res.data.url
}
}
//用户接入变电站主接线示意图
else if (pathName == 'substationMainWiringDiagram' && proviteData.value.substationMainWiringDiagram) {
proviteData.value.substationMainWiringDiagram = {
name: res.data.fileName,
url: res.data.url
}
}
//主要敏感设备清单
else if (pathName == 'sensitiveDevices' && proviteData.value.sensitiveDevices) {
proviteData.value.sensitiveDevices = {
name: res.data.fileName,
url: res.data.url
}
}
//抗扰度测试报告
else if (pathName == 'antiInterferenceReport' && proviteData.value.antiInterferenceReport) {
proviteData.value.antiInterferenceReport = {
name: res.data.fileName,
url: res.data.url
}
}
//背景电能质量测试报告
else if (pathName == 'powerQualityReport' && proviteData.value.powerQualityReport) {
proviteData.value.powerQualityReport = {
name: res.data.fileName,
url: res.data.url
}
}
//其他附件
else if (pathName == 'additionalAttachments' && proviteData.value.additionalAttachments) {
proviteData.value.additionalAttachments = {
name: res.data.fileName,
url: res.data.url
}
}
}
})
}
defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗
/** 初始化 **/
onMounted(() => {
getInfo()
})
</script>
<style lang='scss'>
.default-main {
height: calc(100vh - 100px);
overflow: auto;
}
::v-deep.el-icon svg {
margin: 5px !important;
position: absolute !important;
top: 20px !important;
}
</style>

View File

@@ -204,6 +204,6 @@ const getUserTypeName = (userType: any) => {
} }
::v-deep .el-input__wrapper { ::v-deep .el-input__wrapper {
width: 200px !important; // width: 200px !important;
} }
</style> </style>

View File

@@ -1635,9 +1635,7 @@ defineExpose({ open })
overflow-y: auto; overflow-y: auto;
padding-top: 20px; padding-top: 20px;
} }
.dialog-footer {
padding: 10px;
}
/* 调整标签的换行行为 */ /* 调整标签的换行行为 */
.label_over_warp::v-deep .el-form-item__label { .label_over_warp::v-deep .el-form-item__label {
white-space: pre-line !important; white-space: pre-line !important;

View File

@@ -5,7 +5,9 @@
<undocumented v-if="activeName == '1'" /> <undocumented v-if="activeName == '1'" />
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="入网评估报告审核" name="2"><network v-if="activeName == '2'" /></el-tab-pane>--> <!-- <el-tab-pane label="入网评估报告审核" name="2"><network v-if="activeName == '2'" /></el-tab-pane>-->
<el-tab-pane label="常态化干扰源用户管理" name="3"><normal v-if="activeName == '3'" /></el-tab-pane> <el-tab-pane label="常态化干扰源用户管理" name="3">
<interferenceUserTable v-if="activeName == '3'" />
</el-tab-pane>
<!-- <el-tab-pane label="实测报告审核" name="4"><report v-if="activeName == '4'" /></el-tab-pane>--> <!-- <el-tab-pane label="实测报告审核" name="4"><report v-if="activeName == '4'" /></el-tab-pane>-->
<el-tab-pane label="终端入网检测" name="5"> <el-tab-pane label="终端入网检测" name="5">
<terminalNetworkDetection v-if="activeName == '5'"></terminalNetworkDetection> <terminalNetworkDetection v-if="activeName == '5'"></terminalNetworkDetection>
@@ -18,7 +20,7 @@
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide } from 'vue'
import undocumented from './components/undocumented/index.vue' import undocumented from './components/undocumented/index.vue'
import network from './components/network/index.vue' import network from './components/network/index.vue'
import normal from './components/normal.vue' import interferenceUserTable from '../terminal/components/interferenceUserTable.vue'
import report from './components/report.vue' import report from './components/report.vue'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
import terminalNetworkDetection from './components/terminalNetworkDetection/index.vue' import terminalNetworkDetection from './components/terminalNetworkDetection/index.vue'

View File

@@ -0,0 +1,174 @@
<template>
<TableHeader area datePicker ref="TableHeaderRef">
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
<el-button icon="el-icon-Delete" type="primary">删除</el-button>
<el-button icon="el-icon-Download" type="primary">导出</el-button>
</template>
</TableHeader ref="tableRef">
<Table ref="tableRef" />
<!-- 新增 -->
<listForm ref="listFormRef"/>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useDictData } from '@/stores/dictData'
import listForm from "./listForm.vue"
const dictData = useDictData()
const tableRef = ref()
const planAddRef = ref()
const TableHeaderRef = ref()
const listFormRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/generalSurvey/getSurvey',
publicHeight: 65,
method: 'POST',
column: [
{ width: '60', type: 'checkbox' },
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'billNo', title: '单据编号', minWidth: '150' },
{ field: 'billName', title: '单据名称', minWidth: '150' },
{ field: 'createrOrgName', title: '编制单位名称', minWidth: '150' },
{ field: 'specialityType', title: '所属专业', minWidth: '150' },
{ field: 'orgName', title: '责任单位名称', minWidth: '150' },
{ field: 'receiveUserName', title: '接收人名称', minWidth: '150' },
{ field: 'createrTime', title: '编制时间', minWidth: '150' },
{ field: 'managerDeptName', title: '主管部门名称', minWidth: '150' },
{ field: 'mainSenderName', title: '主送单位名称', minWidth: '150' },
{ field: 'copySenderName', title: '抄送单位名称', minWidth: '150' },
{ field: 'techSupvBasis', title: '依据标准', minWidth: '150' },
{ field: 'problemDesc', title: '问题描述', minWidth: '150' },
{ field: 'dealAdvise', title: '处理建议', minWidth: '150' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
fixed: 'right',
buttons: [
{
name: 'productSetting',
title: '反馈数据',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
// planAddRef.value.open('查看计划', row)
}
},
{
name: 'edit',
title: '修改',
type: 'warning',
icon: 'el-icon-Open',
render: 'basicButton',
click: row => {
// deviceQuitPopup.value.open('重新发起退运', row)
planAddRef.value.open('重新发起计划', row)
}
},
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [{
alarmId: "49cb012b06df8cde948230d29e8a3c30",
provinceId: "13B9B47F1E483324E05338297A0A0595",
provinceName: "国网河北电力有限公司",
billType: "eba0f69f3a36826a1771d813a6eee0fc",
billNo: "衡供[告]2023年--09015号",
billName: "220千伏站544线技术监督工作预警单",
createrOrgId: "13B9B47F23B83324E05338297A0A0595",
createrOrgName: "国网衡水供电公司",
specialityType: "电能质量",
orgId: "13B9B47F23CB3324E05338297A0A0595",
orgName: "国网桃城区供电公司",
receiveUserId: null,
receiveUserName: "",
createrTime: "2023-09-14 00:00:00",
time: null,
managerDeptId: "13B9B47F23B83324E05338297A0A0595",
managerDeptName: "国网衡水供电公司",
mainSenderId: "13B9B47F23CB3324E05338297A0A0595",
mainSenderName: "国网桃城区供电公司",
copySenderId: "",
copySenderName: "",
techSupvBasis: "GB/T12325-2008《电能质量供电电压偏差》GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量公用电网诺波》GB/T15543-20088电能质量三相电压不平衡》GB/T15945-2008名电能质量电力系统频率偷差》 GB/T18481-2001名电能质量暂时过电压和瞬态过电压》GB/T30137-2013《电能质量电压暂降与短时中断》",
problemDesc: "2023年9月10日11日国网衡水供电公司组织对220千伏站前铺站开展电能质量专项监督检测发现544胡村站在此次检测时间段内电压上下偏差不满足国标要求电压长时闪变不满足国标要求并存在2次暂态事件。",
dealAdvise: "国网衡水市桃城区供电公司运检部组织排查544所带用户是否存在非线性、冲击性等负荷组织开展重点用户电能质量检测对存在问题用户提出治理要求跟踪落实治理措施并向市公司设备部反馈治理报告。",
isUploadHead: 0
},
{
alarmId: "4b854eebe09172eff780db3368f64e9d",
provinceId: "13B9B47F1E483324E05338297A0A0595",
provinceName: "国网河北电力有限公司",
billType: "eba0f69f3a36826a1771d813a6eee0fc",
billNo: "沧供[预]2023年--09003号",
billName: "220kV大张庄光伏电场技术监督工作预警单",
createrOrgId: "13B9B47F2C183324E05338297A0A0595",
createrOrgName: "国网沧州供电公司",
specialityType: "电能质量",
orgId: "13B9B47F2D623324E05338297A0A0595",
orgName: "国网海兴县供电公司",
receiveUserId: null,
receiveUserName: "",
createrTime: "2023-09-28 00:00:00",
time: null,
managerDeptId: "13B9B47F2C183324E05338297A0A0595",
managerDeptName: "国网沧州供电公司",
mainSenderId: "13B9B47F2D623324E05338297A0A0595",
mainSenderName: "国网海兴县供电公司",
copySenderId: "",
copySenderName: "",
techSupvBasis: "GB/T 12325-2008《电能质量 供电电压偏差》 GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量 公用电网谐波》 GB/T15543-2008《电能质量三相电压不平衡》GB/T15945-2008《电能质量 电力系统频率偏差》GB/T 18481-2001《电能质量暂时过电压和瞬态过电压》GB/T30137-2013 《电能质量 电压暂降与短时中断》",
problemDesc: "国网河北电科院、国网沧州供电公司组织对220千伏边务站开展电能质量专项监督时发现235庄边线电压总谐波畸变率最大值5.22%95%概率值4.85%3、5、7次谐波电压含有率最大值分别为2.71%、3.52%、2.35%95%概率值分别为2.53%、3.31%、2.22%不满足国标限制要求怀疑光伏电场内SVG存在缺陷。",
dealAdvise: "220kV大张庄光伏电场相关管理单位组织排查光伏电场站内设备设备是否存在缺陷开展电能质量检测并向国网沧州供电公司技术监督办公室(设备部)反馈排查治理情况。",
isUploadHead: 0
},
]
}
})
tableStore.table.params.status = ''
provide('tableStore', tableStore)
// 新增计划
const add = () => {
// title.value = '普测计划新增'
listFormRef.value.open('新增告警单')
}
onMounted(() => {
tableStore.index()
})
</script>
<style scoped lang="scss"></style>

View File

@@ -1,63 +1,170 @@
<template> <template>
<el-row :gutter="20" :style="{ height: height }"> <TableHeader area datePicker ref="TableHeaderRef">
<el-col :span="9" class="col1">
<policyTree @tactics="tactics"/> <template #operation>
</el-col> <el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
<el-col :span="15" class="col1"> <el-button icon="el-icon-Delete" type="primary">删除</el-button>
<div class="mb10" style="height: 32px">
<el-button type="primary" icon="el-icon-Plus">新增策略</el-button>
</div>
<div :style="`height: calc(${height} - 43px)`">
<vxe-table ref="tableRef" height="auto" :data="dataList" v-bind="defaultAttribute">
<vxe-column field="name" title="策略名称"></vxe-column>
<vxe-column field="type" title="策略类型">
<template #default="{ row }">
{{ row.type === 0 ? '预警单' : '告警单' }}
</template> </template>
</vxe-column> </TableHeader ref="tableRef">
<vxe-column field="grade" title="策略等级"> <Table ref="tableRef" />
<template #default="{ row }">
{{ row.grade === 0 ? '自动策略' : row.grade === 1 ? '手动策略' : '排他策略' }} <!-- 新增 -->
</template> <listForm ref="listFormRef" />
</vxe-column>
<vxe-column field="state" title="状态">
<template #default="{ row }">
<el-switch
v-model.number="row.state"
active-color="#13ce66"
inactive-color="#ff4949"
:active-value="1"
:inactive-value="2"
@change="stateChange($event, row.id)"
></el-switch>
</template>
</vxe-column>
<vxe-column title="操作">
<template #default="{ row }">
<el-button type="primary" size="small" link>查看</el-button>
<el-button type="primary" size="small" link>修改</el-button>
<el-button type="primary" size="small" link>删除</el-button>
</template>
</vxe-column>
</vxe-table>
</div>
</el-col>
</el-row>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import policyTree from '@/components/tree/pqs/policyTree.vue' import { ref, onMounted, provide, nextTick } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute' import TableStore from '@/utils/tableStore'
import { mainHeight } from '@/utils/layout' import Table from '@/components/table/index.vue'
import { ref, reactive } from 'vue' import TableHeader from '@/components/table/header/index.vue'
const height = mainHeight(80).height import { ElMessage, ElMessageBox } from 'element-plus'
const dataList = ref([]) import { useDictData } from '@/stores/dictData'
import listForm from "./listForm.vue"
const dictData = useDictData()
const tableRef = ref()
const planAddRef = ref()
const listFormRef = ref()
const TableHeaderRef = ref()
const stateChange = (val: number, id: number) => {} const tableStore = new TableStore({
const tactics = (row: any, id: number) => { url: '/supervision-boot/generalSurvey/getSurvey',
console.log("🚀 ~ tactics ~ row:", row,id) publicHeight: 65,
method: 'POST',
column: [
{ width: '60', type: 'checkbox' },
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'billNo', title: '单据编号', minWidth: '150' },
{ field: 'billName', title: '单据名称', minWidth: '150' },
{ field: 'createrOrgName', title: '编制单位名称', minWidth: '150' },
{ field: 'specialityType', title: '所属专业', minWidth: '150' },
{ field: 'orgName', title: '责任单位名称', minWidth: '150' },
{ field: 'receiveUserName', title: '接收人名称', minWidth: '150' },
{ field: 'createrTime', title: '编制时间', minWidth: '150' },
{ field: 'managerDeptName', title: '主管部门名称', minWidth: '150' },
{ field: 'mainSenderName', title: '主送单位名称', minWidth: '150' },
{ field: 'copySenderName', title: '抄送单位名称', minWidth: '150' },
{ field: 'techSupvBasis', title: '依据标准', minWidth: '150' },
{ field: 'problemDesc', title: '问题描述', minWidth: '150' },
{ field: 'dealAdvise', title: '处理建议', minWidth: '150' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
fixed: 'right',
buttons: [
{
name: 'productSetting',
title: '反馈数据',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
// planAddRef.value.open('查看计划', row)
}
},
{
name: 'edit',
title: '修改',
type: 'warning',
icon: 'el-icon-Open',
render: 'basicButton',
click: row => {
// deviceQuitPopup.value.open('重新发起退运', row)
planAddRef.value.open('重新发起计划', row)
}
},
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [{
alarmId: "0323fa13767c537d037cd755cc1b728e",
provinceId: "13B9B47F1E483324E05338297A0A0595",
provinceName: "国网河北电力有限公司",
billType: "eba0f69f3a36826a1771d813a6eee0fc",
billNo: "沧供[预]2023年--09002号",
billName: "220kV东辛光伏电场技术监督工作预警单",
createrOrgId: "13B9B47F2C183324E05338297A0A0595",
createrOrgName: "国网沧州供电公司",
specialityType: "电能质量",
orgId: "13B9B47F2D623324E05338297A0A0595",
orgName: "国网海兴县供电公司",
receiveUserId: null,
receiveUserName: "",
createrTime: "2023-09-28 00:00:00",
time: null,
managerDeptId: "13B9B47F2C183324E05338297A0A0595",
managerDeptName: "国网沧州供电公司",
mainSenderId: "13B9B47F2D623324E05338297A0A0595",
mainSenderName: "国网海兴县供电公司",
copySenderId: "",
copySenderName: "",
techSupvBasis: "GB/T 12325-2008 《电能质量 供电电压偏差》 GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量 公用电网谐波》 GB/T 15543-2008《电能质量三相电压不平衡》GB/T15945-2008《电能质量 电力系统频率偏差》GB/T 18481-2001《电能质量暂时过电压和瞬态过电压》GB/T30137-2013《电能质量 电压暂降与短时中断》",
problemDesc: "国网河北电科院、国网沧州供电公司组织对220千伏常庄站开展电能质量专项监督时发现246东常线电压总谐波畸变率最大值6.37%95%概率值6.24%3、5、7次谐波电压含有率最大值分别为4.31%、3.62%、2.61%95%概率值分别为4.2%、3.53%、2.51%不满足国标限制要求怀疑光伏电场内SVG存在缺陷。",
dealAdvise: "220kV东辛光伏电场相关管理单位组织排查光伏电场站内设备设备是否存在缺陷开展电能质量检测并向国网沧州供电公司技术监督办公室(设备部)反馈排查治理情况。",
isUploadHead: 0
},
{
alarmId: "054deafbbcfc29f8dff517d31966657b",
provinceId: "13B9B47F1E483324E05338297A0A0595",
provinceName: "国网河北电力有限公司",
billType: "eba0f69f3a36826a1771d813a6eee0fc",
billNo: "[预]2023—165号",
billName: "关于220kV赞皇龙门光伏站谐波电流指标超标预警",
createrOrgId: "13B9B47F1F223324E05338297A0A0595",
createrOrgName: "国网石家庄供电公司",
specialityType: "电能质量",
orgId: "13B9B47F1F223324E05338297A0A0595",
orgName: "国网石家庄供电公司",
receiveUserId: null,
receiveUserName: "",
createrTime: "2023-09-25 00:00:00",
time: null,
managerDeptId: "13B9B47F1F773324E05338297A0A0595",
managerDeptName: "国网石家庄供电公司本部",
mainSenderId: "",
mainSenderName: "",
copySenderId: "",
copySenderName: "",
techSupvBasis: "GB/T 14549-1993《电能质量-公用电网谐波》",
problemDesc: "国网河北电科院、国网石家庄供电公司于2023年9月对220千伏赞皇龙门光伏站开展电能质量专项监督时发现220kV龙万线赞皇龙门光伏站并网线路ABC三相的5次谐波电流指标95%概率值分别为为17.27A、16.25A、16.85A不满足国标限值7.09A的要求。",
dealAdvise: "赞皇龙门光伏站开展电能质量指标测试及分析,排查自有发电、用电设备是否存在谐波源,并向国网石家庄供电公司技术监督办公室(设备部)反馈排查治理情况。",
isUploadHead: 0
},
]
}
})
tableStore.table.params.status = ''
provide('tableStore', tableStore)
// 新增计划
const add = () => {
// title.value = '普测计划新增'
listFormRef.value.open('新增预警单')
} }
onMounted(() => {
tableStore.index()
})
</script> </script>
<style lang="scss" scoped></style> <style scoped lang="scss"></style>

View File

@@ -0,0 +1,160 @@
<template>
<el-dialog draggable v-model="dialogVisible" :title="title" style="width: 800px" :before-close="handleClose">
<el-form :model="form" class="form-two" label-width="auto" :rules="rules">
<el-form-item label="单据编号:" prop="billNo">
<el-input v-model="form.billNo" placeholder="请输入单据编号" clearable></el-input>
</el-form-item>
<el-form-item label="单据名称:" prop="billName">
<el-input v-model="form.billName" placeholder="请输入单据名称" clearable></el-input>
</el-form-item>
<el-form-item label="单据类别:" prop="billType">
<el-select v-model="form.billType" clearable placeholder="请选择单据类别">
<el-option
v-for="item in Categories"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="编制单位名称:" prop="createrOrgName">
<el-input v-model="form.createrOrgName" placeholder="请输入编制单位名称" clearable></el-input>
</el-form-item>
<el-form-item label="所属专业:" prop="specialityType">
<el-select v-model="form.specialityType" clearable placeholder="请选择所属专业">
<el-option v-for="item in Major" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="责任单位名称:" prop="orgName">
<el-input v-model="form.orgName" placeholder="请输入责任单位名称" clearable></el-input>
</el-form-item>
<el-form-item label="接收人名称:" prop="receiveUserId">
<el-select
v-model="form.receiveUserId"
clearable
placeholder="请选择接收人名称"
@change="changeFn"
@clear="clear('receiveUserId', 'receiveUserName')"
>
<el-option
v-for="item in ImplementationPeople"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="编制时间:" prop="createrTime">
<el-date-picker
v-model="form.createrTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="选择日期"
></el-date-picker>
</el-form-item>
<el-form-item label="主管部门名称:" prop="managerDeptName">
<el-input v-model="form.managerDeptName" placeholder="请输入主管部门名称" clearable></el-input>
</el-form-item>
<el-form-item label="主送单位名称:" prop="mainSenderName">
<el-input v-model="form.mainSenderName" placeholder="请输入主送单位名称" clearable></el-input>
</el-form-item>
<el-form-item label="抄送单位名称:" prop="copySenderName">
<el-input v-model="form.copySenderName" placeholder="请输入抄送单位名称" clearable></el-input>
</el-form-item>
<el-form-item label="处理建议:" prop="dealAdvise">
<el-input
v-model="form.dealAdvise"
type="textarea"
autosize
placeholder="请输入处理建议"
clearable
></el-input>
</el-form-item>
<el-form-item label="依据标准:" prop="techSupvBasis">
<el-input v-model="form.techSupvBasis" type="textarea" autosize placeholder="请输入依据标准"></el-input>
</el-form-item>
<el-form-item label="问题描述:" prop="problemDesc">
<el-input v-model="form.problemDesc" type="textarea" autosize placeholder="请输入问题描述"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useDictData } from '@/stores/dictData'
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
import { genFileId, ElMessage } from 'element-plus'
const emit = defineEmits(['onsubmit'])
const dictData = useDictData()
const manufactorList = dictData.getBasicData('Dev_Manufacturers')
const dialogVisible = ref(false)
const title: any = ref('')
const form: any = ref({
billName: '',
billNo: '',
billType: '',
copySenderId: '',
copySenderName: '',
createrOrgId: '',
createrOrgName: '',
createrTime: '',
dealAdvise: '',
mainSenderId: '',
mainSenderName: '',
managerDeptId: '',
managerDeptName: '',
orgId: '',
orgName: '',
problemDesc: '',
receiveUserName: '',
receiveUserId: '',
specialityType: '',
techSupvBasis: ''
})
const elform = ref()
const uploadRef = ref()
const rules = {
billNo: [{ required: true, message: '请输入单据编号', trigger: 'blur' }],
billName: [{ required: true, message: '请输入单据名称', trigger: 'blur' }],
billType: [{ required: true, message: '请选择单据类别', trigger: 'change' }],
createrOrgName: [{ required: true, message: '请选择编制单位', trigger: 'change' }],
specialityType: [{ required: true, message: '请选择所属专业', trigger: 'change' }],
orgName: [{ required: true, message: '请选择责任单位', trigger: 'change' }],
createrTime: [{ required: true, message: '选择日期', trigger: 'change' }],
managerDeptName: [{ required: true, message: '请选择主管部门名称', trigger: 'change' }],
techSupvBasis: [{ required: true, message: '请输入依据标准', trigger: 'blur' }],
problemDesc: [{ required: true, message: '请输入问题描述', trigger: 'blur' }],
dealAdvise: [{ required: true, message: '请输入处理建议', trigger: 'blur' }],
treatmentMeasures: [{ required: true, message: '请输入采取措施', trigger: 'blur' }],
fillUserId: [{ required: true, message: '请选择接收人名称', trigger: 'change' }],
completeTime: [{ required: true, message: '选择日期', trigger: 'change' }]
}
const submit = () => {
handleClose()
}
const open = (text: any) => {
dialogVisible.value = true
title.value = text
}
const handleClose = () => {
// elform.value.resetFields()
dialogVisible.value = false
}
defineExpose({ open })
</script>
<style lang="scss" scoped>
:deep(.el-upload-list__item) {
width: 400px;
}
</style>

View File

@@ -1,12 +1,13 @@
<template> <template>
<div class="default-main"> <div class="default-main">
<el-tabs v-model="activeName" type="border-card"> <el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="概览" name="1"><overview v-if="activeName == '1'"/></el-tab-pane> <!-- <el-tab-pane label="概览" name="1"><overview v-if="activeName == '1'"/></el-tab-pane>
<el-tab-pane label="技术监督管理" name="2"><technology v-if="activeName == '2'"/></el-tab-pane> <el-tab-pane label="技术监督管理" name="2"><technology v-if="activeName == '2'"/></el-tab-pane> -->
<el-tab-pane label="告警单策略管理" name="3">
<el-tab-pane label="预警单列表" name="3">
<earlyWarning v-if="activeName == '3'"/> <earlyWarning v-if="activeName == '3'"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="警单策略管理" name="4"><earlyWarning v-if="activeName == '4'"/></el-tab-pane> <el-tab-pane label="警单列表" name="4"><alarm v-if="activeName == '4'"/></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
@@ -15,13 +16,14 @@
import overview from './components/overview.vue' import overview from './components/overview.vue'
import technology from './components/technology.vue' import technology from './components/technology.vue'
import earlyWarning from './components/earlyWarning.vue' import earlyWarning from './components/earlyWarning.vue'
import alarm from './components/alarm.vue'
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide } from 'vue'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
defineOptions({ defineOptions({
name: 'Processsupervision/supervision/manage' name: 'supervision/harmonicmanagement'
}) })
const activeName = ref('1') const activeName = ref('3')
const Statistics = ref() const Statistics = ref()
const compatibility = ref() const compatibility = ref()

View File

@@ -0,0 +1,100 @@
<template>
<div>
<TableHeader area ref='TableHeaderRef'>
<template #select>
<el-form-item label='信息查询'>
<el-input v-model='tableStore.table.params.searchValue' clearable></el-input>
</el-form-item>
</template>
<template #operation>
<el-button icon='el-icon-Download' type='primary'>导出</el-button>
</template>
</TableHeader>
<Table ref='tableRef' />
</div>
</template>
<script setup lang='ts'>
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
const dictData = useDictData()
const interferenceType = dictData.getBasicData('Interference_Source')
const istatusList = dictData.getBasicData('On-network_Status')
const TableHeaderRef = ref()
const areaOptionList = dictData.getBasicData('jibei_area')
const tableStore = new TableStore({
url: '/device-boot/runManage/getDeviceLedger',
publicHeight: 65,
method: 'POST',
column: [
/* { title: '序号', type: 'seq', width: 80 },*/
{
field: 'areaName',
title: '省公司',
minWidth: 100
},
{
field: 'gdName',
title: '市公司',
minWidth: 150
},
{ field: 'bdName', title: '所属变电站', minWidth: 80 },
{ field: 'devName', title: '终端编号', minWidth: 170 },
{ field: 'loginTime', title: '投运时间', minWidth: 130 },
{
field: 'manufacturer',
title: '厂家',
minWidth: 100
},
{ field: 'devType', title: '终端型号', minWidth: 100 },
{ field: 'ip', title: '装置网络参数', minWidth: 100 },
{ field: 'port', title: '端口号', minWidth: 100 }
/* {
title: '操作',
minWidth: 150,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '流程详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
}
}
]
}*/
],
beforeSearchFun: () => {
tableStore.table.params.serverName = 'harmonic-boot'
tableStore.table.params.statisticalType = {
name: '电网拓扑',
code: 'Power_Network'
}
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
</script>

View File

@@ -0,0 +1,142 @@
<template>
<div>
<TableHeader ref="TableHeaderRef">
<template #select>
<el-form-item label="工程名称">
<el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
</el-form-item>
<el-form-item label="所属地市">
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择所属地市">
<el-option
v-for="item in areaOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Download" type="primary">导出</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
const dictData = useDictData()
const interferenceType = dictData.getBasicData('Interference_Source')
const istatusList = dictData.getBasicData('On-network_Status')
const TableHeaderRef = ref()
const areaOptionList = dictData.getBasicData('jibei_area')
const tableStore = new TableStore({
url: '/supervision-boot/userReport/getInterferenceUserPage',
publicHeight: 65,
method: 'POST',
column: [
{ title: '序号', type: 'seq', width: 80 },
{ field: 'projectName', title: '工程名称', minWidth: 170 },
{
field: 'userType',
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'city', title: '所属地市', minWidth: 80 },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{ field: 'substation', title: '变电站', minWidth: 100 },
{
title: '操作',
minWidth: 150,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '详细信息',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.city = tableStore.table.params.deptIndex
}
})
tableStore.table.params.loadType = ''
tableStore.table.params.userName = ''
tableStore.table.params.relationUserName = ''
tableStore.table.params.aisFileUpload = ''
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
</script>

View File

@@ -0,0 +1,128 @@
<template>
<div>
<TableHeader area ref='TableHeaderRef'>
<template #select>
<el-form-item label='信息查询'>
<el-input v-model='tableStore.table.params.searchValue' clearable></el-input>
</el-form-item>
</template>
<template #operation>
<el-button icon='el-icon-Download' type='primary'>导出</el-button>
</template>
</TableHeader>
<Table ref='tableRef' />
</div>
</template>
<script setup lang='ts'>
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
const dictData = useDictData()
const interferenceType = dictData.getBasicData('Interference_Source')
const istatusList = dictData.getBasicData('On-network_Status')
const TableHeaderRef = ref()
const areaOptionList = dictData.getBasicData('jibei_area')
const tableStore = new TableStore({
url: '/device-boot/runManage/getLineLedger',
publicHeight: 65,
method: 'POST',
column: [
/* { title: '序号', type: 'seq', width: 80 },*/
{
field: 'areaName',
title: '省公司',
minWidth: 100
},
{ field: 'gdName', title: '市公司', minWidth: 150 },
{
field: 'bdName',
title: '所属变电站',
minWidth: 150
},
{ field: 'lineName', title: '监测点名称', minWidth: 130 },
{ field: 'scale', title: '监测点电压等级', minWidth: 120 },
{ field: 'loadType', title: '干扰源类型', minWidth: 120 },
{ field: 'objName', title: '监测对象名称', minWidth: 180 },
{
field: 'shortCapacity',
title: '最小短路容量(MVA)',
minWidth: 150,
},
{
field: 'devCapacity',
title: '供电设备容量(MVA )',
minWidth: 150,
},
{
field: 'dealCapacity',
title: '用户协议容量(MVA)',
minWidth: 150,
},
/* { field: 'comFlag', title: '通讯状态 ', minWidth: 120 },*/
{ field: 'id', title: '监测点序号', minWidth: 90 },
{ field: 'devName', title: '监测终端编号 ', minWidth: 140 },
{ field: 'ptType', title: '监测终端接线方式', minWidth: 140 },
{
field: 'voltageDev',
title: '电压偏差上限(%)',
minWidth: 120,
},
{
field: 'uvoltageDev',
title: '电压偏差下限(%)',
minWidth: 120,
},
/* {
title: '操作',
minWidth: 150,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '流程详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
}
}
]
}*/
],
beforeSearchFun: () => {
tableStore.table.params.serverName = 'harmonic-boot'
tableStore.table.params.runFlag=[0,1,2]
tableStore.table.params.comFlag=[0,1]
tableStore.table.params.statisticalType = {
name: '电网拓扑',
code: 'Power_Network'
}
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
</script>

View File

@@ -1,38 +1,27 @@
<template> <template>
<div class="default-main"> <div class='default-main'>
<el-tabs v-model="activeName" type="border-card"> <el-tabs v-model='activeName' type='border-card'>
<el-tab-pane label="终端入网检测" name="1"> <el-tab-pane label='干扰源用户台账' name='1' >
<!-- <network v-if="activeName == '1'" /> --> <!-- <network v-if="activeName == '1'" /> -->
<el-tabs v-model="network" type="border-card" style="height: 100%" tab-position="left"> <interferenceUserTable v-if="activeName == '1'" />
<el-tab-pane label="列表" name="1">
<networkTab />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="图表" name="2"> <el-tab-pane label='终端台账' name='2'>
<networkEch /> <deviceLedgerTable v-if="activeName == '2'" />
</el-tab-pane> </el-tab-pane>
</el-tabs> <el-tab-pane label='监测点台账' name='3'>
</el-tab-pane> <monitorLedgerTable v-if="activeName == '3'" />
<el-tab-pane label="终端周期检测" name="2">
<el-tabs v-model="cycle" type="border-card" style="height: 100%" tab-position="left">
<el-tab-pane label="列表" name="1">
<cycleTab />
</el-tab-pane>
<el-tab-pane label="图表" name="2">
<cycleEch />
</el-tab-pane>
</el-tabs>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang='ts'>
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide } from 'vue'
import networkTab from './components/networkTab.vue' import interferenceUserTable from './components/interferenceUserTable.vue'
import networkEch from './components/networkEch.vue' import deviceLedgerTable from './components/deviceLedgerTable.vue'
import cycleTab from './components/cycleTab.vue' import monitorLedgerTable from './components/monitorLedgerTable.vue'
import cycleEch from './components/cycleEch.vue'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
defineOptions({ defineOptions({
name: 'Processsupervision/Terminaldetection' name: 'Processsupervision/Terminaldetection'
}) })
@@ -45,11 +34,12 @@ const compatibility = ref()
const layout = mainHeight(63) as any const layout = mainHeight(63) as any
</script> </script>
<style lang="scss" scoped> <style lang='scss' scoped>
.bars_w { .bars_w {
width: 100%; width: 100%;
height: 500px; height: 500px;
} }
:deep(.el-tabs__content) { :deep(.el-tabs__content) {
height: v-bind('layout.height'); height: v-bind('layout.height');
overflow-y: auto; overflow-y: auto;