diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java
index 6ff458e792..a7f579a610 100644
--- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java
+++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java
@@ -278,14 +278,36 @@ public class ChartViewService {
// 字段汇总 排序等
String[] field = yAxis.stream().map(y -> "CAST(" + y.getSummary() + "(" + y.getOriginName() + ") AS DECIMAL(20,2)) AS _" + y.getSummary() + "_" + (StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName())).toArray(String[]::new);
String[] group = xAxis.stream().map(ChartViewFieldDTO::getOriginName).toArray(String[]::new);
- String[] order = yAxis.stream().filter(y -> StringUtils.isNotEmpty(y.getSort()) && !StringUtils.equalsIgnoreCase(y.getSort(), "none"))
- .map(y -> "_" + y.getSummary() + "_" + (StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()) + " " + y.getSort()).toArray(String[]::new);
+ String[] xOrder = xAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none"))
+ .map(f -> f.getOriginName() + " " + f.getSort()).toArray(String[]::new);
+ String[] yOrder = yAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none"))
+ .map(f -> "_" + f.getSummary() + "_" + (StringUtils.equalsIgnoreCase(f.getOriginName(), "*") ? "" : f.getOriginName()) + " " + f.getSort()).toArray(String[]::new);
+ String[] order = Arrays.copyOf(xOrder, xOrder.length + yOrder.length);
+ System.arraycopy(yOrder, 0, order, xOrder.length, yOrder.length);
+
+ String[] xFilter = xAxis.stream().filter(x -> CollectionUtils.isNotEmpty(x.getFilter()) && x.getFilter().size() > 0)
+ .map(x -> {
+ String[] s = x.getFilter().stream().map(f -> {
+ StringBuilder filter = new StringBuilder();
+ filter.append(" AND ").append(x.getOriginName()).append(transMysqlFilterTerm(f.getTerm()));
+ if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) {
+ } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) {
+ filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')");
+ } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) {
+ filter.append("%").append(f.getValue()).append("%");
+ } else {
+ filter.append(f.getValue());
+ }
+ return filter.toString();
+ }).toArray(String[]::new);
+ return StringUtils.join(s, " ");
+ }).toArray(String[]::new);
String sql = MessageFormat.format("SELECT {0},{1} FROM {2} WHERE 1=1 {3} GROUP BY {4} ORDER BY null,{5}",
StringUtils.join(group, ","),
StringUtils.join(field, ","),
table,
- transMysqlExtFilter(extFilterRequestList),// origin field filter and panel field filter
+ xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "" + transMysqlExtFilter(extFilterRequestList),// origin field filter and panel field filter
StringUtils.join(group, ","),
StringUtils.join(order, ","));
if (sql.endsWith(",")) {
@@ -296,7 +318,7 @@ public class ChartViewService {
.map(y -> {
String[] s = y.getFilter().stream().map(f -> {
StringBuilder filter = new StringBuilder();
- filter.append("AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append(transMysqlFilterTerm(f.getTerm()));
+ filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append(transMysqlFilterTerm(f.getTerm()));
if (StringUtils.containsIgnoreCase(f.getTerm(), "null")) {
} else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) {
filter.append("('").append(StringUtils.join(f.getValue(), "','")).append("')");
diff --git a/frontend/src/views/chart/components/drag-item/DimensionItem.vue b/frontend/src/views/chart/components/drag-item/DimensionItem.vue
index 78665a05c5..1c07723b81 100644
--- a/frontend/src/views/chart/components/drag-item/DimensionItem.vue
+++ b/frontend/src/views/chart/components/drag-item/DimensionItem.vue
@@ -6,7 +6,27 @@
{{ item.name }}
-
+
+
+
+
+ {{ $t('chart.none') }}
+ {{ $t('chart.asc') }}
+ {{ $t('chart.desc') }}
+
+
+
+
+ {{ $t('chart.filter') }}...
+
+
{{ $t('chart.show_name_set') }}
@@ -49,6 +69,9 @@ export default {
case 'remove':
this.removeItem()
break
+ case 'filter':
+ this.editFilter()
+ break
default:
break
}
@@ -58,6 +81,20 @@ export default {
type: type
}
},
+ sort(param) {
+ // console.log(param)
+ this.item.sort = param.type
+ this.$emit('onDimensionItemChange', this.item)
+ },
+ beforeSort(type) {
+ return {
+ type: type
+ }
+ },
+ editFilter() {
+ this.item.index = this.index
+ this.$emit('editItemFilter', this.item)
+ },
showRename() {
this.item.index = this.index
this.item.renameType = 'dimension'
diff --git a/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue b/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue
new file mode 100644
index 0000000000..aa9c8472a1
--- /dev/null
+++ b/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue
index 2f67e6c948..ff2378ea05 100644
--- a/frontend/src/views/chart/view/ChartEdit.vue
+++ b/frontend/src/views/chart/view/ChartEdit.vue
@@ -174,7 +174,7 @@
@end="end2"
>
-
+
@@ -189,7 +189,7 @@
@end="end2"
>
-
+
@@ -217,7 +217,7 @@
{{ $t('chart.confirm') }}
+
+
+
+
@@ -263,11 +276,12 @@ import XAxisSelector from '../components/component-style/XAxisSelector'
import YAxisSelector from '../components/component-style/YAxisSelector'
import BackgroundColorSelector from '../components/component-style/BackgroundColorSelector'
import QuotaFilterEditor from '../components/filter/QuotaFilterEditor'
+import DimensionFilterEditor from '../components/filter/DimensionFilterEditor'
import TableNormal from '../components/table/TableNormal'
export default {
name: 'ChartEdit',
- components: { TableNormal, DatasetChartDetail, QuotaFilterEditor, BackgroundColorSelector, FilterItem, XAxisSelector, YAxisSelector, TooltipSelector, LabelSelector, LegendSelector, TitleSelector, SizeSelector, ColorSelector, ChartComponent, QuotaItem, DimensionItem, draggable },
+ components: { DimensionFilterEditor, TableNormal, DatasetChartDetail, QuotaFilterEditor, BackgroundColorSelector, FilterItem, XAxisSelector, YAxisSelector, TooltipSelector, LabelSelector, LegendSelector, TitleSelector, SizeSelector, ColorSelector, ChartComponent, QuotaItem, DimensionItem, draggable },
props: {
param: {
type: Object,
@@ -304,7 +318,9 @@ export default {
chart: {
id: 'echart'
},
- filterEdit: false,
+ dimensionFilterEdit: false,
+ dimensionItem: {},
+ quotaFilterEdit: false,
quotaItem: {},
renameItem: false,
itemForm: {
@@ -363,11 +379,17 @@ export default {
view.sceneId = this.view.sceneId
view.name = this.view.name ? this.view.name : this.table.name
view.tableId = this.view.tableId
- // view.xaxis.forEach(function(ele) {
- // if (!ele.summary || ele.summary === '') {
- // ele.summary = 'sum'
- // }
- // })
+ view.xaxis.forEach(function(ele) {
+ // if (!ele.summary || ele.summary === '') {
+ // ele.summary = 'sum'
+ // }
+ if (!ele.sort || ele.sort === '') {
+ ele.sort = 'none'
+ }
+ if (!ele.filter) {
+ ele.filter = []
+ }
+ })
view.yaxis.forEach(function(ele) {
if (!ele.summary || ele.summary === '') {
if (ele.id === 'count') {
@@ -574,12 +596,25 @@ export default {
this.save()
},
- showEditFilter(item) {
+ showDimensionEditFilter(item) {
+ this.dimensionItem = JSON.parse(JSON.stringify(item))
+ this.dimensionFilterEdit = true
+ },
+ closeDimensionFilter() {
+ this.dimensionFilterEdit = false
+ },
+ saveDimensionFilter() {
+ this.view.xaxis[this.dimensionItem.index].filter = this.dimensionItem.filter
+ this.save()
+ this.closeDimensionFilter()
+ },
+
+ showQuotaEditFilter(item) {
this.quotaItem = JSON.parse(JSON.stringify(item))
- this.filterEdit = true
+ this.quotaFilterEdit = true
},
closeQuotaFilter() {
- this.filterEdit = false
+ this.quotaFilterEdit = false
},
saveQuotaFilter() {
this.view.yaxis[this.quotaItem.index].filter = this.quotaItem.filter