联调文件管理页面
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import createAxios from '@/utils/request'
|
import createAxios from '@/utils/request'
|
||||||
|
|
||||||
// 装置基础数据和模板数据
|
// 设备基础数据和模板数据
|
||||||
export function getDeviceData(deviceId: string, type: string, lineId: string) {
|
export function getDeviceData(deviceId: string, type: string, lineId: string) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('deviceId', deviceId)
|
form.append('deviceId', deviceId)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import createAxios from "@/utils/request";
|
import createAxios from '@/utils/request'
|
||||||
|
|
||||||
//根据Id获取台账信息
|
//根据Id获取台账信息
|
||||||
export function getInfoById(id: any) {
|
export function getInfoById(id: any) {
|
||||||
@@ -11,7 +11,6 @@ export function getInfoById(id: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//工程查询通过id获取
|
//工程查询通过id获取
|
||||||
export function getEngineerById(id: any) {
|
export function getEngineerById(id: any) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
@@ -23,7 +22,6 @@ export function getEngineerById(id: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//项目查询通过id获取
|
//项目查询通过id获取
|
||||||
export function getProjectById(id: any) {
|
export function getProjectById(id: any) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
@@ -53,7 +51,7 @@ export function getById(id: any) {
|
|||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csline/getById',
|
url: '/cs-device-boot/csline/getById',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: form
|
data: form
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,13 +73,15 @@ export function addLedger(data: any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//修改-删除项目
|
//修改-删除项目
|
||||||
export function deleteProject(id: any,name:any,area:any,description:any,status:any) {
|
export function deleteProject(id: any, name: any, area: any, description: any, status: any, sort: any, topoIds: any) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('id', id)
|
form.append('id', id)
|
||||||
form.append('name', name)
|
form.append('name', name)
|
||||||
form.append('area', area)
|
form.append('area', area)
|
||||||
form.append('description', description)
|
form.append('description', description)
|
||||||
form.append('status', status)
|
form.append('status', status)
|
||||||
|
form.append('sort', sort)
|
||||||
|
form.append('topoIds', topoIds)
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/project/auditAppProject',
|
url: '/cs-device-boot/project/auditAppProject',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
@@ -105,7 +105,7 @@ export const deleteLine = (id: any) => {
|
|||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('id', id)
|
form.append('id', id)
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csline/delCldLine',
|
url: '/cs-device-boot/csline/delCldLine',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: form
|
data: form
|
||||||
})
|
})
|
||||||
@@ -120,7 +120,6 @@ export function updateEquipment(data: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//修改监测点
|
//修改监测点
|
||||||
export function updateLine(data: any) {
|
export function updateLine(data: any) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
@@ -134,8 +133,7 @@ export function updateLine(data: any) {
|
|||||||
export function pushLog() {
|
export function pushLog() {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csTerminalLogs/pushCldInfo',
|
url: '/cs-device-boot/csTerminalLogs/pushCldInfo',
|
||||||
method: 'post',
|
method: 'post'
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +141,6 @@ export function pushLog() {
|
|||||||
export function queryPushResult() {
|
export function queryPushResult() {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csTerminalReply/queryData',
|
url: '/cs-device-boot/csTerminalReply/queryData',
|
||||||
method: 'post',
|
method: 'post'
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,86 +1,86 @@
|
|||||||
import createAxios from '@/utils/request'
|
import createAxios from '@/utils/request'
|
||||||
|
|
||||||
// 查询分组
|
// 查询分组
|
||||||
export function getGroup(dataSet: string) {
|
export function getGroup(dataSet: string) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('dataSet', dataSet)
|
form.append('dataSet', dataSet)
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csGroup/getGroup',
|
url: '/cs-device-boot/csGroup/getGroup',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/x-www-form-urlencoded'
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
},
|
},
|
||||||
data: form
|
data: form
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 装置分组实时数据
|
// 设备分组实时数据
|
||||||
export function deviceHisData(data: any) {
|
export function deviceHisData(data: any) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csGroup/deviceHistoryData',
|
url: '/cs-device-boot/csGroup/deviceHistoryData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: Object.assign(
|
data: Object.assign(
|
||||||
{
|
{
|
||||||
endTime: '',
|
endTime: '',
|
||||||
id: '',
|
id: '',
|
||||||
lineId: '',
|
lineId: '',
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
startTime: ''
|
startTime: ''
|
||||||
},
|
},
|
||||||
data
|
data
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 装置分组历史数据
|
// 设备分组历史数据
|
||||||
export function deviceRtData(data: any) {
|
export function deviceRtData(data: any) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('id', data.id)
|
form.append('id', data.id)
|
||||||
form.append('lineId', data.lineId)
|
form.append('lineId', data.lineId)
|
||||||
form.append('pageNum', data.pageNum)
|
form.append('pageNum', data.pageNum)
|
||||||
form.append('pageSize', data.pageSize)
|
form.append('pageSize', data.pageSize)
|
||||||
form.append('searchValue', data.searchValue)
|
form.append('searchValue', data.searchValue)
|
||||||
form.append('dataLevel', data.dataLevel)
|
form.append('dataLevel', data.dataLevel)
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/csGroup/deviceRtData',
|
url: '/cs-device-boot/csGroup/deviceRtData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/x-www-form-urlencoded'
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
},
|
},
|
||||||
data: form
|
data: form
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 装置分组历史数据
|
// 设备分组历史数据
|
||||||
export function realTimeData(data: any) {
|
export function realTimeData(data: any) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('id', data.id)
|
form.append('id', data.id)
|
||||||
form.append('lineId', data.lineId)
|
form.append('lineId', data.lineId)
|
||||||
form.append('pageNum', data.pageNum)
|
form.append('pageNum', data.pageNum)
|
||||||
form.append('pageSize', data.pageSize)
|
form.append('pageSize', data.pageSize)
|
||||||
form.append('searchValue', data.searchValue)
|
form.append('searchValue', data.searchValue)
|
||||||
form.append('targetType', data.targetType)
|
form.append('targetType', data.targetType)
|
||||||
form.append('dataLevel', data.dataLevel)
|
form.append('dataLevel', data.dataLevel)
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-harmonic-boot/data/realTimeData',
|
url: '/cs-harmonic-boot/data/realTimeData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 设备监控-》测试项数据
|
// 设备监控-》测试项数据
|
||||||
export function getTestData(data: any) {
|
export function getTestData(data: any) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-harmonic-boot/data/getTestData',
|
url: '/cs-harmonic-boot/data/getTestData',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 设备监控-删除装置测试项
|
// 设备监控-删除设备测试项
|
||||||
export function deleteItem(data: any) {
|
export function deleteItem(data: any) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: '/cs-device-boot/wlRecord/deleteItem',
|
url: '/cs-device-boot/wlRecord/deleteItem',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
params: data
|
params: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,37 @@ export function downloadFileFromFrontr(data: any) {
|
|||||||
responseType: 'blob'
|
responseType: 'blob'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 删除文件
|
||||||
|
export function deleteCld(data: any) {
|
||||||
|
return createAxios({
|
||||||
|
url: `/zl-event-boot/file/delete`,
|
||||||
|
method: 'POST',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 新建文件
|
||||||
|
export function mkdir(data: any) {
|
||||||
|
return createAxios({
|
||||||
|
url: `/zl-event-boot/file/mkdir`,
|
||||||
|
method: 'POST',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 上传文件
|
||||||
|
export function uploadFileToFront(obj: any) {
|
||||||
|
let form = new FormData()
|
||||||
|
form.append('file', obj.file)
|
||||||
|
form.append('devId', obj.devId)
|
||||||
|
form.append('dirPath', obj.dirPath)
|
||||||
|
return createAxios({
|
||||||
|
url: `/zl-event-boot/file/uploadFileToFront`,
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
},
|
||||||
|
data: form
|
||||||
|
})
|
||||||
|
}
|
||||||
//设备文件下载
|
//设备文件下载
|
||||||
export function downLoadDeviceFile(data) {
|
export function downLoadDeviceFile(data) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
@@ -54,7 +85,7 @@ export function downLoadDeviceFilePath(obj) {
|
|||||||
data: form
|
data: form
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//装置重启
|
//设备重启
|
||||||
export function reStartDevice(data) {
|
export function reStartDevice(data) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: `/cs-device-boot/EquipmentDelivery/rebootDevice?nDid=${data.nDid}`,
|
url: `/cs-device-boot/EquipmentDelivery/rebootDevice?nDid=${data.nDid}`,
|
||||||
@@ -62,7 +93,7 @@ export function reStartDevice(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//上传文件至装置
|
//上传文件至设备
|
||||||
export function uploadDeviceFile(data) {
|
export function uploadDeviceFile(data) {
|
||||||
let form = new FormData()
|
let form = new FormData()
|
||||||
form.append('file', data.file)
|
form.append('file', data.file)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export function getMakeUpData(data: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询装置目录-文件
|
//查询设备目录-文件
|
||||||
export function getAskDirOrFile(data: any) {
|
export function getAskDirOrFile(data: any) {
|
||||||
return createAxios({
|
return createAxios({
|
||||||
url: `/cs-harmonic-boot/offlineDataUpload/askDirOrFile?fileType=${data.fileType}&nDid=${data.nDid}&path=${data.path}&prjName=${data.prjName}`,
|
url: `/cs-harmonic-boot/offlineDataUpload/askDirOrFile?fileType=${data.fileType}&nDid=${data.nDid}&path=${data.path}&prjName=${data.prjName}`,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
<el-tree
|
<el-tree
|
||||||
:style="{
|
:style="{
|
||||||
height:
|
height:
|
||||||
bxsDeviceData.length != 0
|
treeType.length != 0
|
||||||
? `calc(100vh - 380px - ${props.height}px)`
|
? `calc(100vh - 380px - ${props.height}px)`
|
||||||
: 'calc(100vh - 278px)'
|
: 'calc(100vh - 278px)'
|
||||||
}"
|
}"
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
</el-collapse>
|
</el-collapse>
|
||||||
<div v-if="treeType == '2'" v-loading="loading">
|
<div v-if="treeType == '2'" v-loading="loading">
|
||||||
<el-tree
|
<el-tree
|
||||||
:style="{ height: 'calc(100vh - 188px)' }"
|
:style="{ height: `calc(100vh - 188px - ${props.height}px )` }"
|
||||||
ref="treeRef4"
|
ref="treeRef4"
|
||||||
:props="defaultProps"
|
:props="defaultProps"
|
||||||
highlight-current
|
highlight-current
|
||||||
@@ -200,6 +200,7 @@ interface Props {
|
|||||||
type?: string
|
type?: string
|
||||||
data?: any
|
data?: any
|
||||||
height?: number
|
height?: number
|
||||||
|
engineering: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
@@ -207,7 +208,8 @@ const props = withDefaults(defineProps<Props>(), {
|
|||||||
canExpand: true,
|
canExpand: true,
|
||||||
type: '',
|
type: '',
|
||||||
data: [],
|
data: [],
|
||||||
height: 0
|
height: 0,
|
||||||
|
engineering: false
|
||||||
})
|
})
|
||||||
const treeType = ref('1')
|
const treeType = ref('1')
|
||||||
const options = [
|
const options = [
|
||||||
@@ -417,6 +419,7 @@ const treeRef3 = ref<InstanceType<typeof ElTree>>()
|
|||||||
const treeRef4 = ref<InstanceType<typeof ElTree>>()
|
const treeRef4 = ref<InstanceType<typeof ElTree>>()
|
||||||
defineExpose({ treeRef1, treeRef2, treeRef3, treeRef4 })
|
defineExpose({ treeRef1, treeRef2, treeRef3, treeRef4 })
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
treeType.value = props.engineering ? '2' : '1'
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setActiveName()
|
setActiveName()
|
||||||
}, 500)
|
}, 500)
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
<template>
|
<template>
|
||||||
<Tree ref="treRef" :width="width" :showPush="props.showPush" :data="tree" default-expand-all @changePointType="changePointType" @onAdd="onAdd"/>
|
<Tree
|
||||||
|
ref="treRef"
|
||||||
|
:width="width"
|
||||||
|
:showPush="props.showPush"
|
||||||
|
:expand-on-click-node="false"
|
||||||
|
:data="tree"
|
||||||
|
@changePointType="changePointType"
|
||||||
|
@onAdd="onAdd"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, nextTick, onMounted, defineProps } from 'vue'
|
import { ref, nextTick, onMounted, defineProps } from 'vue'
|
||||||
import Tree from '../index.vue'
|
import Tree from '../index.vue'
|
||||||
import { getLineTree,getCldTree } from '@/api/cs-device-boot/csLedger'
|
import { getLineTree, getCldTree } from '@/api/cs-device-boot/csLedger'
|
||||||
import { useConfig } from '@/stores/config'
|
import { useConfig } from '@/stores/config'
|
||||||
import { querySysExcel } from '@/api/harmonic-boot/luckyexcel'
|
import { querySysExcel } from '@/api/harmonic-boot/luckyexcel'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
@@ -22,136 +30,61 @@ defineOptions({
|
|||||||
name: 'govern/deviceTree'
|
name: 'govern/deviceTree'
|
||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['init', 'checkChange', 'pointTypeChange', 'Policy','onAdd'])
|
const emit = defineEmits(['init', 'checkChange', 'pointTypeChange', 'Policy', 'onAdd'])
|
||||||
const config = useConfig()
|
const config = useConfig()
|
||||||
const tree = ref()
|
const tree = ref()
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const treRef = ref()
|
const treRef = ref()
|
||||||
const width = ref('')
|
const width = ref('')
|
||||||
|
|
||||||
|
|
||||||
const info = (selectedNodeId?: string) => {
|
const info = (selectedNodeId?: string) => {
|
||||||
tree.value = []
|
tree.value = []
|
||||||
let arr1: any[] = []
|
let arr1: any[] = []
|
||||||
getCldTree().then(res => {
|
getCldTree().then(res => {
|
||||||
try {
|
res.data.icon = 'el-icon-Menu'
|
||||||
// 检查响应数据结构
|
res.data.color = config.getColorVal('elementUiPrimary')
|
||||||
let rootData = null;
|
res.data?.children.map((item: any) => {
|
||||||
if (Array.isArray(res.data)) {
|
item.icon = 'el-icon-HomeFilled'
|
||||||
// 旧的数据结构 - 数组
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
rootData = res.data.find((item: any) => item.name == '监测设备');
|
item.children.forEach((item: any) => {
|
||||||
} else if (res.data && res.data.name == '监测设备') {
|
item.icon = 'el-icon-List'
|
||||||
// 新的数据结构 - 单个对象
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
rootData = res.data;
|
item.children.forEach((item2: any) => {
|
||||||
}
|
// item2.icon = 'el-icon-List'
|
||||||
|
// item2.color = config.getColorVal('elementUiPrimary')
|
||||||
// 治理设备
|
item2.icon = 'el-icon-Platform'
|
||||||
if (rootData) {
|
item2.level = 2
|
||||||
rootData.icon = 'el-icon-Menu'
|
item2.color = item2.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
||||||
rootData.level = 0
|
item2.children.forEach((item3: any) => {
|
||||||
rootData.color = config.getColorVal('elementUiPrimary')
|
item3.icon = 'el-icon-Platform'
|
||||||
// 确保根节点的 children 是数组
|
item3.color =
|
||||||
if (!Array.isArray(rootData.children)) {
|
item3.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
||||||
rootData.children = []
|
arr1.push(item3)
|
||||||
}
|
|
||||||
rootData.children.forEach((item: any) => {
|
|
||||||
item.icon = 'el-icon-HomeFilled'
|
|
||||||
item.level = 1
|
|
||||||
item.color = config.getColorVal('elementUiPrimary')
|
|
||||||
// 确保 children 是数组
|
|
||||||
if (!Array.isArray(item.children)) {
|
|
||||||
item.children = []
|
|
||||||
}
|
|
||||||
item.children.forEach((item2: any) => {
|
|
||||||
item2.icon = 'el-icon-List'
|
|
||||||
item2.level = 2
|
|
||||||
item2.color = config.getColorVal('elementUiPrimary')
|
|
||||||
|
|
||||||
// 确保 children 是数组
|
|
||||||
if (!Array.isArray(item2.children)) {
|
|
||||||
item2.children = []
|
|
||||||
}
|
|
||||||
item2.children.forEach((item3: any) => {
|
|
||||||
item3.icon = 'el-icon-Platform'
|
|
||||||
item3.level = 3
|
|
||||||
item3.color =
|
|
||||||
item3.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
|
||||||
|
|
||||||
// 确保 children 是数组
|
|
||||||
if (!Array.isArray(item3.children)) {
|
|
||||||
item3.children = []
|
|
||||||
}
|
|
||||||
|
|
||||||
item3.children.forEach((item4: any) => {
|
|
||||||
item4.icon = 'el-icon-Platform'
|
|
||||||
item4.level = 4
|
|
||||||
item4.color =
|
|
||||||
item4.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
|
||||||
arr1.push(item4)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
tree.value = [rootData] // 确保 tree.value 是数组
|
|
||||||
} else {
|
|
||||||
tree.value = []
|
|
||||||
}
|
|
||||||
nextTick(() => {
|
|
||||||
|
|
||||||
if (arr1.length) {
|
|
||||||
// 安全检查 treRef 和 treeRef 是否存在
|
|
||||||
console.log("🚀 ~ info ~ treRef.value && treRef.value.treeRef && treRef.value.treeRef.setCurrentKey:", treRef.value && treRef.value.treeRef1 && treRef.value.treeRef1.setCurrentKey)
|
|
||||||
|
|
||||||
if (treRef.value && treRef.value.treeRef && treRef.value.treeRef.setCurrentKey) {
|
|
||||||
// 如果传入了要选中的节点ID,则选中该节点,否则选中第一个节点
|
|
||||||
console.log('selectedNodeId:', selectedNodeId);
|
|
||||||
if (selectedNodeId) {
|
|
||||||
treRef.value.treeRef.setCurrentKey(selectedNodeId);
|
|
||||||
// 查找对应的节点数据并触发事件
|
|
||||||
let selectedNode = null;
|
|
||||||
const findNode = (nodes: any[]) => {
|
|
||||||
for (const node of nodes) {
|
|
||||||
if (node.id === selectedNodeId) {
|
|
||||||
selectedNode = node;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (node.children && findNode(node.children)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
findNode(tree.value);
|
|
||||||
|
|
||||||
if (selectedNode) {
|
|
||||||
emit('init', {
|
|
||||||
level: selectedNode.level,
|
|
||||||
...selectedNode
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 初始化选中第一个节点
|
|
||||||
treRef.value.treeRef.setCurrentKey(arr1[0].id);
|
|
||||||
emit('init', {
|
|
||||||
level: 2,
|
|
||||||
...arr1[0]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
} catch (error) {
|
})
|
||||||
console.error('Error in processing getCldTree response:', error)
|
tree.value = [res.data]
|
||||||
}
|
|
||||||
|
nextTick(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
//初始化选中
|
||||||
|
|
||||||
|
treRef.value?.treeRef.setCurrentKey(arr1[0].id)
|
||||||
|
// 注册父组件事件
|
||||||
|
emit('init', {
|
||||||
|
level: 3,
|
||||||
|
...arr1[0]
|
||||||
|
})
|
||||||
|
changePointType('4', arr1[0])
|
||||||
|
return
|
||||||
|
}, 500)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const changePointType = (val: any, obj: any) => {
|
const changePointType = (val: any, obj: any) => {
|
||||||
emit('pointTypeChange', val, obj)
|
// emit('pointTypeChange', val, obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onAdd = () => {
|
const onAdd = () => {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
:height="props.height"
|
:height="props.height"
|
||||||
@changeDeviceType="changeDeviceType"
|
@changeDeviceType="changeDeviceType"
|
||||||
@changeTreeType="info"
|
@changeTreeType="info"
|
||||||
|
:engineering="props.engineering"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ import Tree from '../device.vue'
|
|||||||
import { getDeviceTree } from '@/api/cs-device-boot/csLedger'
|
import { getDeviceTree } from '@/api/cs-device-boot/csLedger'
|
||||||
import { useConfig } from '@/stores/config'
|
import { useConfig } from '@/stores/config'
|
||||||
import { throttle } from 'lodash'
|
import { throttle } from 'lodash'
|
||||||
import { on } from 'events'
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'govern/deviceTree'
|
name: 'govern/deviceTree'
|
||||||
})
|
})
|
||||||
@@ -26,11 +27,13 @@ const props = withDefaults(
|
|||||||
showCheckbox?: boolean
|
showCheckbox?: boolean
|
||||||
defaultCheckedKeys?: any
|
defaultCheckedKeys?: any
|
||||||
height?: number
|
height?: number
|
||||||
|
engineering?: boolean
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
showCheckbox: false,
|
showCheckbox: false,
|
||||||
defaultCheckedKeys: [],
|
defaultCheckedKeys: [],
|
||||||
height: 0
|
height: 0,
|
||||||
|
engineering: false
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
const emit = defineEmits(['init', 'checkChange', 'deviceTypeChange'])
|
const emit = defineEmits(['init', 'checkChange', 'deviceTypeChange'])
|
||||||
@@ -50,13 +53,13 @@ const info = (type?: string) => {
|
|||||||
//治理设备
|
//治理设备
|
||||||
res.data.map((item: any) => {
|
res.data.map((item: any) => {
|
||||||
if (type == '2') {
|
if (type == '2') {
|
||||||
item.icon = 'el-icon-Menu'
|
item.icon = 'el-icon-HomeFilled'
|
||||||
item.color = config.getColorVal('elementUiPrimary')
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
item.children.forEach((item: any) => {
|
item.children.forEach((item: any) => {
|
||||||
item.icon = 'el-icon-HomeFilled'
|
item.icon = 'el-icon-List'
|
||||||
item.color = config.getColorVal('elementUiPrimary')
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
item.children.forEach((item2: any) => {
|
item.children.forEach((item2: any) => {
|
||||||
item2.icon = 'el-icon-List'
|
item2.icon = 'el-icon-Platform'
|
||||||
item2.color = config.getColorVal('elementUiPrimary')
|
item2.color = config.getColorVal('elementUiPrimary')
|
||||||
item2.color =
|
item2.color =
|
||||||
item2.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
item2.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
||||||
@@ -182,7 +185,7 @@ const info = (type?: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
info('1')
|
info(props.engineering ? '2' : '1')
|
||||||
})
|
})
|
||||||
|
|
||||||
throttle(
|
throttle(
|
||||||
|
|||||||
@@ -45,14 +45,18 @@ const info = (type?: string) => {
|
|||||||
|
|
||||||
res.data.map((item: any) => {
|
res.data.map((item: any) => {
|
||||||
if (type == '2') {
|
if (type == '2') {
|
||||||
item.icon = 'el-icon-Menu'
|
item.icon = 'el-icon-HomeFilled'
|
||||||
item.color = config.getColorVal('elementUiPrimary')
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
item.children.forEach((item: any) => {
|
item.children.forEach((item: any) => {
|
||||||
item.icon = 'el-icon-HomeFilled'
|
item.icon = 'el-icon-List'
|
||||||
item.color = config.getColorVal('elementUiPrimary')
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
item.children.forEach((item2: any) => {
|
item.children.forEach((item2: any) => {
|
||||||
item2.icon = 'el-icon-List'
|
// item2.icon = 'el-icon-List'
|
||||||
item2.color = config.getColorVal('elementUiPrimary')
|
// item2.color = config.getColorVal('elementUiPrimary')
|
||||||
|
item2.icon = 'el-icon-Platform'
|
||||||
|
item2.level = 2
|
||||||
|
item2.color =
|
||||||
|
item2.comFlag === 2 ? config.getColorVal('elementUiPrimary') : '#e26257 !important'
|
||||||
item2.children.forEach((item3: any) => {
|
item2.children.forEach((item3: any) => {
|
||||||
item3.icon = 'el-icon-Platform'
|
item3.icon = 'el-icon-Platform'
|
||||||
|
|
||||||
|
|||||||
@@ -1,41 +1,61 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :style="{ width: menuCollapse ? '40px' : props.width }" style='transition: all 0.3s; overflow: hidden;'>
|
<div :style="{ width: menuCollapse ? '40px' : props.width }" style="transition: all 0.3s; overflow: hidden">
|
||||||
<Icon v-show='menuCollapse' @click='onMenuCollapse' :name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'"
|
<Icon
|
||||||
:class="menuCollapse ? 'unfold' : ''" size='18' class='fold ml10 mt20 menu-collapse'
|
v-show="menuCollapse"
|
||||||
style='cursor: pointer' />
|
@click="onMenuCollapse"
|
||||||
<div class='cn-tree' :style='{ opacity: menuCollapse ? 0 : 1 }'>
|
:name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'"
|
||||||
<div style='display: flex; align-items: center' class='mb10'>
|
:class="menuCollapse ? 'unfold' : ''"
|
||||||
<el-input maxlength="32" v-model.trim='filterText' placeholder='请输入内容' clearable>
|
size="18"
|
||||||
|
class="fold ml10 mt20 menu-collapse"
|
||||||
|
style="cursor: pointer"
|
||||||
|
/>
|
||||||
|
<div class="cn-tree" :style="{ opacity: menuCollapse ? 0 : 1 }">
|
||||||
|
<div style="display: flex; align-items: center" class="mb10">
|
||||||
|
<el-input maxlength="32" v-model.trim="filterText" placeholder="请输入内容" clearable>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<Icon name='el-icon-Search' style='font-size: 16px' />
|
<Icon name="el-icon-Search" style="font-size: 16px" />
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-tooltip placement="bottom" :hide-after="0" v-if="props.showPush">
|
<el-tooltip placement="bottom" :hide-after="0" v-if="props.showPush">
|
||||||
<template #content>
|
<template #content>
|
||||||
<span>台账推送</span>
|
<span>台账推送</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<Icon
|
<Icon
|
||||||
name="el-icon-Promotion"
|
name="el-icon-Promotion"
|
||||||
size="20"
|
size="20"
|
||||||
class="fold ml10 menu-collapse"
|
class="fold ml10 mr10 menu-collapse"
|
||||||
style="cursor: pointer;"
|
style="cursor: pointer"
|
||||||
:style="{ color: config.getColorVal('elementUiPrimary') }"
|
:style="{ color: config.getColorVal('elementUiPrimary') }"
|
||||||
@click="onAdd" />
|
@click="onAdd"
|
||||||
|
/>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<!-- <Icon @click='onMenuCollapse' :name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'" v-else
|
<!-- <Icon @click='onMenuCollapse' :name="menuCollapse ? 'el-icon-Expand' : 'el-icon-Fold'" v-else
|
||||||
:class="menuCollapse ? 'unfold' : ''" size='18' class='fold ml10 menu-collapse'
|
:class="menuCollapse ? 'unfold' : ''" size='18' class='fold ml10 menu-collapse'
|
||||||
style='cursor: pointer' v-if='props.canExpand' /> -->
|
style='cursor: pointer' v-if='props.canExpand' /> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-tree :style="{ height: 'calc(100vh - 190px)' }"
|
<el-tree
|
||||||
style=' overflow: auto;' ref='treeRef' :props='defaultProps' highlight-current :default-expand-all="false"
|
:style="{ height: 'calc(100vh - 190px)' }"
|
||||||
@check-change="checkTreeNodeChange" :filter-node-method='filterNode' node-key='id' v-bind='$attrs'>
|
style="overflow: auto"
|
||||||
<template #default='{ node, data }'>
|
ref="treeRef"
|
||||||
<span class='custom-tree-node'>
|
:props="defaultProps"
|
||||||
<Icon :name='data.icon' style='font-size: 16px' :style='{ color: data.color }'
|
highlight-current
|
||||||
v-if='data.icon' />
|
:default-expand-all="false"
|
||||||
<span style='margin-left: 4px'>{{ node.label }}</span>
|
@check-change="checkTreeNodeChange"
|
||||||
|
:filter-node-method="filterNode"
|
||||||
|
node-key="id"
|
||||||
|
v-bind="$attrs"
|
||||||
|
>
|
||||||
|
<template #default="{ node, data }">
|
||||||
|
<span class="custom-tree-node">
|
||||||
|
<Icon
|
||||||
|
:name="data.icon"
|
||||||
|
style="font-size: 16px"
|
||||||
|
:style="{ color: data.color }"
|
||||||
|
v-if="data.icon"
|
||||||
|
/>
|
||||||
|
<span style="margin-left: 4px">{{ node.label }}</span>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-tree>
|
</el-tree>
|
||||||
@@ -43,12 +63,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang='ts' setup>
|
<script lang="ts" setup>
|
||||||
import useCurrentInstance from '@/utils/useCurrentInstance'
|
import useCurrentInstance from '@/utils/useCurrentInstance'
|
||||||
import { ElTree } from 'element-plus'
|
import { ElTree } from 'element-plus'
|
||||||
import { emit } from 'process';
|
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch } from 'vue'
|
||||||
import { t } from 'vxe-table';
|
|
||||||
import { useConfig } from '@/stores/config'
|
import { useConfig } from '@/stores/config'
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
@@ -74,7 +92,7 @@ const defaultProps = {
|
|||||||
label: 'name',
|
label: 'name',
|
||||||
value: 'id'
|
value: 'id'
|
||||||
}
|
}
|
||||||
const emit = defineEmits(['checkTreeNodeChange','onAdd'])
|
const emit = defineEmits(['checkTreeNodeChange', 'onAdd'])
|
||||||
watch(filterText, val => {
|
watch(filterText, val => {
|
||||||
treeRef.value!.filter(val)
|
treeRef.value!.filter(val)
|
||||||
})
|
})
|
||||||
@@ -83,18 +101,16 @@ const onMenuCollapse = () => {
|
|||||||
proxy.eventBus.emit('cnTreeCollapse', menuCollapse)
|
proxy.eventBus.emit('cnTreeCollapse', menuCollapse)
|
||||||
}
|
}
|
||||||
const filterNode = (value: string, data: any, node: any) => {
|
const filterNode = (value: string, data: any, node: any) => {
|
||||||
console.log(value, data, node, 'filterNode');
|
console.log(value, data, node, 'filterNode')
|
||||||
if (!value) return true
|
if (!value) return true
|
||||||
// return data.name.includes(value)
|
// return data.name.includes(value)
|
||||||
if (data.name) {
|
if (data.name) {
|
||||||
|
|
||||||
return chooseNode(value, data, node)
|
return chooseNode(value, data, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
|
// 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
|
||||||
const chooseNode = (value: string, data: any, node: any) => {
|
const chooseNode = (value: string, data: any, node: any) => {
|
||||||
|
|
||||||
if (data.name.indexOf(value) !== -1) {
|
if (data.name.indexOf(value) !== -1) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -132,13 +148,13 @@ const treeRef = ref<InstanceType<typeof ElTree>>()
|
|||||||
defineExpose({ treeRef })
|
defineExpose({ treeRef })
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss' scoped>
|
<style lang="scss" scoped>
|
||||||
.cn-tree {
|
.cn-tree {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 10px;
|
// padding: 10px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
|
|
||||||
<el-tree
|
<el-tree
|
||||||
:style="{ height: bxsDeviceData.length != 0 ? 'calc(100vh - 380px)' : 'calc(100vh - 278px)' }"
|
:style="{ height: treeType.length != 0 ? 'calc(100vh - 380px)' : 'calc(100vh - 278px)' }"
|
||||||
ref="treeRef1"
|
ref="treeRef1"
|
||||||
:props="defaultProps"
|
:props="defaultProps"
|
||||||
highlight-current
|
highlight-current
|
||||||
@@ -355,7 +355,7 @@ function filterProcess(nodes: any) {
|
|||||||
// 递归处理子节点
|
// 递归处理子节点
|
||||||
const children = node.children ? filterProcess(node.children) : []
|
const children = node.children ? filterProcess(node.children) : []
|
||||||
|
|
||||||
// 对于装置层级(level=2),只保留 process 值匹配的节点
|
// 对于设备层级(level=2),只保留 process 值匹配的节点
|
||||||
if (node.level === 2) {
|
if (node.level === 2) {
|
||||||
if (node.process == process.value) {
|
if (node.process == process.value) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<pane style="background: #fff">
|
<pane style="background: #fff">
|
||||||
<div class="device-manage-right">
|
<div class="device-manage-right">
|
||||||
<el-form :inline="true" class="demo-form-inline" style="height: 42px">
|
<el-form :inline="true" class="demo-form-inline" style="height: 42px">
|
||||||
<el-form-item style="position: relative; z-index: 2">
|
<el-form-item style="position: relative; z-index: 2" v-if="connectionMethod != 'MQTT'">
|
||||||
<el-button icon="el-icon-Plus" type="primary" @click="add" v-if="nodeLevel != 4">
|
<el-button icon="el-icon-Plus" type="primary" @click="add" v-if="nodeLevel != 4">
|
||||||
{{
|
{{
|
||||||
nodeLevel == 0
|
nodeLevel == 0
|
||||||
@@ -57,7 +57,13 @@
|
|||||||
修改提交
|
修改提交
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item style="right: 500px; position: absolute; overflow: hidden">
|
<el-form-item style="position: relative; z-index: 2" v-else>
|
||||||
|
<span style="font-size: 16px; font-weight: bold; color: var(--el-color-primary)">
|
||||||
|
治理设备/便携式设备不支持操作!
|
||||||
|
</span>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item style="right: 300px; position: absolute; overflow: hidden">
|
||||||
<LocationInformation
|
<LocationInformation
|
||||||
style="width: 16px; margin-right: 8px; color: var(--el-color-primary)"
|
style="width: 16px; margin-right: 8px; color: var(--el-color-primary)"
|
||||||
/>
|
/>
|
||||||
@@ -66,7 +72,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item style="right: 0; position: absolute; overflow: hidden">
|
<el-form-item style="right: 0; position: absolute; overflow: hidden">
|
||||||
<div class="title" :class="titleList.length > 5 ? 'titleScroll' : ''">
|
<div class="title" :class="titleList.length > 2 ? 'titleScroll' : ''">
|
||||||
<span v-for="(item, index) in titleList" :key="index">
|
<span v-for="(item, index) in titleList" :key="index">
|
||||||
{{ index == 0 ? '' : ' > ' }}{{ item }}
|
{{ index == 0 ? '' : ' > ' }}{{ item }}
|
||||||
</span>
|
</span>
|
||||||
@@ -82,28 +88,24 @@
|
|||||||
ref="mainForm"
|
ref="mainForm"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
>
|
>
|
||||||
<el-form-item
|
|
||||||
id="id100"
|
|
||||||
class="form-item"
|
|
||||||
label="设备名称:"
|
|
||||||
:rules="{ required: true, message: '请输入设备名称', trigger: 'blur' }"
|
|
||||||
>
|
|
||||||
<el-select
|
|
||||||
clearable
|
|
||||||
filterable
|
|
||||||
v-model="project[2].name"
|
|
||||||
:disabled="true"
|
|
||||||
placeholder="请选择设备类型"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in project"
|
|
||||||
:key="item.name"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<!--工程-->
|
<!--工程-->
|
||||||
|
<el-form-item
|
||||||
|
id="id300"
|
||||||
|
class="form-item"
|
||||||
|
label="工程名称:"
|
||||||
|
v-if="nodeLevel > 0 || pageStatus == 2"
|
||||||
|
prop="engineeringParam.name"
|
||||||
|
:rules="{ required: true, message: '请输入工程名称', trigger: 'blur' }"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model="formData.engineeringParam.name"
|
||||||
|
placeholder="请输入工程名称"
|
||||||
|
:disabled="
|
||||||
|
!((nodeLevel == 1 && pageStatus == 3) || (nodeLevel == 0 && pageStatus == 2))
|
||||||
|
"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
<!-- 省下拉框 -->
|
<!-- 省下拉框 -->
|
||||||
<el-form-item
|
<el-form-item
|
||||||
id="id200"
|
id="id200"
|
||||||
@@ -157,25 +159,8 @@
|
|||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item
|
<el-form-item
|
||||||
id="id300"
|
|
||||||
class="form-item"
|
|
||||||
label="工程名称:"
|
|
||||||
v-if="nodeLevel > 0 || pageStatus == 2"
|
|
||||||
prop="engineeringParam.name"
|
|
||||||
:rules="{ required: true, message: '请输入工程名称', trigger: 'blur' }"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
clearable
|
|
||||||
v-model="formData.engineeringParam.name"
|
|
||||||
placeholder="请输入工程名称"
|
|
||||||
:disabled="
|
|
||||||
!((nodeLevel == 1 && pageStatus == 3) || (nodeLevel == 0 && pageStatus == 2))
|
|
||||||
"
|
|
||||||
></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
id="id300"
|
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="描述:"
|
label="描述:"
|
||||||
prop="engineeringParam.description"
|
prop="engineeringParam.description"
|
||||||
@@ -190,6 +175,23 @@
|
|||||||
"
|
"
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
class="form-item"
|
||||||
|
label="排序:"
|
||||||
|
prop="engineeringParam.sort"
|
||||||
|
v-if="nodeLevel > 0 || pageStatus == 2"
|
||||||
|
:rules="[{ required: true, message: '请输入排序', trigger: 'blur' }]"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model.trim.number="formData.engineeringParam.sort"
|
||||||
|
placeholder="请输入排序"
|
||||||
|
:disabled="
|
||||||
|
!((nodeLevel == 1 && pageStatus == 3) || (nodeLevel == 0 && pageStatus == 2))
|
||||||
|
"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<!--项目-->
|
<!--项目-->
|
||||||
<div style="width: 100%" v-if="nodeLevel > 0 || pageStatus == 2">
|
<div style="width: 100%" v-if="nodeLevel > 0 || pageStatus == 2">
|
||||||
<el-tabs
|
<el-tabs
|
||||||
@@ -198,7 +200,7 @@
|
|||||||
:addable="false"
|
:addable="false"
|
||||||
:closable="pageStatus != 1"
|
:closable="pageStatus != 1"
|
||||||
@edit="handleDeviceTabsEdit"
|
@edit="handleDeviceTabsEdit"
|
||||||
@tab-click="tabChange('deviceIndex')"
|
@tab-click="tabChange('deviceIndex', $event)"
|
||||||
>
|
>
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
v-for="(item, index) in formData.projectInfoList"
|
v-for="(item, index) in formData.projectInfoList"
|
||||||
@@ -266,6 +268,63 @@
|
|||||||
"
|
"
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
label="拓扑图:"
|
||||||
|
:prop="'projectInfoList[' + index + '].topoId'"
|
||||||
|
:rules="[
|
||||||
|
{ required: true, message: '请选择拓扑图', trigger: 'change' }
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<el-select
|
||||||
|
v-model="item.topoId"
|
||||||
|
placeholder="请选择拓扑图"
|
||||||
|
popper-class="productSelector "
|
||||||
|
:disabled="
|
||||||
|
!(
|
||||||
|
(nodeLevel == 2 && pageStatus == 3) ||
|
||||||
|
((nodeLevel == 1 || (nodeLevel == 0 && pageStatus == 2)) &&
|
||||||
|
pageStatus == 2)
|
||||||
|
)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in images"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
>
|
||||||
|
<span>
|
||||||
|
<img
|
||||||
|
:src="item.url"
|
||||||
|
v-if="item.url"
|
||||||
|
class="image-preview"
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
<span style="float: right">
|
||||||
|
{{ item.name }}
|
||||||
|
</span>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
class="form-item"
|
||||||
|
label="排序:"
|
||||||
|
:prop="'projectInfoList[' + index + '].sort'"
|
||||||
|
:rules="[{ required: true, message: '请输入排序', trigger: 'blur' }]"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model.trim.number="item.sort"
|
||||||
|
placeholder="请输入排序"
|
||||||
|
:disabled="
|
||||||
|
!(
|
||||||
|
(nodeLevel == 2 && pageStatus == 3) ||
|
||||||
|
((nodeLevel == 1 || (nodeLevel == 0 && pageStatus == 2)) &&
|
||||||
|
pageStatus == 2)
|
||||||
|
)
|
||||||
|
"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
@@ -282,27 +341,27 @@
|
|||||||
:addable="false"
|
:addable="false"
|
||||||
:closable="pageStatus != 1"
|
:closable="pageStatus != 1"
|
||||||
@edit="handleBusBarTabsEdit"
|
@edit="handleBusBarTabsEdit"
|
||||||
@tab-click="tabChange('busBarIndex')"
|
@tab-click="tabChange('busBarIndex', $event)"
|
||||||
>
|
>
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
v-for="(busItem, bIndex) in formData.deviceInfoList"
|
v-for="(busItem, bIndex) in formData.deviceInfoList"
|
||||||
:key="bIndex"
|
:key="bIndex"
|
||||||
:label="busItem.name ? busItem.name : '新建装置' + bIndex"
|
:label="busItem.name ? busItem.name : '新建设备' + bIndex"
|
||||||
:name="bIndex + ''"
|
:name="bIndex + ''"
|
||||||
>
|
>
|
||||||
<div class="flex mt10">
|
<div class="flex mt10" v-if="busItem.devAccessMethod == 'CLD'">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="装置名称:"
|
label="设备名称:"
|
||||||
:prop="'deviceInfoList[' + bIndex + '].name'"
|
:prop="'deviceInfoList[' + bIndex + '].name'"
|
||||||
:rules="[
|
:rules="[
|
||||||
{ required: true, message: '请输入装置名称', trigger: 'blur' }
|
{ required: true, message: '请输入设备名称', trigger: 'blur' }
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
v-model="busItem.name"
|
v-model="busItem.name"
|
||||||
placeholder="请输入装置名称"
|
placeholder="请输入设备名称"
|
||||||
:disabled="
|
:disabled="
|
||||||
!(
|
!(
|
||||||
(nodeLevel == 3 && pageStatus == 3) ||
|
(nodeLevel == 3 && pageStatus == 3) ||
|
||||||
@@ -315,17 +374,17 @@
|
|||||||
<el-form-item
|
<el-form-item
|
||||||
id="id200"
|
id="id200"
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="装置类型:"
|
label="设备类型:"
|
||||||
:prop="'deviceInfoList[' + bIndex + '].devType'"
|
:prop="'deviceInfoList[' + bIndex + '].devType'"
|
||||||
:rules="[
|
:rules="[
|
||||||
{ required: true, message: '请选择装置类型', trigger: 'change' }
|
{ required: true, message: '请选择设备类型', trigger: 'change' }
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<el-select
|
<el-select
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
v-model="busItem.devType"
|
v-model="busItem.devType"
|
||||||
placeholder="请选择装置类型"
|
placeholder="请选择设备类型"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:disabled="
|
:disabled="
|
||||||
!(
|
!(
|
||||||
@@ -346,17 +405,17 @@
|
|||||||
<el-form-item
|
<el-form-item
|
||||||
id="id200"
|
id="id200"
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="装置型号:"
|
label="设备型号:"
|
||||||
:prop="'deviceInfoList[' + bIndex + '].devModel'"
|
:prop="'deviceInfoList[' + bIndex + '].devModel'"
|
||||||
:rules="[
|
:rules="[
|
||||||
{ required: true, message: '请选择装置型号', trigger: 'change' }
|
{ required: true, message: '请选择设备型号', trigger: 'change' }
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<el-select
|
<el-select
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
v-model="busItem.devModel"
|
v-model="busItem.devModel"
|
||||||
placeholder="请选择装置型号"
|
placeholder="请选择设备型号"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:disabled="
|
:disabled="
|
||||||
!(
|
!(
|
||||||
@@ -377,17 +436,17 @@
|
|||||||
<el-form-item
|
<el-form-item
|
||||||
id="id200"
|
id="id200"
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="装置接入方式:"
|
label="设备接入方式:"
|
||||||
:prop="'deviceInfoList[' + bIndex + '].devAccessMethod'"
|
:prop="'deviceInfoList[' + bIndex + '].devAccessMethod'"
|
||||||
:rules="[
|
:rules="[
|
||||||
{ required: true, message: '请选择装置接入方式', trigger: 'change' }
|
{ required: true, message: '请选择设备接入方式', trigger: 'change' }
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<el-select
|
<el-select
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
v-model="busItem.devAccessMethod"
|
v-model="busItem.devAccessMethod"
|
||||||
placeholder="请选择装置接入方式"
|
placeholder="请选择设备接入方式"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:disabled="
|
:disabled="
|
||||||
!(
|
!(
|
||||||
@@ -403,11 +462,11 @@
|
|||||||
|
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="装置mac地址:"
|
label="设备mac地址:"
|
||||||
:prop="'deviceInfoList[' + bIndex + '].mac'"
|
:prop="'deviceInfoList[' + bIndex + '].mac'"
|
||||||
:rules="{
|
:rules="{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入装置mac地址',
|
message: '请输入设备mac地址',
|
||||||
trigger: 'blur'
|
trigger: 'blur'
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
@@ -516,7 +575,7 @@
|
|||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
v-model="busItem.sort"
|
v-model.trim.number="busItem.sort"
|
||||||
placeholder="请输入排序"
|
placeholder="请输入排序"
|
||||||
:disabled="
|
:disabled="
|
||||||
!(
|
!(
|
||||||
@@ -528,6 +587,68 @@
|
|||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex mt10" v-else>
|
||||||
|
<el-form-item class="form-item" label="设备名称:">
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model="busItem.name"
|
||||||
|
placeholder="请输入设备名称"
|
||||||
|
:disabled="true"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item id="id200" class="form-item" label="设备类型:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="busItem.devType"
|
||||||
|
placeholder="请选择设备类型"
|
||||||
|
style="width: 100%"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in devTypeOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label || item.name"
|
||||||
|
:value="item.value || item.id"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item id="id200" class="form-item" label="设备型号:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="busItem.devModel"
|
||||||
|
placeholder="请选择设备型号"
|
||||||
|
style="width: 100%"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="option in devModelOptions"
|
||||||
|
:key="option.id"
|
||||||
|
:label="option.name"
|
||||||
|
:value="option.id"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item id="id200" class="form-item" label="设备接入方式:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="busItem.devAccessMethod"
|
||||||
|
placeholder="请选择设备接入方式"
|
||||||
|
style="width: 100%"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option label="CLD" value="CLD"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="form-item" label="设备mac地址:">
|
||||||
|
<MacAddressInput
|
||||||
|
v-model="busItem.mac"
|
||||||
|
:disabled="!(pageStatus == 2 && nodeLevel == 2)"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
@@ -543,7 +664,7 @@
|
|||||||
:addable="false"
|
:addable="false"
|
||||||
:closable="pageStatus != 1"
|
:closable="pageStatus != 1"
|
||||||
@edit="handleLineTabsEdit"
|
@edit="handleLineTabsEdit"
|
||||||
@tab-click="tabChange('lineIndex')"
|
@tab-click="tabChange('lineIndex', $event)"
|
||||||
>
|
>
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
v-for="(lineItem, lIndex) in formData.lineInfoList"
|
v-for="(lineItem, lIndex) in formData.lineInfoList"
|
||||||
@@ -551,7 +672,7 @@
|
|||||||
:label="lineItem.name ? lineItem.name : '新建监测点' + lIndex"
|
:label="lineItem.name ? lineItem.name : '新建监测点' + lIndex"
|
||||||
:name="lIndex + ''"
|
:name="lIndex + ''"
|
||||||
>
|
>
|
||||||
<div class="flex mt10">
|
<div class="flex mt10" v-if="connectionMethod != 'MQTT'">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
class="form-item"
|
class="form-item"
|
||||||
label="监测点名称:"
|
label="监测点名称:"
|
||||||
@@ -1076,6 +1197,174 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex mt10" v-else>
|
||||||
|
<el-form-item class="form-item" label="监测点名称:">
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
v-model="lineItem.name"
|
||||||
|
placeholder="请输入监测点名称"
|
||||||
|
:disabled="true"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="form-item" label="线路号:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="lineItem.lineNo"
|
||||||
|
placeholder="请选择线路号"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="option in pointNumArr"
|
||||||
|
:key="option.name"
|
||||||
|
:label="option.name"
|
||||||
|
:value="option.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="form-item" label="接线方式:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="lineItem.conType"
|
||||||
|
placeholder="请选择接线方式"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="option in wiringTypeArr"
|
||||||
|
:key="option.name"
|
||||||
|
:label="option.name"
|
||||||
|
:value="option.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="form-item" label="统计间隔:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="lineItem.lineInterval"
|
||||||
|
placeholder="请选择统计间隔"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="option in lineSpaceArr"
|
||||||
|
:key="option.name"
|
||||||
|
:label="option.name"
|
||||||
|
:value="option.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="form-item" label="PT变比:">
|
||||||
|
<div style="width: 100%; display: flex; justify-content: space-between">
|
||||||
|
<el-input
|
||||||
|
clearable-number
|
||||||
|
:controls="false"
|
||||||
|
:min="1"
|
||||||
|
style="width: 48%"
|
||||||
|
oninput="value=value.replace(/[^\d]/g,'')"
|
||||||
|
v-model.number="lineItem.ptRatio"
|
||||||
|
:disabled="true"
|
||||||
|
></el-input>
|
||||||
|
<span
|
||||||
|
style="
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
:
|
||||||
|
</span>
|
||||||
|
<el-input
|
||||||
|
clearable-number
|
||||||
|
:controls="false"
|
||||||
|
:min="1"
|
||||||
|
style="width: 48%"
|
||||||
|
oninput="value=value.replace(/[^\d]/g,'')"
|
||||||
|
v-model.number="lineItem.pt2Ratio"
|
||||||
|
:disabled="true"
|
||||||
|
></el-input>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="form-item" label="CT变比:">
|
||||||
|
<div style="width: 100%; display: flex; justify-content: space-between">
|
||||||
|
<el-input
|
||||||
|
clearable-number
|
||||||
|
:controls="false"
|
||||||
|
:min="1"
|
||||||
|
style="width: 48%"
|
||||||
|
oninput="value=value.replace(/[^\d]/g,'')"
|
||||||
|
v-model.number="lineItem.ctRatio"
|
||||||
|
:disabled="true"
|
||||||
|
></el-input>
|
||||||
|
<span
|
||||||
|
style="
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
:
|
||||||
|
</span>
|
||||||
|
<el-input
|
||||||
|
clearable-number
|
||||||
|
:controls="false"
|
||||||
|
:min="1"
|
||||||
|
style="width: 48%"
|
||||||
|
oninput="value=value.replace(/[^\d]/g,'')"
|
||||||
|
v-model.number="lineItem.ct2Ratio"
|
||||||
|
:disabled="true"
|
||||||
|
></el-input>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item class="form-item" label="电压等级:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="lineItem.volGrade"
|
||||||
|
placeholder="请选择电压等级"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="option in voltageLevelOptions"
|
||||||
|
:key="option.value"
|
||||||
|
:label="option.name"
|
||||||
|
:value="option.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item class="form-item" label="监测位置:">
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="lineItem.position"
|
||||||
|
placeholder="请选择监测位置"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="option in linePosition"
|
||||||
|
:key="option.id"
|
||||||
|
:label="option.name"
|
||||||
|
:value="option.id"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item class="form-item" label="通讯状态:">
|
||||||
|
<!-- (0:运行;1:检修;2:停运;3:调试;4:退运) -->
|
||||||
|
<el-select
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
v-model="lineItem.runStatus"
|
||||||
|
placeholder="请选择通讯状态"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<el-option label="离线" :value="1" />
|
||||||
|
<el-option label="在线" :value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
@@ -1163,8 +1452,10 @@ import {
|
|||||||
pushLog,
|
pushLog,
|
||||||
queryPushResult
|
queryPushResult
|
||||||
} from '@/api/cs-device-boot/cloudDeviceEntry'
|
} from '@/api/cs-device-boot/cloudDeviceEntry'
|
||||||
|
import { getTopoTemplate } from '@/api/cs-device-boot/topologyTemplate'
|
||||||
|
import { getFileUrl } from '@/api/system-boot/file'
|
||||||
import tree from '@/assets/map/area.json'
|
import tree from '@/assets/map/area.json'
|
||||||
import { queryByCode, queryCsDictTree } from '@/api/system-boot/dictTree'
|
import { queryByCode, queryCsDictTree, queryByid } from '@/api/system-boot/dictTree'
|
||||||
import MacAddressInput from '@/components/form/mac/MacAddressInput.vue'
|
import MacAddressInput from '@/components/form/mac/MacAddressInput.vue'
|
||||||
import { auditEngineering } from '@/api/cs-device-boot/edData'
|
import { auditEngineering } from '@/api/cs-device-boot/edData'
|
||||||
import { convertToObject } from 'typescript'
|
import { convertToObject } from 'typescript'
|
||||||
@@ -1219,7 +1510,8 @@ const formData = ref({
|
|||||||
city: '',
|
city: '',
|
||||||
description: '',
|
description: '',
|
||||||
name: '',
|
name: '',
|
||||||
province: ''
|
province: '',
|
||||||
|
sort: 0
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -1279,6 +1571,8 @@ interface ProjectInfo {
|
|||||||
name: string
|
name: string
|
||||||
area: string
|
area: string
|
||||||
description: string
|
description: string
|
||||||
|
sort: number | string
|
||||||
|
topoId: string
|
||||||
}
|
}
|
||||||
// 项目信息列表
|
// 项目信息列表
|
||||||
//const projectInfoList = ref<ProjectInfo[]>([])
|
//const projectInfoList = ref<ProjectInfo[]>([])
|
||||||
@@ -1341,6 +1635,7 @@ const arrdess: any = ref((rule: any, value: any, callback: any) => {
|
|||||||
callback(new Error('请输入正确IP/MAC地址'))
|
callback(new Error('请输入正确IP/MAC地址'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
const connectionMethod = ref('')
|
||||||
|
|
||||||
// 省市选择相关数据
|
// 省市选择相关数据
|
||||||
const provinceOptions = computed(() => areaTree)
|
const provinceOptions = computed(() => areaTree)
|
||||||
@@ -1407,15 +1702,16 @@ const nodeClick = (e: anyObj, data: any) => {
|
|||||||
pageStatus.value = 1
|
pageStatus.value = 1
|
||||||
|
|
||||||
nodeData.value = e
|
nodeData.value = e
|
||||||
|
if (nodeData.value.level == -1) {
|
||||||
if (nodeData.value.level == 0) {
|
|
||||||
nodeLevel.value = 0
|
nodeLevel.value = 0
|
||||||
|
} else if (nodeData.value.level == 0) {
|
||||||
|
nodeLevel.value = 1
|
||||||
} else if (nodeData.value.level == 1) {
|
} else if (nodeData.value.level == 1) {
|
||||||
//工程节点
|
//工程节点
|
||||||
nodeLevel.value = 1
|
nodeLevel.value = 2
|
||||||
} else if (nodeData.value.level == 2) {
|
} else if (nodeData.value.level == 2) {
|
||||||
//项目
|
//项目
|
||||||
nodeLevel.value = 2
|
nodeLevel.value = 3
|
||||||
} else if (nodeData.value.level == 3) {
|
} else if (nodeData.value.level == 3) {
|
||||||
//设备
|
//设备
|
||||||
nodeLevel.value = 3
|
nodeLevel.value = 3
|
||||||
@@ -1465,7 +1761,16 @@ const handleDialogClose = () => {
|
|||||||
}
|
}
|
||||||
countdown.value = 0
|
countdown.value = 0
|
||||||
}
|
}
|
||||||
|
const images: any = ref([])
|
||||||
|
const getImageList = async () => {
|
||||||
|
getTopoTemplate().then(res => {
|
||||||
|
images.value = res.data
|
||||||
|
images.value.forEach(async item => {
|
||||||
|
let row = await getFileUrl({ filePath: item.filePath })
|
||||||
|
item.url = row.data
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
const onAdd = async () => {
|
const onAdd = async () => {
|
||||||
resultDialogVisible.value = true
|
resultDialogVisible.value = true
|
||||||
pushResult.value = null
|
pushResult.value = null
|
||||||
@@ -1606,13 +1911,16 @@ const queryNodeContent = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getInfoById(nodeData.value.id).then((res: any) => {
|
getInfoById(nodeData.value.id).then((res: any) => {
|
||||||
|
connectionMethod.value = 'CLD'
|
||||||
Object.assign(formData.value.engineeringParam, res.data)
|
Object.assign(formData.value.engineeringParam, res.data)
|
||||||
formData.value.engineeringParam.name = res.data.engineeringName
|
formData.value.engineeringParam.name = res.data.engineeringName
|
||||||
formData.value.engineeringParam.description = res.data.engineeringDescription
|
formData.value.engineeringParam.description = res.data.engineeringDescription
|
||||||
|
formData.value.engineeringParam.sort = res.data.sort
|
||||||
formData.value.projectInfoList = res.data.projectInfoList || []
|
formData.value.projectInfoList = res.data.projectInfoList || []
|
||||||
|
|
||||||
if (nodeLevel.value >= 2) {
|
if (nodeLevel.value >= 2) {
|
||||||
formData.value.deviceInfoList = res.data.deviceInfoList || []
|
formData.value.deviceInfoList = res.data.deviceInfoList || []
|
||||||
|
connectionMethod.value = formData.value.deviceInfoList[0].devAccessMethod || 'CLD'
|
||||||
}
|
}
|
||||||
if (nodeLevel.value >= 3) {
|
if (nodeLevel.value >= 3) {
|
||||||
formData.value.lineInfoList = res.data.lineInfoList || []
|
formData.value.lineInfoList = res.data.lineInfoList || []
|
||||||
@@ -1640,6 +1948,7 @@ const add = () => {
|
|||||||
// 初始化工程参数
|
// 初始化工程参数
|
||||||
formData.value.engineeringParam.city = ''
|
formData.value.engineeringParam.city = ''
|
||||||
formData.value.engineeringParam.description = ''
|
formData.value.engineeringParam.description = ''
|
||||||
|
formData.value.engineeringParam.sort = 0
|
||||||
formData.value.engineeringParam.name = ''
|
formData.value.engineeringParam.name = ''
|
||||||
formData.value.engineeringParam.province = ''
|
formData.value.engineeringParam.province = ''
|
||||||
// 清理其他层级数据
|
// 清理其他层级数据
|
||||||
@@ -1652,7 +1961,9 @@ const add = () => {
|
|||||||
formData.value.projectInfoList.push({
|
formData.value.projectInfoList.push({
|
||||||
name: '',
|
name: '',
|
||||||
area: '',
|
area: '',
|
||||||
description: ''
|
description: '',
|
||||||
|
sort: 0,
|
||||||
|
topoId: ''
|
||||||
})
|
})
|
||||||
deviceIndex.value = (formData.value.projectInfoList.length - 1).toString()
|
deviceIndex.value = (formData.value.projectInfoList.length - 1).toString()
|
||||||
// 清理设备和监测点数据
|
// 清理设备和监测点数据
|
||||||
@@ -1716,13 +2027,13 @@ const update = () => {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (nodeData.value.level == 0) {
|
// if (nodeData.value.level == 0) {
|
||||||
ElMessage({
|
// ElMessage({
|
||||||
type: 'warning',
|
// type: 'warning',
|
||||||
message: '不能修改根节点'
|
// message: '不能修改根节点'
|
||||||
})
|
// })
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
if (pageStatus.value == 2 || pageStatus.value == 3) {
|
if (pageStatus.value == 2 || pageStatus.value == 3) {
|
||||||
if (pageStatus.value == 2) {
|
if (pageStatus.value == 2) {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
@@ -1754,6 +2065,7 @@ const updateEngineering = (id: any) => {
|
|||||||
id: id, // 工程ID用于修改
|
id: id, // 工程ID用于修改
|
||||||
city: engData.city,
|
city: engData.city,
|
||||||
description: engData.description,
|
description: engData.description,
|
||||||
|
sort: engData.sort,
|
||||||
name: engData.name,
|
name: engData.name,
|
||||||
province: engData.province
|
province: engData.province
|
||||||
}
|
}
|
||||||
@@ -1781,7 +2093,15 @@ const updateProjectFunc = (id: any) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteProject(id, currentProject.name, currentProject.area, currentProject.description, 1).then((res: any) => {
|
deleteProject(
|
||||||
|
id,
|
||||||
|
currentProject.name,
|
||||||
|
currentProject.area,
|
||||||
|
currentProject.description,
|
||||||
|
1,
|
||||||
|
currentProject.sort,
|
||||||
|
currentProject.topoId
|
||||||
|
).then((res: any) => {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '修改项目成功'
|
message: '修改项目成功'
|
||||||
@@ -1906,13 +2226,13 @@ const remove = () => {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (nodeData.value.level == 0) {
|
// if (nodeData.value.level == 0) {
|
||||||
ElMessage({
|
// ElMessage({
|
||||||
type: 'error',
|
// type: 'error',
|
||||||
message: '无法删除根节点'
|
// message: '无法删除根节点'
|
||||||
})
|
// })
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
if (nodeData.value.id == null) {
|
if (nodeData.value.id == null) {
|
||||||
ElMessage.warning('无法删除该节点')
|
ElMessage.warning('无法删除该节点')
|
||||||
return
|
return
|
||||||
@@ -1945,7 +2265,7 @@ const remove = () => {
|
|||||||
case 2: // 项目层级
|
case 2: // 项目层级
|
||||||
// 删除项目后选中工程节点
|
// 删除项目后选中工程节点
|
||||||
const engineeringId = nodeData.value.pids ? nodeData.value.pids.split(',')[1] : null
|
const engineeringId = nodeData.value.pids ? nodeData.value.pids.split(',')[1] : null
|
||||||
deleteProject(nodeData.value.id, '', '', '', 0).then((res: any) => {
|
deleteProject(nodeData.value.id, '', '', '', 0, '', '').then((res: any) => {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: res.message
|
message: res.message
|
||||||
@@ -2025,7 +2345,9 @@ const next = async () => {
|
|||||||
formData.value.projectInfoList.push({
|
formData.value.projectInfoList.push({
|
||||||
name: '',
|
name: '',
|
||||||
area: '',
|
area: '',
|
||||||
description: ''
|
description: '',
|
||||||
|
sort: 0,
|
||||||
|
topoId: ''
|
||||||
})
|
})
|
||||||
deviceIndex.value = (formData.value.projectInfoList.length - 1).toString()
|
deviceIndex.value = (formData.value.projectInfoList.length - 1).toString()
|
||||||
nextfalg.value = false
|
nextfalg.value = false
|
||||||
@@ -2467,6 +2789,7 @@ const resetAllForms = () => {
|
|||||||
// 清空工程表单
|
// 清空工程表单
|
||||||
formData.value.engineeringParam.city = ''
|
formData.value.engineeringParam.city = ''
|
||||||
formData.value.engineeringParam.description = ''
|
formData.value.engineeringParam.description = ''
|
||||||
|
formData.value.engineeringParam.sort = 0
|
||||||
formData.value.engineeringParam.name = ''
|
formData.value.engineeringParam.name = ''
|
||||||
formData.value.engineeringParam.province = ''
|
formData.value.engineeringParam.province = ''
|
||||||
|
|
||||||
@@ -2475,6 +2798,7 @@ const resetAllForms = () => {
|
|||||||
project.name = ''
|
project.name = ''
|
||||||
project.area = ''
|
project.area = ''
|
||||||
project.description = ''
|
project.description = ''
|
||||||
|
;(project.sort = 0), (project.topoId = '')
|
||||||
})
|
})
|
||||||
|
|
||||||
// 清空设备表单
|
// 清空设备表单
|
||||||
@@ -2534,6 +2858,7 @@ const submitData = () => {
|
|||||||
engineering: {
|
engineering: {
|
||||||
city: formData.value.engineeringParam.city,
|
city: formData.value.engineeringParam.city,
|
||||||
description: formData.value.engineeringParam.description,
|
description: formData.value.engineeringParam.description,
|
||||||
|
sort: formData.value.engineeringParam.sort,
|
||||||
name: formData.value.engineeringParam.name,
|
name: formData.value.engineeringParam.name,
|
||||||
province: formData.value.engineeringParam.province
|
province: formData.value.engineeringParam.province
|
||||||
}
|
}
|
||||||
@@ -2557,6 +2882,8 @@ const submitData = () => {
|
|||||||
project: {
|
project: {
|
||||||
area: formData.value.projectInfoList[deviceIndex.value]?.area || '',
|
area: formData.value.projectInfoList[deviceIndex.value]?.area || '',
|
||||||
description: formData.value.projectInfoList[deviceIndex.value]?.description || '',
|
description: formData.value.projectInfoList[deviceIndex.value]?.description || '',
|
||||||
|
topoIds: [formData.value.projectInfoList[deviceIndex.value]?.topoId] || [],
|
||||||
|
sort: formData.value.projectInfoList[deviceIndex.value]?.sort || 0,
|
||||||
name: formData.value.projectInfoList[deviceIndex.value]?.name || '',
|
name: formData.value.projectInfoList[deviceIndex.value]?.name || '',
|
||||||
engineeringId: nodeData.value?.id || ''
|
engineeringId: nodeData.value?.id || ''
|
||||||
}
|
}
|
||||||
@@ -2723,7 +3050,9 @@ const handleDeviceTabsEdit = (targetName: any, action: any) => {
|
|||||||
formData.value.projectInfoList.push({
|
formData.value.projectInfoList.push({
|
||||||
name: '',
|
name: '',
|
||||||
area: '',
|
area: '',
|
||||||
description: ''
|
description: '',
|
||||||
|
sort: 0,
|
||||||
|
topoId: ''
|
||||||
})
|
})
|
||||||
deviceIndex.value = (formData.value.projectInfoList.length - 1).toString()
|
deviceIndex.value = (formData.value.projectInfoList.length - 1).toString()
|
||||||
} else if (action === 'remove') {
|
} else if (action === 'remove') {
|
||||||
@@ -2741,7 +3070,9 @@ const handleDeviceTabsEdit = (targetName: any, action: any) => {
|
|||||||
formData.value.projectInfoList[deviceIndex.value].name,
|
formData.value.projectInfoList[deviceIndex.value].name,
|
||||||
formData.value.projectInfoList[deviceIndex.value].area,
|
formData.value.projectInfoList[deviceIndex.value].area,
|
||||||
formData.value.projectInfoList[deviceIndex.value].description,
|
formData.value.projectInfoList[deviceIndex.value].description,
|
||||||
0 // 0表示删除
|
0, // 0表示删除
|
||||||
|
formData.value.projectInfoList[deviceIndex.value].sort,
|
||||||
|
formData.value.projectInfoList[deviceIndex.value].topoId
|
||||||
).then((res: any) => {
|
).then((res: any) => {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
@@ -2924,12 +3255,13 @@ const handleLineTabsEdit = (targetName: any, action: any) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const tabChange = (type: string) => {
|
const tabChange = (type: string, e: any) => {
|
||||||
if (type == 'deviceIndex') {
|
if (type == 'deviceIndex') {
|
||||||
busBarIndex.value = '0'
|
busBarIndex.value = '0'
|
||||||
lineIndex.value = '0'
|
lineIndex.value = '0'
|
||||||
} else if (type == 'busBarIndex') {
|
} else if (type == 'busBarIndex') {
|
||||||
lineIndex.value = '0'
|
lineIndex.value = '0'
|
||||||
|
connectionMethod.value = formData.value.deviceInfoList[e.index].devAccessMethod
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2962,7 +3294,7 @@ const reaseStatus = () => {
|
|||||||
lineIndex.value = '0'
|
lineIndex.value = '0'
|
||||||
currentGdName.value = ''
|
currentGdName.value = ''
|
||||||
}
|
}
|
||||||
|
const devModelOptions = ref([])
|
||||||
const area = async () => {
|
const area = async () => {
|
||||||
nodeAllList()
|
nodeAllList()
|
||||||
.then(res => {
|
.then(res => {
|
||||||
@@ -2981,6 +3313,16 @@ const area = async () => {
|
|||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return queryByCode('Device_Type').then(res => {
|
return queryByCode('Device_Type').then(res => {
|
||||||
|
queryByid(res.data.id).then((list: any) => {
|
||||||
|
devModelOptions.value = list.data.map((item: any, index: any) => {
|
||||||
|
return {
|
||||||
|
value: item.id,
|
||||||
|
label: item.name,
|
||||||
|
...item
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
return queryCsDictTree(res.data.id).then(res => {
|
return queryCsDictTree(res.data.id).then(res => {
|
||||||
devTypeOptions.value = res.data
|
devTypeOptions.value = res.data
|
||||||
})
|
})
|
||||||
@@ -3000,6 +3342,7 @@ const area = async () => {
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
nodeData.value.level = 0
|
nodeData.value.level = 0
|
||||||
|
getImageList()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
const dom = document.getElementById('navigation-splitpanes')
|
const dom = document.getElementById('navigation-splitpanes')
|
||||||
if (dom && dom.offsetHeight > 0) {
|
if (dom && dom.offsetHeight > 0) {
|
||||||
@@ -3074,14 +3417,14 @@ area()
|
|||||||
background: #fff !important;
|
background: #fff !important;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
width: 500px;
|
width: 300px;
|
||||||
overflow: hidden;
|
// overflow: hidden;
|
||||||
// display: flex;
|
// display: flex;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
.titleScroll {
|
.titleScroll {
|
||||||
animation: scroll 10s linear infinite; /* 滚动动画 */
|
animation: scroll 7s linear infinite; /* 滚动动画 */
|
||||||
}
|
}
|
||||||
@keyframes scroll {
|
@keyframes scroll {
|
||||||
0% {
|
0% {
|
||||||
@@ -3091,4 +3434,13 @@ area()
|
|||||||
transform: translateX(-160%); /* 滚动到左侧 */
|
transform: translateX(-160%); /* 滚动到左侧 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.image-preview {
|
||||||
|
height: 50px;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.productSelector .el-select-dropdown__item {
|
||||||
|
height: 60px;
|
||||||
|
line-height: 60px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -697,7 +697,7 @@ const handleTrend = async () => {
|
|||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
if (res.code == 'A0000') {
|
if (res.code == 'A0000') {
|
||||||
trendDataTime.value = ''
|
trendDataTime.value = ''
|
||||||
ElMessage.success('装置应答成功')
|
ElMessage.success('设备应答成功')
|
||||||
//每隔30s调用一下接口,通知后台推送mqtt消息
|
//每隔30s调用一下接口,通知后台推送mqtt消息
|
||||||
trendTimer.value = window.setInterval(() => {
|
trendTimer.value = window.setInterval(() => {
|
||||||
if (!dataSet.value.includes('_realtimedata')) return
|
if (!dataSet.value.includes('_realtimedata')) return
|
||||||
@@ -721,7 +721,7 @@ const handleTrend = async () => {
|
|||||||
// }
|
// }
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
ElMessage.warning('装置应答失败')
|
ElMessage.warning('设备应答失败')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
@@ -753,7 +753,7 @@ const handleHarmonicSpectrum = async () => {
|
|||||||
// getRealDataMqttMsg()
|
// getRealDataMqttMsg()
|
||||||
await getBasicRealData(lineId.value).then((res: any) => {
|
await getBasicRealData(lineId.value).then((res: any) => {
|
||||||
if (res.code == 'A0000') {
|
if (res.code == 'A0000') {
|
||||||
ElMessage.success('装置应答成功')
|
ElMessage.success('设备应答成功')
|
||||||
// mqttMessage.value = {}
|
// mqttMessage.value = {}
|
||||||
|
|
||||||
realDataTimer.value = window.setInterval(() => {
|
realDataTimer.value = window.setInterval(() => {
|
||||||
@@ -783,7 +783,7 @@ const handleReturn = async () => {
|
|||||||
tableLoading.value = true
|
tableLoading.value = true
|
||||||
await getBasicRealData(lineId.value).then((res: any) => {
|
await getBasicRealData(lineId.value).then((res: any) => {
|
||||||
if (res.code == 'A0000') {
|
if (res.code == 'A0000') {
|
||||||
ElMessage.success('装置应答成功')
|
ElMessage.success('设备应答成功')
|
||||||
// mqttMessage.value = {}
|
// mqttMessage.value = {}
|
||||||
realDataTimer.value = window.setInterval(() => {
|
realDataTimer.value = window.setInterval(() => {
|
||||||
if (!dataSet.value.includes('_realtimedata')) return
|
if (!dataSet.value.includes('_realtimedata')) return
|
||||||
@@ -998,7 +998,7 @@ const getRealDataMqttMsg = async () => {
|
|||||||
await getBasicRealData(lineId.value)
|
await getBasicRealData(lineId.value)
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
if (res.code == 'A0000') {
|
if (res.code == 'A0000') {
|
||||||
ElMessage.success('装置应答成功')
|
ElMessage.success('设备应答成功')
|
||||||
mqttMessage.value = {}
|
mqttMessage.value = {}
|
||||||
|
|
||||||
realDataTimer.value = window.setInterval(async () => {
|
realDataTimer.value = window.setInterval(async () => {
|
||||||
@@ -1162,7 +1162,7 @@ const getRealDataMqttMsg = async () => {
|
|||||||
console.log('mqtt客户端已断开连接.....')
|
console.log('mqtt客户端已断开连接.....')
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
ElMessage.success('装置应答失败')
|
ElMessage.success('设备应答失败')
|
||||||
tableLoading.value = false
|
tableLoading.value = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ const tableStore = new TableStore({
|
|||||||
width: '180',
|
width: '180',
|
||||||
render: 'buttons',
|
render: 'buttons',
|
||||||
buttons: [
|
buttons: [
|
||||||
//直连装置注册
|
//直连设备注册
|
||||||
{
|
{
|
||||||
title: '注册',
|
title: '注册',
|
||||||
type: 'primary',
|
type: 'primary',
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</el-breadcrumb>
|
</el-breadcrumb>
|
||||||
</div>
|
</div>
|
||||||
<!-- <el-button :icon="Refresh" @click="handleRestartDevice" type="primary" :loading="deviceRestartLoading">
|
<!-- <el-button :icon="Refresh" @click="handleRestartDevice" type="primary" :loading="deviceRestartLoading">
|
||||||
装置重启
|
设备重启
|
||||||
</el-button> -->
|
</el-button> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -205,7 +205,10 @@ import {
|
|||||||
addDeviceDir,
|
addDeviceDir,
|
||||||
delDeviceDir,
|
delDeviceDir,
|
||||||
listDir,
|
listDir,
|
||||||
downloadFileFromFrontr
|
downloadFileFromFrontr,
|
||||||
|
deleteCld,
|
||||||
|
uploadFileToFront,
|
||||||
|
mkdir
|
||||||
} from '@/api/cs-device-boot/fileService'
|
} from '@/api/cs-device-boot/fileService'
|
||||||
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
import { Delete, Download, Upload, Plus, Refresh, Search } from '@element-plus/icons-vue'
|
import { Delete, Download, Upload, Plus, Refresh, Search } from '@element-plus/icons-vue'
|
||||||
@@ -316,11 +319,11 @@ const vNode = () => {
|
|||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
//装置重启
|
//设备重启
|
||||||
const deviceRestartLoading = ref<boolean>(false)
|
const deviceRestartLoading = ref<boolean>(false)
|
||||||
const handleRestartDevice = () => {
|
const handleRestartDevice = () => {
|
||||||
deviceRestartLoading.value = true
|
deviceRestartLoading.value = true
|
||||||
ElMessageBox.prompt('二次校验密码确认', '装置重启', {
|
ElMessageBox.prompt('二次校验密码确认', '设备重启', {
|
||||||
confirmButtonText: '确认',
|
confirmButtonText: '确认',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
customClass: 'customInput',
|
customClass: 'customInput',
|
||||||
@@ -548,20 +551,37 @@ const reloadCurrentMenu = (msg: string) => {
|
|||||||
const submitDeviceDir = () => {
|
const submitDeviceDir = () => {
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid: any) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
let obj = {
|
if (devConType.value == 'CLD') {
|
||||||
nDid: nDid.value,
|
let obj = {
|
||||||
path:
|
devId: devId.value,
|
||||||
activePath.value == '/'
|
filePath:
|
||||||
? activePath.value + form.value.path
|
activePath.value == '/'
|
||||||
: activePath.value + '/' + form.value.path
|
? activePath.value + form.value.path
|
||||||
}
|
: activePath.value + '/' + form.value.path
|
||||||
loading.value = true
|
|
||||||
addDeviceDir(obj).then((res: any) => {
|
|
||||||
if (res.code == 'A0000') {
|
|
||||||
reloadCurrentMenu(res.message)
|
|
||||||
addDeviceDirOpen.value = false
|
|
||||||
}
|
}
|
||||||
})
|
loading.value = true
|
||||||
|
mkdir(obj).then((res: any) => {
|
||||||
|
if (res.code == 'A0000') {
|
||||||
|
reloadCurrentMenu(res.message)
|
||||||
|
addDeviceDirOpen.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
let obj = {
|
||||||
|
nDid: nDid.value,
|
||||||
|
path:
|
||||||
|
activePath.value == '/'
|
||||||
|
? activePath.value + form.value.path
|
||||||
|
: activePath.value + '/' + form.value.path
|
||||||
|
}
|
||||||
|
loading.value = true
|
||||||
|
addDeviceDir(obj).then((res: any) => {
|
||||||
|
if (res.code == 'A0000') {
|
||||||
|
reloadCurrentMenu(res.message)
|
||||||
|
addDeviceDirOpen.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -593,13 +613,30 @@ const handleDelDirOrFile = (row: any) => {
|
|||||||
passwordConfirm(value)
|
passwordConfirm(value)
|
||||||
.then((resp: any) => {
|
.then((resp: any) => {
|
||||||
if (resp.code == 'A0000') {
|
if (resp.code == 'A0000') {
|
||||||
delDeviceDir({ nDid: nDid.value, path: row.prjDataPath }).then((res: any) => {
|
if (devConType.value == 'CLD') {
|
||||||
if (res.code == 'A0000') {
|
deleteCld({
|
||||||
reloadCurrentMenu(res.message)
|
devId: devId.value,
|
||||||
|
filePath: row.prjDataPath
|
||||||
// ElMessage({ message: res.message, type: 'success', duration: 5000 })
|
})
|
||||||
}
|
.then((res: any) => {
|
||||||
})
|
if (res.code == 'A0000') {
|
||||||
|
reloadCurrentMenu(res.message)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
delDeviceDir({ nDid: nDid.value, path: row.prjDataPath })
|
||||||
|
.then((res: any) => {
|
||||||
|
if (res.code == 'A0000') {
|
||||||
|
reloadCurrentMenu(res.message)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
@@ -636,17 +673,32 @@ const handleUpload = (e: any, fileList: any, row: any) => {
|
|||||||
localStorage.setItem('fileName', fileName.value)
|
localStorage.setItem('fileName', fileName.value)
|
||||||
changeType.value = 'upload'
|
changeType.value = 'upload'
|
||||||
localStorage.setItem('changeType', changeType.value)
|
localStorage.setItem('changeType', changeType.value)
|
||||||
const obj = {
|
|
||||||
id: nDid.value,
|
if (devConType.value == 'CLD') {
|
||||||
file: e.raw,
|
const obj = {
|
||||||
filePath: row || row.prjDataPath
|
devId: devId.value,
|
||||||
}
|
file: e.raw,
|
||||||
uploadDeviceFile(obj).then((res: any) => {
|
dirPath: row || row.prjDataPath
|
||||||
if (res.code == 'A0000') {
|
|
||||||
reloadCurrentMenu(res.message)
|
|
||||||
status.value = 100
|
|
||||||
}
|
}
|
||||||
})
|
uploadFileToFront(obj).then((res: any) => {
|
||||||
|
if (res.code == 'A0000') {
|
||||||
|
reloadCurrentMenu(res.message)
|
||||||
|
status.value = 100
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
const obj = {
|
||||||
|
id: nDid.value,
|
||||||
|
file: e.raw,
|
||||||
|
filePath: row || row.prjDataPath
|
||||||
|
}
|
||||||
|
uploadDeviceFile(obj).then((res: any) => {
|
||||||
|
if (res.code == 'A0000') {
|
||||||
|
reloadCurrentMenu(res.message)
|
||||||
|
status.value = 100
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
watch(
|
watch(
|
||||||
() => activePathList.value,
|
() => activePathList.value,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
:loading="deviceRestartLoading"
|
:loading="deviceRestartLoading"
|
||||||
>
|
>
|
||||||
装置重启
|
设备重启
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
<el-descriptions-item label="名称">
|
<el-descriptions-item label="名称">
|
||||||
@@ -237,11 +237,11 @@ const openGroup = () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//装置重启
|
//设备重启
|
||||||
const deviceRestartLoading = ref<boolean>(false)
|
const deviceRestartLoading = ref<boolean>(false)
|
||||||
const handleRestartDevice = () => {
|
const handleRestartDevice = () => {
|
||||||
deviceRestartLoading.value = true
|
deviceRestartLoading.value = true
|
||||||
ElMessageBox.prompt('二次校验密码确认', '装置重启', {
|
ElMessageBox.prompt('二次校验密码确认', '设备重启', {
|
||||||
confirmButtonText: '确认',
|
confirmButtonText: '确认',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
customClass: 'customInput',
|
customClass: 'customInput',
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 新增设备列表 -->
|
<!-- 新增设备列表 -->
|
||||||
<div class="device-list-section table-wrapper">
|
<!-- <div class="device-list-section table-wrapper">
|
||||||
<vxe-table v-bind="defaultAttribute" :data="deviceTableData" height="auto" style="width: 100%">
|
<vxe-table v-bind="defaultAttribute" :data="deviceTableData" height="auto" style="width: 100%">
|
||||||
<vxe-column field="name" title="设备名称"></vxe-column>
|
<vxe-column field="name" title="设备名称"></vxe-column>
|
||||||
<vxe-column title="操作" width="200px">
|
<vxe-column title="操作" width="200px">
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
>
|
>
|
||||||
<vxe-column type="checkbox" width="60"></vxe-column>
|
<vxe-column type="checkbox" width="60"></vxe-column>
|
||||||
<vxe-column field="name" title="设备名称"></vxe-column>
|
<vxe-column field="name" title="便携式设备名称"></vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -298,7 +298,7 @@ const addData = () => {
|
|||||||
min-height: 0;
|
min-height: 0;
|
||||||
|
|
||||||
&:first-child {
|
&:first-child {
|
||||||
margin-bottom: 10px;
|
// margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,13 @@
|
|||||||
:default-checked-keys="defaultCheckedKeys"
|
:default-checked-keys="defaultCheckedKeys"
|
||||||
@checkChange="checkChange"
|
@checkChange="checkChange"
|
||||||
:height="35"
|
:height="35"
|
||||||
|
:engineering="true"
|
||||||
></DeviceTree>
|
></DeviceTree>
|
||||||
<div class="device-manage-right" :style="{ height: pageHeight.height }">
|
<div class="device-manage-right" :style="{ height: pageHeight.height }">
|
||||||
<vxe-table v-bind="defaultAttribute" :data="tableData" height="auto" style="width: 100%">
|
<vxe-table v-bind="defaultAttribute" :data="tableData" height="auto" style="width: 100%">
|
||||||
<vxe-column field="enginerName" title="工程名称"></vxe-column>
|
<vxe-column field="enginerName" title="工程名称"></vxe-column>
|
||||||
<vxe-column field="projectName" title="项目名称"></vxe-column>
|
<vxe-column field="projectName" title="项目名称"></vxe-column>
|
||||||
<vxe-column field="deviceName" title="装置名称"></vxe-column>
|
<vxe-column field="deviceName" title="设备名称"></vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,12 +7,12 @@
|
|||||||
@close="emit('closePopup')"
|
@close="emit('closePopup')"
|
||||||
>
|
>
|
||||||
<el-form class="form-two" :model="form" label-width="100px" ref="formRef" :rules="rules">
|
<el-form class="form-two" :model="form" label-width="100px" ref="formRef" :rules="rules">
|
||||||
<el-form-item label="装置类型:" prop="type">
|
<el-form-item label="设备类型:" prop="type">
|
||||||
<!-- <el-select v-model.trim="form.type" filterable placeholder="请选择" @change="typeChange">
|
<!-- <el-select v-model.trim="form.type" filterable placeholder="请选择" @change="typeChange">
|
||||||
<el-option v-for="item in TypeOptions" :key="item.id" :label="item.name"
|
<el-option v-for="item in TypeOptions" :key="item.id" :label="item.name"
|
||||||
:value="item.id"></el-option>
|
:value="item.id"></el-option>
|
||||||
</el-select> -->
|
</el-select> -->
|
||||||
<el-select v-model.trim="form.type" placeholder="请选择装置类型" @change="formDevTypeChange" clearable>
|
<el-select v-model.trim="form.type" placeholder="请选择设备类型" @change="formDevTypeChange" clearable>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in devTypeOptions"
|
v-for="item in devTypeOptions"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装置型号:" prop="devType">
|
<el-form-item label="设备型号:" prop="devType">
|
||||||
<!-- <el-select v-model.trim="form.devType" placeholder="请选择" filterable @change="devTypeChange">
|
<!-- <el-select v-model.trim="form.devType" placeholder="请选择" filterable @change="devTypeChange">
|
||||||
<el-option v-for="item in DevTypeOptions" :key="item.id" :label="item.name"
|
<el-option v-for="item in DevTypeOptions" :key="item.id" :label="item.name"
|
||||||
:value="item.id"></el-option>
|
:value="item.id"></el-option>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
<el-select
|
<el-select
|
||||||
v-model.trim="form.devType"
|
v-model.trim="form.devType"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择装置型号"
|
placeholder="请选择设备型号"
|
||||||
clearable
|
clearable
|
||||||
@change="devTypeChange"
|
@change="devTypeChange"
|
||||||
>
|
>
|
||||||
@@ -154,8 +154,8 @@ const form = reactive<any>({
|
|||||||
file: []
|
file: []
|
||||||
})
|
})
|
||||||
const rules = {
|
const rules = {
|
||||||
type: [{ required: true, message: '请选择装置类型', trigger: 'change' }],
|
type: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
|
||||||
devType: [{ required: true, message: '请选择装置型号', trigger: 'change' }],
|
devType: [{ required: true, message: '请选择设备型号', trigger: 'change' }],
|
||||||
versionNo: [{ required: true, message: '请输入版本号', trigger: 'blur' }],
|
versionNo: [{ required: true, message: '请输入版本号', trigger: 'blur' }],
|
||||||
versionType: [{ required: true, message: '请输入版本类型', trigger: 'blur' }],
|
versionType: [{ required: true, message: '请输入版本类型', trigger: 'blur' }],
|
||||||
versionAgreement: [{ required: true, message: '请输入协议版本', trigger: 'blur' }],
|
versionAgreement: [{ required: true, message: '请输入协议版本', trigger: 'blur' }],
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
placeholder="请输入名称"
|
placeholder="请输入名称"
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装置型号">
|
<el-form-item label="设备型号">
|
||||||
<el-select v-model.trim="tableStore.table.params.devType" placeholder="请选择" clearable>
|
<el-select v-model.trim="tableStore.table.params.devType" placeholder="请选择" clearable>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in DevTypeOptions"
|
v-for="item in DevTypeOptions"
|
||||||
@@ -71,7 +71,7 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ title: '装置型号', field: 'devTypeName' },
|
{ title: '设备型号', field: 'devTypeName' },
|
||||||
{ title: '模板名称', field: 'name' },
|
{ title: '模板名称', field: 'name' },
|
||||||
{ title: '版本号', field: 'versionNo' },
|
{ title: '版本号', field: 'versionNo' },
|
||||||
{ title: '版本时间', field: 'versionDate', sortable: true },
|
{ title: '版本时间', field: 'versionDate', sortable: true },
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader ref="tableHeaderRef" :showReset="false" showExport>
|
<TableHeader ref="tableHeaderRef" :showReset="false" showExport>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="装置型号:">
|
<el-form-item label="设备型号:">
|
||||||
<el-select v-model.trim="tableStore.table.params.devType" filterable placeholder="请选择装置型号" clearable>
|
<el-select v-model.trim="tableStore.table.params.devType" filterable placeholder="请选择设备型号" clearable>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in DevTypeOptions"
|
v-for="item in DevTypeOptions"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@@ -55,7 +55,7 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ title: '装置型号', field: 'devTypeName' ,minWidth: '100'},
|
{ title: '设备型号', field: 'devTypeName' ,minWidth: '100'},
|
||||||
{ title: '版本号', field: 'versionNo' ,minWidth: '100'},
|
{ title: '版本号', field: 'versionNo' ,minWidth: '100'},
|
||||||
{ title: '协议版本', field: 'versionAgreement' ,minWidth: '100'},
|
{ title: '协议版本', field: 'versionAgreement' ,minWidth: '100'},
|
||||||
{ title: '版本日期', field: 'versionDate' ,minWidth: '100'},
|
{ title: '版本日期', field: 'versionDate' ,minWidth: '100'},
|
||||||
|
|||||||
@@ -515,7 +515,7 @@ const tableStore = new TableStore({
|
|||||||
width: 220,
|
width: 220,
|
||||||
render: 'buttons',
|
render: 'buttons',
|
||||||
buttons: [
|
buttons: [
|
||||||
//直连装置注册
|
//直连设备注册
|
||||||
// {
|
// {
|
||||||
// title: '注册',
|
// title: '注册',
|
||||||
// type: 'primary',
|
// type: 'primary',
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
<el-form-item label="版本日期" prop="name">
|
<el-form-item label="版本日期" prop="name">
|
||||||
<el-input v-model.trim="form.name" placeholder="请输入版本日期"></el-input>
|
<el-input v-model.trim="form.name" placeholder="请输入版本日期"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装置系列" prop="loadType">
|
<el-form-item label="设备系列" prop="loadType">
|
||||||
<el-select v-model.trim="form.loadType" filterable clearable placeholder="请选择装置系列">
|
<el-select v-model.trim="form.loadType" filterable clearable placeholder="请选择设备系列">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in DataTypeSelect"
|
v-for="item in DataTypeSelect"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
<el-input v-model="tableStore.table.params.keywords" clearable placeholder="请输入关键字" />
|
<el-input v-model="tableStore.table.params.keywords" clearable placeholder="请输入关键字" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="装置系列">
|
<el-form-item label="设备系列">
|
||||||
<el-select
|
<el-select
|
||||||
v-model.trim="tableStore.table.params.devType"
|
v-model.trim="tableStore.table.params.devType"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择装置系列"
|
placeholder="请选择设备系列"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
@@ -64,7 +64,7 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ title: '装置系列', field: 'devTypeName', minWidth: '100' },
|
{ title: '设备系列', field: 'devTypeName', minWidth: '100' },
|
||||||
{ title: '版本号', field: 'versionNo', minWidth: '100' },
|
{ title: '版本号', field: 'versionNo', minWidth: '100' },
|
||||||
{ title: '协议版本', field: 'versionAgreement', minWidth: '100' },
|
{ title: '协议版本', field: 'versionAgreement', minWidth: '100' },
|
||||||
{ title: '版本日期', field: 'versionDate', minWidth: '100' },
|
{ title: '版本日期', field: 'versionDate', minWidth: '100' },
|
||||||
|
|||||||
@@ -20,11 +20,11 @@
|
|||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装置型号">
|
<el-form-item label="设备型号">
|
||||||
<el-select
|
<el-select
|
||||||
v-model.trim="tableStore.table.params.devType"
|
v-model.trim="tableStore.table.params.devType"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择装置型号"
|
placeholder="请选择设备型号"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
@@ -35,11 +35,11 @@
|
|||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装置系列">
|
<el-form-item label="设备系列">
|
||||||
<el-select
|
<el-select
|
||||||
v-model.trim="tableStore.table.params.devType"
|
v-model.trim="tableStore.table.params.devType"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择装置系列"
|
placeholder="请选择设备系列"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
@@ -50,11 +50,11 @@
|
|||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="升级装置筛选">
|
<el-form-item label="升级设备筛选">
|
||||||
<el-select
|
<el-select
|
||||||
v-model.trim="tableStore.table.params.devType"
|
v-model.trim="tableStore.table.params.devType"
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择升级装置筛选"
|
placeholder="请选择升级设备筛选"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
@@ -104,12 +104,12 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ title: '装置名称', field: 'devTypeName', minWidth: '100' },
|
{ title: '设备名称', field: 'devTypeName', minWidth: '100' },
|
||||||
{ title: '版本号', field: 'versionNo', minWidth: '100' },
|
{ title: '版本号', field: 'versionNo', minWidth: '100' },
|
||||||
{ title: '协议版本', field: 'versionAgreement', minWidth: '100' },
|
{ title: '协议版本', field: 'versionAgreement', minWidth: '100' },
|
||||||
{ title: '版本日期', field: 'versionDate', minWidth: '100' },
|
{ title: '版本日期', field: 'versionDate', minWidth: '100' },
|
||||||
{ title: '装置系列', field: 'versionDate', minWidth: '100' },
|
{ title: '设备系列', field: 'versionDate', minWidth: '100' },
|
||||||
{ title: '装置型号', field: 'versionDate', minWidth: '100' },
|
{ title: '设备型号', field: 'versionDate', minWidth: '100' },
|
||||||
{ title: '供电公司', field: 'versionDate', minWidth: '100' },
|
{ title: '供电公司', field: 'versionDate', minWidth: '100' },
|
||||||
{ title: '变电站', field: 'versionDate', minWidth: '100' },
|
{ title: '变电站', field: 'versionDate', minWidth: '100' },
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user