You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

386 lines
9.4 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div
v-if="dialogFormVisible"
class="inner-container"
>
<el-scrollbar class="data-set-scrollbar">
<!-- <el-page-header
class="bs-el-page-header"
@back="goBack"
/> -->
<el-page-header class="bs-el-page-header">
<template slot="content">
<div class="page-header">
<div class="page-header-left">
标签详情
</div>
<div class="page-header-right">
<el-button
class="back bs-el-button-default"
@click="goBack"
>
返回
</el-button>
</div>
</div>
</template>
</el-page-header>
<el-divider
class="bs-el-divider"
content-position="left"
>
属性信息
</el-divider>
<el-row
style="width: 100%;"
:gutter="5"
>
<el-col
:span="8"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.labelName.length > 20"
:content="dataForm.labelName"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style">标签名称: {{ ellipsis(dataForm.labelName, 20) }}</span>
</el-tooltip>
<span
v-else
class="text-style"
>
标签名称: {{ ellipsis(dataForm.labelName, 20) }}
</span>
</el-col>
<el-col
:span="8"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.labelType.length > 20"
:content="dataForm.labelType"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style">标签类型: {{ ellipsis(dataForm.labelType, 20) }}</span>
</el-tooltip>
<span
v-else
class="text-style"
>
标签类型: {{ ellipsis(dataForm.labelType, 20) }}
</span>
</el-col>
<el-col
:span="8"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.labelDesc.length > 20"
:content="dataForm.labelDesc"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style">标签说明: {{ ellipsis(dataForm.labelDesc, 20) }}</span>
</el-tooltip>
<span
v-else
class="text-style"
>
标签说明: {{ ellipsis(dataForm.labelDesc, 20) }}
</span>
</el-col>
<el-col
:span="8"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.createBy && dataForm.createBy.length > 20"
:content="dataForm.createBy"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style">创建人: {{ ellipsis(dataForm.createBy, 20) }}</span>
</el-tooltip>
<span
v-else
class="text-style"
>
创建人: {{ ellipsis(dataForm.createBy, 20) }}
</span>
</el-col>
<el-col
:span="16"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.createDate.length > 20"
:content="dataForm.createDate"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style">创建时间: {{ ellipsis(dataForm.createDate, 20) }}</span>
</el-tooltip>
<span
v-else
class="text-style"
>
创建时间: {{ ellipsis(dataForm.createDate, 20) }}
</span>
</el-col>
<el-col
:span="8"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.updateBy && dataForm.updateBy.length > 20"
:content="dataForm.updateBy"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style">
修改人: {{ ellipsis(dataForm.updateBy, 20) }}
</span>
</el-tooltip>
<span
v-else
class="text-style"
>
修改人: {{ ellipsis(dataForm.updateBy, 20) }}
</span>
</el-col>
<el-col
:span="8"
class="attrInfo"
>
<el-tooltip
v-if="dataForm.updateDate.length > 20"
:content="dataForm.updateDate"
class="item"
effect="dark"
placement="bottom-start"
>
<span class="text-style"> {{ ellipsis(dataForm.updateDate, 20) }}</span>
</el-tooltip>
<span
v-else
class="text-style"
>
修改时间 {{ ellipsis(dataForm.updateDate, 20) }}
</span>
</el-col>
</el-row>
<el-divider
class="bs-el-divider"
content-position="left"
>
关联数据集信息
</el-divider>
<div id="container" />
</el-scrollbar>
</div>
</template>
<script>
import G6 from '@antv/g6'
import { getLabelDetail } from 'packages/js/utils/LabelConfigService'
export default {
name: 'LabelConfigDetails',
data () {
return {
dialogFormVisible: false,
dataForm: {
createBy: '',
createDate: '',
updateBy: '',
updateDate: '',
labelDesc: '',
labelName: '',
labelType: ''
},
jsonData: {},
chartHeight: 0,
chartWidth: 0
}
},
methods: {
ellipsis (value, len) {
if (!value) return ''
if (value.length > len) {
return value.slice(0, len) + '...'
}
return value
},
init (row) {
this.dialogFormVisible = true
getLabelDetail(row.id).then((r) => {
this.jsonData = r.jsonData
if (r.jsonData.nodes.length > 1) {
this.chartHeight = r.jsonData.nodes.length * 100
} else {
this.chartHeight = 200
}
this.dataForm = r
this.chartWidth = r.labelName.length * 20
this.$nextTick(() => {
this.initG6(r.jsonData)
})
})
},
goBack () {
this.dialogFormVisible = false
this.$nextTick(() => {
this.$parent.labelVisible = true
this.$parent.getDataList()
})
},
nodeEach (nodes) {
nodes.forEach(node => {
if (!node.style) {
node.style = {}
}
switch (node.class) {
case 'c1': {
node.shape = 'circle'
node.size = 40
break
}
case 'c3': {
node.shape = 'rect'
// node.size = [80, 50];
node.style = {
stroke: '#FFFFFF',
fill: '#DFE1E3'
}
break
}
case 'c0': {
node.shape = 'ellipse'
node.size = [80, 40]
break
}
case 'c2': {
node.shape = 'diamond'
node.size = [60, 60]
break
}
}
})
},
// 初始化G6
initG6 (json) {
const data = json
const width = document.getElementById('container').scrollWidth
this.nodeEach(data.nodes)
const tooltip = new G6.Tooltip({
offsetX: 10,
offsetY: 0,
fixToNode: [1, 0],
itemTypes: ['node', 'edge'],
getContent: (e) => {
const outDiv = document.createElement('div')
outDiv.style.width = 'fit-content'
outDiv.innerHTML = `<div style='width: 200px;'>${e.item.getModel()._label}</div>`
return outDiv
},
shouldBegin: (e) => {
let res = true
if (e.item.getModel()._label && e.item.getModel()._label.length > 12) {
res = true
} else {
res = false
}
return res
}
})
const graph = new G6.Graph({
container: 'container',
// width: '800',
height: this.chartHeight,
plugins: [tooltip],
// modes: {
// default: ['drag-canvas', 'zoom-canvas', 'click-select']
// },
defaultNode: {
type: 'rect',
size: [150, 50],
style: {
fill: '#9ACAFF',
stroke: '#FFFFFF'
}
},
// 连线类型及样式
defaultEdge: {
type: 'line',
style: {
offset: 25,
endArrow: true,
lineWidth: 2,
stroke: '#333'
}
}
})
data.nodes.forEach(node => {
node._label = node.label
if (node.label.length > 12) {
node.label = node.label.substr(0, 9) + '...'
}
})
graph.data(data)
graph.render()
}
}
}
</script>
<style scoped>
@import '../../assets/style/bsTheme.scss';
.data-set-scrollbar {
height: 100%;
width: 100%;
overflow-y: auto;
overflow-x: none;
}
.inner-container{
overflow-x: hidden;
}
.el-col {
height: 35px;
}
.attrInfo {
padding-left: 20px !important;
}
.text-style{
color: var(--bs-el-title);
}
.page-header {
display: flex;
position: relative;
.page-header-right {
position: absolute;
right: 16px;
}
}
</style>