| | |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Spin, Tooltip, message, Modal, notification } from 'antd' |
| | | import { UndoOutlined, RedoOutlined, VerticalAlignTopOutlined, VerticalAlignBottomOutlined, SaveOutlined, ZoomInOutlined, ZoomOutOutlined, OneToOneOutlined, QuestionCircleOutlined } from '@ant-design/icons' |
| | | import { UndoOutlined, RedoOutlined, VerticalAlignTopOutlined, VerticalAlignBottomOutlined, SaveOutlined, ZoomInOutlined, ZoomOutOutlined, OneToOneOutlined, QuestionCircleOutlined, ClearOutlined } from '@ant-design/icons' |
| | | import { Graph, Shape } from '@antv/x6' |
| | | import { Stencil } from '@antv/x6-plugin-stencil' |
| | | import { Transform } from '@antv/x6-plugin-transform' |
| | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import NormalHeader from '@/tabviews/custom/components/share/normalheader' |
| | | import lanes from '@/menu/components/chart/antv-X6/lane.json' |
| | | import xflows from '@/menu/components/chart/antv-X6/xflow.json' |
| | | // import lanes from '@/menu/components/chart/antv-X6/lane.json' |
| | | // import xflows from '@/menu/components/chart/antv-X6/xflow.json' |
| | | import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | | const NodeUpdate = asyncComponent(() => import('./nodeupdate')) |
| | | |
| | | const groups = { |
| | |
| | | } |
| | | |
| | | async loadData () { |
| | | const { config, BID } = this.state |
| | | const { BID } = this.state |
| | | |
| | | if (config.setting.supModule && !BID) { // BID 不存在时,不做查询 |
| | | if (!BID) { |
| | | if (!is(fromJS(this.data), fromJS([]))) { |
| | | this.cells = [] |
| | | this.handleData() |
| | |
| | | loading: true |
| | | }) |
| | | |
| | | if (config) { |
| | | if (config.plot.subtype === 'xflow') { |
| | | this.cells = xflows |
| | | } else { |
| | | this.cells = lanes |
| | | } |
| | | this.handleData() |
| | | |
| | | setTimeout(() => { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | }, 2000) |
| | | return |
| | | } |
| | | |
| | | let param = { |
| | | func: '', |
| | | BID: BID |
| | | func: 's_get_works_flow_local_param_v6', |
| | | ID: BID |
| | | } |
| | | |
| | | let result = await Api.genericInterface(param) |
| | |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | let item = result.data && result.data[0] ? result.data[0] : null |
| | | let cells = [] |
| | | |
| | | this.cells = result.data || [] |
| | | if (item && item.long_param) { |
| | | let long_param = JSON.parse(window.decodeURIComponent(window.atob(item.long_param))) |
| | | cells = long_param.cells || [] |
| | | } |
| | | |
| | | this.cells = cells |
| | | this.handleData() |
| | | |
| | | if (result.message) { |
| | |
| | | } |
| | | |
| | | save = () => { |
| | | // let nodes = this.mkGraph.toJSON() |
| | | // this.mkGraph.toPNG((dataUri) => { |
| | | // Api.fileuploadbase64({ |
| | | // Base64Img: dataUri |
| | | // }).then(res => { |
| | | // }) |
| | | // }, {padding: 20}) |
| | | const { BID } = this.state |
| | | |
| | | if (!BID) { |
| | | Modal.error({ |
| | | title: '未获取到流程ID,不可保存!', |
| | | }) |
| | | return |
| | | } |
| | | |
| | | this.setState({ |
| | | loading: true |
| | | }) |
| | | |
| | | let nodes = this.mkGraph.toJSON() |
| | | this.mkGraph.toPNG((dataUri) => { |
| | | let param = { |
| | | func: 's_works_flow_param_upt_v6', |
| | | long_param: window.btoa(window.encodeURIComponent(JSON.stringify(nodes))), |
| | | flow_image: dataUri, |
| | | ID: BID, |
| | | BID: '' |
| | | } |
| | | |
| | | Api.genericInterface(param).then(res => { |
| | | if (res.status) { |
| | | notification.success({ |
| | | top: 92, |
| | | message: '保存成功!', |
| | | duration: 2 |
| | | }) |
| | | } else { |
| | | notification.error({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 10 |
| | | }) |
| | | } |
| | | |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | }) |
| | | }, {padding: 20}) |
| | | } |
| | | |
| | | clearNode = () => { |
| | | let cells = this.mkGraph.getCells() |
| | | const that = this |
| | | |
| | | if (cells.length === 0) return |
| | | |
| | | confirm({ |
| | | title: '确定清空元素吗?', |
| | | content: '清空后不可恢复。', |
| | | okText: '确定', |
| | | cancelText: '取消', |
| | | onOk() { |
| | | that.mkGraph.removeCells(cells) |
| | | that.mkGraph.cleanHistory() |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } |
| | | |
| | | deleteLane = (cell, graph) => { |
| | |
| | | <Tooltip title="前进"> |
| | | <RedoOutlined onClick={this.setprev}/> |
| | | </Tooltip> |
| | | <Tooltip title="清空"> |
| | | <ClearOutlined onClick={this.clearNode}/> |
| | | </Tooltip> |
| | | <Tooltip overlayStyle={{maxWidth: 260}} title="快捷键:复制(ctrl+c)、剪切(ctrl+x)、粘贴(ctrl+v)、后退(ctrl+z)、前进(ctrl+shift+z)、删除(backspace 或 delete)"> |
| | | <QuestionCircleOutlined /> |
| | | </Tooltip> |