UNPKG

wangbd-myui

Version:

MY前端基础框架核心组件库

157 lines (151 loc) 4.47 kB
import creator from '../utils/creator' import {go} from '../utils/lib' /** * 基础节点或连线 * @param {GraphObject} name go.Node / go.Link / go.Group * @param {Object} props 配置参数 * @param {GraphObject[]} children 子GraphObject * @returns {GraphObject} */ export function base({name, props, children} = {}) { const $events = props.$events || {} const {mouseEnter, mouseLeave} = $events props.$events = { ...$events, // 当鼠标快速经过节点群时,为避免画面闪烁和节约性能,对鼠标进出进行延时处理 mouseEnter: (e, obj) => { const model = obj.diagram?.model if (!model) { mouseEnter && mouseEnter(e, obj) return } const highlightMode = model.modelData.myGoHighlightMode model.set(model.modelData, 'myGoIsHighlighting', true) if (highlightMode === 'adjoin') { if (obj.part instanceof go.Node) { const connectedNodes = obj.part.findNodesConnected() const connectedLinks = obj.part.findLinksConnected() connectedNodes.each(N => { N.isHighlighted = true }) connectedLinks.each(L => { L.isHighlighted = true }) } else if (obj.part instanceof go.Link) { if (obj.part.fromNode) obj.part.fromNode.isHighlighted = true if (obj.part.fromNode) obj.part.toNode.isHighlighted = true } } obj.part.isHighlighted = true if (obj instanceof go.Group) { const parts = obj.findSubGraphParts() parts.each(parts => { ++parts.zOrder }) } else { ++obj.part.zOrder } mouseEnter && mouseEnter(e, obj) }, mouseLeave: (e, obj) => { const model = obj.diagram?.model if (!model) { mouseLeave && mouseLeave(e, obj) return } const highlightMode = model.modelData.myGoHighlightMode model.set(model.modelData, 'myGoIsHighlighting', false) if (highlightMode === 'adjoin') { if (obj.part instanceof go.Node) { const connectedNodes = obj.part.findNodesConnected() const connectedLinks = obj.part.findLinksConnected() connectedNodes.each(N => { N.isHighlighted = false }) connectedLinks.each(L => { L.isHighlighted = false }) } else if (obj.part instanceof go.Link) { if (obj.part.fromNode) obj.part.fromNode.isHighlighted = false if (obj.part.fromNode) obj.part.toNode.isHighlighted = false } } obj.part.isHighlighted = false if (obj instanceof go.Group) { const parts = obj.findSubGraphParts() parts.each(parts => { --parts.zOrder }) } else { --obj.part.zOrder } mouseLeave && mouseLeave(e, obj) } } return creator({ name, props, children }) } /** * 基础Tooltip * @param {object} tooltip * @returns {GraphObject} */ export function defaultTooltip(tooltip = {}) { return creator({ name: go.Adornment, props: { name: 'tooltip', type: go.Panel.Spot, zOrder: 1 }, children: [ creator({ name: go.Placeholder, props: {padding: 5} }), creator({ name: go.Panel, props: { type: go.Panel.Auto, alignment: go.Spot.Top, alignmentFocus: go.Spot.Bottom }, children: [ creator({ name: go.Shape, props: { figure: 'RoundedRectangle', fill: 'rgba(0,0,0,0.5)', strokeWidth: 0 } }), creator({ name: go.TextBlock, props: { text: 'tooltip text', stroke: '#fff', margin: new go.Margin(1, 5, 1, 5), wrap: go.TextBlock.WrapBreakAll, ...tooltip } }) ] }) ] }) } /** * 节点模板映射 * @param {Object} map 节点映射对象 {category: template} * @returns {go.Map} */ export function templateMap(map = {}) { const templateMap = new go.Map() Object.entries(map).forEach(([category, template]) => { templateMap.add(category, template) }) return templateMap }