Compare commits

...

2 Commits

5 changed files with 445 additions and 114 deletions

View File

@ -36,6 +36,7 @@
"url": "https://gitee.com/y_project/MuYu-Cloud.git" "url": "https://gitee.com/y_project/MuYu-Cloud.git"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@riophae/vue-treeselect": "0.4.0", "@riophae/vue-treeselect": "0.4.0",
"axios": "0.24.0", "axios": "0.24.0",
"clipboard": "2.0.8", "clipboard": "2.0.8",

View File

@ -0,0 +1,187 @@
<template>
<el-row :gutter="40" class="panel-group">
<div class="title-header">
整体数据资产结构概述
</div>
<el-col :lg="8" :sm="12" :xs="12" class="card-panel-col" v-if="!infoOpen">
<div class="card-panel" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel-icon-wrapper icon-people">
<svg-icon class-name="card-panel-icon" icon-class="database"/>
</div>
<div class="card-panel-description">
<div class="card-panel-text">
数据接入
</div>
<count-to :duration="2600" :end-val="fundDataNum.basicNum" :start-val="0" class="card-panel-num"/>
</div>
</div>
</el-col>
<el-col :lg="8" :sm="12" :xs="12" class="card-panel-col">
<div class="card-panel" @click="handleSetLineChartData('messages')">
<div class="card-panel-icon-wrapper icon-message">
<svg-icon class-name="card-panel-icon" icon-class="table"/>
</div>
<div class="card-panel-description">
<div class="card-panel-text">
资产模型
</div>
<count-to :duration="3000" :end-val="fundDataNum.tableNum" :start-val="0" class="card-panel-num"/>
</div>
</div>
</el-col>
<el-col :lg="8" :sm="12" :xs="12" class="card-panel-col">
<div class="card-panel" @click="handleSetLineChartData('purchases')">
<div class="card-panel-icon-wrapper icon-money">
<svg-icon class-name="card-panel-icon" icon-class="field"/>
</div>
<div class="card-panel-description">
<div class="card-panel-text">
数据模型
</div>
<count-to :duration="3200" :end-val="fundDataNum.structureNum" :start-val="0" class="card-panel-num"/>
</div>
</div>
</el-col>
</el-row>
</template>
<script>
import CountTo from 'vue-count-to'
export default {
props:{
infoOpen:false,
fundDataNum: {
basicNum: null,
tableNum: null,
structureNum: null,
}
},
name: 'AssetsBasic',
components: {
CountTo
},
methods: {
handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type)
}
}
}
</script>
<style lang="scss" scoped>
.panel-group {
margin-top: 18px;
.card-panel-col {
margin-bottom: 32px;
}
.card-panel {
height: 108px;
cursor: pointer;
font-size: 12px;
position: relative;
overflow: hidden;
color: #666;
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
border-color: rgba(0, 0, 0, .05);
&:hover {
.card-panel-icon-wrapper {
color: #fff;
}
.icon-people {
background: #40c9c6;
}
.icon-message {
background: #36a3f7;
}
.icon-money {
background: #f4516c;
}
.icon-shopping {
background: #34bfa3
}
}
.icon-people {
color: #40c9c6;
}
.icon-message {
color: #36a3f7;
}
.icon-money {
color: #f4516c;
}
.icon-shopping {
color: #34bfa3
}
.card-panel-icon-wrapper {
float: left;
margin: 14px 0 0 14px;
padding: 16px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.card-panel-icon {
float: left;
font-size: 48px;
}
.card-panel-description {
float: right;
font-weight: bold;
margin: 26px;
margin-left: 0px;
.card-panel-text {
line-height: 18px;
color: rgba(0, 0, 0, 0.45);
font-size: 16px;
margin-bottom: 12px;
}
.card-panel-num {
font-size: 20px;
}
}
}
}
@media (max-width: 550px) {
.card-panel-description {
display: none;
}
.card-panel-icon-wrapper {
float: none !important;
width: 100%;
height: 100%;
margin: 0 !important;
.svg-icon {
display: block;
margin: 14px auto !important;
float: none !important;
}
}
}
.title-header{
text-align: center;
width: 100%;
font-size: 46px;
font-weight: 600;
line-height: 100px;
}
</style>

View File

@ -0,0 +1,147 @@
<template>
<el-row :gutter="40" class="panel-group">
<div class="title-header">
</div>
</el-row>
</template>
<script>
import CountTo from 'vue-count-to'
export default {
props:{
fundDataNum: {
basicNum: null,
tableNum: null,
structureNum: null,
}
},
name: 'AssetsModel',
components: {
CountTo
},
methods: {
handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type)
}
}
}
</script>
<style lang="scss" scoped>
.panel-group {
margin-top: 18px;
.card-panel-col {
margin-bottom: 32px;
}
.card-panel {
height: 108px;
cursor: pointer;
font-size: 12px;
position: relative;
overflow: hidden;
color: #666;
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
border-color: rgba(0, 0, 0, .05);
&:hover {
.card-panel-icon-wrapper {
color: #fff;
}
.icon-people {
background: #40c9c6;
}
.icon-message {
background: #36a3f7;
}
.icon-money {
background: #f4516c;
}
.icon-shopping {
background: #34bfa3
}
}
.icon-people {
color: #40c9c6;
}
.icon-message {
color: #36a3f7;
}
.icon-money {
color: #f4516c;
}
.icon-shopping {
color: #34bfa3
}
.card-panel-icon-wrapper {
float: left;
margin: 14px 0 0 14px;
padding: 16px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.card-panel-icon {
float: left;
font-size: 48px;
}
.card-panel-description {
float: right;
font-weight: bold;
margin: 26px;
margin-left: 0px;
.card-panel-text {
line-height: 18px;
color: rgba(0, 0, 0, 0.45);
font-size: 16px;
margin-bottom: 12px;
}
.card-panel-num {
font-size: 20px;
}
}
}
}
@media (max-width: 550px) {
.card-panel-description {
display: none;
}
.card-panel-icon-wrapper {
float: none !important;
width: 100%;
height: 100%;
margin: 0 !important;
.svg-icon {
display: block;
margin: 14px auto !important;
float: none !important;
}
}
}
.title-header{
text-align: center;
width: 100%;
font-size: 46px;
font-weight: 600;
line-height: 100px;
}
</style>

View File

@ -1,136 +1,132 @@
<template> <template>
<div> <div>
<el-container style="height: 1000px"> <el-container style="height: 1000px">
<el-aside> <el-aside>
<el-tree :data="assetStructureList"
:props="defaultProps" <el-tree :data="assetStructureList"
@node-click="handleNodeClick"></el-tree> :props="defaultProps"
</el-aside> @node-click="handleNodeClick"></el-tree>
<el-main> </el-aside>
<AssetsBasic :infoOpen="infoOpen" :fundDataNum="fundDataNum"></AssetsBasic> <el-main>
<AssetsModel v-if="infoOpen" :info="tableInfoForm" :list="tableInfoList"></AssetsModel>
</el-main>
</el-container> <AssetsBasic :infoOpen="infoOpen" :fundDataNum="fundDataNum"></AssetsBasic>
</div> <AssetsModel v-if=""></AssetsModel>
</el-main>
</el-container>
</div>
</template> </template>
<script> <script>
import {getTableTree} from "@/api/etl/etl"; import {getTableTree} from "@/api/etl/etl";
import AssetsBasic from "@/views/etl/construction/AssetsBasic.vue"; import AssetsBasic from "@/views/etl/construction/AssetsBasic.vue";
import AssetsModel from "@/views/etl/construction/AssetsModel.vue";
export default { export default {
name:'construction', name:'construction',
components:{AssetsModel, AssetsBasic }, components:{ AssetsBasic },
data() { data() {
return { return {
// //
title: null, infoOpen: false,
// //
infoOpen: false, tableInfoForm:{},
// //
tableInfoForm:{}, tableInfoList:[],
// //
tableInfoList:[], fundDataNum:{
// basicNum: null,
fundDataNum:{ tableNum: null,
basicNum: null, structureNum: null,
tableNum: null, },
structureNum: null, childrenList: [],
}, assetStructureList: [],
childrenList: [], defaultProps: {
assetStructureList: [], children: 'children',
defaultProps: { label: 'tableName'
children: 'children', },
label: 'tableName' };
}, },
}; created() {
}, this.getList()
created() { },
this.getList() methods: {
}, //
methods: { getList(){
// this.fundDataNum ={
getList(){ basicNum: 0,
this.fundDataNum ={ tableNum: 0,
basicNum: 0, structureNum: 0,
tableNum: 0, },
structureNum: 0, //
}, getTableTree().then(response => {
// this.data = []
getTableTree().then(response => { response.data.forEach(data => {
this.data = [] //
response.data.forEach(data => { this.fundDataNum.basicNum+=1
// let child = [];
this.fundDataNum.basicNum+=1 let info = data.basicConfigInfo;
let child = []; data.children.forEach(tableInfo => {
let info = data.basicConfigInfo; //
data.children.forEach(tableInfo => { this.fundDataNum.tableNum +=1
// //
this.fundDataNum.tableNum +=1 this.fundDataNum.structureNum+=tableInfo.structureList.length
// child.push({
this.fundDataNum.structureNum+=tableInfo.structureList.length 'tableName':tableInfo.tableName,
child.push({ 'info':tableInfo
'tableName':tableInfo.tableName,
'info':tableInfo
})
})
//
this.assetStructureList.push({
'info':info,
'tableName': info.dataResourceName+'('+info.databaseName+'-'+info.dataSourcesSystemName+')',
'children':child,
})
})
}) })
console.log(this.assetStructureList) })
}, //
// this.assetStructureList.push({
handleNodeClick(data) { 'info':info,
//assetStructureList 'tableName': info.dataResourceName+'('+info.databaseName+'-'+info.dataSourcesSystemName+')',
let info = this.assetStructureList.find(assent => 'children':child,
assent.info.id === data.info.id })
)
this.infoOpen = true })
//infoForm
this.tableInfoForm = data })
//form list console.log(this.assetStructureList)
if (info !== undefined){ },
this.tableInfoList = data.children //
this.tableInfoForm = data.children[0] handleNodeClick(data) {
}else { console.log(data);
info = this.assetStructureList.find(assent => this.infoOpen = true
assent.info.id === this.tableInfoForm.info.basicId if (data.length()===3){
) this.tableInfoList = data
this.tableInfoList = info.children this.tableInfoForm = data.children[0]
} }else {
// console.log('tableList') this.tableInfoForm = data
// console.log(this.tableInfoList) let info = this.assetStructureList.stream.filter(assent =>
// console.log('tableForm') assent.info.id===data.basicId
// console.log(this.tableInfoForm) )
}, console.log(info)
} this.tableInfoList = info[0].children
}
console.log(this.tableInfoList)
console.log(this.tableInfoForm)
},
}
}; };
</script> </script>
<style> <style>
.el-aside { .el-aside {
background-color: #ffffff; background-color: #ffffff;
color: #333; color: #333;
text-align: center; text-align: center;
line-height: 100%; line-height: 100%;
} }
.el-main { .el-main {
background-color: #E9EEF3; background-color: #E9EEF3;
color: #333; color: #333;
text-align: center; text-align: center;
line-height: 100%; line-height: 100%;
} }
body > .el-container { body > .el-container {
margin-bottom: 40px; margin-bottom: 40px;
} }
</style> </style>

View File

@ -264,7 +264,7 @@ export default {
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.noticeId) this.ids = selection.map(item => item.noticeId)
this.single = selection.length != 1 this.single = selection.length !== 1
this.multiple = !selection.length this.multiple = !selection.length
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
@ -287,7 +287,7 @@ export default {
submitForm: function () { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
if (this.form.noticeId != undefined) { if (this.form.noticeId !== undefined) {
updateNotice(this.form).then(response => { updateNotice(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;