update 思维导图选中
This commit is contained in:
+68
-19
@@ -127,13 +127,24 @@ export default {
|
|||||||
attrs: {
|
attrs: {
|
||||||
x: this.nodeHeight / 2,
|
x: this.nodeHeight / 2,
|
||||||
y: this.nodeHeight / 2,
|
y: this.nodeHeight / 2,
|
||||||
|
width: this.nodeWidth + NODE_ICON_MARGIN + this.expendCollapseIconR,
|
||||||
|
height: this.nodeHeight
|
||||||
|
},
|
||||||
|
name: 'rect-shape'
|
||||||
|
})
|
||||||
|
|
||||||
|
// 有边框和背景色的box
|
||||||
|
group.addShape('rect', {
|
||||||
|
attrs: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
width: this.nodeWidth,
|
width: this.nodeWidth,
|
||||||
height: this.nodeHeight,
|
height: this.nodeHeight,
|
||||||
radius: this.nodeHeight / 2,
|
radius: this.nodeHeight / 2,
|
||||||
fill: nodeStyle.bg,
|
fill: nodeStyle.bg,
|
||||||
stroke: nodeStyle.stroke
|
stroke: nodeStyle.stroke
|
||||||
},
|
},
|
||||||
name: 'rect-shape'
|
name: 'rect-content'
|
||||||
})
|
})
|
||||||
|
|
||||||
// 文本的部分
|
// 文本的部分
|
||||||
@@ -151,23 +162,27 @@ export default {
|
|||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
textBaseline: 'middle',
|
textBaseline: 'middle',
|
||||||
fill: nodeStyle.color
|
fill: nodeStyle.color
|
||||||
}
|
},
|
||||||
|
name: 'rect-text'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 处理展开收起图标
|
||||||
const hasChildren = cfg.children && cfg.children.length > 0
|
const hasChildren = cfg.children && cfg.children.length > 0
|
||||||
if (hasChildren) {
|
if (hasChildren) {
|
||||||
// 展开收起
|
|
||||||
group.addShape('marker', {
|
group.addShape('marker', {
|
||||||
attrs: {
|
attrs: {
|
||||||
x: this.nodeWidth + NODE_ICON_MARGIN + this.expendCollapseIconR,
|
x: this.nodeWidth + NODE_ICON_MARGIN,
|
||||||
y: this.nodeHeight / 2,
|
y: this.nodeHeight / 2,
|
||||||
r: this.expendCollapseIconR,
|
r: this.expendCollapseIconR,
|
||||||
symbol: COLLAPSE_ICON,
|
symbol: COLLAPSE_ICON,
|
||||||
stroke: '#666',
|
stroke: '#666',
|
||||||
lineWidth: 2
|
lineWidth: 2
|
||||||
},
|
},
|
||||||
|
name: 'expend-collapse',
|
||||||
className: 'collapse-icon'
|
className: 'collapse-icon'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeContainer.attr({
|
nodeContainer.attr({
|
||||||
x: 0,
|
x: 0,
|
||||||
y: 0,
|
y: 0,
|
||||||
@@ -175,6 +190,26 @@ export default {
|
|||||||
height: this.nodeHeight
|
height: this.nodeHeight
|
||||||
})
|
})
|
||||||
return nodeContainer
|
return nodeContainer
|
||||||
|
},
|
||||||
|
setState (name, value, item) {
|
||||||
|
console.log(item)
|
||||||
|
const group = item.getContainer()
|
||||||
|
const nodeDom = group.get('children')
|
||||||
|
const nodeBox = nodeDom[1]
|
||||||
|
const nodeText = nodeDom[2]
|
||||||
|
if (name === 'selected') {
|
||||||
|
if (value) {
|
||||||
|
nodeBox.attr('fill', '#D52C26')
|
||||||
|
nodeBox.attr('stroke', '#D52C26')
|
||||||
|
nodeText.attr('fill', '#FFFFFF')
|
||||||
|
} else {
|
||||||
|
const nodeColorIndex = item._cfg.model.depth % NODE_COLOR.length
|
||||||
|
const nodeStyle = NODE_COLOR[nodeColorIndex]
|
||||||
|
nodeBox.attr('fill', nodeStyle.bg)
|
||||||
|
nodeBox.attr('stroke', nodeStyle.stroke)
|
||||||
|
nodeText.attr('fill', nodeStyle.color)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, 'single-shape')
|
}, 'single-shape')
|
||||||
this.graph = new G6.TreeGraph({
|
this.graph = new G6.TreeGraph({
|
||||||
@@ -182,20 +217,7 @@ export default {
|
|||||||
width: document.getElementById(this.domId).clientWidth,
|
width: document.getElementById(this.domId).clientWidth,
|
||||||
height: document.getElementById(this.domId).clientHeight,
|
height: document.getElementById(this.domId).clientHeight,
|
||||||
modes: {
|
modes: {
|
||||||
default: [{
|
default: ['drag-canvas', 'zoom-canvas']
|
||||||
type: 'collapse-expand',
|
|
||||||
onChange: function onChange (item, collapsed) {
|
|
||||||
const data = item.get('model')
|
|
||||||
const icon = item.get('group').findByClassName('collapse-icon')
|
|
||||||
if (collapsed) {
|
|
||||||
icon.attr('symbol', EXPAND_ICON)
|
|
||||||
} else {
|
|
||||||
icon.attr('symbol', COLLAPSE_ICON)
|
|
||||||
}
|
|
||||||
data.collapsed = collapsed
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}, 'drag-canvas', 'zoom-canvas']
|
|
||||||
},
|
},
|
||||||
defaultNode: {
|
defaultNode: {
|
||||||
type: 'tree-node',
|
type: 'tree-node',
|
||||||
@@ -204,7 +226,12 @@ export default {
|
|||||||
defaultEdge: {
|
defaultEdge: {
|
||||||
type: 'cubic-horizontal',
|
type: 'cubic-horizontal',
|
||||||
style: {
|
style: {
|
||||||
stroke: '#A3B1BF'
|
stroke: '#A3B1BF',
|
||||||
|
endArrow: {
|
||||||
|
path: G6.Arrow.circle(2),
|
||||||
|
d: 0,
|
||||||
|
fill: '#A3B1BF'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
layout: {
|
layout: {
|
||||||
@@ -227,6 +254,28 @@ export default {
|
|||||||
this.graph.data(this.data)
|
this.graph.data(this.data)
|
||||||
this.graph.render()
|
this.graph.render()
|
||||||
this.graph.fitView()
|
this.graph.fitView()
|
||||||
|
// 展开收起事件
|
||||||
|
this.graph.on('expend-collapse:click', (event) => {
|
||||||
|
const { item } = event
|
||||||
|
item.getModel().collapsed = !item.getModel().collapsed
|
||||||
|
// this.graph.setItemState(item, 'collapsed', item.getModel().collapsed)
|
||||||
|
this.graph.refreshItem(item)
|
||||||
|
this.graph.layout()
|
||||||
|
})
|
||||||
|
// 点击选中
|
||||||
|
this.graph.on('rect-content:click', (event) => {
|
||||||
|
this.handleSelectedNode(event)
|
||||||
|
})
|
||||||
|
this.graph.on('rect-text:click', (event) => {
|
||||||
|
this.handleSelectedNode(event)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleSelectedNode (event) {
|
||||||
|
const { item } = event
|
||||||
|
item.getModel().selected = !item.getModel().selected
|
||||||
|
this.graph.setItemState(item, 'selected', item.getModel().selected)
|
||||||
|
this.graph.refreshItem(item)
|
||||||
|
this.graph.layout()
|
||||||
},
|
},
|
||||||
searchNode (nodeId) {
|
searchNode (nodeId) {
|
||||||
const item = this.graph.findById(nodeId)
|
const item = this.graph.findById(nodeId)
|
||||||
|
|||||||
@@ -16,8 +16,7 @@
|
|||||||
:filter-option="false"
|
:filter-option="false"
|
||||||
:not-found-content="null"
|
:not-found-content="null"
|
||||||
@search="handleSearch"
|
@search="handleSearch"
|
||||||
@change="handleChange"
|
@change="handleChange">
|
||||||
>
|
|
||||||
<a-select-option v-for="d in nodeNameList" :key="d.id">
|
<a-select-option v-for="d in nodeNameList" :key="d.id">
|
||||||
{{ d.name }}
|
{{ d.name }}
|
||||||
</a-select-option>
|
</a-select-option>
|
||||||
|
|||||||
Reference in New Issue
Block a user