补召日志

This commit is contained in:
sjl
2025-10-22 15:32:18 +08:00
parent f0adfe65a5
commit e97aa2cd0e
5 changed files with 126 additions and 84 deletions

View File

@@ -17,3 +17,4 @@ export function fileRecall(data: any) {
data: data data: data
}) })
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<Tree ref="treRef" :width="width" :data="tree" default-expand-all @changePointType="changePointType" @checkedNodesChange="handleCheckedNodesChange"/> <Tree ref="treRef" :width="width" :data="tree" default-expand-all @checkedNodesChange="handleCheckedNodesChange"/>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@@ -78,9 +78,7 @@ const info = () => {
}) })
}) })
} }
const changePointType = (val: any, obj: any) => {
emit('pointTypeChange', val, obj)
}
// 处理子组件传递的勾选节点变化,并转发给父组件 // 处理子组件传递的勾选节点变化,并转发给父组件
const handleCheckedNodesChange = (nodes: any[]) => { const handleCheckedNodesChange = (nodes: any[]) => {
// 先给父组件 // 先给父组件

View File

@@ -11,10 +11,22 @@
</template> </template>
</el-input> </el-input>
</div> </div>
<el-tree :style="{ height: 'calc(100vh)' }" <el-tree
style=' overflow: auto;' ref='treeRef' :props='defaultProps' highlight-current :style="{ height: 'calc(100vh)' }"
:filter-node-method='filterNode' node-key='id' v-bind='$attrs' style='overflow: auto;'
show-checkbox @check="handleCheckChange" :default-checked-keys="defaultCheckedKeys"> ref='treeRef'
:props='defaultProps'
highlight-current
:filter-node-method='filterNode'
node-key='id'
show-checkbox
@check="handleCheckChange"
@node-click="handleNodeClick"
:default-checked-keys="defaultCheckedKeys"
v-bind='$attrs'
>
<template #default='{ node, data }'> <template #default='{ node, data }'>
<span class='custom-tree-node'> <span class='custom-tree-node'>
<Icon :name='data.icon' style='font-size: 16px' :style='{ color: data.color }' <Icon :name='data.icon' style='font-size: 16px' :style='{ color: data.color }'
@@ -100,6 +112,12 @@ const chooseNode = (value: string, data: any, node: any) => {
return false return false
} }
// 处理节点点击事件
const handleNodeClick = (data: any, node: any, event: any) => {
}
// 存储所有勾选的节点 // 存储所有勾选的节点
const checkedNodes = ref<any[]>([]) const checkedNodes = ref<any[]>([])
const defaultCheckedKeys = ref<string[]>([]) const defaultCheckedKeys = ref<string[]>([])

View File

@@ -16,9 +16,10 @@ import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import { Setting } from '@element-plus/icons-vue' import { Setting } from '@element-plus/icons-vue'
import {eventRecall,fileRecall} from '@/api/cs-device-boot/recall' import {eventRecall,fileRecall,logRecall} from '@/api/cs-device-boot/recall'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import DatePicker from '@/components/form/datePicker/time.vue' import { el } from 'element-plus/es/locale'
const props = defineProps({ const props = defineProps({
checkedNodes: { checkedNodes: {
@@ -27,11 +28,8 @@ const props = defineProps({
} }
}); });
const headerRef = ref()
const datePickerRef = ref()
const tableStore: any = new TableStore({ const tableStore: any = new TableStore({
url: '/cs-device-boot/portableOfflLog/queryMainLogPage', url: '/cs-device-boot/csTerminalReply/bzLogs',
publicHeight: 0, publicHeight: 0,
method: 'POST', method: 'POST',
column: [ column: [
@@ -39,6 +37,14 @@ const tableStore: any = new TableStore({
title: '序号', width: 80, formatter: (row: any) => { title: '序号', width: 80, formatter: (row: any) => {
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
} }
},
{
field: 'engineeringName',
title: '项目名称',
minWidth: 170,
formatter: row => {
return row.cellValue ? row.cellValue : '/'
}
}, },
{ {
field: 'projectName', field: 'projectName',
@@ -48,45 +54,56 @@ const tableStore: any = new TableStore({
return row.cellValue ? row.cellValue : '/' return row.cellValue ? row.cellValue : '/'
} }
}, },
{ field: 'successCount', title: '成功解析数', minWidth: 150 }, {
{ field: 'startTime', title: '导入开始时间', minWidth: 170, sortable: true }, field: 'deviceName',
{ field: 'endTime', title: '导入结束时间', minWidth: 170 , sortable: true}, title: '设备名称',
{ minWidth: 170,
title: '解析状态', formatter: row => {
field: 'status', return row.cellValue ? row.cellValue : '/'
width: 100, }
render: 'tag', },
custom: { {
0: 'warning', field: 'lineName',
1: 'success', title: '监测点名称',
2: 'danger', minWidth: 170,
3: 'primary' formatter: row => {
}, return row.cellValue ? row.cellValue : '/'
replaceValue: {
0: '未解析',
1: '解析成功',
2: '解析失败',
3: '文件不存在'
} }
}, },
{ {
title: '操作', field: 'logTime',
width: '100', title: '补召时间',
render: 'buttons', minWidth: 170,
buttons: [ formatter: row => {
{ return row.cellValue ? row.cellValue : '/'
name: 'edit', }
title: '详情', },
type: 'primary', {
icon: 'el-icon-EditPen', field: 'log',
render: 'basicButton', title: '日志',
click: row => { minWidth: 170,
} formatter: row => {
} return row.cellValue ? row.cellValue : '/'
] }
} },
{
field: 'status',
title: '状态',
minWidth: 170,
formatter: row => {
return row.cellValue ? row.cellValue : '/'
}
},
], ],
beforeSearchFun: () => { beforeSearchFun: () => {
if (!nodeClick.value || nodeClick.value.level !== 3) {
ElMessage.warning('请先选中监测点')
return // 阻止查询
}
if (nodeClick.value) {
tableStore.table.params.searchValue = nodeClick.value.id
}
}, },
loadCallback: () => { loadCallback: () => {
@@ -95,6 +112,26 @@ const tableStore: any = new TableStore({
provide('tableStore', tableStore) provide('tableStore', tableStore)
const nodeClick = ref(null)
// 处理父组件传递的树节点点击事件
const handleTreeNodeClick = (node: any) => {
nodeClick.value = node
if (tableStore && tableStore.index) {
// 判断当前节点是否为监测点层级
if (node) {
if (node.level !== 3) {
ElMessage.warning('请先选中监测点')
return
}
}else {
ElMessage.warning('请先选中监测点')
return
}
tableStore.index()
}
}
const recall1 = async () => { const recall1 = async () => {
if (!props.checkedNodes || props.checkedNodes.length === 0) { if (!props.checkedNodes || props.checkedNodes.length === 0) {
ElMessage.warning('请先勾选监测点') ElMessage.warning('请先勾选监测点')
@@ -125,8 +162,9 @@ const recall2 = async () => {
} }
onMounted(() => { // 暴露方法给父组件调用
tableStore.index() defineExpose({
handleTreeNodeClick
}) })
</script> </script>

View File

@@ -6,7 +6,7 @@
style="position: relative" style="position: relative"
> >
<!-- @init="nodeClick" --> <!-- @init="nodeClick" -->
<PointTree @node-click="nodeClick" @pointTypeChange="pointTypeChange" @checkChange="handleCheckedNodesChange"></PointTree> <PointTree @node-click="nodeClick" @checkChange="handleCheckedNodesChange"></PointTree>
<div class="device-control-right" > <div class="device-control-right" >
<el-tabs type="border-card" class="mb10" @tab-click="handleClick" v-model="activeTab"> <el-tabs type="border-card" class="mb10" @tab-click="handleClick" v-model="activeTab">
<el-tab-pane label="稳态补召" name="deviceInfo1"> <el-tab-pane label="稳态补召" name="deviceInfo1">
@@ -39,6 +39,7 @@ const eventRef = ref()
const loading = ref(false) const loading = ref(false)
const activeTab = ref('deviceInfo1') const activeTab = ref('deviceInfo1')
const checkedNodes = ref<any[]>([]) // 存储左侧树勾选的节点 const checkedNodes = ref<any[]>([]) // 存储左侧树勾选的节点
const currentNode = ref<any>(null) // 存储当前点击的树节点
defineOptions({ defineOptions({
name: 'govern/monitorRecall/index' name: 'govern/monitorRecall/index'
@@ -46,55 +47,41 @@ defineOptions({
// 处理子组件传递的勾选节点变化 // 处理子组件传递的勾选节点变化
const handleCheckedNodesChange = (nodes: any[]) => { const handleCheckedNodesChange = (nodes: any[]) => {
checkedNodes.value = nodes
checkedNodes.value = nodes
// 将勾选的节点传递给当前激活的tab组件
if (activeTab.value === 'deviceInfo1' && steadyRef.value) {
// 如果steadyRecall组件有接收勾选节点的方法可以调用
if (steadyRef.value.setCheckedNodes) {
steadyRef.value.setCheckedNodes(nodes)
}
} else if (activeTab.value === 'deviceInfo2' && eventRef.value) {
// 如果eventRecall组件有接收勾选节点的方法可以调用
if (eventRef.value.setCheckedNodes) {
eventRef.value.setCheckedNodes(nodes)
}
}
} }
// tab切换时的处理 // tab切换时的处理
const handleClick = (tab: any) => { const handleClick = (tab: any) => {
activeTab.value = tab.props.name activeTab.value = tab.props.name
// tab切换时刷新对应组件的数据 // tab切换时刷新对应组件的数据
nextTick(() => { nextTick(() => {
if (tab.props.name === 'deviceInfo1' && steadyRef.value) { if (tab.props.name === 'deviceInfo1' && steadyRef.value) {
// 刷新稳态补召数据
if (steadyRef.value.refreshData) {
steadyRef.value.refreshData(checkedNodes.value)
} else if (steadyRef.value.getTableParams) {
// 如果有getTableParams方法调用它
steadyRef.value.getTableParams({ nodes: checkedNodes.value })
}
} else if (tab.props.name === 'deviceInfo2' && eventRef.value) { } else if (tab.props.name === 'deviceInfo2' && eventRef.value) {
// 刷新暂态补召数据 // tab切换后触发查询
if (eventRef.value.refreshData) { triggerEventRecallQuery()
eventRef.value.refreshData(checkedNodes.value)
} else if (eventRef.value.getTableParams) {
// 如果有getTableParams方法调用它
eventRef.value.getTableParams({ nodes: checkedNodes.value })
}
} }
}) })
} }
const nodeClick = (node: any) => { const nodeClick = (node: any) => {
currentNode.value = node
// 只有在暂态补召页面时才触发查询
if (activeTab.value === 'deviceInfo2') {
triggerEventRecallQuery()
}
} }
const pointTypeChange = (type: any, node: any) => { // 触发暂态补召查询
const triggerEventRecallQuery = () => {
nextTick(() => {
if (activeTab.value === 'deviceInfo2' && eventRef.value) {
// 将当前点击的节点传递给暂态补召组件
if (eventRef.value.handleTreeNodeClick) {
eventRef.value.handleTreeNodeClick(currentNode.value)
}
}
})
} }
</script> </script>