feat: 新增资产结构统计(完善)

新增资产模型基本信息(初步)
       新增资产模型详细信息(初步)
fix: 修复数据接入树级结构
master
031026 2024-04-26 22:34:21 +08:00
commit 28c083d36e
5 changed files with 193 additions and 97 deletions

View File

@ -101,3 +101,9 @@ export function structureList(data){
data data
}) })
} }
export function quantity(){
return request({
url:'/source/source/quantity',
method:'get'
})
}

View File

@ -1,19 +1,5 @@
<template> <template>
<div> <div>
<el-card v-if="tableMessage!=null">
<div slot="header" class="clearfix">
<span>资产模型基本信息</span>
</div>
<el-descriptions border :column="2">
<el-descriptions-item label="表名称">{{tableMessage.name}}</el-descriptions-item>
<el-descriptions-item label="表备注">{{ tableMessage.as }}</el-descriptions-item>
<el-descriptions-item label="数据量">{{ tableMessage.dataTotal }}</el-descriptions-item>
<el-descriptions-item label="是否核心">
<el-tag size="small"></el-tag>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card style=" margin-top: 20px;"> <el-card style=" margin-top: 20px;">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>资产模型详细信息</span> <span>资产模型详细信息</span>
@ -25,7 +11,7 @@
<el-table-column prop="comment" label="注释" /> <el-table-column prop="comment" label="注释" />
<el-table-column prop="isPrimaryKey" label="是否主键" > <el-table-column prop="isPrimaryKey" label="是否主键" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag size="small" :type="scope.row.isPrimaryKey === 'Y' ? 'success' : ''"> <el-tag size="small" :type="scope.row.isPrimaryKey === '' ? 'success' : ''">
{{scope.row.isPrimaryKey}} {{scope.row.isPrimaryKey}}
</el-tag> </el-tag>
</template> </template>
@ -36,7 +22,7 @@
<el-table-column prop="decimalPlaces" label="小数位" /> <el-table-column prop="decimalPlaces" label="小数位" />
<el-table-column prop="isNull" label="是否为空" > <el-table-column prop="isNull" label="是否为空" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag size="small" :type="scope.row.isNull === 'Y' ? 'success' : 'danger'"> <el-tag size="small" :type="scope.row.isNull === '' ? 'success' : 'danger'">
{{scope.row.isNull}} {{scope.row.isNull}}
</el-tag> </el-tag>
</template> </template>
@ -181,8 +167,10 @@ import bus from '@/views/dataSource/assets/dashboard/bus'
import { database, table } from '@/api/dataSource/source' import { database, table } from '@/api/dataSource/source'
export default { export default {
props:['essential','tableMessage','itemTest','totalList',`childrenListModel`],
name: 'OverallAssetStructure', name: 'OverallAssetStructure',
props:{
'itemTest':{}
},
data() { data() {
return { return {
localEssential: null, localEssential: null,
@ -201,6 +189,7 @@ export default {
], ],
}, },
sendTest:[], sendTest:[],
tableMessage:[],
} }
}, },
beforeDestroy() { beforeDestroy() {
@ -215,29 +204,15 @@ export default {
this.sendTest=res.data this.sendTest=res.data
} }
) )
console.log("aadasdas",val.databaseName)
table(val.databaseName).then(
res => {
this.tableMessage = res.data
console.log("one",this.tableMessage)
}
)
}, },
immediate:true, immediate:true,
}, },
"childrenListModel":{
handler(val){
table(val.databaseName).then(
res=>{
this.tableMessage=res.data
})
}
}
}, },
created() { created() {
}, },
methods: { methods: {
updEssential(row){ updEssential(row){
this.form=row this.form=row
this.formStatus=true this.formStatus=true
}, },

View File

@ -3,6 +3,7 @@
<div class="title-header"> <div class="title-header">
整体数据资产结构概述 整体数据资产结构概述
</div> </div>
<el-col :lg="8" :sm="12" :xs="12" class="card-panel-col"> <el-col :lg="8" :sm="12" :xs="12" class="card-panel-col">
<div class="card-panel" @click="handleSetLineChartData('newVisitis')"> <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel-icon-wrapper icon-people"> <div class="card-panel-icon-wrapper icon-people">
@ -12,7 +13,7 @@
<div class="card-panel-text"> <div class="card-panel-text">
数据接入 数据接入
</div> </div>
<count-to :duration="2600" :end-val="2" :start-val="0" class="card-panel-num"/> <count-to :duration="2600" :end-val="totalNum" :start-val="0" class="card-panel-num"/>
</div> </div>
</div> </div>
</el-col> </el-col>
@ -25,7 +26,7 @@
<div class="card-panel-text"> <div class="card-panel-text">
资产模型 资产模型
</div> </div>
<count-to :duration="3000" :end-val="1" :start-val="0" class="card-panel-num"/> <count-to :duration="3000" :end-val="assetsNum" :start-val="0" class="card-panel-num"/>
</div> </div>
</div> </div>
</el-col> </el-col>
@ -38,7 +39,7 @@
<div class="card-panel-text"> <div class="card-panel-text">
数据模型 数据模型
</div> </div>
<count-to :duration="3200" :end-val="560" :start-val="0" class="card-panel-num"/> <count-to :duration="3200" :end-val="totalTable" :start-val="0" class="card-panel-num"/>
</div> </div>
</div> </div>
</el-col> </el-col>
@ -52,11 +53,23 @@ export default {
components: { components: {
CountTo CountTo
}, },
props:{
totalNum: {},
assetsNum: {},
totalTable: {},
},
data() {
return {
num:null,
}
},
methods: { methods: {
handleSetLineChartData(type) { handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type) this.$emit('handleSetLineChartData', type)
} }
}
},
} }
</script> </script>

View File

@ -3,15 +3,104 @@
<div class="title-header"> <div class="title-header">
{{title}} - 资产结构概述 {{title}} - 资产结构概述
</div> </div>
<el-col :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="assetsNum" :start-val="0" class="card-panel-num"/>
</div>
</div>
</el-col>
<el-col :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="totalTable" :start-val="0" class="card-panel-num"/>
</div>
</div>
</el-col>
<el-row :gutter="20">
<el-col v-for="(val,key) in dictMap" :md="8" :sm="24" :xs="12">
<el-card class="box-card" style="height: 300px">
<div slot="header" class="clearfix">
<span>{{key}}</span>
<el-button style="float: right; padding: 3px 0"
type="text"
@click="val.push({ label: null, val: null, isEdit: true })"
>新增</el-button>
</div>
<el-table :data="val" style="width: 100%" height="280px">
<el-table-column prop="label" label="标签">
<template slot-scope="scope">
<span v-if="!scope.row.isEdit">{{scope.row.label}}</span>
<el-input v-if="scope.row.isEdit" v-model="scope.row.label" size="mini"></el-input>
</template>
</el-table-column>
<el-table-column prop="val" label="值">
<template slot-scope="scope">
<span v-if="!scope.row.isEdit">{{scope.row.val}}</span>
<el-input v-if="scope.row.isEdit" v-model="scope.row.val" size="mini"></el-input>
</template>
</el-table-column>
<el-table-column prop="val" label="操作">
<template slot-scope="scope">
<el-button
v-if="!scope.row.isEdit"
size="mini"
type="text"
icon="el-icon-edit"
@click="scope.row.isEdit = true"
>修改</el-button>
<el-button
v-if="scope.row.isEdit"
@click="editConfirm(scope.row)"
size="mini"
type="text"
icon="el-icon-finished"
>确定</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
<el-col :span="24"> <el-col :span="24">
<el-tabs v-model="activeName" type="border-card" > <el-tabs v-model="activeName" type="border-card" @tab-click="handleTabClick">
<el-tab-pane <el-tab-pane
v-for="item in childrenList" v-for="item in childrenList"
:key="item.name" :key="item.name"
:label="item.name+'('+item.as+')'" :label="item.name+'('+item.as+')'"
:name="item.name"> :name="item.name">
<overall-asset-structure v-bind:itemTest="item" <el-card v-if="tableMessage!=null">
v-bind:childrenListModel="childrenListModel"/> <div slot="header" class="clearfix">
<span>资产模型基本信息</span>
</div>
<el-descriptions border :column="2">
<el-descriptions-item label="表名称">{{tableMessage.name}}</el-descriptions-item>
<el-descriptions-item label="表备注">{{ tableMessage.as }}</el-descriptions-item>
<el-descriptions-item label="数据量">{{ tableMessage.dataTotal }}</el-descriptions-item>
<el-descriptions-item label="是否核心">
<el-tag size="small"></el-tag>
</el-descriptions-item>
</el-descriptions>
</el-card>
<overall-asset-structure
:itemTest="item"
:Model="childrenListModel"/>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@ -34,11 +123,25 @@ export default {
} }
}, },
title: null, title: null,
assetsNum:0,
totalTable:0,
}, },
data() { data() {
return { return {
activeName: 'first', activeName: 'first',
childrenListModel:[], childrenListModel:[],
tableMessage:{},
dictMap: {
"性别(system_sex)": [
{ label: '男', val: '1', isEdit: false },
{ label: '女', val: '2', isEdit: false },
{ label: '未知', val: '0', isEdit: false },
],
"开关(system_y_n)": [
{ label: '是', val: '1', isEdit: false },
{ label: '否', val: '0', isEdit: false }
],
},
} }
}, },
created() { created() {
@ -51,26 +154,18 @@ export default {
handleTabClick(tab, node,event ) { handleTabClick(tab, node,event ) {
// name childrenList item // name childrenList item
this.selectedItem = this.childrenList.find(item => item.name === tab.name); this.selectedItem = this.childrenList.find(item => item.name === tab.name);
console.log(this.selectedItem)
table(this.selectedItem.databaseName).then( table(this.selectedItem.databaseName).then(
res => { res => {
this.childrenListModel = res.data this.childrenListModel = res.data
} this.childrenListModel.forEach(res=>{
) if (this.selectedItem.name == res.name) {
this.tableMessage=res
database(this.selectedItem.name).then(
res => {
this.essentialModel = res.data
console.log("tow",this.essentialModel)
this.childrenListModel.forEach(item => {
if (item.name === this.selectedItem.name) {
this.tableMessage = item
} }
}) })
} }
) )
bus.$emit('getEssential',this.essentialModel,this.tableMessage)
bus.$emit('getEssential',this.childrenListModel,this.tableMessage)
}, },
handleSetLineChartData(type) { handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type) this.$emit('handleSetLineChartData', type)

View File

@ -16,34 +16,34 @@
</el-tree> </el-tree>
</el-aside> </el-aside>
<el-main> <el-main>
<OverallAssets v-if="showAssets == null"/> <OverallAssets v-if="showAssets === null"
<!-- <overall-specific-assets v-if="showAssets === 1"--> :totalNum="totalNum"
<!-- v-bind:totalNum="totalNum"--> :assetsNum="assetsNum"
<!-- v-bind:dictDetail="dictDetail"--> :totalTable="totalTable"/>
<!-- v-bind:databaseId="databaseId"-->
<!-- v-bind:totalTable="totalTable"--> <OverallSpecificAssets v-if="showAssets === 0"
<!-- v-bind:childrenList="childrenList"-->
<!-- :title="title"/>-->
<!-- <overall-asset-structure v-bind:essential="essential" v-bind:tableMessage="tableMessage"-->
<!-- v-if="showAssets === 1" :title="title"/>-->
<overall-specific-assets v-if="showAssets === 0"
:childrenList="childrenList" :childrenList="childrenList"
:title="title"/> :title="title"
<overall-asset-structure v-if="showAssets === 1" :assetsNum="num"
:totalTable="tableNum"
/>
<OverallAssetStructure v-if="showAssets === 1"
:childrenList="childrenList"/> :childrenList="childrenList"/>
</el-main> </el-main>
</el-container> </el-container>
</template> </template>
<script> <script>
import OverallSpecificAssets from "@/views/dataSource/assets/dashboard/OverallSpecificAssets.vue"; import OverallAssets from "@/views/dataSource/assets/dashboard/OverallAssets";
import OverallAssets from "@/views/dataSource/assets/dashboard/OverallAssets.vue"; import OverallSpecificAssets from "@/views/dataSource/assets/dashboard/OverallSpecificAssets";
import { database, findStructure, table, findDataBaseTable, structureList } from '@/api/dataSource/source' import OverallAssetStructure from "@/views/dataSource/assets/dashboard/OverallAssetStructure";
import { quantity, findStructure, table, findDataBaseTable, structureList } from '@/api/dataSource/source'
export default { export default {
name: 'assets', name: 'assets',
components: { OverallSpecificAssets, OverallAssets }, components: { OverallSpecificAssets, OverallAssets,OverallAssetStructure },
data() { data() {
return { return {
mainHeight: window.innerHeight - 85, mainHeight: window.innerHeight - 85,
@ -61,13 +61,30 @@ export default {
totalTable: 0, totalTable: 0,
totalNum: 0, totalNum: 0,
databaseId: 0, databaseId: 0,
assetsNum: 0,
quantityList:[],
num:0,
tableNum:0,
} }
}, },
created() { created() {
this.getList(); this.getList();
this.statistical();
}, },
methods: { methods: {
handleNodeClick(data,node) { handleNodeClick(data,node) {
if (data.type==0){
console.log("tow",data)
this.num=0
this.tableNum=0
this.quantityList.forEach(res=>{
if (res.databaseName==data.databaseName){
//
this.tableNum+=res.dataTotal;
this.num+=1
}
})
}
if(data.type == 1) { if(data.type == 1) {
let databaseConnect={} let databaseConnect={}
databaseConnect.databaseName=data.databaseName; databaseConnect.databaseName=data.databaseName;
@ -77,35 +94,11 @@ export default {
this.childrenList=res.data this.childrenList=res.data
}) })
} }
// this.childrenList=[]
this.totalNum=0
this.totalTable=0
this.childrenList.forEach(res=>{
//
this.totalTable+=res.dataTotal
})
//
this.totalNum=this.parentList.length
console.log(this.totalTable)
console.log(this.totalNum)
// database(data.databaseName).then(
// res => {
// this.childrenList = res.data
// console.log('12142141',this.childrenList)
// this.childrenList.forEach(
// item=>{
// this.totalTable+=item.dataTotal
// }
// )
// this.totalNum=this.childrenList.length
// }
// )
}, },
expandTable(node, resolve) { expandTable(node, resolve) {
if (node.level === 0) return resolve(this.parentList); if (node.level === 0){
return resolve(this.parentList);
}
const { data } = node; const { data } = node;
@ -134,10 +127,24 @@ export default {
findStructure().then( findStructure().then(
res=>{ res=>{
this.parentList=res.data.assetStructureList; this.parentList=res.data.assetStructureList;
//
this.totalNum=this.parentList.length
} }
) )
} },
statistical(){
quantity().then(res=>{
//
this.quantityList=res.data
//
this.assetsNum=this.quantityList.length
this.quantityList.forEach(res=>{
//
this.totalTable+=res.dataTotal
})
})
}
} }
} }
</script> </script>