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