联调文件管理页面

This commit is contained in:
guanj
2026-04-02 09:08:57 +08:00
parent 762965b1e4
commit 0b9aafc1b5
25 changed files with 829 additions and 437 deletions

View File

@@ -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)

View File

@@ -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'
}) })
} }

View File

@@ -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
}) })
} }

View File

@@ -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)

View 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}`,

View File

@@ -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)

View File

@@ -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 = () => {

View File

@@ -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(

View File

@@ -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'

View File

@@ -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%;

View File

@@ -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 {

View File

@@ -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>

View File

@@ -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
} }
}) })

View File

@@ -241,7 +241,7 @@ const tableStore = new TableStore({
width: '180', width: '180',
render: 'buttons', render: 'buttons',
buttons: [ buttons: [
//直连装置注册 //直连设备注册
{ {
title: '注册', title: '注册',
type: 'primary', type: 'primary',

View File

@@ -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,

View File

@@ -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',

View File

@@ -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;
} }
} }
} }

View File

@@ -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>

View File

@@ -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' }],

View File

@@ -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 },

View File

@@ -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'},

View File

@@ -515,7 +515,7 @@ const tableStore = new TableStore({
width: 220, width: 220,
render: 'buttons', render: 'buttons',
buttons: [ buttons: [
//直连装置注册 //直连设备注册
// { // {
// title: '注册', // title: '注册',
// type: 'primary', // type: 'primary',

View File

@@ -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"

View File

@@ -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' },

View File

@@ -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' },
{ {