联调补招日志功能

This commit is contained in:
guanj
2025-08-26 09:45:01 +08:00
parent d6c494bd96
commit e277fd01a3
10 changed files with 5431 additions and 5416 deletions

View File

@@ -12,7 +12,9 @@ useSetTheme()
onMounted(async () => {
const response = await fetch('/')
const WebSocketUrl:any = response.headers.get('X-WebSocket-Url')
const WebSocketUrl2:any = response.headers.get('X-WebSocket-Url2')
const MqttUrl:any = response.headers.get('X-MqttUrl-Url')
localStorage.setItem('WebSocketUrl2', WebSocketUrl2)
localStorage.setItem('WebSocketUrl', WebSocketUrl)
localStorage.setItem('MqttUrl', MqttUrl)
})

View File

@@ -38,15 +38,18 @@ export default class SocketService {
}
// 定义连接服务器的方法
public async connect(id: string) {
public async connect(url: string) {
if (!window.WebSocket) {
console.log('您的浏览器不支持WebSocket')
return
}
setTimeout(() => {
// ws://192.168.1.69:10407/mgtt/api/pushMessage/
const url = (localStorage.getItem('WebSocketUrl') || 'ws://192.168.1.68:10407/api/pushMessage/') + id
// ws://192.168.1.69:10407/mgtt
// const url =
// (localStorage.getItem('WebSocketUrl') == 'null'
// ? 'ws://192.168.1.130:10405'
// : localStorage.getItem('WebSocketUrl')) + id
this.ws = new WebSocket(url)
this.ws.onopen = () => this.handleOpen()
@@ -87,6 +90,7 @@ export default class SocketService {
if (event.data == '连接成功') {
this.sendHeartbeat()
} else if (event.data == 'connect') {
} else if (event.data.length > 10) {
let message: MessageType
try {
@@ -99,7 +103,8 @@ export default class SocketService {
// console.log("🚀 ~ SocketService ~ handleMessage ~ message:", message)
// 通过接受服务端发送的type字段来回调函数
if (message.key && this.callBackMapping['message']) {
if ((message.key || message.code) && this.callBackMapping['message']) {
this.callBackMapping['message']!(message)
} else {
console.log('抛弃====>')

View File

@@ -7,7 +7,7 @@
<span style="line-height: 32px">公共连接点参数</span>
</div>
</template>
<div :style="`height: calc(${height} - 380px);overflow-y: auto;max-height:350px`">
<div :style="`height: calc(${height} - 420px);overflow-y: auto;max-height:350px`">
<el-form
ref="formRef"
:model="form"
@@ -101,7 +101,7 @@
</el-select>
</div>
</template>
<div :style="`height: calc(${height} - 380px);overflow-y: auto;max-height:350px`">
<div :style="`height: calc(${height} - 420px);overflow-y: auto;max-height:350px`">
<vxe-table v-bind="defaultAttribute" ref="vxeRef" height="auto" :data="equipmentList">
<vxe-column field="devName" title="终端名称"></vxe-column>
<vxe-column field="devScale" title="电压等级" :formatter="formatter"></vxe-column>
@@ -109,41 +109,6 @@
</vxe-table>
</div>
</el-card>
</div>
<div class="bottomBox pt1" id="exportId">
<div v-if="showFlag">
<el-divider content-position="left">一级评估</el-divider>
<div style="height: 40px" class="pl30">
结果: {{ outcome.firstResult }}%
{{ outcome.firstResult > 0.1 ? '>' : (outcome.firstResult = 0.1 ? '=' : '<') }} 0.1%
<el-tag v-if="outcome.firstResult < 0.1" type="success" effect="dark">满足</el-tag>
<el-tag v-else type="warning" effect="dark">不满足</el-tag>
</div>
<div style="height: 220px" v-if="!(outcome.firstResult < 0.1)" class="mb10">
<el-divider content-position="left">二级评估</el-divider>
<div class="evaluateTheResults">
<div style="height: 200px; flex: 1">
<vxe-table style="flex: 1.5" v-bind="defaultAttribute" height="auto" :data="level2Data">
<vxe-column field="name" title="谐波次数" width="180"></vxe-column>
<vxe-column v-for="item in column" :field="item.field" :title="item.title">
<template #default="row">
<span v-if="row.row.name == '是否允许值'">
<Select v-if="row.row[row.column.field]" class="SelectIcon" />
<CloseBold v-else class="SelectIcon" style="color: #f38d07" />
</span>
<span v-else>{{ row.row[row.column.field] }}</span>
</template>
</vxe-column>
</vxe-table>
</div>
<div style="height: 200px; width: 350px">
<MyEChart style="flex: 1" :options="pieCharts" />
</div>
</div>
</div>
</div>
<div class="button-group">
<el-button
type="primary"
@@ -160,6 +125,41 @@
</div>
</div>
<div class="bottomBox pt1 mt40" id="exportId">
<div v-if="showFlag">
<el-divider content-position="left">一级评估</el-divider>
<div style="height: 40px" class="pl30">
结果: {{ outcome.firstResult }}%
{{ outcome.firstResult > 0.1 ? '>' : (outcome.firstResult = 0.1 ? '=' : '<') }} 0.1%
<el-tag v-if="outcome.firstResult < 0.1" type="success" effect="dark">满足</el-tag>
<el-tag v-else type="warning" effect="dark">不满足</el-tag>
</div>
<div style="height: 220px" v-if="!(outcome.firstResult < 0.1)" class="mb10">
<el-divider content-position="left">二级评估</el-divider>
<div class="evaluateTheResults">
<div style="height: 200px; width: calc(100% - 350px)">
<vxe-table v-bind="defaultAttribute" height="auto" :data="level2Data">
<vxe-column field="name" title="谐波次数" width="180"></vxe-column>
<vxe-column v-for="item in column" :field="item.field" :title="item.title">
<template #default="row">
<span v-if="row.row.name == '是否允许值'">
<Select v-if="row.row[row.column.field]" class="SelectIcon" />
<CloseBold v-else class="SelectIcon" style="color: #f38d07" />
</span>
<span v-else>{{ row.row[row.column.field] }}</span>
</template>
</vxe-column>
</vxe-table>
</div>
<div style="height: 200px; width: 350px">
<MyEChart :options="pieCharts" />
</div>
</div>
</div>
</div>
</div>
<el-dialog draggable v-model="dialogVisible" title="新增干扰源类型" width="70%">
<vxe-table v-bind="defaultAttribute" height="400px" ref="xTable" :data="userData">
<vxe-column type="checkbox" width="60"></vxe-column>
@@ -450,13 +450,20 @@ const selChange = async (e: any) => {
}
// 导出
const onExport = () => {
console.log("🚀 ~ onExport ~ document.getElementById('exportId'):", document.getElementById('exportId'))
// 转换成canvas
html2canvas(document.getElementById('exportId'), {
scale: 2
useCORS: true, // 允许跨域图片
allowTaint: true, // 允许污染的画布
logging: false, // 关闭日志
scale: 2 // 提高缩放比例以获得更清晰的截图
}).then(function (canvas) {
console.log('🚀 ~ onExport ~ canvas:', canvas)
// 创建a标签实现下载
let creatIMg = document.createElement('a')
creatIMg.download = '光伏电站承载能力评估结果.png' // 设置下载的文件名,
creatIMg.href = canvas.toDataURL() // 下载url
creatIMg.click()
creatIMg.remove() // 下载之后把创建的元素删除
@@ -477,13 +484,10 @@ onMounted(() => {
})
</script>
<style lang="scss" scoped>
.bottomBox {
position: relative;
.button-group {
.button-group {
position: absolute;
top: 0px;
bottom: -45px;
right: 10px;
}
}
// .card-header {
// font-weight: 600;
@@ -501,8 +505,18 @@ onMounted(() => {
}
.card-container {
display: flex;
position: relative;
}
.evaluateTheResults {
display: flex;
}
:deep(.el-tag) {
display: inline-block;
width: 55px;
height: 24px;
.el-tag__content{
line-height: 23px;
}
}
</style>

View File

@@ -108,10 +108,22 @@
</el-tab-pane>
</el-tabs>
</div>
<div class="btnBox mt10 mr10">
<el-button
type="primary"
icon="el-icon-VideoPlay"
@click="assess"
v-if="showBtn && props.rowList.id == undefined && !showAssess"
>
启动评估
</el-button>
<el-button type="primary" icon="el-icon-Download" @click="onExport" v-if="showAssess">
导出结果
</el-button>
</div>
<div class="bottomBox pt1" id="evaluateTheResults">
<el-divider content-position="left" v-show="showBtn">评估结果</el-divider>
<div class="bottomBox">
<div class="evaluateTheResults" id="evaluateTheResults" v-if="showAssess">
<div class="evaluateTheResults" v-if="showAssess">
<div style="height: 250px; flex: 1">
<vxe-table
style="flex: 1.5"
@@ -125,25 +137,25 @@
</vxe-colgroup>
<vxe-column field="level1" title="安全">
<template #default="{ row }">
<Select v-if="row.level1 == 1" class="SelectIcon" style="color: #2E7D32" />
<Select v-if="row.level1 == 1" class="SelectIcon" style="color: #2e7d32" />
<span v-else>{{ row.level1 }}</span>
</template>
</vxe-column>
<vxe-column field="level2" title="III级预警">
<template #default="{ row }">
<Select v-if="row.level2 == 1" class="SelectIcon" style="color: #0288D1" />
<Select v-if="row.level2 == 1" class="SelectIcon" style="color: #0288d1" />
<span v-else>{{ row.level2 }}</span>
</template>
</vxe-column>
<vxe-column field="level3" title="II级预警">
<template #default="{ row }">
<Select v-if="row.level3 == 1" class="SelectIcon" style="color: #F57C00" />
<Select v-if="row.level3 == 1" class="SelectIcon" style="color: #f57c00" />
<span v-else>{{ row.level3 }}</span>
</template>
</vxe-column>
<vxe-column field="level4" title="I级预警">
<template #default="{ row }">
<Select v-if="row.level4 == 1" class="SelectIcon" style="color: #C62828" />
<Select v-if="row.level4 == 1" class="SelectIcon" style="color: #c62828" />
<span v-else>{{ row.level4 }}</span>
</template>
</vxe-column>
@@ -153,18 +165,6 @@
<MyEChart style="flex: 1" :options="pieCharts" />
</div>
</div>
<el-button
type="primary"
icon="el-icon-VideoPlay"
@click="assess"
v-if="showBtn && props.rowList.id == undefined && !showAssess"
>
启动评估
</el-button>
<el-button type="primary" icon="el-icon-Download" @click="onExport" v-if="showAssess">
导出结果
</el-button>
</div>
</div>
</pane>
@@ -209,7 +209,7 @@ const size = ref(0)
const dictData = useDictData()
const datePickerRef = ref()
const height = mainHeight(80).height
const tabsHeight = mainHeight(260).height
const tabsHeight = mainHeight(300).height
const voltageLevelArr = dictData.getBasicData('Dev_Voltage_Stand')
const tableData: any = ref([
{
@@ -347,12 +347,12 @@ const onSubmit = async () => {
}))
// 设置有功功率图表
setEChart(1, res1.data.data, '有功功率', 'w')
setEChart(1, res1.data.data, '有功功率', 'kW')
// 获取无功功率数据并设置图表
const res2 = await queryCarryCapacityQData(form)
q_βminMap.value = res2.data.q_βminMap
setEChart(2, res2.data.data, '无功功率', 'Var')
setEChart(2, res2.data.data, '无功功率', 'kVar')
// 获取谐波电流数据并设置图表
const res3 = await queryCarryCapacityIData(form)
@@ -415,7 +415,7 @@ const amplitudeQuery = async (e: any) => {
const res3 = await queryCarryCapacityIData(form)
i_βmax.value = res3.data.i_βmax
setEChart(3, res3.data.data, '谐波电流幅值', 'A')
options.value=options3.value
options.value = options3.value
currentLod.value = false
}
// 用户变化
@@ -839,15 +839,11 @@ onMounted(() => {
}
.bottomBox {
position: relative;
.el-button {
position: absolute;
top: 0;
z-index: 1;
right: 10px;
top: -10px;
}
margin-top: -3px;
}
.btnBox {
display: flex;
justify-content: end;
}
:deep(.vxe-table--header thead tr:first-of-type th:first-of-type) {

View File

@@ -64,7 +64,7 @@
</div>
</template>
</vxe-column>
<vxe-column field="comparisonOperators3" title="次谐波合格个数">
<vxe-column field="comparisonOperators3" title="次谐波合格个数">
<template #default="row">
<div class="cellBox" @click="cells(row, row.row.comparisonOperators3, row.row.count3, 3)">
{{ symbolJudgment(row.row.comparisonOperators3)

View File

@@ -165,11 +165,11 @@ const tableStore: any = new TableStore({
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonType: 'danger',
title: '确定删除'
title: '确定禁止接入'
},
click: row => {
remove({ ids: row.id }).then(() => {
ElMessage.success('删除成功')
ElMessage.success('禁止接入成功')
tableStore.index()
})
}

View File

@@ -122,7 +122,7 @@
v-model="formData.maxProcessNum"
onkeyup="value = value.replace(/[^0-9]/g,'')"
maxlength="5"
placeholder="请输入最大进程数"
placeholder="请根据监测点规模填写合适进程数1个进程最大可承载200个监测点"
></el-input>
<!-- <el-select v-model="formData.maxProcessNum" placeholder="请选择等级" style="width: 100%">
<el-option

View File

@@ -4,32 +4,18 @@
<TableHeader date-picker ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-select
v-model="formData.statisticalType"
placeholder="请选择统计类型"
value-key="id"
style="width: 100%"
>
<el-option
v-for="item in classificationData"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
<el-select v-model="formData.statisticalType" placeholder="请选择统计类型" value-key="id"
style="width: 100%">
<el-option v-for="item in classificationData" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="区域选择:">
<!-- <el-select ref="select1" v-model="deptName" placeholder="请选择所属部门区域" style="width: 100%">
<el-option :value="formData.deptIndex" style="height: auto"> -->
<!-- {{ formData.deptIndex }} -->
<el-cascader
v-model="formData.deptIndex"
:props="defaultProps"
:options="treeData"
filterable
collapse-tags
placeholder="请选择区域"
/>
<el-cascader v-model="formData.deptIndex" :props="defaultProps" :options="treeData" filterable
collapse-tags placeholder="请选择区域" />
<!-- <el-tree
ref="tree"
v-model="formData.deptName"
@@ -43,62 +29,29 @@
<template #default="{ node, data }">
<span :title="data.name">{{ data?.name }}</span>
</template>
</el-tree> -->
</el-tree> -->
<!-- </el-option>
</el-select> -->
</el-form-item>
<el-form-item label="电压等级:">
<el-select
v-model="formData.scale"
multiple
collapse-tags
clearable
placeholder="请选择电压等级"
style="width: 100%"
value-key="id"
>
<el-option
v-for="item in voltageleveloption"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
<el-select v-model="formData.scale" multiple collapse-tags clearable placeholder="请选择电压等级"
style="width: 100%" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-select
v-model="formData.manufacturer"
multiple
collapse-tags
clearable
placeholder="请选择终端厂家"
style="width: 100%"
value-key="id"
>
<el-option
v-for="(item, index) in terminaloption"
:key="index"
:label="item.name"
:value="item"
></el-option>
<el-select v-model="formData.manufacturer" multiple collapse-tags clearable
placeholder="请选择终端厂家" style="width: 100%" value-key="id">
<el-option v-for="(item, index) in terminaloption" :key="index" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-select
v-model="formData.loadType"
multiple
collapse-tags
clearable
placeholder="请选择干扰源类型"
style="width: 100%"
value-key="id"
>
<el-option
v-for="(item, index) in interfereoption"
:key="index"
:label="item.name"
:value="item"
></el-option>
<el-select v-model="formData.loadType" multiple collapse-tags clearable placeholder="请选择干扰源类型"
style="width: 100%" value-key="id">
<el-option v-for="(item, index) in interfereoption" :key="index" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
</template>
@@ -110,45 +63,41 @@
<div class="online_main">
<el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
<el-tab-pane :name="0" :lazy="true" label="数据完整性列表">
<Table
ref="tableRef"
:tree-config="{ transform: true, parentField: 'uPid', rowField: 'uId' }"
<Table ref="tableRef" :tree-config="{ transform: true, parentField: 'uPid', rowField: 'uId' }"
:checkbox-config="{ labelField: 'name', checkMethod: ({ row }) => true }"
:scroll-y="{ enabled: true }"
v-if="activeName == 0"
/>
:scroll-y="{ enabled: true }" v-if="activeName == 0" />
</el-tab-pane>
<el-tab-pane :name="1" :lazy="true" label="数据完整性图表">
<charts v-if="activeName == 1" ref="chartsRef" />
</el-tab-pane>
</el-tabs>
</div>
<el-dialog v-model="dialogVisible" draggable title="补招" width="500">
<el-dialog v-model="timePopUp" draggable title="补招" width="500">
补招时间:
<el-date-picker
v-model="timeData"
type="datetimerange"
format="YYYY-MM-DD HH:mm:00"
value-format="YYYY-MM-DD HH:mm:00"
range-separator=""
date-format="YYYY-MM-DD"
time-format="HH:mm:00"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 400px"
:disabledDate="disabledDate"
/>
<el-date-picker v-model="timeData" type="datetimerange" format="YYYY-MM-DD HH:mm:00"
value-format="YYYY-MM-DD HH:mm:00" range-separator="" date-format="YYYY-MM-DD" time-format="HH:mm:00"
start-placeholder="开始日期" end-placeholder="结束日期" style="width: 400px" :disabledDate="disabledDate" />
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button @click="timePopUp = false">取消</el-button>
<el-button type="primary" @click="makeUpSubmit">确认</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="logPopUp" draggable title="补招日志" width="800" @close="close">
<div class="logList" ref="logRef">
<p v-for="item in logList" :style="{
color: item.type === 'error' ? '#F56C6C' : ''
}">
<div style="width: 150px;"> {{ item.time }}</div>
<div style="flex: 1;">{{ item.name }}</div>
</p>
</div>
</el-dialog>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, watch } from 'vue'
import { ref, onMounted, watch, nextTick } from 'vue'
import { useDictData } from '@/stores/dictData'
import DatePicker from '@/components/form/datePicker/index.vue'
import { getAreaDept, FullRecall } from '@/api/harmonic-boot/area'
@@ -157,14 +106,23 @@ import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import charts from './components/charts.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { el, fa, tr } from 'element-plus/es/locale'
import socketClient from '@/utils/webSocketClient'
import { formatDate } from '@/utils/formatTime'
import { useAdminInfo } from '@/stores/adminInfo'
const adminInfo = useAdminInfo()
defineOptions({
name: 'harmonic-boot/harmonic/getIntegrityData'
})
const logRef = ref()
const tableRef = ref()
const chartsRef = ref()
const dictData = useDictData()
const dialogVisible = ref(false)
const timePopUp = ref(false)
const logPopUp = ref(false)
//开始创建webSocket客户端
const dataSocket = reactive({
socketServe: socketClient.Instance
})
//字典获取电压等级
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
//字典获取终端厂家
@@ -177,6 +135,7 @@ const classificationData = dictData.getBasicData('Statistical_Type', ['Report_Ty
const treeData = ref([])
const idArr = ref([])
const timeData = ref([])
const logList: any = ref([])
const activeName = ref(0)
const getTreeData = async () => {
await getAreaDept().then(res => {
@@ -199,6 +158,7 @@ const formData = ref({
// searchBeginTime: '',
// searchEndTime: ''
})
formData.value.deptIndex = treeData.value[0]?.id
const defaultProps = ref({
label: 'name',
@@ -382,7 +342,7 @@ const tree2List = (list: any, id?: string) => {
const disabledDate = (date: Date) => {
return date > new Date() // 如果日期大于当前日期,则禁用
}
onMounted(() => {})
onMounted(() => { })
// 补招
const makeUp = () => {
// tableRef.value && tableRef.value.getRef().getCheckboxRecords()
@@ -398,7 +358,8 @@ const makeUp = () => {
type: 'warning'
})
}
dialogVisible.value = true
timeData.value = []
timePopUp.value = true
}
// 补招提交
const makeUpSubmit = () => {
@@ -408,8 +369,7 @@ const makeUpSubmit = () => {
type: 'warning'
})
}
FullRecall({
let form = {
monitorId: tableRef.value
.getRef()
.getCheckboxRecords()
@@ -417,13 +377,36 @@ const makeUpSubmit = () => {
.map(item => item.id),
reCallEndTime: timeData.value[1],
reCallStartTime: timeData.value[0]
}).then(res => {
ElMessage({
message: '补招命令下发成功',
type: 'success'
}
socket(form)
timePopUp.value = false
logPopUp.value = true
}
const socket = async (form: any) => {
const url = (localStorage.getItem('WebSocketUrl2') || 'ws://192.168.1.67:10405/api/recell/')
logList.value = []
await dataSocket.socketServe.connect(`${url}${adminInfo.id}`)
await dataSocket.socketServe.send(form)
logList.value.push({
type: '',
time: formatDate(new Date(), 'YYYY-MM-DD hh:mm:ss'),
name: '开始补召,请稍等...',
})
dialogVisible.value = false
await dataSocket.socketServe.registerCallBack('message', (res: any) => {
logList.value.push({
type: res.code == 500 ? 'error' : '',
time: formatDate(new Date(), 'YYYY-MM-DD hh:mm:ss'),
name: res.message
})
setTimeout(() => {
logRef.value && (logRef.value.scrollTop = (logRef.value.scrollHeight + 30))
}, 10)
})
}
const close = () => {
dataSocket.socketServe?.closeWs()
}
watch(
() => treeData.value,
@@ -438,6 +421,8 @@ watch(
deep: true
}
)
</script>
<style lang="scss" scoped>
// .online {
@@ -541,4 +526,14 @@ watch(
color: var(--el-color-primary-light-3) !important;
}
}
.logList {
height: 300px;
overflow-y: auto;
p {
margin-bottom: 10px;
display: flex;
}
}
</style>

View File

@@ -31,38 +31,38 @@
<div>电压</div>
<div>
A相:
<span style="color: #DAA520">
<span style="color: #daa520">
{{ echartsData1?.options?.series[1].data[0].value }}
</span>
</div>
<div>
B相:
<span style="color: #2E8B57">
<span style="color: #2e8b57">
{{ echartsData1?.options?.series[1].data[1].value }}
</span>
</div>
<div>
C相:
<span style="color: #A52a2a">
<span style="color: #a52a2a">
{{ echartsData1?.options?.series[1].data[2].value }}
</span>
</div>
<div style="margin-top: 10px">电流</div>
<div>
A相:
<span style="color: #DAA520">
<span style="color: #daa520">
{{ echartsData1?.options?.series[0].data[0].value }}
</span>
</div>
<div>
B相:
<span style="color: #2E8B57">
<span style="color: #2e8b57">
{{ echartsData1?.options?.series[0].data[1].value }}
</span>
</div>
<div>
C相:
<span style="color: #A52a2a">
<span style="color: #a52a2a">
{{ echartsData1?.options?.series[0].data[2].value }}
</span>
</div>
@@ -744,6 +744,7 @@ const initEcharts = (color: string, key: number) => {
}
//渲染echarts
const init = () => {
const url = (localStorage.getItem('WebSocketUrl') || 'ws://192.168.1.68:10407/api/pushMessage/')
echartsDataV1.value = initEcharts('#DAA520', 0)
echartsDataV2.value = initEcharts('#2E8B57', 0)
echartsDataV3.value = initEcharts('#A52a2a', 0)
@@ -763,7 +764,9 @@ const init = () => {
})
}
let pids = monitoringPoint.state.pid.split(',')
dataSocket.socketServe.connect(`${adminInfo.id},${monitoringPoint.state.lineId},${pids[pids.length - 2]}`)
dataSocket.socketServe.connect(
`${url}${adminInfo.id},${monitoringPoint.state.lineId},${pids[pids.length - 2]}`
)
dataSocket.socketServe.registerCallBack('message', (res: any) => {
txtContent.value = res.value
let data = JSON.parse(res.value)

View File

@@ -127,7 +127,7 @@ const LngLat = [
]
import { getAssessOverview } from '@/api/device-boot/panorama'
narimap.Require(['PSRMap', 'Thematic', 'Components.Query','Components.MapSelector', 'Components.RegionSelector'], () => {
narimap.Require(['PSRMap', 'Thematic','ManageGrid', 'Components.Query','Components.MapSelector', 'Components.RegionSelector'], () => {
if (narimap.Config.examples.notlogin) {
initMap(narimap.Config.styles.sjRaster)
} else {