diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartCustomFilterDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartCustomFilterDTO.java new file mode 100644 index 0000000000..f561e2ed18 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/chart/ChartCustomFilterDTO.java @@ -0,0 +1,21 @@ +package io.dataease.dto.chart; + +import io.dataease.base.domain.DatasetTableField; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * @Author gin + * @Date 2021/5/21 4:24 下午 + */ +@Getter +@Setter +public class ChartCustomFilterDTO implements Serializable { + private String fieldId; + private String term; + private String value; + + private DatasetTableField field; +} diff --git a/backend/src/main/java/io/dataease/provider/QueryProvider.java b/backend/src/main/java/io/dataease/provider/QueryProvider.java index 42f3450ca9..5e02985b71 100644 --- a/backend/src/main/java/io/dataease/provider/QueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/QueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider; import io.dataease.base.domain.DatasetTableField; import io.dataease.controller.request.chart.ChartExtFilterRequest; +import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import java.util.List; @@ -27,9 +28,9 @@ public abstract class QueryProvider { public abstract String createQuerySQLAsTmpWithPage(String sql, List fields, Integer page, Integer pageSize, Integer realSize); - public abstract String getSQL(String table, List xAxis, List yAxis, List extFilterRequestList); + public abstract String getSQL(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList); - public abstract String getSQLAsTmp(String table, List xAxis, List yAxis, List extFilterRequestList); + public abstract String getSQLAsTmp(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList); public abstract String searchTable(String table); } diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index 20d6b9ee9b..d840005eb0 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider.doris; import io.dataease.base.domain.DatasetTableField; import io.dataease.controller.request.chart.ChartExtFilterRequest; +import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.provider.QueryProvider; import org.apache.commons.collections4.CollectionUtils; @@ -110,7 +111,7 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String getSQL(String table, List xAxis, List yAxis, List extFilterRequestList) { + public String getSQL(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList) { // 字段汇总 排序等 String[] field = yAxis.stream().map(y -> { StringBuilder f = new StringBuilder(); @@ -180,7 +181,7 @@ public class DorisQueryProvider extends QueryProvider { StringUtils.join(groupField, ","), StringUtils.join(field, ","), table, - xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "" + transMysqlExtFilter(extFilterRequestList),// origin field filter and panel field filter + (xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "") + transCustomFilter(customFilter) + transExtFilter(extFilterRequestList),// origin field filter and panel field filter StringUtils.join(group, ","), StringUtils.join(order, ",")); if (sql.endsWith(",")) { @@ -222,8 +223,8 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmp(String sql, List xAxis, List yAxis, List extFilterRequestList) { - return getSQL(" (" + sql + ") AS tmp ", xAxis, yAxis, extFilterRequestList); + public String getSQLAsTmp(String sql, List xAxis, List yAxis, List customFilter, List extFilterRequestList) { + return getSQL(" (" + sql + ") AS tmp ", xAxis, yAxis, customFilter, extFilterRequestList); } @Override @@ -264,7 +265,36 @@ public class DorisQueryProvider extends QueryProvider { } } - public String transMysqlExtFilter(List requestList) { + public String transCustomFilter(List requestList) { + if (CollectionUtils.isEmpty(requestList)) { + return ""; + } + StringBuilder filter = new StringBuilder(); + for (ChartCustomFilterDTO request : requestList) { + String value = request.getValue(); + DatasetTableField field = request.getField(); + if (field.getDeType() == 1 && field.getDeExtractType() != 1) { + filter.append(" AND FROM_UNIXTIME(cast(") + .append(field.getDataeaseName()) + .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + } else { + filter.append(" AND ").append(field.getDataeaseName()); + } + filter.append(" ") + .append(transMysqlFilterTerm(request.getTerm())) + .append(" "); + if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { + filter.append("('").append(StringUtils.join(value, "','")).append("')"); + } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { + filter.append("'%").append(value).append("%'"); + } else { + filter.append("'").append(value).append("'"); + } + } + return filter.toString(); + } + + public String transExtFilter(List requestList) { if (CollectionUtils.isEmpty(requestList)) { return ""; } diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java index 56019e566d..9f1a8244ce 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider.mysql; import io.dataease.base.domain.DatasetTableField; import io.dataease.controller.request.chart.ChartExtFilterRequest; +import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.provider.QueryProvider; import org.apache.commons.collections4.CollectionUtils; @@ -110,7 +111,7 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String getSQL(String table, List xAxis, List yAxis, List extFilterRequestList) { + public String getSQL(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList) { // 字段汇总 排序等 String[] field = yAxis.stream().map(y -> { StringBuilder f = new StringBuilder(); @@ -186,7 +187,7 @@ public class MysqlQueryProvider extends QueryProvider { StringUtils.join(groupField, ","), StringUtils.join(field, ","), table, - (xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "") + transMysqlExtFilter(extFilterRequestList),// origin field filter and panel field filter + (xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "") + transCustomFilter(customFilter) + transExtFilter(extFilterRequestList),// origin field filter and panel field filter StringUtils.join(group, ","), StringUtils.join(order, ",")); if (sql.endsWith(",")) { @@ -229,8 +230,8 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmp(String sql, List xAxis, List yAxis, List extFilterRequestList) { - return getSQL(" (" + sqlFix(sql) + ") AS tmp ", xAxis, yAxis, extFilterRequestList); + public String getSQLAsTmp(String sql, List xAxis, List yAxis, List customFilter, List extFilterRequestList) { + return getSQL(" (" + sqlFix(sql) + ") AS tmp ", xAxis, yAxis, customFilter, extFilterRequestList); } @Override @@ -271,7 +272,36 @@ public class MysqlQueryProvider extends QueryProvider { } } - public String transMysqlExtFilter(List requestList) { + public String transCustomFilter(List requestList) { + if (CollectionUtils.isEmpty(requestList)) { + return ""; + } + StringBuilder filter = new StringBuilder(); + for (ChartCustomFilterDTO request : requestList) { + String value = request.getValue(); + DatasetTableField field = request.getField(); + if (field.getDeType() == 1 && field.getDeExtractType() != 1) { + filter.append(" AND FROM_UNIXTIME(cast(") + .append(field.getDataeaseName()) + .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + } else { + filter.append(" AND ").append(field.getDataeaseName()); + } + filter.append(" ") + .append(transMysqlFilterTerm(request.getTerm())) + .append(" "); + if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { + filter.append("('").append(StringUtils.join(value, "','")).append("')"); + } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { + filter.append("'%").append(value).append("%'"); + } else { + filter.append("'").append(value).append("'"); + } + } + return filter.toString(); + } + + public String transExtFilter(List requestList) { if (CollectionUtils.isEmpty(requestList)) { return ""; } diff --git a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java index 83a2b11b8c..1f1d0d8956 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider.sqlserver; import io.dataease.base.domain.DatasetTableField; import io.dataease.controller.request.chart.ChartExtFilterRequest; +import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.provider.QueryProvider; import org.apache.commons.collections4.CollectionUtils; @@ -111,7 +112,7 @@ public class SqlserverQueryProvider extends QueryProvider { } @Override - public String getSQL(String table, List xAxis, List yAxis, List extFilterRequestList) { + public String getSQL(String table, List xAxis, List yAxis, List customFilter, List extFilterRequestList) { // 字段汇总 排序等 String[] field = yAxis.stream().map(y -> { StringBuilder f = new StringBuilder(); @@ -187,7 +188,7 @@ public class SqlserverQueryProvider extends QueryProvider { StringUtils.join(groupField, ","), StringUtils.join(field, ","), table, - (xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "") + transMysqlExtFilter(extFilterRequestList),// origin field filter and panel field filter + (xFilter.length > 0 ? StringUtils.join(xFilter, " ") : "") + transCustomFilter(customFilter) + transExtFilter(extFilterRequestList),// origin field filter and panel field filter StringUtils.join(group, ","), StringUtils.join(order, ",")); if (sql.endsWith(",")) { @@ -230,8 +231,8 @@ public class SqlserverQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmp(String sql, List xAxis, List yAxis, List extFilterRequestList) { - return getSQL(" (" + sqlFix(sql) + ") AS tmp ", xAxis, yAxis, extFilterRequestList); + public String getSQLAsTmp(String sql, List xAxis, List yAxis, List customFilter, List extFilterRequestList) { + return getSQL(" (" + sqlFix(sql) + ") AS tmp ", xAxis, yAxis, customFilter, extFilterRequestList); } @Override @@ -270,7 +271,36 @@ public class SqlserverQueryProvider extends QueryProvider { } } - public String transMysqlExtFilter(List requestList) { + public String transCustomFilter(List requestList) { + if (CollectionUtils.isEmpty(requestList)) { + return ""; + } + StringBuilder filter = new StringBuilder(); + for (ChartCustomFilterDTO request : requestList) { + String value = request.getValue(); + DatasetTableField field = request.getField(); + if (field.getDeType() == 1 && field.getDeExtractType() != 1) { + filter.append(" AND FROM_UNIXTIME(cast(") + .append(field.getDataeaseName()) + .append(" AS decimal(20,0))/1000,'%Y-%m-%d %H:%i:%S') "); + } else { + filter.append(" AND ").append(field.getDataeaseName()); + } + filter.append(" ") + .append(transMysqlFilterTerm(request.getTerm())) + .append(" "); + if (StringUtils.containsIgnoreCase(request.getTerm(), "in")) { + filter.append("('").append(StringUtils.join(value, "','")).append("')"); + } else if (StringUtils.containsIgnoreCase(request.getTerm(), "like")) { + filter.append("'%").append(value).append("%'"); + } else { + filter.append("'").append(value).append("'"); + } + } + return filter.toString(); + } + + public String transExtFilter(List requestList) { if (CollectionUtils.isEmpty(requestList)) { return ""; } 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 4d6d79890f..963df03cbd 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -15,6 +15,7 @@ import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.request.DatasourceRequest; import io.dataease.datasource.service.DatasourceService; +import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.dto.chart.Series; @@ -31,6 +32,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.stream.Collectors; /** * @Author gin @@ -89,6 +91,9 @@ public class ChartViewService { }.getType()); List yAxis = new Gson().fromJson(view.getYAxis(), new TypeToken>() { }.getType()); + List customFilter = new Gson().fromJson(view.getCustomFilter(), new TypeToken>() { + }.getType()); + customFilter.forEach(ele -> ele.setField(dataSetTableFieldsService.get(ele.getFieldId()))); if (CollectionUtils.isEmpty(xAxis) || CollectionUtils.isEmpty(yAxis)) { ChartViewDTO dto = new ChartViewDTO(); @@ -127,9 +132,9 @@ public class ChartViewService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); if (StringUtils.equalsIgnoreCase(table.getType(), "db")) { datasourceRequest.setTable(dataTableInfoDTO.getTable()); - datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, extFilterList)); + datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, customFilter, extFilterList)); } else if (StringUtils.equalsIgnoreCase(table.getType(), "sql")) { - datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, extFilterList)); + datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, customFilter, extFilterList)); } data = datasourceProvider.getData(datasourceRequest); } else if (table.getMode() == 1) {// 抽取 @@ -141,7 +146,7 @@ public class ChartViewService { String tableName = "ds_" + table.getId().replaceAll("-", "_"); datasourceRequest.setTable(tableName); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, extFilterList)); + datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, customFilter, extFilterList)); data = datasourceProvider.getData(datasourceRequest); } diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java index 455cf479ca..208d3290a0 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java @@ -71,6 +71,9 @@ public class SysUserService { }else{ user.setPassword(CodingUtil.md5(user.getPassword())); } + if(StringUtils.isEmpty(user.getLanguage())){ + user.setLanguage("zh_CN"); + } int insert = sysUserMapper.insert(user); SysUser dbUser = findOne(user); saveUserRoles(dbUser.getUserId(), request.getRoleIds());//插入用户角色关联 diff --git a/backend/src/main/resources/db/migration/V3__init_data.sql b/backend/src/main/resources/db/migration/V3__init_data.sql index 9232d37f3e..bfa26e0fd0 100644 --- a/backend/src/main/resources/db/migration/V3__init_data.sql +++ b/backend/src/main/resources/db/migration/V3__init_data.sql @@ -51,8 +51,8 @@ INSERT INTO `sys_menu` VALUES (52, 0, 0, 1, '关于', 'about', 'system/about/ind COMMIT; BEGIN; -INSERT INTO `sys_user` VALUES (4, 0, 'admin', '管理员', '男', NULL, 'admin@fit2cloud.com', '40b8893ea9ebc2d631c4bb42bb1e8996', b'1', 1, NULL, NULL, NULL, NULL, 1615184951534,NULL); -INSERT INTO `sys_user` VALUES (19, 25, 'demo', 'demo', '男', NULL, 'demo@fit2cloud.com', '40b8893ea9ebc2d631c4bb42bb1e8996', b'0', 0, NULL, NULL, NULL, 1619086036234, 1619086036234,NULL); +INSERT INTO `sys_user` VALUES (4, 0, 'admin', '管理员', '男', NULL, 'admin@fit2cloud.com', '40b8893ea9ebc2d631c4bb42bb1e8996', b'1', 1, NULL, NULL, NULL, NULL, 1615184951534,'zh_CN'); +INSERT INTO `sys_user` VALUES (19, 25, 'demo', 'demo', '男', NULL, 'demo@fit2cloud.com', '40b8893ea9ebc2d631c4bb42bb1e8996', b'0', 0, NULL, NULL, NULL, 1619086036234, 1619086036234,'zh_CN'); COMMIT; diff --git a/frontend/package.json b/frontend/package.json index 595b2d4646..8cf908add8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -38,6 +38,7 @@ "vue-axios": "3.2.4", "vue-clipboard2": "0.3.1", "vue-codemirror": "^4.0.6", + "vue-cron": "^1.0.9", "vue-i18n": "7.3.2", "vue-router": "3.0.6", "vue-uuid": "2.0.2", diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index bb2b2d053a..c26d30d397 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -672,7 +672,9 @@ export default { only_one_result: 'Only show first result', dimension_show: 'Dimension Show', quota_show: 'Quota Show', - title_limit: 'Title cannot be greater than 50 characters' + title_limit: 'Title cannot be greater than 50 characters', + filter_condition: 'Filter Condition', + filter_field_can_null: 'Filter field must choose' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 09d55072c2..227b5ee337 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -671,7 +671,9 @@ export default { only_one_result: '僅顯示第1個計算結果', dimension_show: '維度顯示', quota_show: '指標顯示', - title_limit: '標題不能大於50個字符' + title_limit: '標題不能大於50個字符', + filter_condition: '過濾條件', + filter_field_can_null: '過濾字段必填' }, dataset: { sheet_warn: '有多個sheet頁面,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index fd002adbbf..b207001c86 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -673,7 +673,9 @@ export default { only_one_result: '仅显示第1个计算结果', dimension_show: '维度显示', quota_show: '指标显示', - title_limit: '标题不能大于50个字符' + title_limit: '标题不能大于50个字符', + filter_condition: '过滤条件', + filter_field_can_null: '过滤字段必填' }, dataset: { sheet_warn: '有多个Sheet页,默认抽取第一个', diff --git a/frontend/src/main.js b/frontend/src/main.js index 02d94c008c..dfeca15af3 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -30,11 +30,9 @@ import * as echarts from 'echarts' Vue.prototype.$echarts = echarts import UmyUi from 'umy-ui' - Vue.use(UmyUi) import vcolorpicker from 'vcolorpicker' - Vue.use(vcolorpicker) /** diff --git a/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue b/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue index aa9c8472a1..050b9e548a 100644 --- a/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue +++ b/frontend/src/views/chart/components/filter/DimensionFilterEditor.vue @@ -1,33 +1,35 @@ diff --git a/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue b/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue index 7ccafa100e..959652f0b5 100644 --- a/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue +++ b/frontend/src/views/chart/components/filter/QuotaFilterEditor.vue @@ -1,33 +1,35 @@ diff --git a/frontend/src/views/chart/components/filter/ResultFilterEditor.vue b/frontend/src/views/chart/components/filter/ResultFilterEditor.vue new file mode 100644 index 0000000000..6ed4867180 --- /dev/null +++ b/frontend/src/views/chart/components/filter/ResultFilterEditor.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index fc583bc76a..a78eff2284 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -165,22 +165,11 @@ -
+
{{ $t('chart.result_filter') }} -
- - - - - -
+ + {{ $t('chart.filter_condition') }} +
@@ -188,7 +177,7 @@ - {{ $t('chart.dimension') }} + {{ $t('chart.dimension') }} - {{ $t('chart.quota') }} + {{ $t('chart.quota') }} {{ $t('chart.confirm') }}
+ + + + @@ -283,7 +286,7 @@ import { post, ajaxGetData } from '@/api/chart/chart' import draggable from 'vuedraggable' import DimensionItem from '../components/drag-item/DimensionItem' import QuotaItem from '../components/drag-item/QuotaItem' -import FilterItem from '../components/drag-item/FilterItem' +import ResultFilterEditor from '../components/filter/ResultFilterEditor' import ChartComponent from '../components/ChartComponent' import bus from '@/utils/bus' import DatasetChartDetail from '../../dataset/common/DatasetChartDetail' @@ -317,7 +320,7 @@ import html2canvas from 'html2canvas' export default { name: 'ChartEdit', - components: { LabelNormal, DimensionFilterEditor, TableNormal, DatasetChartDetail, QuotaFilterEditor, BackgroundColorSelector, FilterItem, XAxisSelector, YAxisSelector, TooltipSelector, LabelSelector, LegendSelector, TitleSelector, SizeSelector, ColorSelector, ChartComponent, QuotaItem, DimensionItem, draggable }, + components: { ResultFilterEditor, LabelNormal, DimensionFilterEditor, TableNormal, DatasetChartDetail, QuotaFilterEditor, BackgroundColorSelector, XAxisSelector, YAxisSelector, TooltipSelector, LabelSelector, LegendSelector, TitleSelector, SizeSelector, ColorSelector, ChartComponent, QuotaItem, DimensionItem, draggable }, props: { param: { type: Object, @@ -359,6 +362,8 @@ export default { dimensionItem: {}, quotaFilterEdit: false, quotaItem: {}, + resultFilterEdit: false, + chartForFilter: {}, renameItem: false, itemForm: { name: '' @@ -784,6 +789,30 @@ export default { this.closeQuotaFilter() }, + showResultFilter() { + this.chartForFilter = JSON.parse(JSON.stringify(this.view)) + this.resultFilterEdit = true + }, + closeResultFilter() { + this.resultFilterEdit = false + }, + saveResultFilter() { + for (let i = 0; i < this.chartForFilter.customFilter.length; i++) { + const f = this.chartForFilter.customFilter[i] + if (!f.fieldId || f.fieldId === '') { + this.$message({ + message: this.$t('chart.filter_field_can_null'), + type: 'error', + showClose: true + }) + return + } + } + this.view.customFilter = this.chartForFilter.customFilter + this.save(true) + this.closeResultFilter() + }, + showRename(val) { this.itemForm = JSON.parse(JSON.stringify(val)) this.renameItem = true @@ -948,7 +977,7 @@ export default { } .attr-style{ - height: calc(100vh - 56px - 25vh - 40px - 62px - 10px); + height: calc(100vh - 56px - 25vh - 40px - 62px - 10px - 60px); } .attr-selector{ @@ -992,4 +1021,13 @@ export default { .dialog-css >>> .el-dialog__body { padding: 10px 20px 20px; } + + .filter-btn-class{ + padding: 6px; + border: none; + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + } diff --git a/frontend/src/views/dataset/data/UpdateInfo.vue b/frontend/src/views/dataset/data/UpdateInfo.vue index ce89e76b92..e9bc4cf96f 100644 --- a/frontend/src/views/dataset/data/UpdateInfo.vue +++ b/frontend/src/views/dataset/data/UpdateInfo.vue @@ -134,7 +134,10 @@ - + + + + @@ -285,10 +288,12 @@ import 'codemirror/keymap/emacs.js' import 'codemirror/addon/hint/show-hint.css' import 'codemirror/addon/hint/sql-hint' import 'codemirror/addon/hint/show-hint' +// vue-cron +import { cron } from 'vue-cron' export default { name: 'UpdateInfo', - components: { codemirror }, + components: { codemirror, cron }, props: { table: { type: Object, @@ -348,7 +353,8 @@ export default { }, incrementalUpdateType: 'incrementalAdd', sql: '', - incrementalConfig: {} + incrementalConfig: {}, + cronEdit: false } }, computed: { @@ -563,6 +569,9 @@ export default { pos2.line = pos1.line pos2.ch = pos1.ch this.$refs.myCm.codemirror.replaceRange(param, pos2) + }, + cronChange(val) { + this.taskForm.cron = val } } } diff --git a/frontend/src/views/panel/enshrine/index.vue b/frontend/src/views/panel/enshrine/index.vue index 3f6fadbbbb..646a68beba 100644 --- a/frontend/src/views/panel/enshrine/index.vue +++ b/frontend/src/views/panel/enshrine/index.vue @@ -36,8 +36,13 @@ export default { starDatas: [] } }, + computed: { + panelInfo() { + return this.$store.state.panel.panelInfo + } + }, created() { - bus.$on('panle_start_list_refresh', this.initData) + bus.$on('panle_start_list_refresh', this.refreshStarts) this.initData() }, methods: { @@ -64,12 +69,20 @@ export default { remove(row) { deleteEnshrine(row.storeId).then(res => { this.initData() + this.panelInfo && this.panelInfo.id && row.panelGroupId === this.panelInfo.id && this.setMainNull() }) }, initData() { enshrineList({}).then(res => { this.starDatas = res.data }) + }, + setMainNull() { + this.$store.dispatch('panel/setPanelInfo', { id: null, name: '', preStyle: null }) + }, + refreshStarts(isStar) { + this.initData() + !isStar && this.setMainNull() } } } diff --git a/frontend/src/views/panel/list/PanelViewShow.vue b/frontend/src/views/panel/list/PanelViewShow.vue index 4390ea6b44..bff2cf7f9d 100644 --- a/frontend/src/views/panel/list/PanelViewShow.vue +++ b/frontend/src/views/panel/list/PanelViewShow.vue @@ -162,13 +162,13 @@ export default { star() { this.panelInfo && saveEnshrine(this.panelInfo.id).then(res => { this.hasStar = true - this.refreshStarList() + this.refreshStarList(true) }) }, unstar() { this.panelInfo && deleteEnshrine(this.panelInfo.id).then(res => { this.hasStar = false - this.refreshStarList() + this.refreshStarList(false) }) }, initHasStar() { @@ -177,8 +177,8 @@ export default { this.hasStar = res.data && res.data.some(item => item.panelGroupId === this.panelInfo.id) }) }, - refreshStarList() { - bus.$emit('panle_start_list_refresh') + refreshStarList(isStar) { + bus.$emit('panle_start_list_refresh', isStar) } } diff --git a/frontend/src/views/system/about/index.vue b/frontend/src/views/system/about/index.vue index fe8d02ef42..01c9792add 100644 --- a/frontend/src/views/system/about/index.vue +++ b/frontend/src/views/system/about/index.vue @@ -4,7 +4,7 @@
- +
{{ $t('about.invalid_license') }}