diff --git a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue index d4ec306f10..e2173d0fe6 100644 --- a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue +++ b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue @@ -97,7 +97,7 @@ @editItemCompare="showQuotaEditCompare" @editItemFilter="showQuotaEditFilter" @onNameEdit="showRename" - @onQuotaItemChange="quotaItemChange" + @onQuotaItemChange="quotaExtItemChange" @onQuotaItemRemove="quotaItemRemove" @valueFormatter="valueFormatter" /> @@ -152,6 +152,7 @@ import QuotaItem from '../../../components/views/QuotaItem' import QuotaExtItem from '../../../components/views/QuotaExtItem' import FilterItem from '../../../components/views/FilterItem' import messages from '@/de-base/lang/messages' +import {defaultTo} from "lodash-es" export default { props: { @@ -174,6 +175,8 @@ export default { }, data() { return { + yChartType: undefined, + yExtChartType: undefined, widgets: [], places: [], moveId: -1, @@ -229,8 +232,19 @@ export default { created() { this.$emit('on-add-languages', messages) }, + mounted() { + if (this.view.yaxis && this.view.yaxis[0]) { + this.yChartType = this.view.yaxis[0].chartType + } + if (this.view.yaxisExt && this.view.yaxisExt[0]) { + this.yExtChartType = this.view.yaxisExt[0].chartType + } + this.yChartType = defaultTo(this.yChartType, 'bar'); + this.yExtChartType = defaultTo(this.yExtChartType, 'line'); + + }, watch: { - listenLists: function(val) { + /*listenLists: function(val) { if (this.listenLists[0] <= 1 && this.listenLists[1] <= 1) { return } @@ -243,7 +257,7 @@ export default { this.view.yaxisExt = [this.view.yaxisExt[0]] } this.calcData(true) - } + }*/ }, methods: { executeAxios(url, type, data, callBack) { @@ -284,20 +298,29 @@ export default { this.multiAdd(e, this.view.yaxis) this.dragMoveDuplicate(this.view.yaxis, e) this.dragCheckType(this.view.yaxis, 'q') - if (this.view.yaxis.length <= 1) { - this.calcData(true) + + for (let i = 0; i < this.view.yaxis.length; i++) { + this.view.yaxis[i].chartType = this.yChartType } + + //if (this.view.yaxis.length <= 1) { + this.calcData(true) + //} }, addYaxisExt(e) { this.multiAdd(e, this.view.yaxisExt) this.dragMoveDuplicate(this.view.yaxisExt, e) this.dragCheckType(this.view.yaxisExt, 'q') - if (this.view.yaxisExt.length <= 1) { - this.calcData(true) + + for (let i = 0; i < this.view.yaxisExt.length; i++) { + this.view.yaxisExt[i].chartType = this.yExtChartType; } + + //if (this.view.yaxisExt.length <= 1) { + this.calcData(true) + //} }, calcData(cache) { - console.log(cache) //this.view.xaxis = [...this.source, ...this.target] this.$emit('plugin-call-back', { @@ -339,6 +362,17 @@ export default { }, quotaItemChange(item) { + this.yChartType = item.chartType; + for (let i = 0; i < this.view.yaxis.length; i++) { + this.view.yaxis[i].chartType = this.yChartType + } + this.calcData(true) + }, + quotaExtItemChange(item) { + this.yExtChartType = item.chartType; + for (let i = 0; i < this.view.yaxisExt.length; i++) { + this.view.yaxisExt[i].chartType = this.yExtChartType + } this.calcData(true) }, quotaItemRemove(item) { @@ -391,8 +425,8 @@ export default { newItems = groupDie ? this.selectedDimension : this.selectedQuota } const preIds = list - .filter((_, i) => i < e.newDraggableIndex || i >= e.newDraggableIndex + newItems.length) - .map(i => i.id) + .filter((_, i) => i < e.newDraggableIndex || i >= e.newDraggableIndex + newItems.length) + .map(i => i.id) // 倒序删除 for (let i = e.newDraggableIndex + newItems.length - 1; i >= e.newDraggableIndex; i--) { if (preIds.includes(list[i].id)) { diff --git a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue index f058656ee9..ba7bc6ec09 100644 --- a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue +++ b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue @@ -43,7 +43,7 @@ import { getLineDash, DEFAULT_COLOR_CASE, formatterItem, DEFAULT_YAXIS_EXT_STYLE } from '../../../utils/map'; import ChartTitleUpdate from '../../../components/views/ChartTitleUpdate'; -import _ from 'lodash'; +import {map, filter, join, flatten, cloneDeep} from 'lodash-es'; import {clear} from 'size-sensor' import {valueFormatter} from '../../../utils/formatter' @@ -310,135 +310,54 @@ export default { const names = []; - let _data = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? _.map(_.filter(this.chart.data.data, (c, _index) => { - return _index < yaxisCount; - }), (t, _index) => { + const yChartData = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? map(filter(this.chart.data.data, (c, _index) => { + return _index < yaxisCount; + }), (t, _index) => { + names.push(t.name); - const _labelSetting = _.cloneDeep(labelSetting); - if (_labelSetting && yaxisList[_index].formatterCfg) { - _labelSetting.formatter = function (x) { - return valueFormatter(x.value, yaxisList[_index].formatterCfg); - } + return map(t.data, (v) => { + return { + quotaList: v.quotaList, + dimensionList: v.dimensionList, + key: join(map(v.dimensionList, (d) => d.value), "\n"), + value: v.value, + name: t.name, + i: _index, + t: 'yaxis' + } + }); } + ) : []; - names.push(t.name); + const yData = [this.getYData(flatten(yChartData), labelSetting, labelPosition, yaxisList, colors, gradient, alpha, xAxis, yAxis, yaxisExtList.length)]; - const _chartType = this.getChartType(yaxisList[_index].chartType); + const yExtChartData = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? map(filter(this.chart.data.data, (c, _index) => { + return _index >= yaxisCount; + }), (t, _index) => { + names.push(t.name); - if (_labelSetting) { - if (_chartType === "column") { - _labelSetting.position = labelPosition; - } else { - _labelSetting.position = undefined; - } + return map(t.data, (v) => { + return { + quotaList: v.quotaList, + dimensionList: v.dimensionList, + key: join(map(v.dimensionList, (d) => d.value), "\n"), + value: v.value, + name: t.name, + i: _index, + t: 'yaxisExt' + } + }) } + ) : []; - let color = colors && _index < colors.length ? hexColorToRGBA(colors[_index], alpha) : undefined; - if (color && gradient) { - color = setGradientColor(color, true, 270) - } - - const setting = { - type: _chartType, - name: t.name, - options: { - data: _.map(t.data, (v) => { - return { - quotaList: v.quotaList, - dimensionList: v.dimensionList, - key: _.join(_.map(v.dimensionList, (d) => d.value), "\n"), - value: v.value, - i: _index, - t: 'yaxis' - } - }), - xField: 'key', - yField: 'value', - meta: { - key: { - sync: true, - }, - value: { - alias: t.name, - }, - }, - color: color, - label: _labelSetting, - xAxis: xAxis, - yAxis: yAxis, - } - } - return this.setSizeSetting(setting); - }) : []; - - let _dataExt = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? _.map(_.filter(this.chart.data.data, (c, _index) => { - return _index >= yaxisCount; - }), (t, _index) => { - - const _labelSetting = _.cloneDeep(labelSetting); - if (_labelSetting && yaxisExtList[_index].formatterCfg) { - _labelSetting.formatter = function (x) { - return valueFormatter(x.value, yaxisExtList[_index].formatterCfg); - } - } - - names.push(t.name); - - const _chartType = this.getChartType(yaxisExtList[_index].chartType); - - if (_labelSetting) { - if (_chartType === "column") { - _labelSetting.position = labelPosition; - } else { - _labelSetting.position = undefined; - } - } - - let color = colors && (yaxisCount + _index) < colors.length ? hexColorToRGBA(colors[yaxisCount + _index], alpha) : undefined; - if (color && gradient) { - color = setGradientColor(color, true, 270) - } - - const setting = { - type: _chartType, - name: t.name, - options: { - data: _.map(t.data, (v) => { - return { - quotaList: v.quotaList, - dimensionList: v.dimensionList, - key: _.join(_.map(v.dimensionList, (d) => d.value), "\n"), - value: v.value, - i: _index, - t: 'yaxisExt' - } - }), - xField: 'key', - yField: 'value', - meta: { - key: { - sync: true, - }, - value: { - alias: t.name, - }, - }, - color: color, - label: _labelSetting, - xAxis: false, - yAxis: yAxisExt, - } - } - return this.setSizeSetting(setting); - }) : []; - + const yExtData = [this.getYExtData(flatten(yExtChartData), labelSetting, labelPosition, yaxisExtList, colors, gradient, alpha, xAxis, yAxisExt, yaxisCount)]; const params = { tooltip: false, syncViewPadding: true, plots: [ - ..._data, - ..._dataExt + ...yData, + ...yExtData ] }; @@ -471,7 +390,7 @@ export default { item.value = valueFormatter(item.data.value, yaxisExtList[item.data.i].formatterCfg) } }) - return _.filter(originalItems, (item) => { + return filter(originalItems, (item) => { const v = item.data.key; if (item.title === v && item.title === item.value && item.name === "key" || !names.includes(item.name)) { return false; @@ -489,7 +408,8 @@ export default { params.annotations = this.getAnalyse(this.chart); - params.legend = this.getLegend(this.chart); + //两个轴只能展示一个轴的图例,所以隐藏 + //params.legend = this.getLegend(this.chart); return params; }, @@ -755,6 +675,116 @@ export default { return axis }, + getYData(data, labelSetting, labelPosition, yaxisList, colors, gradient, alpha, xAxis, yAxis, yaxisExtCount) { + + const _labelSetting = cloneDeep(labelSetting); + if (_labelSetting) { + _labelSetting.formatter = function (x) { + for (let i = 0; i < yaxisList.length; i++) { + if (i === x.i && yaxisList[i].formatterCfg) { + return valueFormatter(x.value, yaxisList[i].formatterCfg); + } + } + return x.value; + } + } + + const _chartType = this.getChartType(yaxisList && yaxisList.length > 0 ? yaxisList[0].chartType : undefined); + + if (_labelSetting) { + if (_chartType === "column") { + _labelSetting.position = labelPosition; + } else { + _labelSetting.position = undefined; + } + } + + const color = []; + for (let i = 0; i < yaxisList.length; i++) { + if (gradient) { + color.push(setGradientColor(hexColorToRGBA(colors[i % colors.length], alpha), true, 270)) + } else { + color.push(hexColorToRGBA(colors[i % colors.length], alpha)) + } + } + + const setting = { + type: _chartType, + options: { + data: data, + xField: 'key', + yField: 'value', + seriesField: 'name', + colorField: 'name', + isGroup: true, + meta: { + key: { + sync: true, + }, + }, + color: color, + label: _labelSetting, + xAxis: yaxisList.length > 0 || yaxisExtCount === 0 ? xAxis : false, + yAxis: yAxis, + } + } + return this.setSizeSetting(setting); + }, + + getYExtData(data, labelSetting, labelPosition, yaxisExtList, colors, gradient, alpha, xAxis, yAxisExt, yaxisCount) { + const _labelSetting = cloneDeep(labelSetting); + if (_labelSetting) { + _labelSetting.formatter = function (x) { + for (let i = 0; i < yaxisExtList.length; i++) { + if (i === x.i && yaxisExtList[i].formatterCfg) { + return valueFormatter(x.value, yaxisExtList[i].formatterCfg); + } + } + return x.value; + } + } + + const _chartType = this.getChartType(yaxisExtList && yaxisExtList.length > 0 ? yaxisExtList[0].chartType : undefined); + + if (_labelSetting) { + if (_chartType === "column") { + _labelSetting.position = labelPosition; + } else { + _labelSetting.position = undefined; + } + } + + const color = []; + for (let i = yaxisCount; i < yaxisExtList.length + yaxisCount; i++) { + if (gradient) { + color.push(setGradientColor(hexColorToRGBA(colors[i % colors.length], alpha), true, 270)) + } else { + color.push(hexColorToRGBA(colors[i % colors.length], alpha)) + } + } + + const setting = { + type: _chartType, + options: { + data: data, + xField: 'key', + yField: 'value', + seriesField: 'name', + isGroup: true, + meta: { + key: { + sync: true, + }, + }, + color: color, + label: _labelSetting, + xAxis: yaxisCount > 0 || yaxisExtList.length === 0 ? false : xAxis, + yAxis: yAxisExt, + } + } + return this.setSizeSetting(setting); + }, + setSizeSetting(setting) { let customAttr = undefined; if (this.chart.customAttr) {