From d5ce81026882ada34e5d49411be7c90ee96cc102 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 17 一月 2023 18:20:11 +0800 Subject: [PATCH] 2023-01-17 --- src/tabviews/custom/components/chart/antv-G6/index.jsx | 224 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 114 insertions(+), 110 deletions(-) diff --git a/src/tabviews/custom/components/chart/antv-G6/index.jsx b/src/tabviews/custom/components/chart/antv-G6/index.jsx index 640f719..e856a3d 100644 --- a/src/tabviews/custom/components/chart/antv-G6/index.jsx +++ b/src/tabviews/custom/components/chart/antv-G6/index.jsx @@ -27,7 +27,8 @@ purple: '#722ed1', magenta: '#eb2f96', grass_green: '#aeb303', - deep_red: '#c32539' + deep_red: '#c32539', + deep_blue: '#1d3661' } let systemColor = '#1890ff' @@ -60,29 +61,7 @@ }, 'single-node', ) -G6.registerNode( - 'dice-mind-map-sub', { - jsx: (cfg) => { - const width = Util.getTextSize(cfg.label, 14)[0] + 24 - return ` - <group> - <rect style={{width: ${width}, height: 22, cursor: pointer}}> - <text style={{ fontSize: 14, fill: ${cfg.selected ? systemColor : '#000000'}, marginLeft: 12, marginTop: 6, cursor: pointer }}>${cfg.label}</text> - </rect> - <rect style={{ fill: ${cfg.color}, width: ${width}, height: 2, x: 0, y: 22, cursor: pointer }} /> - </group> - ` - }, - getAnchorPoints() { - return [ - [0, 0.965], - [1, 0.965] - ] - } - }, - 'single-node', -) G6.registerNode( 'dice-mind-map-leaf', { jsx: (cfg) => { @@ -139,38 +118,6 @@ ev.preventDefault() } }) - -const dataMapTransform = (data) => { - const changeData = (d, level = 0, color) => { - const data = { ...d } - - switch (level) { - case 0: - data.type = 'dice-mind-map-root' - break - case 1: - data.type = 'dice-mind-map-sub' - break - default: - data.type = 'dice-mind-map-leaf' - break - } - - if (color) { - data.color = color - } - - if (level === 1 && !d.direction) { - data.direction = 'right' - } - - if (d.children) { - data.children = d.children.map((child) => changeData(child, level + 1, data.color)) - } - return data - } - return changeData(data) -} // 缂╄繘鏂囦欢鏍� G6.registerNode('indentedRoot', { @@ -857,7 +804,6 @@ state = { config: null, - data: null, BID: '', BData: '', plot: null, @@ -867,11 +813,12 @@ empty: true } + data = [] + UNSAFE_componentWillMount () { const { config, data, initdata } = this.props let _config = fromJS(config).toJS() - let _data = null let _sync = _config.setting.sync === 'true' let BID = '' @@ -887,10 +834,10 @@ } if (_sync && data) { - _data = data[config.dataName] || [] + this.data = data[config.dataName] || [] _sync = false } else if (_sync && initdata) { - _data = initdata || [] + this.data = initdata || [] _sync = false } @@ -903,7 +850,6 @@ this.setState({ config: _config, - data: _data, BID: BID || '', BData: BData || '', arr_field: _config.columns.map(col => col.field).join(','), @@ -914,44 +860,13 @@ setTimeout(() => { this.loadData() }, _config.setting.delay || 0) - } else if (config.setting.sync === 'true' && _data) { - this.handleData() } }) - } - /** - * @description 鍥捐〃鏁版嵁鏇存柊锛屽埛鏂板唴瀹� - */ - UNSAFE_componentWillReceiveProps (nextProps) { - const { sync, config } = this.state - - if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) { - let _data = [] - - if (nextProps.data && nextProps.data[config.dataName]) { - _data = nextProps.data[config.dataName] - } - - this.setState({sync: false, data: _data}, () => { - this.handleData() - }) - } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { - this.setState({}, () => { - this.loadData() - }) + if (this.data.length > 0) { + this.handleData() } - } - - shouldComponentUpdate (nextProps, nextState) { - return !is(fromJS(this.state), fromJS(nextState)) - } - - componentDidMount () { - const { config } = this.state - MKEmitter.addListener('reloadData', this.reloadData) - MKEmitter.addListener('resetSelectLine', this.resetParentParam) - + let that = this if (config.plot.subtype === 'mindmap') { @@ -1081,6 +996,53 @@ } /** + * @description 鍥捐〃鏁版嵁鏇存柊锛屽埛鏂板唴瀹� + */ + UNSAFE_componentWillReceiveProps (nextProps) { + const { sync, config } = this.state + + if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) { + let _data = [] + + if (nextProps.data && nextProps.data[config.dataName]) { + _data = nextProps.data[config.dataName] + } + + if (!is(fromJS(this.data), fromJS(_data))) { + this.data = _data + this.handleData() + } + + this.setState({sync: false}) + } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) { + this.setState({}, () => { + this.loadData() + }) + } + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) + } + + componentDidMount () { + const { config, sync } = this.state + MKEmitter.addListener('reloadData', this.reloadData) + MKEmitter.addListener('resetSelectLine', this.resetParentParam) + + if (config.$cache && (config.setting.sync !== 'true' || sync)) { + Api.getLCacheConfig(config.uuid).then(res => { + if (!res || this.data.length > 0) return + + if (!is(fromJS(this.data), fromJS(res))) { + this.data = res + this.handleData() + } + }) + } + } + + /** * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆 */ componentWillUnmount () { @@ -1115,11 +1077,10 @@ const { config, arr_field, BID } = this.state if (config.setting.supModule && !BID) { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� - this.setState({ - data: {} - }, () => { + if (!is(fromJS(this.data), fromJS([]))) { + this.data = [] this.handleData() - }) + } return } @@ -1139,14 +1100,18 @@ let result = await Api.genericInterface(param) if (result.status) { - let data = result.data || [] + if (config.$cache) { + Api.writeCacheConfig(config.uuid, result.data || '') + } this.setState({ - data, loading: false - }, () => { - this.handleData() }) + + if (!is(fromJS(this.data), fromJS(result.data || []))) { + this.data = result.data || [] + this.handleData() + } } else { this.setState({ loading: false @@ -1167,7 +1132,7 @@ } getdata = () => { - const { plot, data, config, BData } = this.state + const { plot, config, BData } = this.state let root = { label: 'Root', @@ -1193,7 +1158,7 @@ let _options = [] let logMap = new Map() - data.forEach(item => { + this.data.forEach(item => { let pval = item[plot.parentField] let val = item[plot.valueField] let label = item[plot.labelField] || '' @@ -1223,6 +1188,8 @@ root.children = root.children || [] if (plot.subtype === 'mindmap') { + root.type = 'dice-mind-map-root' + if (plot.dirField) { root.children = root.children.map(item => { item.direction = item[plot.dirField] === plot.dirSign ? 'left' : 'right' @@ -1235,9 +1202,24 @@ if (item.direction === 'left') { item.color = plot.leftColor || '#26C281' } else { + item.direction = 'right' item.color = plot.nodeColor || '#1890ff' } }) + + const collapse = (item) => { + if (!item.children) return + + item.children.forEach(cell => { + cell.collapsed = plot.collapsed === 'true' + cell.direction = cell.direction || 'right' + cell.type = 'dice-mind-map-leaf' + cell.color = cell.color || item.color + collapse(cell) + }) + } + + collapse(root) } else if (plot.subtype === 'indentTree') { root.isRoot = true root.collapsed = false @@ -1292,14 +1274,20 @@ } handleData = () => { - const { plot, data } = this.state - let _element = document.getElementById(this.state.chartId) if (_element) { _element.innerHTML = '' } - if (!data || data.length === 0) { + setTimeout(() => { + this.viewrender() + }, 100) + } + + viewrender = () => { + const { plot } = this.state + + if (this.data.length === 0) { this.setState({empty: true}) } else { this.setState({empty: false}) @@ -1368,6 +1356,10 @@ graph.data(data) graph.render() graph.fitView() + + if (plot.collapsed === 'true') { + graph.zoomTo(1, { x: 0, y: plot.height / 2 }) + } } indentrender = () => { @@ -1437,10 +1429,16 @@ ponitrender = () => { const { config, plot, chartId } = this.state const data = this.getdata() + const width = this.wrap.scrollWidth - 30 + let modes = ['drag-canvas', 'zoom-canvas', config.uuid] + + if (plot.collapsed === 'true') { + modes = [{ type: 'collapse-expand' }, 'drag-canvas', 'zoom-canvas', config.uuid] + } const tree = new G6.TreeGraph({ container: chartId, - width: this.wrap.scrollWidth - 30, + width: width, height: plot.height, fitView: true, layout: { @@ -1472,13 +1470,19 @@ }, minZoom: 0.5, modes: { - default: ['drag-canvas', 'zoom-canvas', config.uuid] + default: modes } }) - tree.data(dataMapTransform(data)) + tree.data(data) tree.render() + + if (plot.collapsed === 'true' && plot.dirField) { + tree.zoomTo(1, { x: width / 2, y: plot.height / 2 }) + } else if (plot.collapsed === 'true') { + tree.zoomTo(1, { x: 0, y: plot.height / 2 }) + } } handleClick = (data = null) => { -- Gitblit v1.8.0