提交 f89c0819 authored 作者: taojinlong's avatar taojinlong

Merge branch 'main' of github.com:dataease/dataease into main

...@@ -33,4 +33,8 @@ public abstract class QueryProvider { ...@@ -33,4 +33,8 @@ public abstract class QueryProvider {
public abstract String getSQLAsTmp(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList); public abstract String getSQLAsTmp(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList);
public abstract String searchTable(String table); public abstract String searchTable(String table);
public abstract String getSQLSummary(String table, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList);
public abstract String getSQLSummaryAsTmp(String sql, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList);
} }
...@@ -87,6 +87,8 @@ public class DorisQueryProvider extends QueryProvider { ...@@ -87,6 +87,8 @@ public class DorisQueryProvider extends QueryProvider {
stringBuilder.append("cast(").append(f.getDataeaseName()).append(" as decimal(20,0)) as ").append(f.getDataeaseName()); stringBuilder.append("cast(").append(f.getDataeaseName()).append(" as decimal(20,0)) as ").append(f.getDataeaseName());
} else if (f.getDeType() == 3) { } else if (f.getDeType() == 3) {
stringBuilder.append("cast(").append(f.getDataeaseName()).append(" as decimal(20,2)) as ").append(f.getDataeaseName()); stringBuilder.append("cast(").append(f.getDataeaseName()).append(" as decimal(20,2)) as ").append(f.getDataeaseName());
} else if (f.getDeType() == 0) {
stringBuilder.append("DATE_FORMAT(").append(f.getDataeaseName()).append(",'%Y-%m-%d %H:%i:%S') as _").append(f.getDataeaseName());
} else { } else {
stringBuilder.append(f.getDataeaseName()); stringBuilder.append(f.getDataeaseName());
} }
...@@ -149,7 +151,11 @@ public class DorisQueryProvider extends QueryProvider { ...@@ -149,7 +151,11 @@ public class DorisQueryProvider extends QueryProvider {
} else { } else {
if (x.getDeType() == 1) { if (x.getDeType() == 1) {
String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); String format = transDateFormat(x.getDateStyle(), x.getDatePattern());
stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(cast(").append(x.getDataeaseName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') as _").append(x.getDataeaseName()); if (x.getDeExtractType() == 0) {
stringBuilder.append("DATE_FORMAT(").append(x.getDataeaseName()).append(",'").append(format).append("') as _").append(x.getDataeaseName());
} else {
stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(cast(").append(x.getDataeaseName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') as _").append(x.getDataeaseName());
}
} else { } else {
stringBuilder.append(x.getDataeaseName()).append(" as _").append(x.getDataeaseName()); stringBuilder.append(x.getDataeaseName()).append(" as _").append(x.getDataeaseName());
} }
...@@ -244,6 +250,81 @@ public class DorisQueryProvider extends QueryProvider { ...@@ -244,6 +250,81 @@ public class DorisQueryProvider extends QueryProvider {
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'"; return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
} }
@Override
public String getSQLSummary(String table, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
// 字段汇总 排序等
String[] field = yAxis.stream().map(y -> {
StringBuilder f = new StringBuilder();
if (StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*")) {
f.append(y.getSummary()).append("(").append(y.getDataeaseName()).append(")");
} else {
if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) {
f.append("CAST(")
.append(y.getSummary()).append("(")
.append("CAST(").append(y.getDataeaseName()).append(" AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")")
.append(") AS DECIMAL(20,2)").append(")");
} else {
f.append(y.getSummary()).append("(")
.append("CAST(").append(y.getDataeaseName()).append(" AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")")
.append(")");
}
}
f.append(" AS _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName());
return f.toString();
}).toArray(String[]::new);
String[] order = yAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none"))
.map(f -> "_" + f.getSummary() + "_" + (StringUtils.equalsIgnoreCase(f.getDataeaseName(), "*") ? "" : f.getDataeaseName()) + " " + f.getSort()).toArray(String[]::new);
String sql = MessageFormat.format("SELECT {0} FROM {1} WHERE 1=1 {2} ORDER BY null,{3}",
StringUtils.join(field, ","),
table,
transCustomFilter(customFilter) + transExtFilter(extFilterRequestList),// origin field filter and panel field filter
StringUtils.join(order, ","));
if (sql.endsWith(",")) {
sql = sql.substring(0, sql.length() - 1);
}
// 如果是对结果字段过滤,则再包裹一层sql
String[] resultFilter = yAxis.stream().filter(y -> CollectionUtils.isNotEmpty(y.getFilter()) && y.getFilter().size() > 0)
.map(y -> {
String[] s = y.getFilter().stream().map(f -> {
StringBuilder filter = new StringBuilder();
// 原始类型不是时间,在de中被转成时间的字段做处理
if (y.getDeType() == 1 && y.getDeExtractType() != 1) {
filter.append(" AND FROM_UNIXTIME(cast(_")
.append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName())
.append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') ");
} else {
filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getDataeaseName(), "*") ? "" : y.getDataeaseName());
}
filter.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("'").append(f.getValue()).append("'");
}
return filter.toString();
}).toArray(String[]::new);
return StringUtils.join(s, " ");
}).toArray(String[]::new);
if (resultFilter.length == 0) {
return sql;
} else {
String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1}",
"(" + sql + ") AS tmp",
StringUtils.join(resultFilter, " "));
return filterSql;
}
}
@Override
public String getSQLSummaryAsTmp(String sql, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
return getSQLSummary(" (" + sql + ") AS tmp ", yAxis, customFilter, extFilterRequestList);
}
public String transMysqlFilterTerm(String term) { public String transMysqlFilterTerm(String term) {
switch (term) { switch (term) {
case "eq": case "eq":
......
...@@ -87,6 +87,8 @@ public class MysqlQueryProvider extends QueryProvider { ...@@ -87,6 +87,8 @@ public class MysqlQueryProvider extends QueryProvider {
stringBuilder.append("cast(").append(f.getOriginName()).append(" as decimal(20,0)) as ").append(f.getOriginName()); stringBuilder.append("cast(").append(f.getOriginName()).append(" as decimal(20,0)) as ").append(f.getOriginName());
} else if (f.getDeType() == 3) { } else if (f.getDeType() == 3) {
stringBuilder.append("cast(").append(f.getOriginName()).append(" as decimal(20,2)) as ").append(f.getOriginName()); stringBuilder.append("cast(").append(f.getOriginName()).append(" as decimal(20,2)) as ").append(f.getOriginName());
} else if (f.getDeType() == 0) {
stringBuilder.append("DATE_FORMAT(").append(f.getOriginName()).append(",'%Y-%m-%d %H:%i:%S') as _").append(f.getOriginName());
} else { } else {
stringBuilder.append(f.getOriginName()); stringBuilder.append(f.getOriginName());
} }
...@@ -155,7 +157,11 @@ public class MysqlQueryProvider extends QueryProvider { ...@@ -155,7 +157,11 @@ public class MysqlQueryProvider extends QueryProvider {
} else { } else {
if (x.getDeType() == 1) { if (x.getDeType() == 1) {
String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); String format = transDateFormat(x.getDateStyle(), x.getDatePattern());
stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(cast(").append(x.getOriginName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') as _").append(x.getOriginName()); if (x.getDeExtractType() == 0) {
stringBuilder.append("DATE_FORMAT(").append(x.getOriginName()).append(",'").append(format).append("') as _").append(x.getOriginName());
} else {
stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(cast(").append(x.getOriginName()).append(" as decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') as _").append(x.getOriginName());
}
} else { } else {
stringBuilder.append(x.getOriginName()).append(" as _").append(x.getOriginName()); stringBuilder.append(x.getOriginName()).append(" as _").append(x.getOriginName());
} }
...@@ -251,6 +257,81 @@ public class MysqlQueryProvider extends QueryProvider { ...@@ -251,6 +257,81 @@ public class MysqlQueryProvider extends QueryProvider {
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'"; return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
} }
@Override
public String getSQLSummary(String table, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
// 字段汇总 排序等
String[] field = yAxis.stream().map(y -> {
StringBuilder f = new StringBuilder();
if (StringUtils.equalsIgnoreCase(y.getOriginName(), "*")) {
f.append(y.getSummary()).append("(").append(y.getOriginName()).append(")");
} else {
if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) {
f.append("CAST(")
.append(y.getSummary()).append("(")
.append("CAST(").append(y.getOriginName()).append(" AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")")
.append(") AS DECIMAL(20,2)").append(")");
} else {
f.append(y.getSummary()).append("(")
.append("CAST(").append(y.getOriginName()).append(" AS ").append(y.getDeType() == 2 ? "DECIMAL(20,0)" : "DECIMAL(20,2)").append(")")
.append(")");
}
}
f.append(" AS _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName());
return f.toString();
}).toArray(String[]::new);
String[] order = 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 sql = MessageFormat.format("SELECT {0} FROM {1} WHERE 1=1 {2} ORDER BY null,{3}",
StringUtils.join(field, ","),
table,
transCustomFilter(customFilter) + transExtFilter(extFilterRequestList),// origin field filter and panel field filter
StringUtils.join(order, ","));
if (sql.endsWith(",")) {
sql = sql.substring(0, sql.length() - 1);
}
// 如果是对结果字段过滤,则再包裹一层sql
String[] resultFilter = yAxis.stream().filter(y -> CollectionUtils.isNotEmpty(y.getFilter()) && y.getFilter().size() > 0)
.map(y -> {
String[] s = y.getFilter().stream().map(f -> {
StringBuilder filter = new StringBuilder();
// 原始类型不是时间,在de中被转成时间的字段做处理
if (y.getDeType() == 1 && y.getDeExtractType() != 1) {
filter.append(" AND FROM_UNIXTIME(cast(_")
.append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName())
.append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') ");
} else {
filter.append(" AND _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName());
}
filter.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("'").append(f.getValue()).append("'");
}
return filter.toString();
}).toArray(String[]::new);
return StringUtils.join(s, " ");
}).toArray(String[]::new);
if (resultFilter.length == 0) {
return sql;
} else {
String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1}",
"(" + sql + ") AS tmp",
StringUtils.join(resultFilter, " "));
return filterSql;
}
}
@Override
public String getSQLSummaryAsTmp(String sql, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
return getSQLSummary(" (" + sqlFix(sql) + ") AS tmp ", yAxis, customFilter, extFilterRequestList);
}
public String transMysqlFilterTerm(String term) { public String transMysqlFilterTerm(String term) {
switch (term) { switch (term) {
case "eq": case "eq":
......
...@@ -240,6 +240,16 @@ public class SqlserverQueryProvider extends QueryProvider { ...@@ -240,6 +240,16 @@ public class SqlserverQueryProvider extends QueryProvider {
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'"; return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
} }
@Override
public String getSQLSummary(String table, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
return null;
}
@Override
public String getSQLSummaryAsTmp(String table, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
return null;
}
public String transMysqlFilterTerm(String term) { public String transMysqlFilterTerm(String term) {
switch (term) { switch (term) {
case "eq": case "eq":
......
...@@ -99,10 +99,18 @@ public class ChartViewService { ...@@ -99,10 +99,18 @@ public class ChartViewService {
}.getType()); }.getType());
customFilter.forEach(ele -> ele.setField(dataSetTableFieldsService.get(ele.getFieldId()))); customFilter.forEach(ele -> ele.setField(dataSetTableFieldsService.get(ele.getFieldId())));
if (CollectionUtils.isEmpty(xAxis) || CollectionUtils.isEmpty(yAxis)) { if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType())) {
ChartViewDTO dto = new ChartViewDTO(); if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
BeanUtils.copyBean(dto, view); ChartViewDTO dto = new ChartViewDTO();
return dto; BeanUtils.copyBean(dto, view);
return dto;
}
} else {
if (CollectionUtils.isEmpty(xAxis) || CollectionUtils.isEmpty(yAxis)) {
ChartViewDTO dto = new ChartViewDTO();
BeanUtils.copyBean(dto, view);
return dto;
}
} }
// 过滤来自仪表板的条件 // 过滤来自仪表板的条件
...@@ -142,9 +150,17 @@ public class ChartViewService { ...@@ -142,9 +150,17 @@ public class ChartViewService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
if (StringUtils.equalsIgnoreCase(table.getType(), "db")) { if (StringUtils.equalsIgnoreCase(table.getType(), "db")) {
datasourceRequest.setTable(dataTableInfoDTO.getTable()); datasourceRequest.setTable(dataTableInfoDTO.getTable());
datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, customFilter, extFilterList)); if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummary(dataTableInfoDTO.getTable(), yAxis, customFilter, extFilterList));
} else {
datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, customFilter, extFilterList));
}
} else if (StringUtils.equalsIgnoreCase(table.getType(), "sql")) { } else if (StringUtils.equalsIgnoreCase(table.getType(), "sql")) {
datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, customFilter, extFilterList)); if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummaryAsTmp(dataTableInfoDTO.getSql(), yAxis, customFilter, extFilterList));
} else {
datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, customFilter, extFilterList));
}
} }
data = datasourceProvider.getData(datasourceRequest); data = datasourceProvider.getData(datasourceRequest);
} else if (table.getMode() == 1) {// 抽取 } else if (table.getMode() == 1) {// 抽取
...@@ -156,7 +172,11 @@ public class ChartViewService { ...@@ -156,7 +172,11 @@ public class ChartViewService {
String tableName = "ds_" + table.getId().replaceAll("-", "_"); String tableName = "ds_" + table.getId().replaceAll("-", "_");
datasourceRequest.setTable(tableName); datasourceRequest.setTable(tableName);
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, customFilter, extFilterList)); if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummary(tableName, yAxis, customFilter, extFilterList));
} else {
datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, customFilter, extFilterList));
}
data = datasourceProvider.getData(datasourceRequest); data = datasourceProvider.getData(datasourceRequest);
} }
...@@ -192,7 +212,9 @@ public class ChartViewService { ...@@ -192,7 +212,9 @@ public class ChartViewService {
// table组件 // table组件
List<ChartViewFieldDTO> fields = new ArrayList<>(); List<ChartViewFieldDTO> fields = new ArrayList<>();
List<Map<String, Object>> tableRow = new ArrayList<>(); List<Map<String, Object>> tableRow = new ArrayList<>();
fields.addAll(xAxis); if (ObjectUtils.isNotEmpty(xAxis)) {
fields.addAll(xAxis);
}
fields.addAll(yAxis); fields.addAll(yAxis);
data.forEach(ele -> { data.forEach(ele -> {
Map<String, Object> d = new HashMap<>(); Map<String, Object> d = new HashMap<>();
......
...@@ -143,8 +143,8 @@ export default { ...@@ -143,8 +143,8 @@ export default {
const customAttrPanel = JSON.parse(this.canvasStyleData.chart.customAttr) const customAttrPanel = JSON.parse(this.canvasStyleData.chart.customAttr)
const customStylePanel = JSON.parse(this.canvasStyleData.chart.customStyle) const customStylePanel = JSON.parse(this.canvasStyleData.chart.customStyle)
// 组件样式-标题设置 // 组件样式-标题设置 - 标题修改为组件自己控制
customStyleChart.text = customStylePanel.text // customStyleChart.text = customStylePanel.text
// 组件样式-背景设置 // 组件样式-背景设置
customStyleChart.background = customStylePanel.background customStyleChart.background = customStylePanel.background
// 图形属性-颜色设置 // 图形属性-颜色设置
......
...@@ -677,15 +677,15 @@ export default { ...@@ -677,15 +677,15 @@ export default {
end_angle: 'End Angle', end_angle: 'End Angle',
style_priority: 'Style Priority', style_priority: 'Style Priority',
dashboard: 'Dashboard', dashboard: 'Dashboard',
dimension_color: 'Dimension Color', dimension_color: 'Name Color',
quota_color: 'Quota Color', quota_color: 'Value Color',
dimension_font_size: 'Dimension FontSize', dimension_font_size: 'Name FontSize',
quota_font_size: 'Quota FontSize', quota_font_size: 'Value FontSize',
space_split: 'Dimension/Quota Space', space_split: 'Name/Value Space',
only_one_quota: 'Only support 1 quota', only_one_quota: 'Only support 1 quota',
only_one_result: 'Only show first result', only_one_result: 'Only show first result',
dimension_show: 'Dimension Show', dimension_show: 'Name Show',
quota_show: 'Quota Show', quota_show: 'Value Show',
title_limit: 'Title cannot be greater than 50 characters', title_limit: 'Title cannot be greater than 50 characters',
filter_condition: 'Filter Condition', filter_condition: 'Filter Condition',
filter_field_can_null: 'Filter field must choose', filter_field_can_null: 'Filter field must choose',
......
...@@ -677,15 +677,15 @@ export default { ...@@ -677,15 +677,15 @@ export default {
end_angle: '結束角度', end_angle: '結束角度',
style_priority: '樣式優先級', style_priority: '樣式優先級',
dashboard: '儀表板', dashboard: '儀表板',
dimension_color: '維度顏色', dimension_color: '名稱顏色',
quota_color: '指標顏色', quota_color: '顏色',
dimension_font_size: '維度字體大小', dimension_font_size: '名稱字體大小',
quota_font_size: '指標字體大小', quota_font_size: '字體大小',
space_split: '維度/指標間隔', space_split: '名稱/值間隔',
only_one_quota: '僅支持1個指標', only_one_quota: '僅支持1個指標',
only_one_result: '僅顯示第1個計算結果', only_one_result: '僅顯示第1個計算結果',
dimension_show: '維度顯示', dimension_show: '名稱顯示',
quota_show: '指標顯示', quota_show: '顯示',
title_limit: '標題不能大於50個字符', title_limit: '標題不能大於50個字符',
filter_condition: '過濾條件', filter_condition: '過濾條件',
filter_field_can_null: '過濾字段必填', filter_field_can_null: '過濾字段必填',
......
...@@ -677,15 +677,15 @@ export default { ...@@ -677,15 +677,15 @@ export default {
end_angle: '结束角度', end_angle: '结束角度',
style_priority: '样式优先级', style_priority: '样式优先级',
dashboard: '仪表板', dashboard: '仪表板',
dimension_color: '维度颜色', dimension_color: '名称颜色',
quota_color: '指标颜色', quota_color: '颜色',
dimension_font_size: '维度字体大小', dimension_font_size: '名称字体大小',
quota_font_size: '指标字体大小', quota_font_size: '字体大小',
space_split: '维度/指标间隔', space_split: '名称/值间隔',
only_one_quota: '仅支持1个指标', only_one_quota: '仅支持1个指标',
only_one_result: '仅显示第1个计算结果', only_one_result: '仅显示第1个计算结果',
dimension_show: '维度显示', dimension_show: '名称显示',
quota_show: '指标显示', quota_show: '显示',
title_limit: '标题不能大于50个字符', title_limit: '标题不能大于50个字符',
filter_condition: '过滤条件', filter_condition: '过滤条件',
filter_field_can_null: '过滤字段必填', filter_field_can_null: '过滤字段必填',
......
...@@ -44,7 +44,8 @@ export function baseGaugeOption(chart_option, chart) { ...@@ -44,7 +44,8 @@ export function baseGaugeOption(chart_option, chart) {
} }
// data只取第一个 // data只取第一个
const y = { const y = {
name: chart.data.x[0], // name: chart.data.x[0],
name: chart.data.series[0].name,
value: chart.data.series[0].data[0] value: chart.data.series[0].data[0]
} }
chart_option.series[0].data.push(y) chart_option.series[0].data.push(y)
......
...@@ -29,21 +29,22 @@ ...@@ -29,21 +29,22 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item v-if="item.id !== 'count'"> <!-- 快速计算先隐藏-->
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="quickCalc"> <!-- <el-dropdown-item v-if="item.id !== 'count'">-->
<span class="el-dropdown-link inner-dropdown-menu"> <!-- <el-dropdown placement="right-start" size="mini" style="width: 100%" @command="quickCalc">-->
<span> <!-- <span class="el-dropdown-link inner-dropdown-menu">-->
<i class="el-icon-s-grid" /> <!-- <span>-->
<span>{{ $t('chart.quick_calc') }}</span> <!-- <i class="el-icon-s-grid" />-->
<span class="summary-span">(无)</span> <!-- <span>{{ $t('chart.quick_calc') }}</span>-->
</span> <!-- <span class="summary-span">(无)</span>-->
<i class="el-icon-arrow-right el-icon--right" /> <!-- </span>-->
</span> <!-- <i class="el-icon-arrow-right el-icon&#45;&#45;right" />-->
<el-dropdown-menu slot="dropdown"> <!-- </span>-->
<el-dropdown-item :command="beforeQuickCalc('none')"></el-dropdown-item> <!-- <el-dropdown-menu slot="dropdown">-->
</el-dropdown-menu> <!-- <el-dropdown-item :command="beforeQuickCalc('none')"></el-dropdown-item>-->
</el-dropdown> <!-- </el-dropdown-menu>-->
</el-dropdown-item> <!-- </el-dropdown>-->
<!-- </el-dropdown-item>-->
<el-dropdown-item divided> <el-dropdown-item divided>
<el-dropdown placement="right-start" size="mini" style="width: 100%" @command="sort"> <el-dropdown placement="right-start" size="mini" style="width: 100%" @command="sort">
<span class="el-dropdown-link inner-dropdown-menu"> <span class="el-dropdown-link inner-dropdown-menu">
......
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
:style="content_class" :style="content_class"
> >
<p v-if="dimensionShow" :style="label_class"> <p v-if="dimensionShow" :style="label_class">
{{ chart.data.x[0] }} <!-- {{ chart.data.x[0] }}-->
{{ chart.data.series[0].name }}
</p> </p>
<span v-if="quotaShow" :style="label_space"> <span v-if="quotaShow" :style="label_space">
<p v-for="item in chart.data.series" :key="item.name" :style="label_content_class"> <p v-for="item in chart.data.series" :key="item.name" :style="label_content_class">
......
...@@ -178,15 +178,15 @@ ...@@ -178,15 +178,15 @@
</el-row> </el-row>
<el-row style="color: #909399;"> <el-row style="color: #909399;">
<span> <span>
<span v-show="chart.type && (chart.type.includes('pie') || chart.type.includes('funnel'))"> <span v-show="chart.type && (chart.type.includes('pie') || chart.type.includes('funnel') || chart.type.includes('text') || chart.type.includes('gauge'))">
Tips: {{ $t('chart.only_one_quota') }} Tips: {{ $t('chart.only_one_quota') }}
</span> </span>
<span v-show="chart.type && (chart.type.includes('text'))"> <!-- <span v-show="chart.type && (chart.type.includes('text'))">-->
Tips: {{ $t('chart.only_one_result') }} <!-- Tips: {{ $t('chart.only_one_result') }}-->
</span> <!-- </span>-->
<span v-show="chart.type && chart.type.includes('gauge')"> <!-- <span v-show="chart.type && chart.type.includes('gauge')">-->
Tips: {{ $t('chart.only_one_quota') }},{{ $t('chart.only_one_result') }} <!-- Tips: {{ $t('chart.only_one_quota') }},{{ $t('chart.only_one_result') }}-->
</span> <!-- </span>-->
</span> </span>
</el-row> </el-row>
</div> </div>
...@@ -226,8 +226,8 @@ ...@@ -226,8 +226,8 @@
<el-col style="height: 100%;min-width: 500px;border-top: 1px solid #E6E6E6;"> <el-col style="height: 100%;min-width: 500px;border-top: 1px solid #E6E6E6;">
<el-row style="width: 100%;height: 100%;" class="padding-lr"> <el-row style="width: 100%;height: 100%;" class="padding-lr">
<el-row style="margin-top: 10px;"> <el-row style="margin-top: 10px;height: 74px;">
<el-row style="display:flex;height: 32px;"> <el-row v-if="chart.type !=='text' && chart.type !== 'gauge'" style="display:flex;height: 32px;">
<span style="line-height: 32px;width: 80px;text-align: right;">{{ $t('chart.dimension') }}</span> <span style="line-height: 32px;width: 80px;text-align: right;">{{ $t('chart.dimension') }}</span>
<draggable <draggable
v-model="view.xaxis" v-model="view.xaxis"
...@@ -524,11 +524,14 @@ export default { ...@@ -524,11 +524,14 @@ export default {
ele.filter = [] ele.filter = []
} }
}) })
if (view.type.startsWith('pie') || view.type.startsWith('funnel')) { if (view.type.startsWith('pie') || view.type.startsWith('funnel') || view.type.startsWith('text') || view.type.startsWith('gauge')) {
if (view.yaxis.length > 1) { if (view.yaxis.length > 1) {
view.yaxis.splice(1, view.yaxis.length) view.yaxis.splice(1, view.yaxis.length)
} }
} }
if (view.type.startsWith('text') || view.type.startsWith('gauge')) {
view.xaxis = []
}
if (view.type === 'line' && trigger === 'chart') { if (view.type === 'line' && trigger === 'chart') {
view.customAttr.size.lineArea = false view.customAttr.size.lineArea = false
} }
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
</el-collapse-item> </el-collapse-item>
<el-collapse-item :title="$t('chart.module_style')" name="component"> <el-collapse-item :title="$t('chart.module_style')" name="component">
<el-row style="background-color: #f7f8fa; margin: 5px"> <el-row style="background-color: #f7f8fa; margin: 5px">
<title-selector class="attr-selector" :chart="chart" @onTextChange="onTextChange" /> <!-- <title-selector class="attr-selector" :chart="chart" @onTextChange="onTextChange" />-->
<background-color-selector class="attr-selector" :chart="chart" @onChangeBackgroundForm="onChangeBackgroundForm" /> <background-color-selector class="attr-selector" :chart="chart" @onChangeBackgroundForm="onChangeBackgroundForm" />
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
......
...@@ -13,14 +13,14 @@ ...@@ -13,14 +13,14 @@
:expand-on-click-node="true" :expand-on-click-node="true"
@node-click="nodeClick" @node-click="nodeClick"
> >
<span slot-scope="{ node, data }" class="custom-tree-node"> <span slot-scope="{ node, data }" class="custom-tree-node father">
<span style="display: flex; flex: 1 1 0%; width: 0px;"> <span style="display: flex; flex: 1 1 0%; width: 0px;">
<span> <span>
<svg-icon icon-class="panel" class="ds-icon-scene" /> <svg-icon icon-class="panel" class="ds-icon-scene" />
</span> </span>
<span style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">{{ data.name }}</span> <span style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">{{ data.name }}</span>
</span> </span>
<span style="margin-left: 12px;" @click.stop> <span style="margin-left: 12px;" class="child" @click.stop>
<el-dropdown v-if="hasDataPermission('manage',data.privileges)" trigger="click" size="small" @command="clickMore"> <el-dropdown v-if="hasDataPermission('manage',data.privileges)" trigger="click" size="small" @command="clickMore">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<el-button <el-button
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
:expand-on-click-node="true" :expand-on-click-node="true"
@node-click="nodeClick" @node-click="nodeClick"
> >
<span slot-scope="{ node, data }" class="custom-tree-node-list"> <span slot-scope="{ node, data }" class="custom-tree-node-list father">
<span style="display: flex; flex: 1 1 0%; width: 0px;"> <span style="display: flex; flex: 1 1 0%; width: 0px;">
<span v-if="data.nodeType === 'panel'"> <span v-if="data.nodeType === 'panel'">
<svg-icon icon-class="panel" class="ds-icon-scene" /> <svg-icon icon-class="panel" class="ds-icon-scene" />
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
</span> </span>
<span style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">{{ data.name }}</span> <span style="margin-left: 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">{{ data.name }}</span>
</span> </span>
<span v-if="hasDataPermission('manage',data.privileges)"> <span v-if="hasDataPermission('manage',data.privileges)" class="child">
<span v-if="data.nodeType ==='folder'" @click.stop> <span v-if="data.nodeType ==='folder'" @click.stop>
<el-dropdown trigger="click" size="small" @command="showEditPanel"> <el-dropdown trigger="click" size="small" @command="showEditPanel">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
...@@ -720,4 +720,11 @@ export default { ...@@ -720,4 +720,11 @@ export default {
padding: 10px 20px 20px; padding: 10px 20px 20px;
} }
.father .child {
display: none;
}
.father:hover .child {
display: inline;
}
</style> </style>
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="status" sortable="custom" :label="$t('commons.status')"> <el-table-column prop="status" sortable="custom" :label="$t('commons.status')">
<template v-slot:default="scope"> <template v-slot:default="scope">
<el-switch v-model="scope.row.enabled" :active-value="1" :inactive-value="0" inactive-color="#DCDFE6" @change="changeSwitch(scope.row)" /> <el-switch v-model="scope.row.enabled" :active-value="1" :inactive-value="0" :disabled="!checkPermission(['user:edit'])" inactive-color="#DCDFE6" @change="changeSwitch(scope.row)" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" sortable="custom" :label="$t('commons.create_time')"> <el-table-column prop="createTime" sortable="custom" :label="$t('commons.create_time')">
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论