Compare commits

...

2 Commits

Author SHA1 Message Date
031026 9ca5c801a2 Merge remote-tracking branch 'origin/master' 2024-04-27 20:07:30 +08:00
031026 28c083d36e feat: 新增资产结构统计(完善)
新增资产模型基本信息(初步)
       新增资产模型详细信息(初步)
fix: 修复数据接入树级结构
2024-04-27 20:07:15 +08:00
5 changed files with 193 additions and 97 deletions

View File

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

View File

@ -1,19 +1,5 @@
<template>
<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;">
<div slot="header" class="clearfix">
<span>资产模型详细信息</span>
@ -25,7 +11,7 @@
<el-table-column prop="comment" label="注释" />
<el-table-column prop="isPrimaryKey" label="是否主键" >
<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}}
</el-tag>
</template>
@ -36,7 +22,7 @@
<el-table-column prop="decimalPlaces" label="小数位" />
<el-table-column prop="isNull" label="是否为空" >
<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}}
</el-tag>
</template>
@ -181,8 +167,10 @@ import bus from '@/views/dataSource/assets/dashboard/bus'
import { database, table } from '@/api/dataSource/source'
export default {
props:['essential','tableMessage','itemTest','totalList',`childrenListModel`],
name: 'OverallAssetStructure',
props:{
'itemTest':{}
},
data() {
return {
localEssential: null,
@ -201,6 +189,7 @@ export default {
],
},
sendTest:[],
tableMessage:[],
}
},
beforeDestroy() {
@ -215,29 +204,15 @@ export default {
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,
},
"childrenListModel":{
handler(val){
table(val.databaseName).then(
res=>{
this.tableMessage=res.data
})
}
}
},
created() {
},
methods: {
updEssential(row){
this.form=row
this.formStatus=true
},

View File

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

View File

@ -3,15 +3,104 @@
<div class="title-header">
{{title}} - 资产结构概述
</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-tabs v-model="activeName" type="border-card" >
<el-tabs v-model="activeName" type="border-card" @tab-click="handleTabClick">
<el-tab-pane
v-for="item in childrenList"
:key="item.name"
:label="item.name+'('+item.as+')'"
:name="item.name">
<overall-asset-structure v-bind:itemTest="item"
v-bind:childrenListModel="childrenListModel"/>
<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>
<overall-asset-structure
:itemTest="item"
:Model="childrenListModel"/>
</el-tab-pane>
</el-tabs>
@ -34,11 +123,25 @@ export default {
}
},
title: null,
assetsNum:0,
totalTable:0,
},
data() {
return {
activeName: 'first',
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() {
@ -51,26 +154,18 @@ export default {
handleTabClick(tab, node,event ) {
// name childrenList item
this.selectedItem = this.childrenList.find(item => item.name === tab.name);
console.log(this.selectedItem)
table(this.selectedItem.databaseName).then(
res => {
this.childrenListModel = res.data
}
)
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
this.childrenListModel.forEach(res=>{
if (this.selectedItem.name == res.name) {
this.tableMessage=res
}
})
}
)
bus.$emit('getEssential',this.essentialModel,this.tableMessage)
bus.$emit('getEssential',this.childrenListModel,this.tableMessage)
},
handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type)

View File

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