From 69db12287a007990de956bef9cef6c2dec65ace7 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 07 五月 2020 09:18:40 +0800 Subject: [PATCH] 2020-05-07 --- src/tabviews/zshare/chartcomponent/index.jsx | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 108 insertions(+), 4 deletions(-) diff --git a/src/tabviews/zshare/chartcomponent/index.jsx b/src/tabviews/zshare/chartcomponent/index.jsx index 4aa0c80..dc106ed 100644 --- a/src/tabviews/zshare/chartcomponent/index.jsx +++ b/src/tabviews/zshare/chartcomponent/index.jsx @@ -36,10 +36,110 @@ } getdata = () => { - const { data } = this.props - // let _data = [] + const { data, plot, config } = this.props + + let vFields = plot.Yaxis && typeof(plot.Yaxis) === 'string' ? [plot.Yaxis] : plot.Yaxis + let _columns = config.columns.filter(col => vFields.includes(col.field)) - return data || [] + if (!data) return [] + + let _data = [] + let _cdata = fromJS(data).toJS() + + if (plot.repeat === 'average') { + let _mdata = new Map() + _cdata.forEach(item => { + _columns.forEach(col => { + if (typeof(item[col.field]) !== 'number') { + item[col.field] = parseFloat(item[col.field]) + if (isNaN(item[col.field])) { + item[col.field] = 0 + } + } + if (col.format === 'percent') { + item[col.field] = item[col.field] * 100 + } + }) + + if (item[plot.Xaxis] && !_mdata.has(item[plot.Xaxis])) { + item.$count = 1 + _mdata.set(item[plot.Xaxis], item) + } else if (item[plot.Xaxis]) { + let _item = _mdata.get(item[plot.Xaxis]) + _item.$count++ + vFields.forEach(field => { + _item[field] += item[field] + }) + } + }) + + _data = [..._mdata.values()] + _data = _data.map(item => { + _columns.forEach(col => { + item[col.field] = item[col.field] / item.$count + item[col.field] = item[col.field].toFixed(col.decimal) + item[col.field] = +item[col.field] + }) + return item + }) + } else if (plot.repeat === 'cumsum') { + let _mdata = new Map() + _cdata.forEach(item => { + _columns.forEach(col => { + if (typeof(item[col.field]) !== 'number') { + item[col.field] = parseFloat(item[col.field]) + if (isNaN(item[col.field])) { + item[col.field] = 0 + } + } + if (col.format === 'percent') { + item[col.field] = item[col.field] * 100 + } + }) + + if (item[plot.Xaxis] && !_mdata.has(item[plot.Xaxis])) { + _mdata.set(item[plot.Xaxis], item) + } else if (item[plot.Xaxis]) { + let _item = _mdata.get(item[plot.Xaxis]) + vFields.forEach(field => { + _item[field] += item[field] + }) + } + }) + + _data = [..._mdata.values()] + _data = _data.map(item => { + _columns.forEach(col => { + item[col.field] = item[col.field].toFixed(col.decimal) + item[col.field] = +item[col.field] + }) + return item + }) + } else { // plot.repeat === 'unrepeat' + let _mdata = new Map() + _cdata.forEach(item => { + if (item[plot.Xaxis] && !_mdata.has(item[plot.Xaxis])) { + _columns.forEach(col => { + if (typeof(item[col.field]) !== 'number') { + item[col.field] = parseFloat(item[col.field]) + if (isNaN(item[col.field])) { + item[col.field] = 0 + } + } + if (col.format === 'percent') { + item[col.field] = item[col.field] * 100 + } + item[col.field] = item[col.field].toFixed(col.decimal) + item[col.field] = +item[col.field] + }) + _mdata.set(item[plot.Xaxis], item) + } + }) + + _data = [..._mdata.values()] + } + + return _data } viewrender = () => { @@ -267,6 +367,10 @@ let data = this.getdata() + if (data.length === 0) { + return + } + const ds = new DataSet() const dv = ds.createView().source(data) @@ -395,7 +499,7 @@ return ( <div className="line-chart-edit-box" style={{minHeight: plot.height ? plot.height + 50 : 450}}> - <p className="chart-title">{plot.title}</p> + {plot.title ? <p className="chart-title">{plot.title}</p> : null} <div className="canvas" id={plot.uuid}></div> </div> ) -- Gitblit v1.8.0