From b20a4d7c75c2ff8951e93d9c0394df9277fc6093 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期一, 15 五月 2023 21:05:17 +0800
Subject: [PATCH] 2023-05-15
---
src/menu/components/chart/chart-custom/index.jsx | 1238 ++++------------------------------------------------------
1 files changed, 100 insertions(+), 1,138 deletions(-)
diff --git a/src/menu/components/chart/chart-custom/index.jsx b/src/menu/components/chart/chart-custom/index.jsx
index 467f90b..16d9daf 100644
--- a/src/menu/components/chart/chart-custom/index.jsx
+++ b/src/menu/components/chart/chart-custom/index.jsx
@@ -1,27 +1,23 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
-import { Icon, Popover } from 'antd'
+import { Popover, notification } from 'antd'
+import { ToolOutlined, DeleteOutlined, FontColorsOutlined, PlusCircleOutlined } from '@ant-design/icons'
import { Chart } from '@antv/g2'
import DataSet from '@antv/data-set'
+import * as echarts from 'echarts'
import MKEmitter from '@/utils/events.js'
import asyncComponent from '@/utils/asyncComponent'
import asyncIconComponent from '@/utils/asyncIconComponent'
-import { resetStyle } from '@/utils/utils-custom.js'
+import { resetStyle, getTables, getHeight, checkComponent } from '@/utils/utils-custom.js'
import Utils from '@/utils/utils.js'
-import { chartColors } from '@/utils/option.js'
-import zhCN from '@/locales/zh-CN/model.js'
-import enUS from '@/locales/en-US/model.js'
import './index.scss'
const SettingComponent = asyncIconComponent(() => import('@/menu/datasource'))
const ChartCompileForm = asyncIconComponent(() => import('./chartcompile'))
const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
-const PasteComponent = asyncIconComponent(() => import('@/menu/components/share/pastecomponent'))
const NormalHeader = asyncComponent(() => import('@/menu/components/share/normalheader'))
-const ActionComponent = asyncComponent(() => import('@/menu/components/share/actioncomponent'))
-const UserComponent = asyncIconComponent(() => import('@/menu/components/share/usercomponent'))
const ClockComponent = asyncIconComponent(() => import('@/menu/components/share/clockcomponent'))
class ChartCustom extends Component {
@@ -32,7 +28,6 @@
}
state = {
- dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
card: null,
appType: sessionStorage.getItem('appType'),
}
@@ -42,28 +37,19 @@
if (card.isNew) {
let _plot = {
- chartType: card.type, // 鍥捐〃绫诲瀷
- enabled: 'false', // 鏄惁浣跨敤鑷畾涔夎缃�
- datatype: 'query', // 鏁版嵁绫诲瀷鏌ヨ鎴栫粺璁�
- customs: [],
+ chartType: 'antv', // 鍥捐〃绫诲瀷
width: card.width || 24,
height: 400,
- barSize: 35,
- color: 'rgba(0, 0, 0, 0.65)',
- name: card.name
+ name: card.name,
+ script: ''
}
-
let _card = {
uuid: card.uuid,
type: card.type,
- floor: card.floor,
- tabId: card.tabId || '',
- parentId: card.parentId || '',
format: 'array', // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
pageable: false, // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
switchable: false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
- dataName: card.dataName || '',
width: _plot.width,
name: _plot.name,
subtype: card.subtype,
@@ -78,7 +64,6 @@
search: [],
action: [],
plot: _plot,
- btnlog: [],
}
if (card.config) {
@@ -89,19 +74,17 @@
_card.style = config.style
_card.headerStyle = config.headerStyle
- _card.action = config.action.map(col => {
- col.uuid = Utils.getuuid()
- return col
- })
+ _card.setting = config.setting
+ _card.columns = config.columns
+ _card.scripts = config.scripts
+
_card.search = config.search.map(col => {
col.uuid = Utils.getuuid()
return col
})
}
- this.setState({
- card: _card
- })
- this.props.updateConfig(_card)
+
+ this.updateComponent(_card, true)
} else {
this.setState({
card: fromJS(card).toJS()
@@ -110,7 +93,6 @@
}
componentDidMount () {
- MKEmitter.addListener('submitStyle', this.getStyle)
MKEmitter.addListener('tabsChange', this.handleTabsChange)
setTimeout(() => {
this.viewrender()
@@ -128,17 +110,18 @@
this.setState = () => {
return
}
- MKEmitter.removeListener('submitStyle', this.getStyle)
MKEmitter.removeListener('tabsChange', this.handleTabsChange)
}
handleTabsChange = (parentId) => {
const { card } = this.state
- if (parentId === card.parentId) {
+ if (parentId.indexOf(card.uuid) > -1 || parentId === 'all') {
let _element = document.getElementById(card.uuid + 'canvas')
if (_element) {
_element.innerHTML = ''
+ _element.removeAttribute('_echarts_instance_')
+ _element.removeAttribute('style')
}
this.$timer && clearTimeout(this.$timer)
@@ -146,1073 +129,72 @@
}
}
- getdata = (X_axis, Y_axis) => {
- let data = []
- let xdata = ['鍛ㄤ竴', '鍛ㄤ簩', '鍛ㄤ笁', '鍛ㄥ洓', '鍛ㄤ簲', '鍛ㄥ叚', '鍛ㄦ棩']
- let point = 7
-
- for (let i = 0; i < point; i++) {
- let item = {}
-
- item[X_axis] = xdata[i]
-
- if (typeof(Y_axis) === 'string') {
- item[Y_axis] = Math.floor(Math.random() * 5 * (i + 1)) + i
- } else {
- Y_axis.forEach(y => {
- item[y] = Math.floor(Math.random() * 5 * (i + 1)) + i
- })
- }
-
- data.push(item)
- }
-
- return data
- }
-
viewrender = () => {
const { card } = this.state
- if (card.plot.chartType === 'line') {
- this.linerender()
- } else if (card.plot.chartType === 'bar') {
- this.barrender()
+ if (!card.plot.script) return
+
+ if (card.plot.chartType === 'antv') {
+ try {
+ // eslint-disable-next-line
+ let func = new Function('Chart', 'DataSet', 'wrap', 'data', 'config', card.plot.script)
+ func(Chart, DataSet, this.wrap, [], card)
+ } catch (e) {
+ console.warn(e)
+
+ notification.warning({
+ top: 92,
+ message: '鍥捐〃娓叉煋澶辫触锛�',
+ duration: 5
+ })
+ }
+ } else if (card.plot.chartType === 'echarts') {
+ try {
+ // eslint-disable-next-line
+ let func = new Function('echarts', 'DataSet', 'wrap', 'data', 'config', card.plot.script)
+ func(echarts, DataSet, this.wrap, [], card)
+ } catch (e) {
+ console.warn(e)
+
+ notification.warning({
+ top: 92,
+ message: '鍥捐〃娓叉煋澶辫触锛�',
+ duration: 5
+ })
+ }
}
}
- /**
- * @description 鎶樼嚎鍥�
- */
- linerender = () => {
- const { card } = this.state
- const plot = card.plot
- let color = plot.color || 'rgba(0, 0, 0, 0.65)'
- let X_axis = plot.Xaxis || 'x'
- let Y_axis = plot.Yaxis || ['y']
-
- let data = this.getdata(X_axis, Y_axis)
-
- if (plot.enabled !== 'true') {
- const ds = new DataSet()
- const dv = ds.createView().source(data)
- let transfield = {}
- card.columns.forEach(col => {
- if (col.field) {
- transfield[col.field] = col.label
+ updateComponent = (card, init) => {
+ if (!init) {
+ if (!is(fromJS({plot: card.plot, style: card.style, search: card.search}), fromJS({plot: this.state.card.plot, style: this.state.card.style, search: this.state.card.search}))) {
+ let _element = document.getElementById(card.uuid + 'canvas')
+ if (_element) {
+ _element.innerHTML = ''
+ _element.removeAttribute('_echarts_instance_')
+ _element.removeAttribute('style')
}
- })
-
- dv.transform({
- type: 'fold',
- fields: [...Y_axis],
- key: 'key',
- value: 'value'
- })
-
- if (plot.Xaxis) {
- dv.transform({
- type: 'map',
- callback(row) {
- row.key = transfield[row.key] || row.key
- return row
- },
- })
- }
-
- const chart = new Chart({
- container: card.uuid + 'canvas',
- autoFit: true,
- height: this.wrap.offsetHeight - 25
- })
-
- chart.data(dv.rows)
-
- // chart.axis(X_axis, { label: { style: { fill: color } }, tickLine: {style: { stroke: color }}, line: { style: { stroke: color } } })
- // chart.axis('value', { grid: { line: { style: { stroke: color } }}, label: { style: { fill: color } } })
-
- let xc = {label: { style: { fill: color } }}
- let yc = {label: { style: { fill: color } }}
- if (plot.grid === 'hidden') {
- yc.grid = null
- }
- if (plot.y_line === 'show') {
- yc.line = {style: { stroke: '#D1D2CE' }}
- }
- if (plot.lineColor) {
- xc.tickLine = {style: { stroke: plot.lineColor }}
- xc.line = { style: { stroke: plot.lineColor } }
- if (yc.grid !== null) {
- yc.grid = { line: { style: { stroke: plot.lineColor } }}
- }
- if (yc.line) {
- yc.line = { style: { stroke: plot.lineColor } }
- }
- }
- chart.axis(X_axis, xc)
- chart.axis('value', yc)
-
- if (plot.coordinate !== 'polar') {
- chart.scale(X_axis, {
- range: [0, 1]
- })
- }
- chart.scale('value', {
- nice: true,
- range: [0, 0.9]
- })
-
- if (!plot.legend || plot.legend === 'hidden') {
- chart.legend(false)
- } else {
- chart.legend({
- position: plot.legend,
- itemName: { style: { fill: color } }
- })
- }
-
- if (plot.tooltip !== 'true') {
- chart.tooltip(false)
- } else {
- chart.tooltip({
- shared: true
- })
- }
-
- if (plot.transpose === 'true') {
- chart.coordinate().transpose()
- }
-
- if (plot.coordinate === 'polar') {
- chart.coordinate('polar', {
- innerRadius: 0.1,
- radius: 0.8
- })
- }
-
- let colors = new Map()
- let colorIndex = 0
-
- if (plot.colors && plot.colors.length > 0) {
- if (plot.ramp === 'true') {
- let _s = 'l(0) '
- if (plot.rampDirection === 'vertical') {
- _s = 'l(90) '
- }
- plot.colors.forEach(item => {
- if (!colors.has(transfield[item.type])) {
- colors.set(transfield[item.type], `${_s}0:${item.color} 1:${item.color1}` )
- }
- })
- } else {
- plot.colors.forEach(item => {
- if (!colors.has(transfield[item.type])) {
- colors.set(transfield[item.type], item.color)
- }
- })
- }
- }
-
- let _chart = chart
- .line()
- .position(`${X_axis}*value`)
- .shape(plot.shape || 'smooth')
- .tooltip(`${X_axis}*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.has(key)) {
- if (plot.area === 'true' && plot.rampDirection === 'vertical') {
- return colors.get(key).replace(/l\(9?0\) 0:|\s1:.*/ig, '')
- }
- return colors.get(key)
- } else {
- colorIndex++
- return chartColors[(colorIndex - 1) % limit]
- }
- })
- } else {
- _chart.color('key')
- }
- if (plot.label !== 'false') {
- _chart.label('value*key', (value, key) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
- let _color = color
-
- if (plot.labelColor === 'custom' && colors.has(key)) {
- _color = colors.get(key)
- }
- return {
- content: value,
- style: {
- fill: _color
- }
- }
- })
- }
-
- if (plot.point === 'true') {
- chart
- .point()
- .position(`${X_axis}*value`)
- .color('key')
- .size(3)
- .shape('circle')
- }
-
- if (plot.area === 'true') {
- let area = chart.area().position(`${X_axis}*value`).tooltip(false)
- if (plot.shape === 'smooth') {
- area.shape('smooth')
- }
- if (plot.colors && plot.colors.length > 0) {
- let limit = chartColors.length
- area.color('key', (key) => {
- if (colors.has(key)) {
- return colors.get(key)
- } else {
- colorIndex++
- return chartColors[(colorIndex - 1) % limit]
- }
- })
- } else {
- area.color('key')
- }
- }
-
- if (plot.interaction && plot.interaction.length) {
- plot.interaction.forEach(t => {
- chart.interaction(t)
- })
- }
- chart.render()
- } else {
- this.customrender(data)
- }
- }
-
- /**
- * @description 鑷畾涔夊浘
- */
- customrender = (data) => {
- let card = fromJS(this.state.card).toJS()
- let plot = card.plot
- let color = plot.color || 'rgba(0, 0, 0, 0.65)'
- let fields = []
- let legends = []
- let transfield = {}
- let Bar_axis = []
-
- card.columns.forEach(col => {
- if (col.field) {
- transfield[col.field] = col.label
- }
- })
-
- let colors = new Map()
- let colorIndex = 0
- let limit = chartColors.length
-
- if (plot.colors && plot.colors.length > 0) {
- if (plot.ramp === 'true') {
- let bars = {}
- plot.customs.forEach(item => {
- if (!item.shape || !item.shape[0] || item.shape[0] === 'bar') {
- bars[item.type] = true
- }
- })
- plot.colors.forEach(item => {
- if (!colors.has(transfield[item.type])) {
- if (bars[item.type]) {
- colors.set(transfield[item.type], `l(90) 0:${item.color} 1:${item.color1}` )
- } else {
- colors.set(transfield[item.type], `l(0) 0:${item.color} 1:${item.color1}` )
- }
- }
- })
- } else {
- plot.colors.forEach(item => {
- if (!colors.has(transfield[item.type])) {
- colors.set(transfield[item.type], item.color)
- }
- })
+ this.$timer && clearTimeout(this.$timer)
+ this.$timer = setTimeout(() => {
+ this.viewrender()
+ }, 150)
}
}
- let axisIndex = 0
- let hasBar = false
+ card.width = card.plot.width
+ card.name = card.plot.name
- plot.$paddingLeft = 30
- plot.$paddingRight = 30
+ card.$c_ds = true
+ card.errors = checkComponent(card)
- plot.customs.forEach(item => {
- item.name = transfield[item.type] || item.type
- item.chartType = item.shape ? (item.shape[0] || 'bar') : 'bar'
- item.shape = item.shape ? (item.shape[1] || '') : ''
-
- if (colors.has(item.name)) {
- item.color = colors.get(item.name)
- } else {
- item.color = chartColors[colorIndex % limit]
- colorIndex++
- }
-
- if (item.chartType === 'bar') {
- Bar_axis.push(item.type)
- hasBar = true
- }
-
- if (item.axis === 'true' && axisIndex < 2) {
- if (axisIndex === 0) {
- // item.axis = { grid: {line: { style: { stroke: color } }}, title: { style: { fill: color } }, label: {style: { fill: color }} }
- item.axis = { label: {style: { fill: color }} }
- if (item.title !== 'false') {
- item.axis.title = { style: { fill: color } }
- plot.$paddingLeft = 50
- }
- if (plot.grid === 'hidden') {
- item.axis.grid = null
- }
- if (plot.y_line === 'show') {
- item.axis.line = {style: { stroke: '#D1D2CE' }}
- }
- if (plot.lineColor) {
- if (item.axis.grid !== null) {
- item.axis.grid = { line: { style: { stroke: plot.lineColor } }}
- }
- if (item.axis.line) {
- item.axis.line = { style: { stroke: plot.lineColor } }
- }
- }
-
- fields.unshift(item)
- } else {
- item.axis = { grid: null, label: {style: { fill: color }} }
- if (item.title !== 'false') {
- item.axis.title = { style: { fill: color } }
- plot.$paddingRight = 60
- }
- if (plot.y_line === 'show') {
- item.axis.line = {style: { stroke: '#D1D2CE' }}
- }
- if (plot.lineColor && item.axis.line) {
- item.axis.line = { style: { stroke: plot.lineColor } }
- }
- fields.splice(1, 0, item)
- }
- axisIndex++
- } else {
- item.axis = { grid: null, title: null, label: null }
- fields.push(item)
- }
-
- legends.push({
- value: item.name,
- name: item.name,
- marker: { symbol: item.chartType === 'bar' ? 'square' : 'hyphen', style: { stroke: item.color,fill: item.color, r: 5, lineWidth: 2 } }
- })
- })
-
- const ds = new DataSet()
- const dv = ds.createView().source(data)
- dv.transform({
- type: 'map',
- callback(row) {
- fields.forEach(line => {
- row[line.name] = row[line.type]
- })
- return row
- }
- })
-
- let padding = [10, 30, 30, 30]
- if (plot.mutilBar === 'overlap') {
- Bar_axis = []
+ if (card.errors.length === 0) {
+ card.$tables = getTables(card)
}
-
- if (!Bar_axis.length) {
- padding = [10, plot.$paddingRight, 30, plot.$paddingLeft]
- }
-
- const chart = new Chart({
- container: card.uuid + 'canvas',
- autoFit: true,
- height: this.wrap.offsetHeight - 25,
- })
-
- // chart.axis(plot.Xaxis, { label: { style: { fill: color } }, tickLine: {style: { stroke: color }}, line: { style: { stroke: color } } })
-
- let xc = {label: { style: { fill: color } }}
- if (plot.lineColor) {
- xc.tickLine = {style: { stroke: plot.lineColor }}
- xc.line = { style: { stroke: plot.lineColor } }
- }
- chart.axis(plot.Xaxis, xc)
-
- if (!hasBar) {
- chart.scale(plot.Xaxis, {
- range: [0, 1]
- })
- }
-
- if (!plot.legend || plot.legend === 'hidden') {
- chart.legend(false)
- } else {
- chart.legend({
- custom: true,
- position: plot.legend,
- items: legends,
- itemName: { style: { fill: color } }
- })
- }
-
- if (plot.tooltip !== 'true') {
- chart.tooltip(false)
- } else {
- chart.tooltip({
- shared: true,
- })
- }
-
- chart.scale({
- nice: true
- })
-
- let lablecfg = {
- position: 'top',
- offset: 2,
- style: {
- fill: '#fff'
- }
- }
-
- if (plot.label === 'top') {
- lablecfg.offset = -5
- lablecfg.style.textBaseline = 'top'
- } else if (plot.label === 'middle') {
- lablecfg.position = 'middle'
- lablecfg.offset = 0
- } else if (plot.label === 'bottom') {
- lablecfg.position = 'bottom'
- lablecfg.offset = 0
- } else if (plot.label === 'true') {
- lablecfg.style.fill = color
- }
-
- if (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(data)
-
- dvt.transform({
- type: 'fold',
- fields: [...Bar_axis],
- key: 'key',
- value: 'value'
- })
-
- dvt.transform({
- type: 'map',
- callback(row) {
- row.key = transfield[row.key] || row.key
- return row
- },
- })
-
- view1.data(dvt.rows)
- view1.scale('value', {
- nice: true,
- range: [0, 0.9]
- })
-
- let yc = {label: { style: { fill: color } }}
- if (plot.grid === 'hidden') {
- yc.grid = null
- }
- if (plot.y_line === 'show') {
- yc.line = {style: { stroke: '#D1D2CE' }}
- }
- if (plot.lineColor) {
- if (yc.grid !== null) {
- yc.grid = { line: { style: { stroke: plot.lineColor } }}
- }
- if (yc.line) {
- yc.line = { style: { stroke: plot.lineColor } }
- }
- }
- view1.axis('value', yc)
-
- view1.legend(false)
-
- if (plot.mutilBar !== '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.has(key)) {
- return colors.get(key)
- } else {
- colorIndex++
- return chartColors[(colorIndex - 1) % limit]
- }
- })
- } else {
- _chart.color('key')
- }
- if (plot.label !== 'false') {
- _chart.label('value*key', (value, key) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
-
- if (plot.label === 'true' && plot.labelColor === 'custom' && colors.has(key)) {
- lablecfg.style.fill = colors.get(key)
- }
- return {
- content: value,
- ...lablecfg
- }
- })
- }
-
- 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.mutilBar === '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.has(key)) {
- return colors.get(key)
- } else {
- colorIndex++
- return chartColors[(colorIndex - 1) % limit]
- }
- })
- } else {
- _chart.color('key')
- }
- if (plot.label !== 'false') {
- _chart.label('value*key', (value, key) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
-
- if (plot.label === 'true' && plot.labelColor === 'custom' && colors.has(key)) {
- lablecfg.style.fill = colors.get(key)
- }
-
- return {
- content: value,
- ...lablecfg
- }
- })
- }
-
- 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.legend(false)
-
- fields.forEach(item => {
- if (item.chartType === 'bar' && !Bar_axis.length) {
- view2.axis(item.name, item.axis)
-
- view2.scale(item.name, {
- nice: true,
- range: [0, 0.9]
- })
-
- let _chart = view2
- .interval()
- .position(`${plot.Xaxis}*${item.name}`)
- .color(item.color)
- .shape(item.shape)
- .tooltip(`${item.name}`, (value) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
- return {
- name: item.name,
- value: value
- }
- })
-
- if (plot.barSize) {
- _chart.size(plot.barSize || 35)
- }
- if (item.label !== 'false') {
- _chart.label(item.name, (value) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
-
- if (plot.label === 'true' && plot.labelColor === 'custom') {
- lablecfg.style.fill = item.color
- }
- return {
- content: value,
- ...lablecfg
- }
- })
- }
- if (plot.barRadius) {
- _chart.style({ radius: [plot.barRadius, plot.barRadius, 0, 0] })
- }
- } else if (item.chartType === 'line') {
- if (!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)
- .shape(item.shape)
- .tooltip(`${item.name}`, (value) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
- return {
- name: item.name,
- value: value
- }
- })
-
- if (item.label !== 'false') {
- _chart.label(item.name, (value) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
- let _color = color
-
- if (plot.labelColor === 'custom') {
- _color = item.color
- }
- return {
- content: value,
- style: {
- fill: _color
- }
- }
- })
- }
-
- if (plot.point === 'true') {
- chart
- .point()
- .position(`${plot.Xaxis}*${item.name}`)
- .color(item.color)
- .size(3)
- .shape('circle')
- }
- }
- })
-
- if (plot.interaction && plot.interaction.length) {
- plot.interaction.forEach(t => {
- if (t === 'element-active' || t === 'element-highlight') {
- chart.interaction(t)
- }
- })
- }
-
- chart.render()
- }
-
- /**
- * @description 鏌卞舰鍥�
- */
- barrender = () => {
- const { card } = this.state
- const plot = card.plot
- let color = plot.color || 'rgba(0, 0, 0, 0.65)'
- let X_axis = plot.Xaxis || 'x'
- let Y_axis = plot.Yaxis || ['y']
-
- let data = this.getdata(X_axis, Y_axis)
-
- if (plot.enabled !== 'true') {
- const ds = new DataSet()
- const dv = ds.createView().source(data)
- let transfield = {}
-
- card.columns.forEach(col => {
- if (col.field) {
- transfield[col.field] = col.label
- }
- })
-
- dv.transform({
- type: 'fold',
- fields: [...Y_axis],
- key: 'key',
- value: 'value'
- })
-
- if (plot.Xaxis) {
- dv.transform({
- type: 'map',
- callback(row) {
- row.key = transfield[row.key] || row.key
- return row
- },
- })
- }
-
- const chart = new Chart({
- container: card.uuid + 'canvas',
- autoFit: true,
- height: this.wrap.offsetHeight - 25
- })
-
- chart.data(dv.rows)
-
- // chart.axis(X_axis, { label: { style: { fill: color } }, tickLine: {style: { stroke: color }}, line: { style: { stroke: color } } })
- // chart.axis('value', { grid: { line: { style: { stroke: color } }}, label: { style: { fill: color } } })
-
- let xc = {label: { style: { fill: color } }}
- let yc = {label: { style: { fill: color } }}
- if (plot.grid === 'hidden') {
- yc.grid = null
- }
- if (plot.y_line === 'show') {
- yc.line = {style: { stroke: '#D1D2CE' }}
- }
- if (plot.lineColor) {
- xc.tickLine = {style: { stroke: plot.lineColor }}
- xc.line = { style: { stroke: plot.lineColor } }
- if (yc.grid !== null) {
- yc.grid = { line: { style: { stroke: plot.lineColor } }}
- }
- if (yc.line) {
- yc.line = { style: { stroke: plot.lineColor } }
- }
- }
- chart.axis(X_axis, xc)
- chart.axis('value', yc)
-
- chart.scale('value', {
- nice: true,
- range: [0, 0.9]
- })
-
- if (!plot.legend || plot.legend === 'hidden') {
- chart.legend(false)
- } else {
- chart.legend({
- position: plot.legend,
- itemName: { style: { fill: color } }
- })
- }
-
- if (plot.tooltip !== 'true') {
- chart.tooltip(false)
- } else {
- chart.tooltip({
- shared: true
- })
- }
-
- if (plot.coordinate === 'polar') {
- chart.coordinate('polar', {
- innerRadius: 0.1,
- radius: 0.8
- })
- }
-
- let colors = new Map()
- let colorIndex = 0
- let lablecfg = {
- position: 'top',
- offset: 2,
- style: {
- fill: '#fff'
- }
- }
-
- if (plot.label === 'top') {
- lablecfg.offset = -5
- lablecfg.style.textBaseline = 'top'
- } else if (plot.label === 'middle') {
- lablecfg.position = 'middle'
- lablecfg.offset = 0
- } else if (plot.label === 'bottom') {
- lablecfg.position = 'bottom'
- lablecfg.offset = 0
- } else if (plot.label === 'true') {
- lablecfg.style.fill = color
- }
-
- if (plot.transpose === 'true') {
- chart.coordinate().transpose()
- if (plot.label === 'top') {
- delete lablecfg.style.textBaseline
- lablecfg.position = 'right'
- lablecfg.offset = -3
- lablecfg.style.textAlign = 'end'
- } else if (plot.label === 'middle') {
- lablecfg.position = 'middle'
- lablecfg.offset = 0
- } else if (plot.label === 'bottom') {
- lablecfg.position = 'left'
- lablecfg.offset = 2
- } else if (plot.label === 'true') {
- lablecfg.position = 'right'
- lablecfg.offset = 2
- }
- }
-
- if (plot.colors && plot.colors.length > 0) {
- if (plot.ramp === 'true') {
- plot.colors.forEach(item => {
- if (!colors.has(transfield[item.type])) {
- colors.set(transfield[item.type], `l(90) 0:${item.color} 1:${item.color1}` )
- }
- })
- } else {
- plot.colors.forEach(item => {
- if (!colors.has(transfield[item.type])) {
- colors.set(transfield[item.type], item.color)
- }
- })
- }
- }
-
- if (plot.adjust !== 'stack') {
- let _chart = chart
- .interval()
- .position(`${X_axis}*value`)
- .adjust([
- {
- type: 'dodge',
- marginRatio: 0
- }
- ])
- .shape(plot.shape || 'rect')
- .tooltip(`${X_axis}*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.has(key)) {
- return colors.get(key)
- } else {
- colorIndex++
- return chartColors[(colorIndex - 1) % limit]
- }
- })
- } else {
- _chart.color('key')
- }
- if (plot.label !== 'false') {
- _chart.label('value*key', (value, key) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
-
- if (plot.label === 'true' && plot.labelColor === 'custom' && colors.has(key)) {
- lablecfg.style.fill = colors.get(key)
- }
-
- return {
- content: value,
- ...lablecfg
- }
- })
- }
-
- if (plot.barSize || plot.correction) {
- _chart.size(plot.barSize || 35)
- }
- if (plot.selectColor) {
- _chart.state({
- selected: {
- style: {
- fill: plot.selectColor,
- }
- }
- })
- }
- if (plot.barRadius) {
- _chart.style({ radius: [plot.barRadius, plot.barRadius, 0, 0] })
- }
- } else if (plot.adjust === 'stack') {
- let _chart = chart
- .interval()
- .position(`${X_axis}*value`)
- .adjust('stack')
- .shape(plot.shape || 'rect')
- .tooltip(`${X_axis}*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.has(key)) {
- return colors.get(key)
- } else {
- colorIndex++
- return chartColors[(colorIndex - 1) % limit]
- }
- })
- } else {
- _chart.color('key')
- }
- if (plot.label !== 'false') {
- _chart.label('value*key', (value, key) => {
- if (plot.show === 'percent') {
- value = value + '%'
- }
-
- if (plot.label === 'true' && plot.labelColor === 'custom' && colors.has(key)) {
- lablecfg.style.fill = colors.get(key)
- }
- return {
- content: value,
- ...lablecfg
- }
- })
- }
-
- if (plot.barSize || plot.correction) {
- _chart.size(plot.barSize || 35)
- }
- if (plot.selectColor) {
- _chart.state({
- selected: {
- style: {
- fill: plot.selectColor,
- }
- }
- })
- }
- if (plot.barRadius) {
- _chart.style({ radius: [plot.barRadius, plot.barRadius, 0, 0] })
- }
- }
-
- if (plot.interaction && plot.interaction.length) {
- plot.interaction.forEach(t => {
- chart.interaction(t)
- })
- }
-
- chart.render()
- } else {
- this.customrender(data)
- }
- }
-
- updateComponent = (component) => {
- const card = fromJS(this.state.card).toJS()
- if (!is(fromJS(component.plot), fromJS(card.plot)) || !is(fromJS(component.style), fromJS(card.style))) {
- let _element = document.getElementById(card.uuid + 'canvas')
- if (_element) {
- _element.innerHTML = ''
- }
- this.$timer && clearTimeout(this.$timer)
- this.$timer = setTimeout(() => {
- this.viewrender()
- }, 150)
- }
-
- component.width = component.plot.width
- component.name = component.plot.name
this.setState({
- card: component
+ card: card
})
- this.props.updateConfig(component)
+ this.props.updateConfig(card)
}
addSearch = () => {
@@ -1227,55 +209,21 @@
newcard.type = 'select'
newcard.resourceType = '0'
newcard.options = []
- newcard.setAll = 'false'
newcard.orderType = 'asc'
- newcard.display = 'dropdown'
newcard.match = '='
// 娉ㄥ唽浜嬩欢-娣诲姞鎼滅储
MKEmitter.emit('addSearch', card.uuid, newcard)
}
- addButton = () => {
- const { card } = this.state
-
- let newcard = {}
- newcard.uuid = Utils.getuuid()
- newcard.focus = true
-
- newcard.label = '瀵煎嚭Excel'
- newcard.sqlType = ''
- newcard.Ot = 'requiredSgl'
- newcard.OpenType = 'excelOut'
- newcard.icon = 'download'
- newcard.class = 'dgreen'
- newcard.intertype = card.setting.interType
- newcard.innerFunc = card.setting.innerFunc || ''
- newcard.sysInterface = card.setting.sysInterface || ''
- newcard.outerFunc = card.setting.outerFunc || ''
- newcard.interface = card.setting.interface || ''
- newcard.execSuccess = 'grid'
- newcard.execError = 'never'
- newcard.popClose = 'never'
- newcard.verify = null
- newcard.show = 'icon'
-
- // 娉ㄥ唽浜嬩欢-娣诲姞鎸夐挳
- MKEmitter.emit('addButton', card.uuid, newcard)
- }
-
changeStyle = () => {
const { card } = this.state
- MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+ MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow', 'clear'], card.style, this.getStyle)
}
- getStyle = (comIds, style) => {
- const { card } = this.state
-
- if (comIds[0] !== card.uuid || comIds.length > 1) return
-
- let _card = {...card, style}
+ getStyle = (style) => {
+ let _card = {...this.state.card, style}
this.updateComponent(_card)
}
@@ -1283,39 +231,53 @@
clickComponent = (e) => {
if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
e.stopPropagation()
- MKEmitter.emit('clickComponent', this.state.card)
+ MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+ let _card = {...this.state.card}
+ _card.style = {..._card.style, ...style}
+
+ this.updateComponent(_card)
+ })
}
}
render() {
const { card, appType } = this.state
let _style = resetStyle(card.style)
+ _style.height = 'auto'
return (
- <div className="menu-line-chart-edit-box" style={{..._style, height: card.plot.height || 400}} onClick={this.clickComponent} id={card.uuid}>
+ <div className="menu-custom-chart-edit-box" style={_style} onClick={this.clickComponent} id={card.uuid}>
<Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
<div className="mk-popover-control">
- {appType !== 'mob' ? <Icon className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch} type="plus-circle" /> : null}
- {appType !== 'mob' ? <Icon className="plus" title="娣诲姞鎸夐挳" onClick={this.addButton} type="plus-square" /> : null}
- <ChartCompileForm config={card} dict={this.state.dict} plotchange={this.updateComponent}/>
+ {appType !== 'mob' ? <PlusCircleOutlined className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch}/> : null}
+ <ChartCompileForm config={card} plotchange={this.updateComponent}/>
<CopyComponent type="line" card={card}/>
- <PasteComponent config={card} options={['action']} updateConfig={this.updateComponent} />
- <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
+ <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle}/>
<ClockComponent config={card} updateConfig={this.updateComponent}/>
- <UserComponent config={card}/>
- <Icon className="close" title="delete" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
+ <DeleteOutlined className="close" title="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
<SettingComponent config={card} updateConfig={this.updateComponent}/>
</div>
} trigger="hover">
- <Icon type="tool" />
+ <ToolOutlined />
</Popover>
- {card.plot.title || card.search.length > 0 ? <NormalHeader config={card} updateComponent={this.updateComponent}/> : null}
- <div className="canvas" id={card.uuid + 'canvas'} ref={ref => this.wrap = ref}></div>
- {appType !== 'mob' ? <ActionComponent
- type="chart"
- config={card}
- updateaction={this.updateComponent}
- /> : null}
+ <NormalHeader config={card} updateComponent={this.updateComponent}/>
+ <div className="canvas-wrap" style={{height: card.plot.height}}>
+ <div className="canvas" id={card.uuid + 'canvas'} style={{height: getHeight(card.plot.height)}} ref={ref => this.wrap = ref}></div>
+ </div>
+ <div className="component-name">
+ <div className="center">
+ <div className="title">{card.name}</div>
+ <div className="content">
+ {card.errors && card.errors.map((err, index) => {
+ if (err.level === 0) {
+ return <span key={index} className="error">{err.detail}</span>
+ } else {
+ return <span key={index} className="waring">{err.detail}锛�</span>
+ }
+ })}
+ </div>
+ </div>
+ </div>
</div>
)
}
--
Gitblit v1.8.0