| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Modal, Button, notification, Spin, Input } from 'antd' |
| | | import { Modal, Button, notification, Spin, Input, message } from 'antd' |
| | | import { ForkOutlined } from '@ant-design/icons' |
| | | |
| | | import Api from '@/api' |
| | |
| | | return {tbs, ptbs} |
| | | } |
| | | |
| | | getFuncAndInterface = (config) => { |
| | | let ptbs = [] |
| | | |
| | | let filterBtn = (cell, tbs) => { |
| | | if (cell.intertype === 'inner') { |
| | | tbs.push({ |
| | | label: cell.innerFunc + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } else if (cell.intertype === 'outer' || cell.intertype === 'custom') { |
| | | if (cell.innerFunc) { |
| | | tbs.push({ |
| | | label: cell.innerFunc + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (cell.outerFunc) { |
| | | tbs.push({ |
| | | label: cell.outerFunc + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (cell.interface && cell.sysInterface !== 'true') { |
| | | tbs.push({ |
| | | label: cell.interface + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (cell.proInterface) { |
| | | tbs.push({ |
| | | label: cell.proInterface + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (cell.exInterface) { |
| | | let url = '' |
| | | |
| | | try { |
| | | url = JSON.parse(cell.exInterface).url |
| | | } catch(e) { |
| | | url = '' |
| | | } |
| | | |
| | | if (url) { |
| | | tbs.push({ |
| | | label: url + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | } |
| | | if (cell.exProInterface) { |
| | | let url = '' |
| | | |
| | | try { |
| | | url = JSON.parse(cell.exProInterface).url |
| | | } catch(e) { |
| | | url = '' |
| | | } |
| | | |
| | | if (url) { |
| | | tbs.push({ |
| | | label: url + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | } |
| | | if (cell.callbackFunc) { |
| | | tbs.push({ |
| | | label: cell.callbackFunc + ' (' + cell.label + ')', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | |
| | | let filterSetting = (item, tbs) => { |
| | | if (!item.setting) return |
| | | if (item.setting.interType === 'inner') { |
| | | tbs.push({ |
| | | label: item.setting.innerFunc + ' (数据源)', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } else if (item.setting.interType === 'outer') { |
| | | if (item.setting.outerFunc) { |
| | | tbs.push({ |
| | | label: item.setting.outerFunc + ' (数据源)', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (item.setting.interface && item.setting.sysInterface !== 'true') { |
| | | tbs.push({ |
| | | label: item.setting.interface + ' (数据源)', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (item.setting.proInterface) { |
| | | tbs.push({ |
| | | label: item.setting.proInterface + ' (数据源)', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | if (item.setting.exInterface) { |
| | | let url = '' |
| | | |
| | | try { |
| | | url = JSON.parse(item.setting.exInterface).url |
| | | } catch(e) { |
| | | url = '' |
| | | } |
| | | |
| | | if (url) { |
| | | tbs.push({ |
| | | label: url + ' (数据源)', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | } |
| | | if (item.setting.exProInterface) { |
| | | let url = '' |
| | | |
| | | try { |
| | | url = JSON.parse(item.setting.exProInterface).url |
| | | } catch(e) { |
| | | url = '' |
| | | } |
| | | |
| | | if (url) { |
| | | tbs.push({ |
| | | label: url + ' (数据源)', |
| | | color: 'orange', |
| | | id: Utils.getuuid(), |
| | | direction: 'left' |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | let traversal = (components, extra) => { |
| | | components.forEach(item => { |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | traversal(tab.components, extra) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | traversal(item.components, extra) |
| | | } else { |
| | | let tbs = [] |
| | | |
| | | filterSetting(item, tbs) |
| | | |
| | | if (item.action) { |
| | | item.action.forEach(cell => { |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config.components) { |
| | | traversal(cell.config.components, `-${cell.label}(弹窗)`) |
| | | } |
| | | } else { |
| | | filterBtn(cell, tbs) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') { |
| | | item.subcards.forEach(card => { |
| | | card.elements && card.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config.components) { |
| | | traversal(cell.config.components, `-${cell.label}(弹窗)`) |
| | | } |
| | | } else { |
| | | filterBtn(cell, tbs) |
| | | } |
| | | }) |
| | | card.backElements && card.backElements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config.components) { |
| | | traversal(cell.config.components, `-${cell.label}(弹窗)`) |
| | | } |
| | | } else { |
| | | filterBtn(cell, tbs) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'balcony') { |
| | | item.elements && item.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config.components) { |
| | | traversal(cell.config.components, `-${cell.label}(弹窗)`) |
| | | } |
| | | } else { |
| | | filterBtn(cell, tbs) |
| | | } |
| | | }) |
| | | } else if (item.type === 'table') { |
| | | let loopCol = (cols) => { |
| | | cols.forEach(col => { |
| | | if (col.type === 'colspan') { |
| | | loopCol(col.subcols) |
| | | } else if (col.type === 'custom') { |
| | | col.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config.components) { |
| | | traversal(cell.config.components, `-${cell.label}(弹窗)`) |
| | | } |
| | | } else { |
| | | filterBtn(cell, tbs) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | loopCol(item.cols) |
| | | } else if (item.type === 'form') { |
| | | item.subcards.forEach(group => { |
| | | filterBtn(group.subButton, tbs) |
| | | }) |
| | | } |
| | | |
| | | if (tbs.length) { |
| | | ptbs.push({ |
| | | label: item.name + extra, |
| | | id: Utils.getuuid(), |
| | | direction: 'left', |
| | | color: 'orange', |
| | | children: tbs |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (config.interfaces) { |
| | | config.interfaces.forEach(item => { |
| | | let tbs = [] |
| | | filterSetting(item, tbs) |
| | | if (tbs.length) { |
| | | ptbs.push({ |
| | | label: item.name, |
| | | id: Utils.getuuid(), |
| | | direction: 'left', |
| | | color: 'orange', |
| | | children: tbs |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | traversal(config.components, '') |
| | | |
| | | return ptbs |
| | | } |
| | | |
| | | trigger = () => { |
| | | const { config } = this.props |
| | | |
| | |
| | | MenuID: config.uuid |
| | | } |
| | | |
| | | Api.getSystemConfig(param).then(result => { |
| | | Api.getCloudConfig(param).then(result => { |
| | | if (!result.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | id: 'par' + i, |
| | | direction: 'left', |
| | | color: '#5AD8A6', |
| | | node: 'table', |
| | | children: [] |
| | | } |
| | | |
| | |
| | | |
| | | data.children.push(cell) |
| | | }) |
| | | } |
| | | |
| | | let funcs = this.getFuncAndInterface(config) |
| | | |
| | | if (funcs.length) { |
| | | data.children.push(...funcs) |
| | | } |
| | | |
| | | if (result.tb_list) { |
| | |
| | | if (m.debug_url) { |
| | | let _param = JSON.parse(window.decodeURIComponent(window.atob(m.debug_url))) |
| | | let label = _param.MenuName |
| | | _param.lang = _param.lang || 'zh-CN' |
| | | |
| | | if (_param && _param.type === 'app') { |
| | | label += ` (${_param.kei_no} | ${_param.typename}${param.lang !== 'zh-CN' ? ' | ' + param.lang : ''})` |
| | | label += ` (${_param.kei_no} | ${_param.typename}${_param.lang !== 'zh-CN' ? ' | ' + _param.lang : ''})` |
| | | } else if (_param && _param.lang && _param.lang !== 'zh-CN') { |
| | | label += ` (${_param.lang})` |
| | | } |
| | | |
| | | cell.children.push({ |
| | |
| | | if (menu.direction !== 'right') return |
| | | |
| | | if (menu.depth === 1) { |
| | | sessionStorage.setItem('mk-table-node', menu.label) |
| | | window.open('#/hs') |
| | | |
| | | setTimeout(() => { |
| | | sessionStorage.removeItem('mk-table-node') |
| | | }, 50) |
| | | } else if (menu.param) { |
| | | if (menu.param.type === 'admin') { |
| | | if (menu.param.MenuType === 'custom') { |
| | | if (['custom', 'home', 'billPrint'].includes(menu.param.MenuType)) { |
| | | let _param = {...menu.param} |
| | | delete _param.type |
| | | _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param))) |
| | |
| | | this.graph.updateItem(node, _model, false) |
| | | } |
| | | }) |
| | | |
| | | if (model.direction === 'left') { |
| | | if (model.node === 'table') { |
| | | model.fontcolor = '#1890ff' |
| | | this.graph.updateItem(item, model, false) |
| | | |
| | | let oInput = document.createElement('input') |
| | | oInput.value = model.label |
| | | document.body.appendChild(oInput) |
| | | oInput.select() |
| | | document.execCommand('Copy') |
| | | document.body.removeChild(oInput) |
| | | |
| | | message.success('表名复制成功。') |
| | | } |
| | | return |
| | | } |
| | | |
| | | model.fontcolor = '#1890ff' |
| | | this.graph.updateItem(item, model, false) |
| | |
| | | const { visible, loading, empty } = this.state |
| | | |
| | | return ( |
| | | <div style={{display: 'inline-block'}}> |
| | | <> |
| | | <Button style={{borderColor: '#8E44AD', color: '#8E44AD'}} onClick={this.trigger}><ForkOutlined /> 表关系图</Button> |
| | | <Modal |
| | | title="" |
| | |
| | | </div> |
| | | <div className="footer"> |
| | | <Button key="cancel" onClick={() => { this.setState({ visible: false })}}>关闭</Button> |
| | | <span className="tip">注:点击表名可展开/收起菜单</span> |
| | | <span className="tip">注:点击表名(右侧)可展开/收起菜单,左侧橙色标注为接口或函数名。</span> |
| | | </div> |
| | | </Modal> |
| | | </div> |
| | | </> |
| | | ) |
| | | } |
| | | } |