You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
5.1 KiB
182 lines
5.1 KiB
<template>
|
|
<SearchCommands @search="onSearch" />
|
|
<template v-if="data">
|
|
<el-table :data="data" :max-height="contentHeight" border stripe style="width: 100%">
|
|
<el-table-column align="center" fixed label="设备ID" min-width="100" prop="deviceId" />
|
|
<el-table-column align="center" label="时间" min-width="200">
|
|
<template #default="scope">
|
|
{{ dayjs(new Date(+scope.row.createdAt)).format('YYYY-MM-DD HH:mm:ss') }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="传输方向" min-width="80">
|
|
<template #default="scope">
|
|
{{ log.DIRECTION[scope.row.dir] }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="传输启动" min-width="80">
|
|
<template #default="scope">
|
|
{{ log.PRM[scope.row.prm] }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="安全模式" min-width="80">
|
|
<template #default="scope">
|
|
{{ log.SER[scope.row.ser] }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="流控" min-width="80">
|
|
<template #default="scope">
|
|
{{ log.DFC[scope.row.dfc] }}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column align="center" label="功能码" min-width="180">
|
|
<template #default="scope">
|
|
{{ log.CODE[scope.row.code].text }}
|
|
</template>
|
|
</el-table-column>
|
|
|
|
<el-table-column align="center" label="包序号" min-width="80" prop="serialNo" />
|
|
|
|
<el-table-column align="center" label="类型标识" min-width="80">
|
|
<template #default="scope">
|
|
<span v-if="scope.row.asduType && log.ASDU_TYPE[scope.row.asduType]">
|
|
{{ log.ASDU_TYPE[scope.row.asduType].text }}
|
|
</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="信息体顺序" min-width="100">
|
|
<template #default="scope">
|
|
{{ log.INFO_ORDER[scope.row.infoOrder] }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="信息体个数" min-width="100" prop="infoNum" />
|
|
|
|
<el-table-column align="center" label="传输原因" min-width="180">
|
|
<template #default="scope">
|
|
{{ log.REASON[scope.row.reason].text }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column align="center" label="协议内容" min-width="80">
|
|
<template #default="scope">
|
|
<el-button type="text" @click="openContent(scope.row.content)">查看</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-pagination
|
|
:current-page="page.page"
|
|
:default-page-size="50"
|
|
:page-count="page.count"
|
|
:page-size="page.size"
|
|
:page-sizes="[1, 10, 20, 50, 100]"
|
|
:total="page.total"
|
|
background
|
|
class="my-3 float-right"
|
|
layout="total, sizes, prev, pager, next, jumper"
|
|
@size-change="onSizeChange"
|
|
@current-change="onCurrentPageChange"
|
|
></el-pagination>
|
|
</template>
|
|
|
|
<!-- 弹出框-->
|
|
<el-dialog v-model="showContent" title="协议内容">
|
|
<code class="font-mono">{{ contents }}</code>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { getLog } from 'apis';
|
|
import SearchCommands from 'components/commands/search-commands.vue';
|
|
import dayjs from 'dayjs';
|
|
import { ElMessage } from 'element-plus';
|
|
import { computed, onMounted, ref } from 'vue';
|
|
import { useStore } from 'vuex';
|
|
import * as log from '@/config/log';
|
|
|
|
const data = ref([]);
|
|
const page = ref({
|
|
page: 1,
|
|
size: 50,
|
|
count: 0,
|
|
total: 0,
|
|
});
|
|
const showContent = ref(false); // 是否显示协议内容弹出框
|
|
const contents = ref(''); // 弹出的协议内容
|
|
const contentHeight = ref(700);
|
|
const store = useStore();
|
|
const currentDeviceId = computed(() => store.state.device.currentDeviceId);
|
|
|
|
// 设置表格高度
|
|
onMounted(() => {
|
|
const winHeight = document.documentElement.clientHeight;
|
|
contentHeight.value = winHeight - 250;
|
|
onSearch();
|
|
});
|
|
|
|
/**
|
|
* 查询
|
|
* @param {object} options
|
|
* @returns {Promise<void>}
|
|
*/
|
|
async function onSearch(
|
|
options = {
|
|
...page.value,
|
|
sort: [
|
|
{
|
|
col: 'createdAt',
|
|
order: 'DESC',
|
|
},
|
|
],
|
|
deviceId: currentDeviceId.value,
|
|
},
|
|
) {
|
|
try {
|
|
const resData = await getLog(options);
|
|
page.value = resData.page;
|
|
data.value = resData.data;
|
|
} catch (error) {
|
|
ElMessage.error('查询失败');
|
|
throw new Error(error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 打开协议内容的弹出框 并记录值
|
|
* @param {string} content 协议内容
|
|
*/
|
|
function openContent(content) {
|
|
showContent.value = true;
|
|
contents.value = content;
|
|
}
|
|
|
|
// 当前页码变化
|
|
const onCurrentPageChange = pageEvent => {
|
|
const options = {
|
|
page: pageEvent,
|
|
size: page.value.size || 50,
|
|
sort: [
|
|
{
|
|
col: 'createdAt',
|
|
order: 'DESC',
|
|
},
|
|
],
|
|
deviceId: currentDeviceId.value,
|
|
};
|
|
onSearch(options);
|
|
};
|
|
|
|
// 每页条数变化
|
|
const onSizeChange = size => {
|
|
const options = {
|
|
page: 1,
|
|
size,
|
|
sort: [
|
|
{
|
|
col: 'createdAt',
|
|
order: 'DESC',
|
|
},
|
|
],
|
|
deviceId: currentDeviceId.value,
|
|
};
|
|
onSearch(options);
|
|
};
|
|
</script>
|
|
|