From abe942f4c6d49a6ad42acaf8e74f5f02b5ffc089 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 04 六月 2021 15:26:17 +0800 Subject: [PATCH] 2021-06-04 --- src/tabviews/custom/components/chart/antv-bar-line/index.jsx | 265 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 229 insertions(+), 36 deletions(-) diff --git a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx index b08062f..b1f524a 100644 --- a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx +++ b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx @@ -128,6 +128,7 @@ let axisIndex = 0 let hasBar = false + let Bar_axis = [] let fields = [] let legends = [] @@ -143,11 +144,9 @@ colorIndex++ } - if (item.chartType === 'bar' && !hasBar) { + if (item.chartType === 'bar') { hasBar = true - } else if (item.chartType === 'bar') { - item.chartType = 'line' - item.shape = 'smooth' + Bar_axis.push(item.type) } if (item.axis === 'true' && axisIndex < 2) { @@ -174,6 +173,13 @@ _config.plot.customs = fields _config.plot.legends = legends _config.plot.hasBar = hasBar + _config.plot.axisIndex = axisIndex + + if (_config.plot.mutilBar === 'overlap') { + _config.plot.Bar_axis = [] + } else { + _config.plot.Bar_axis = Bar_axis + } } else { _config.plot.enabled = 'false' } @@ -890,9 +896,23 @@ * @description 鑷畾涔夋覆鏌� */ customrender = (data) => { - const { plot } = this.state + const { plot, transfield } = this.state const ds = new DataSet() - const dv = ds.createView().source(data) + + let _copydata = data + // dodge is not support linear attribute, please use category attribute! 鏃堕棿鏍煎紡 + if (_copydata[0] && _copydata[0][plot.Xaxis] && /^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}:\d{2})?/.test(_copydata[0][plot.Xaxis])) { + for (let i = 1; i < 12; i++) { + if (_copydata[i] && _copydata[i][plot.Xaxis] === _copydata[0][plot.Xaxis]) { + _copydata[i][plot.Xaxis] += ' ' + } else { + break; + } + } + _copydata[0][plot.Xaxis] += ' ' + } + + const dv = ds.createView().source(_copydata) dv.transform({ type: 'map', callback(row) { @@ -903,32 +923,21 @@ } }) + let padding = [10, 30, 30, 30] + + if (!plot.Bar_axis.length) { + if (plot.axisIndex === 2) { + padding = [10, 50, 30, 50] + } else if (plot.axisIndex === 1) { + padding = [10, 30, 30, 50] + } + } + const chart = new Chart({ container: this.state.chartId, autoFit: true, height: plot.height }) - - let _data = dv.rows - // dodge is not support linear attribute, please use category attribute! 鏃堕棿鏍煎紡 - if (_data[0] && _data[0][plot.Xaxis] && /^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}:\d{2})?/.test(_data[0][plot.Xaxis])) { - for (let i = 1; i < 12; i++) { - if (_data[i] && _data[i][plot.Xaxis] === _data[0][plot.Xaxis]) { - _data[i][plot.Xaxis] += ' ' - } else { - break; - } - } - _data[0][plot.Xaxis] += ' ' - } - - chart.data(_data) - - if (!plot.hasBar) { - chart.scale(plot.Xaxis, { - range: [0, 1] - }) - } // 鍧愭爣杞存牸寮忓寲 chart.axis(plot.Xaxis, { @@ -942,6 +951,12 @@ style: { fill: plot.color } }, }) + + if (!plot.hasBar) { + chart.scale(plot.Xaxis, { + range: [0, 1] + }) + } if (!plot.legend || plot.legend === 'hidden') { chart.legend(false) @@ -962,16 +977,185 @@ }) } - plot.customs.forEach((item, i) => { - chart.axis(item.name, item.axis) - - chart.scale(item.name, { - nice: true, - range: [0, 0.93] + chart.scale({ + nice: true + }) + + if (plot.Bar_axis.length) { + const view1 = chart.createView({ + region: { + start: { x: 0, y: 0 }, + end: { x: 1, y: 1 } + }, + padding + }) + const dst = new DataSet() + const dvt = dst.createView().source(_copydata) + + dvt.transform({ + type: 'fold', + fields: [...plot.Bar_axis], + key: 'key', + value: 'value' + }) + + dvt.transform({ + type: 'map', + callback(row) { + row.key = transfield[row.key] || row.key + return row + }, }) - if (item.chartType === 'bar') { - let _chart = chart + view1.data(dvt.rows) + view1.interaction('other-visible') + + view1.scale('value', { + nice: true, + range: [0, 0.9] + }) + + view1.legend(false) + + let colors = new Map() + let colorIndex = 0 + + if (plot.colors && plot.colors.length > 0) { + plot.colors.forEach(item => { + if (!colors.has(transfield[item.type])) { + colors.set(transfield[item.type], item.color) + } + }) + } + + if (plot.adjust !== 'stack') { + let _chart = view1 + .interval() + .position(`${plot.Xaxis}*value`) + .adjust([ + { + type: 'dodge', + marginRatio: 0 + } + ]) + .shape(plot.shape || 'rect') + .tooltip(`${plot.Xaxis}*value*key`, (name, value, key) => { + if (plot.show === 'percent') { + value = value + '%' + } + return { + name: key, + value: value + } + }) + + if (plot.colors && plot.colors.length > 0) { + let limit = chartColors.length + _chart.color('key', (key) => { + if (colors.get(key)) { + return colors.get(key) + } else { + colors.set(key, chartColors[colorIndex % limit]) + colorIndex++ + } + }) + } else { + _chart.color('key') + } + if (plot.label === 'true') { + _chart.label('value', (value) => { + if (plot.show === 'percent') { + value = value + '%' + } + return { + content: value, + style: { + fill: plot.color + } + } + }) + } + + if (plot.barSize || plot.correction) { + _chart.size(plot.barSize || 35) + } + if (plot.barRadius) { + _chart.style({ radius: [plot.barRadius, plot.barRadius, 0, 0] }) + } + } else if (plot.adjust === 'stack') { + let _chart = view1 + .interval() + .position(`${plot.Xaxis}*value`) + .adjust('stack') + .shape(plot.shape || 'rect') + .tooltip(`${plot.Xaxis}*value*key`, (name, value, type) => { + if (plot.show === 'percent') { + value = value + '%' + } + return { + name: type, + value: value + } + }) + + if (plot.colors && plot.colors.length > 0) { + let limit = chartColors.length + _chart.color('key', (key) => { + if (colors.get(key)) { + return colors.get(key) + } else { + colors.set(key, chartColors[colorIndex % limit]) + colorIndex++ + } + }) + } else { + _chart.color('key') + } + if (plot.label === 'true') { + _chart.label('value', (value) => { + if (plot.show === 'percent') { + value = value + '%' + } + return { + content: value, + style: { + fill: plot.color + } + } + }) + } + + if (plot.barSize || plot.correction) { + _chart.size(plot.barSize || 35) + } + if (plot.barRadius) { + _chart.style({ radius: [plot.barRadius, plot.barRadius, 0, 0] }) + } + } + } + + const view2 = chart.createView({ + region: { + start: { x: 0, y: 0 }, + end: { x: 1, y: 1 } + }, + padding + }) + + view2.data(dv.rows) + view2.interaction('other-visible') + + view2.legend(false) + + plot.customs.forEach((item, i) => { + if (item.chartType === 'bar' && !plot.Bar_axis.length) { + view2.axis(item.name, item.axis) + + view2.scale(item.name, { + nice: true, + range: [0, 0.93] + }) + let _chart = view2 .interval() .position(`${plot.Xaxis}*${item.name}`) .color(item.color) @@ -1003,7 +1187,16 @@ _chart.style({ radius: [plot.barRadius, plot.barRadius, 0, 0] }) } } else if (item.chartType === 'line') { - let _chart = chart + if (!plot.Bar_axis.length) { + view2.axis(item.name, item.axis) + } else { + view2.axis(item.name, { grid: null, title: null, label: null }) + } + view2.scale(item.name, { + nice: true, + range: [0, 0.9] + }) + let _chart = view2 .line() .position(`${plot.Xaxis}*${item.name}`) .color(item.color) -- Gitblit v1.8.0