IDCDatasync-vue/src/views/data/dataCleansing.vue
2025-03-09 16:25:30 +08:00

277 lines
8.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-row :gutter="30" style="padding: 0 10px;">
<a-col :md="14" >
<div class="linese"></div>
<!-- 查询区域 -->
<div class="table-page-search-wrapper" style="background: rgb(18, 44, 65);">
<a-select placeholder="选择数据类型" option-filter-prop="children" v-model="datatypequeryParam.schemaName" @change="getTables" style="width: 40%;">
<a-select-option v-for="d in dataTypedataSources" :key="d.enName">
{{ d.cnName }}
</a-select-option>
</a-select>
</div>
<!-- table区域-begin -->
<div ref="tableContainer" style="height:calc(100vh - 347px);background: rgb(18, 44, 65);padding:10px;">
<a-table
ref="table"
size="middle"
bordered
:pagination="false"
:scroll="{ y: tableScrollY }"
rowKey="id"
:columns="columns"
:dataSource="dataSource">
<!-- :locale="myLocale"-->
<!-- 字符串超长截取省略号显示-->
</a-table>
</div>
<div class="linese"></div>
</a-col>
<a-col :md="10">
<div class="linese"></div>
<a-card :bordered="false" style="background: rgb(18, 44, 65) !important;">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="12">
<a-form-item label="日志类型">
<a-select placeholder="选择日志类型" option-filter-prop="children" size="large" v-model="queryParam.syncState">
<a-select-option key="">
全部
</a-select-option>
<a-select-option key="0">
未同步
</a-select-option>
<a-select-option key="1">
进行中
</a-select-option>
<a-select-option key="2">
已结束
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="7">
</a-col>
<a-col :md="5">
<a-button @click="dataAdd" type="primary">数据清洗整编</a-button>
</a-col>
</a-row>
</a-form>
</div>
<!-- table区域-begin -->
<div class="datacleanResult">
<div class="progressbg">
<div class="title">清洗进度</div>
<a-progress :percent="percent" status="active" class="progress" />
</div>
<a-list :data-source="contentList" style="padding:10px 20px;">
<a-list-item slot="renderItem" slot-scope="item">
{{ item }}
</a-list-item>
</a-list>
</div>
</a-card>
<div class="linese"></div>
</a-col>
</a-row>
</template>
<script>
import store from '@/store/'
import {getAction} from '@/api/manage'
import {
dataTypePageList,
dataTypeDeleteById } from '@/api/dataType'
export default {
name: "dataCleansing",
components: {
},
data () {
return {
description: '原始库',
contentList:[],
percent:0,
websock:{},
datatypequeryParam: {
schemaName:"",
sourceType:1
},
queryParam: {
pageNum :1,
pageSize:9999999,
},
dataTypedataSources: [],
dataSource:[
],
columns: [
{
title: '#',
dataIndex: '',
key:'id',
width:60,
align:"id",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title: '表名',
align:"center",
dataIndex: 'tableName',
},
{
title: '报文名',
align:"center",
dataIndex: 'tableMessName'
},
{
title: '开始时间',
align:"center",
dataIndex: 'startTime'
},
{
title: '最后更新时间',
align:"center",
dataIndex: 'endTime'
},
{
title: '标签类型',
align:"center",
dataIndex: 'tagNames'
},
],
tableScrollY: 0,
}
},
mounted() {
//初始化websocket
this.initWebSocket()
this.getselect()
this.calculateScrollY();
},
computed: {
},
destroyed: function () { // 离开页面生命周期函数
var userId = store.getters.userInfo.id;
this.websock.send("close_"+userId);
this.websocketclose();
},
created () {
},
methods: {
calculateScrollY() {
// 获取父容器高度(需减去表格内其他元素的高度,如分页栏)
const container = this.$refs.tableContainer;
const paginationHeight = 64; // 根据实际分页栏高度调整
this.tableScrollY = container.clientHeight - paginationHeight;
},
initWebSocket: function () {
// WebSocket与普通的请求所用协议有所不同ws等同于httpwss等同于https
var userId = store.getters.userInfo.id;
var url = window._CONFIG['domianURL'].replace("https://","ws://").replace("http://","ws://")+"/websocket/"+userId+"/data_cleaning";
this.websock = new WebSocket(url);
this.websock.onopen = this.websocketonopen;
this.websock.onerror = this.websocketonerror;
this.websock.onmessage = this.websocketonmessage;
this.websock.onclose = this.websocketclose;
},
websocketonopen: function () {
this.contentList.unshift("消息服务连接成功");
},
websocketonerror: function (e) {
this.contentList.unshift("消息服务连接失败"+JSON.stringify(e));
},
websocketonmessage: function (e) {
var data = eval("(" + e.data + ")");
if(data.content.length >0){
this.contentList.unshift(data.content);
}
if(data.currProgress != null){
this.percent = data.currProgress;
}
},
websocketclose: function (e) {
console.log("connection closed (" + e + ")");
},
dataAdd(){
getAction("/dataCleaning/cleaning?taskId=3806ce79-dc28-48a3-9250-c7729e6b3ad4").then((res) => {
if (res.success) {
this.$message.success(res.message);
}
});
},
getselect(){
dataTypePageList(this.queryParam).then((res) => {
if (res.success) {
this.dataTypedataSources = res.result.rows||res.result;
this.datatypequeryParam.schemaName = res.result.rows[0].cnName
this.getTables();
} else {
this.$message.warning(res.message);
}
});
},
getTables(){
getAction("/dataManager/getDataManagerInfo",this.datatypequeryParam).then((res) => {
if (res.result) {
this.dataSource = res.result;
} else {
this.$message.warning(res.message);
}
});
},
}
}
</script>
<style scoped>
/deep/ .ant-table-bordered .ant-table-header > table {
border: none !important;
}
.datacleanResult{
height:calc(100vh - 374px);
overflow-y:auto;
margin: 10px;
background: rgb(11,34,52);
}
.datacleanResult .progressbg{
margin: 10px;
height: 60px;
padding:20px 10px;
background: rgb(17,42,64);
}
.datacleanResult .title{
width: 14%;
font-size: 16px;
float: left;
text-align: right;
line-height: 20px;
color:#fff;
}
.datacleanResult .progress{
width: 86%;
float: left;
}
.datacleanResult .ant-progress-bg,
.datacleanResult .ant-progress-inner{
height: 16px !important;
}
.datacleanResult .ant-progress-bg{
background: linear-gradient(180deg, rgb(43,97,48),rgb(75,160,75),rgb(43,97,48));
}
/deep/ .datacleanResult .ant-progress-text{
color:#fff !important;
}
.datacleanResult .ant-list-items{
border-bottom:1px dashed rgb(35,72,100);
color:#fff;
}
</style>