| | |
| | | } |
| | | } |
| | | }, |
| | | // { |
| | | // inherit: 'rect', |
| | | // width: 66, |
| | | // height: 36, |
| | | // attrs: { |
| | | // body: { |
| | | // strokeWidth: 0, |
| | | // fill: 'transparent' |
| | | // }, |
| | | // text: { |
| | | // fontSize: 12, |
| | | // fill: '#262626' |
| | | // } |
| | | // } |
| | | // }, |
| | | true |
| | | ) |
| | | |
| | | const styles = { |
| | | blue: '#1890ff', |
| | | red: '#f5222d', |
| | | orange_red: '#fa541c', |
| | | orange: '#fa8c16', |
| | | orange_yellow: '#faad14', |
| | | yellow: '#fadb14', |
| | | yellow_green: '#a0d911', |
| | | green: '#52c41a', |
| | | cyan: '#13c2c2', |
| | | blue_purple: '#2f54eb', |
| | | purple: '#722ed1', |
| | | magenta: '#eb2f96', |
| | | grass_green: '#aeb303', |
| | | deep_red: '#c32539', |
| | | deep_blue: '#1d3661', |
| | | blue1: '#e6f7ff', |
| | | red1: '#fff1f0', |
| | | orange_red1: '#fff2e8', |
| | | orange1: '#fff7e6', |
| | | orange_yellow1: '#fffbe6', |
| | | yellow1: '#feffe6', |
| | | yellow_green1: '#fcffe6', |
| | | green1: '#f6ffed', |
| | | cyan1: '#e6fffb', |
| | | blue_purple1: '#f0f5ff', |
| | | purple1: '#f9f0ff', |
| | | magenta1: '#fff0f6', |
| | | grass_green1: '#f2efda', |
| | | deep_red1: '#fff0f0', |
| | | deep_blue1: '#eff1f4' |
| | | } |
| | | |
| | | let sysColor = '#1890ff' |
| | | let lightColor = '#e6f7ff' |
| | | if (window.GLOB.style) { |
| | | let type = window.GLOB.style.replace(/bg_black_style_|bg_white_style_/, '') |
| | | sysColor = styles[type] || '#1890ff' |
| | | lightColor = styles[type + '1'] || '#e6f7ff' |
| | | } |
| | | |
| | | class antvX6Chart extends Component { |
| | | static propTpyes = { |
| | |
| | | if (BData) { |
| | | BID = BData.$BID || '' |
| | | } |
| | | |
| | | |
| | | this.setState({ |
| | | config: _config, |
| | | BID: BID || '', |
| | |
| | | max: 2 |
| | | }, |
| | | autoResize: true, |
| | | interacting: false, |
| | | panning: true, |
| | | background: { |
| | | color: config.plot.backgroundColor || 'transparent' |
| | |
| | | allowBlank: false, |
| | | snap: { |
| | | radius: 20 |
| | | }, |
| | | createEdge() { |
| | | return new Shape.Edge({ |
| | | attrs: { |
| | | line: { |
| | | stroke: '#000000', |
| | | strokeWidth: 1, |
| | | targetMarker: { |
| | | name: 'block', |
| | | width: 12, |
| | | height: 8 |
| | | } |
| | | } |
| | | }, |
| | | zIndex: 0 |
| | | }) |
| | | }, |
| | | validateConnection({ targetMagnet }) { |
| | | return !!targetMagnet |
| | | } |
| | | }, |
| | | highlighting: { |
| | | magnetAdsorbed: { |
| | | name: 'stroke', |
| | | args: { |
| | | attrs: { |
| | | fill: '#5F95FF', |
| | | stroke: '#5F95FF' |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }) |
| | |
| | | graph.resetCells(cells) |
| | | graph.positionContent('center') |
| | | } |
| | | |
| | | if (config.plot.click) { |
| | | graph.on('cell:click', ({ node }) => { |
| | | this.checkNode(graph, node) |
| | | }) |
| | | |
| | | graph.on('blank:click', () => { |
| | | this.checkNode(graph) |
| | | }) |
| | | } |
| | | } |
| | | |
| | | laneSrender = () => { |
| | |
| | | min: 0.5, |
| | | max: 2 |
| | | }, |
| | | interacting: false, |
| | | autoResize: true, |
| | | panning: true, |
| | | background: { color: '#ffffff' }, |
| | |
| | | allowBlank: false, |
| | | snap: { |
| | | radius: 20 |
| | | }, |
| | | createEdge() { |
| | | return new Shape.Edge({ |
| | | attrs: { |
| | | line: { |
| | | stroke: '#000000', |
| | | strokeWidth: 1, |
| | | targetMarker: { |
| | | name: 'block', |
| | | width: 12, |
| | | height: 8 |
| | | } |
| | | } |
| | | }, |
| | | zIndex: 2 |
| | | }) |
| | | }, |
| | | validateConnection({ targetMagnet }) { |
| | | return !!targetMagnet |
| | | } |
| | | }, |
| | | highlighting: { |
| | | magnetAdsorbed: { |
| | | name: 'stroke', |
| | | args: { |
| | | attrs: { |
| | | fill: '#5F95FF', |
| | | stroke: '#5F95FF' |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | translating: { |
| | | restrict(cellView) { |
| | | const cell = cellView.cell |
| | | const parentId = cell.prop('parent') |
| | | |
| | | if (parentId) { |
| | | const parentNode = graph.getCellById(parentId) |
| | | if (parentNode) { |
| | | return parentNode.getBBox().moveAndExpand({ |
| | | x: 0, |
| | | y: 36, |
| | | width: 0, |
| | | height: -36, |
| | | }) |
| | | } |
| | | } |
| | | return cell.getBBox() |
| | | } |
| | | } |
| | | }) |
| | |
| | | }) |
| | | graph.resetCells(cells) |
| | | graph.positionContent('top') |
| | | } |
| | | |
| | | if (config.plot.click) { |
| | | graph.on('cell:click', ({ node }) => { |
| | | this.checkNode(graph, node) |
| | | }) |
| | | |
| | | graph.on('blank:click', () => { |
| | | this.checkNode(graph) |
| | | }) |
| | | } |
| | | } |
| | | |
| | |
| | | showPorts(ports, false) |
| | | }) |
| | | |
| | | graph.on('node:click', ({ e, x, y, node, view }) => { |
| | | graph.on('node:click', ({ node }) => { |
| | | this.selectNode = node |
| | | |
| | | this.setState({node: node.store.data}) |
| | | }) |
| | | graph.on('edge:click', ({ e, x, y, edge, view }) => { |
| | | graph.on('edge:click', ({ edge }) => { |
| | | this.selectNode = edge |
| | | |
| | | this.setState({node: edge.store.data}) |
| | | |
| | | graph.clearTransformWidgets() |
| | | }) |
| | | graph.on('blank:click', ({ e, x, y }) => { |
| | | graph.on('blank:click', () => { |
| | | this.selectNode = null |
| | | |
| | | this.setState({node: null}) |
| | |
| | | }) |
| | | |
| | | const p3 = graph.createNode({ |
| | | shape: 'mk-text', |
| | | label: '文本' |
| | | shape: 'mk-text' |
| | | }) |
| | | |
| | | stencil.load([p1, p2, p3], 'group2') |
| | |
| | | }) |
| | | |
| | | graph |
| | | .use(new Transform({ |
| | | resizing: true, |
| | | rotating: true |
| | | })) |
| | | .use(new Selection()) |
| | | .use(new Snapline()) |
| | | .use(new Snapline({ |
| | | enabled: true, |
| | | filter: (Graph) => Graph.prop('shape') !== 'lane' |
| | | })) |
| | | .use(new Keyboard()) |
| | | .use(new Clipboard()) |
| | | .use(new History()) |
| | |
| | | graph.bindKey(['meta+c', 'ctrl+c'], () => { |
| | | const cells = graph.getSelectedCells() |
| | | if (cells.length) { |
| | | graph.copy(cells) |
| | | if (cells[0].prop('shape') !== 'lane' && cells[0].prop('shape') !== 'edge') { |
| | | graph.copy(cells) |
| | | } |
| | | } |
| | | return false |
| | | }) |
| | | graph.bindKey(['meta+x', 'ctrl+x'], () => { |
| | | const cells = graph.getSelectedCells() |
| | | if (cells.length) { |
| | | graph.cut(cells) |
| | | if (cells[0].prop('shape') !== 'lane' && cells[0].prop('shape') !== 'edge') { |
| | | graph.cut(cells) |
| | | } |
| | | } |
| | | return false |
| | | }) |
| | |
| | | graph.bindKey(['backspace', 'delete'], () => { |
| | | const cells = graph.getSelectedCells() |
| | | if (cells.length) { |
| | | graph.removeCells(cells) |
| | | this.selectNode = null |
| | | this.setState({node: null}) |
| | | |
| | | if (cells[0].prop('shape') === 'lane') { |
| | | graph.startBatch('delete-lane') |
| | | |
| | | graph.removeCells(cells) |
| | | this.deleteLane(cells[0], graph) |
| | | |
| | | graph.stopBatch('delete-lane') |
| | | } else { |
| | | graph.removeCells(cells) |
| | | } |
| | | } |
| | | }) |
| | | |
| | |
| | | showPorts(ports, false) |
| | | }) |
| | | |
| | | graph.on('node:added', ({ cell, index, options }) => { |
| | | graph.on('node:added', ({ cell }) => { |
| | | if (cell.prop('shape') === 'lane') { |
| | | if (cell.prop('zIndex') === 0) return |
| | | |
| | | graph.startBatch('add-lane') |
| | | |
| | | this.addLane(cell, graph) |
| | |
| | | if (num <= 1) { |
| | | message.warning('请添加泳道!') |
| | | graph.removeCells([cell]) |
| | | } else { |
| | | } else if (!cell.prop('parent')) { |
| | | this.addNode(cell, graph) |
| | | } |
| | | } |
| | | }) |
| | | graph.on('node:click', ({ e, x, y, node, view }) => { |
| | | graph.on('node:click', ({ node }) => { |
| | | this.selectNode = node |
| | | this.setState({node: node.store.data}) |
| | | |
| | | if (node.prop('shape') === 'lane') { |
| | | graph.clearTransformWidgets() |
| | | } |
| | | }) |
| | | graph.on('edge:click', ({ e, x, y, edge, view }) => { |
| | | graph.on('edge:click', ({ edge }) => { |
| | | this.selectNode = edge |
| | | this.setState({node: edge.store.data}) |
| | | |
| | | graph.clearTransformWidgets() |
| | | }) |
| | | graph.on('blank:click', ({ e, x, y }) => { |
| | | graph.on('blank:click', () => { |
| | | this.selectNode = null |
| | | |
| | | this.setState({node: null}) |
| | |
| | | }) |
| | | |
| | | const p3 = graph.createNode({ |
| | | shape: 'mk-text', |
| | | label: '文本' |
| | | shape: 'mk-text' |
| | | }) |
| | | |
| | | stencil.load([p1, p2, p3], 'group2') |
| | |
| | | // }, {padding: 20}) |
| | | } |
| | | |
| | | deleteLane = (cell, graph) => { |
| | | let id = cell.id |
| | | |
| | | let nodes = graph.getNodes() |
| | | let cells = [] |
| | | |
| | | nodes.forEach(item => { |
| | | if (item.prop('shape') === 'lane') return |
| | | |
| | | if (item.prop('parent') === id) { |
| | | cells.push(item) |
| | | } |
| | | }) |
| | | |
| | | graph.removeCells(cells) |
| | | |
| | | this.resetlane(cell.id, cell.prop('position/x'), -cell.prop('size/width')) |
| | | } |
| | | |
| | | addLane = (cell, graph) => { |
| | | const { config } = this.state |
| | | |
| | |
| | | } |
| | | |
| | | let height = 400 |
| | | |
| | | if (typeof(config.plot.height) === 'number' || /px/.test(config.plot.height)) { |
| | | height = parseInt(config.plot.height) |
| | | } |
| | |
| | | const { node } = this.state |
| | | |
| | | if (node.shape === 'edge') { |
| | | let labels = this.selectNode.prop('labels') |
| | | if (!labels || labels.length === 0) { |
| | | labels = [{ |
| | | attrs: {label: { text: '' }} |
| | | }] |
| | | } |
| | | |
| | | if (key === 'title') { |
| | | this.selectNode.setLabels(value) |
| | | labels = JSON.parse(JSON.stringify(labels)) |
| | | labels[0].attrs.label.text = value |
| | | this.selectNode.setLabels(labels) |
| | | } else if (key === 'stroke') { |
| | | this.selectNode.attr('line/stroke', value) |
| | | } else if (key === 'strokeWidth') { |
| | | this.selectNode.attr('line/strokeWidth', value) |
| | | } else if (key === 'fontSize') { |
| | | labels = JSON.parse(JSON.stringify(labels)) |
| | | labels[0].attrs.label.fontSize = value |
| | | this.selectNode.setLabels(labels) |
| | | } else if (key === 'fontFill') { |
| | | labels = JSON.parse(JSON.stringify(labels)) |
| | | labels[0].attrs.label.fill = value |
| | | this.selectNode.setLabels(labels) |
| | | } else if (key === 'lineType') { |
| | | if (value === 'dash') { |
| | | this.selectNode.attr('line/strokeDasharray', 5) |
| | |
| | | } |
| | | } |
| | | |
| | | checkNode = (graph, node) => { |
| | | const { plot, config } = this.state |
| | | |
| | | let nodes = graph.getNodes() |
| | | |
| | | nodes.forEach(item => { |
| | | if (item.prop('shape') === 'lane') return |
| | | |
| | | if (item.prop('oristyle')) { |
| | | let style = item.prop('oristyle') |
| | | |
| | | item.prop('attrs/body/fill', style.fill) |
| | | item.prop('attrs/body/stroke', style.stroke) |
| | | item.prop('attrs/text/fill', style.text) |
| | | } |
| | | }) |
| | | |
| | | if (!node || ['lane', 'mk-text', 'edge'].includes(node.prop('shape'))) { |
| | | MKEmitter.emit('resetSelectLine', config.uuid, '', '') |
| | | return |
| | | } |
| | | |
| | | if (!node.prop('oristyle')) { |
| | | node.prop('oristyle', { |
| | | fill: node.prop('attrs/body/fill'), |
| | | stroke: node.prop('attrs/body/stroke'), |
| | | text: node.prop('attrs/text/fill') |
| | | }) |
| | | } |
| | | |
| | | node.prop('attrs/body/fill', lightColor) |
| | | node.prop('attrs/body/stroke', sysColor) |
| | | node.prop('attrs/text/fill', sysColor) |
| | | |
| | | let sign = node.prop('mksign') || '' |
| | | |
| | | if (plot.click === 'menus') { |
| | | let menu = null |
| | | |
| | | if (plot.menus && plot.menus.length > 0) { |
| | | plot.menus.forEach(m => { |
| | | if (sign !== m.sign) return |
| | | menu = m |
| | | }) |
| | | } |
| | | if (!menu || !menu.MenuID) return |
| | | |
| | | let newtab = { |
| | | MenuID: menu.MenuID, |
| | | MenuName: menu.MenuName, |
| | | MenuNo: menu.MenuNo || '', |
| | | type: menu.tabType, |
| | | param: {$BID: sign} |
| | | } |
| | | |
| | | MKEmitter.emit('modifyTabs', newtab, true) |
| | | } else if (plot.click === 'menu') { |
| | | let menuId = plot.menu.slice(-1)[0] |
| | | let newtab = window.GLOB.mkThdMenus.filter(m => m.MenuID === menuId)[0] |
| | | |
| | | if (!newtab && plot.MenuID) { |
| | | newtab = { |
| | | MenuID: plot.MenuID, |
| | | MenuName: plot.MenuName, |
| | | MenuNo: plot.MenuNo, |
| | | type: plot.tabType |
| | | } |
| | | } else if (!newtab) { |
| | | return |
| | | } |
| | | |
| | | MKEmitter.emit('modifyTabs', {...newtab, param: {$BID: sign}}, true) |
| | | } else { |
| | | MKEmitter.emit('resetSelectLine', config.uuid, sign, {}) |
| | | } |
| | | } |
| | | |
| | | resetlane = (id, x, offset) => { |
| | | let nodes = this.mkGraph.getNodes() |
| | | |
| | |
| | | </div> : null |
| | | } |
| | | <NormalHeader config={config} /> |
| | | <div className="canvas" style={{width: '100%', minHeight: config.plot.height, height: config.plot.height}} id={config.uuid + 'canvas'}> |
| | | <div className={'canvas only-show' + (config.plot.click ? ' switchable' : '')} style={{width: '100%', minHeight: config.plot.height, height: config.plot.height}} id={config.uuid + 'canvas'}> |
| | | <div id={config.uuid + 'container'} className="mk-container"></div> |
| | | </div> |
| | | </div> |