king
2021-09-01 31ec63f0419895876cbaba99637a884a32d33d0d
src/tabviews/custom/components/chart/antv-pie/index.jsx
@@ -11,12 +11,13 @@
import Utils from '@/utils/utils.js'
import { modifyTabview } from '@/store/action'
import { chartColors } from '@/utils/option.js'
import asyncComponent from '@/utils/asyncComponent'
// import asyncComponent from '@/utils/asyncComponent'
import UtilsDM from '@/utils/utils-datamanage.js'
import MKEmitter from '@/utils/events.js'
import NormalHeader from '@/tabviews/custom/components/share/normalheader'
import './index.scss'
const NormalHeader = asyncComponent(() => import('@/tabviews/custom/components/share/normalheader'))
// const NormalHeader = asyncComponent(() => import('@/tabviews/custom/components/share/normalheader'))
class PieChart extends Component {
  static propTpyes = {
@@ -55,14 +56,7 @@
      _sync = false
    }
    let height = config.plot.height || 400
    if (config.plot.title || config.search.length > 0) {
      _config.plot.height = height - 75
    } else {
      _config.plot.height = height - 30
    }
    _config.style.height = height
    _config.style.height = config.plot.height || 400
    let decimal = 0
    _config.columns.forEach(col => {
@@ -106,12 +100,10 @@
      this.setState({sync: false, data: _data}, () => {
        this.handleData()
      })
    } else if (nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      if (config.setting.syncRefresh === 'true') {
        this.setState({}, () => {
          this.loadData()
        })
      }
    } else if (config.setting.syncRefresh && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
      this.setState({}, () => {
        this.loadData()
      })
    }
  }
@@ -207,11 +199,18 @@
  }
  handleData = () => {
    let _element = document.getElementById(this.state.chartId)
    const { plot, chartId } = this.state
    let _element = document.getElementById(chartId)
    if (_element) {
      _element.innerHTML = ''
    }
    this.pierender()
    if (plot.shape === 'nest') {
      this.nestrender()
    } else {
      this.pierender()
    }
  }
  async loadData (hastimer) {
@@ -228,7 +227,7 @@
    }
    let searches = fromJS(search).toJS()
    if (mainSearch && mainSearch.length > 0) { // 主表搜索条件
    if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 主表搜索条件
      let keys = searches.map(item => item.key)
      mainSearch.forEach(item => {
        if (!keys.includes(item.key)) {
@@ -237,11 +236,8 @@
      })
    }
    let requireFields = searches.filter(item => item.required && (!item.value || item.value.length === 0))
    let requireFields = searches.filter(item => item.required && item.value === '')
    if (requireFields.length > 0) {
      this.setState({
        loading: false
      })
      return
    }
@@ -556,7 +552,7 @@
    const chart = new Chart({
      container: chartId,
      autoFit: true,
      height: plot.height,
      height: this.wrap.offsetHeight - 30,
      padding: 0,
    })
@@ -597,18 +593,22 @@
          value: percent,
        }
      })
      .style({
        lineWidth: 1,
        stroke: '#fff',
    if (plot.splitLine) {
      chart1.style({
        lineWidth: plot.splitLine,
        stroke: plot.splitColor,
      })
    }
    if (plot.colors && plot.colors.length > 0) {
      let limit = chartColors.length
      chart1.color(type, (_type) => {
        if (colors.has(_type)) {
          return colors.get(_type)
        } else {
          let _c = chartColors[colorIndex % limit]
          colors.set(type, _c)
          colorIndex++
          return chartColors[(colorIndex - 1) % limit]
          return _c
        }
      })
    } else {
@@ -650,82 +650,75 @@
          value: value
        }
      })
      .style({
        lineWidth: 1,
        stroke: '#fff',
      })
      if (plot.colors && plot.colors.length > 0) {
        let limit = chartColors.length
        chart2.color(X_axis, (type) => {
          if (colors.has(type)) {
            return colors.get(type)
          } else {
            colorIndex++
            return chartColors[(colorIndex - 1) % limit]
    if (plot.splitLine) {
      chart2.style({
        lineWidth: plot.splitLine,
        stroke: plot.splitColor,
      })
    }
    if (plot.colors && plot.colors.length > 0) {
      let limit = chartColors.length
      chart2.color(X_axis, (type) => {
        if (colors.has(type)) {
          return colors.get(type)
        } else {
          let _c = chartColors[colorIndex % limit]
          colors.set(type, _c)
          colorIndex++
          return _c
        }
      })
    } else {
      chart2.color(X_axis)
    }
    if (plot.label !== 'false') {
      if (plot.label === 'inner') {
        chart2.label(Y_axis, {
          offset: -30,
          content: (data) => {
            let _val = ''
            if (plot.show !== 'value') {
              _val = `${(data[Y_axis] * 100).toFixed(2)}%`
            } else {
              _val = `${data[Y_axis]}`
            }
            return _val
          },
          style: {
            textAlign: 'center',
            fontSize: 16,
            shadowBlur: 2,
            shadowColor: 'rgba(0, 0, 0, .45)',
            fill: '#fff',
          }
        })
      } else {
        chart2.color(X_axis)
      }
        chart2.label(Y_axis, {
          layout: { type: plot.label === 'outer' ? 'pie-spider' : 'fixed-overlap' },
          labelHeight: 20,
          content: (data) => {
            let _val = ''
            if (plot.show !== 'value') {
              _val = `${(data[Y_axis] * 100).toFixed(2)}%`
            } else {
              _val = `${data[Y_axis]}`
            }
      if (plot.label !== 'false') {
        if (plot.label === 'inner') {
          chart2.label(Y_axis, {
            offset: -30,
            content: (data) => {
              let _label = ''
              let _val = ''
              if (plot.show !== 'value') {
                _val = `${(data[Y_axis] * 100).toFixed(2)}%`
              } else {
                _val = `${data[Y_axis]}`
              }
              if (plot.label === 'inner') {
                _label = _val
              } else {
                _label = `${data[X_axis]}: ${_val}`
              }
              return _label
            },
            return `${data[X_axis]}: ${_val}`
          },
          labelLine: {
            style: {
              textAlign: 'center',
              fontSize: 16,
              shadowBlur: 2,
              shadowColor: 'rgba(0, 0, 0, .45)',
              fill: '#fff',
            }
          })
        } else {
          chart2.label(Y_axis, {
            layout: { type: 'pie-spider' },
            labelHeight: 20,
            content: (data) => {
              let _label = ''
              let _val = ''
              if (plot.show !== 'value') {
                _val = `${(data[Y_axis] * 100).toFixed(2)}%`
              } else {
                _val = `${data[Y_axis]}`
              }
              if (plot.label === 'inner') {
                _label = _val
              } else {
                _label = `${data[X_axis]}: ${_val}`
              }
              return _label
              lineWidth: 0.5,
            },
            labelLine: {
              style: {
                lineWidth: 0.5,
              },
            },
            style: {
              fill: color
            }
          })
        }
          },
          style: {
            fill: color
          }
        })
      }
    }
    if (plot.interaction && plot.interaction.length) {
      plot.interaction.forEach(t => {
        chart.interaction(t)
@@ -740,11 +733,6 @@
  pierender = () => {
    const { plot, chartId } = this.state
    if (plot.shape === 'nest') {
      this.nestrender()
      return
    }
    let color = plot.color
    let X_axis = plot.Xaxis
@@ -758,7 +746,7 @@
    const chart = new Chart({
      container: chartId,
      autoFit: true,
      height: plot.height
      height: this.wrap.offsetHeight - 30
    })
    if (plot.shape !== 'nightingale' && plot.show !== 'value') {
@@ -845,14 +833,23 @@
            value: value
          }
        })
      if (plot.splitLine) {
        _chart.style({
          lineWidth: plot.splitLine,
          stroke: plot.splitColor,
        })
      }
      if (plot.colors && plot.colors.length > 0) {
        let limit = chartColors.length
        _chart.color(X_axis, (type) => {
          if (colors.has(type)) {
            return colors.get(type)
          } else {
            let _c = chartColors[colorIndex % limit]
            colors.set(type, _c)
            colorIndex++
            return chartColors[(colorIndex - 1) % limit]
            return _c
          }
        })
      } else {
@@ -881,7 +878,7 @@
          })
        } else {
          _chart.label(Y_axis, {
            layout: { type: 'pie-spider' },
            layout: { type: plot.label === 'outer' ? 'pie-spider' : 'fixed-overlap' },
            labelHeight: 20,
            content: (data) => {
              let _val = ''
@@ -916,8 +913,10 @@
          if (colors.has(type)) {
            return colors.get(type)
          } else {
            let _c = chartColors[colorIndex % limit]
            colors.set(type, _c)
            colorIndex++
            return chartColors[(colorIndex - 1) % limit]
            return _c
          }
        })
      } else {
@@ -934,9 +933,11 @@
        }
        _chart.label(X_axis, _label)
        .style({
          lineWidth: 1,
          stroke: '#fff',
      }
      if (plot.splitLine) {
        _chart.style({
          lineWidth: plot.splitLine,
          stroke: plot.splitColor,
        })
      }
    }
@@ -983,7 +984,7 @@
            tabs.push(newtab)
            this.props.modifyTabview(tabs)
          })
        } catch {
        } catch (e) {
          console.warn('菜单打开失败!')
        }
      })
@@ -1014,8 +1015,8 @@
          </div> : null
        }
        <NormalHeader config={config} BID={BID} menuType={this.props.menuType} refresh={this.refreshSearch} />
        <div className="canvas-wrap">
          <div className={'canvas' + (empty ? ' empty' : '')} style={{height: config.plot.height + 30}} id={this.state.chartId}></div>
        <div className="canvas-wrap" ref={ref => this.wrap = ref}>
          <div className={'canvas' + (empty ? ' empty' : '')} id={this.state.chartId}></div>
        </div>
        {empty ? <Empty description={false}/> : null}
      </div>