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 a348aa7e8e..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; @@ -9,7 +10,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -108,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(); @@ -178,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(",")) { @@ -220,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 @@ -255,12 +258,43 @@ public class DorisQueryProvider extends QueryProvider { return " IS NULL "; case "not_null": return " IS NOT NULL "; + case "between": + return " BETWEEN "; default: return ""; } } - 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 ""; } @@ -285,6 +319,11 @@ public class DorisQueryProvider extends QueryProvider { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { filter.append("'%").append(value.get(0)).append("%'"); + } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); + String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); + filter.append("'").append(startTime).append("' AND '").append(endTime).append("'"); } else { filter.append("'").append(value.get(0)).append("'"); } 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 2fe0d6c0b4..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; @@ -9,7 +10,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -108,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(); @@ -184,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(",")) { @@ -227,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 @@ -262,12 +265,43 @@ public class MysqlQueryProvider extends QueryProvider { return " IS NULL "; case "not_null": return " IS NOT NULL "; + case "between": + return " BETWEEN "; default: return ""; } } - 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 ""; } @@ -292,6 +326,11 @@ public class MysqlQueryProvider extends QueryProvider { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { filter.append("'%").append(value.get(0)).append("%'"); + } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); + String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); + filter.append("'").append(startTime).append("' AND '").append(endTime).append("'"); } else { filter.append("'").append(value.get(0)).append("'"); } 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/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index 306051c0cd..f077c22c8f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -1,12 +1,15 @@ package io.dataease.service.dataset.impl.direct; +import com.google.gson.Gson; import io.dataease.base.domain.DatasetTable; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.Datasource; +import io.dataease.commons.utils.CommonBeanFactory; 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.dataset.DataTableInfoDTO; import io.dataease.provider.QueryProvider; import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetTableFieldsService; @@ -53,15 +56,34 @@ public class DirectFieldService implements DataSetFieldService { if (ObjectUtils.isEmpty(datasetTable) || StringUtils.isEmpty(datasetTable.getName())) return null; String tableName = datasetTable.getName(); - String dataSourceId = datasetTable.getDataSourceId(); - if (StringUtils.isEmpty(dataSourceId)) return null; - Datasource ds = datasourceService.get(dataSourceId); - DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); - datasourceRequest.setDatasource(ds); - QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - String querySQL = qp.createQuerySQL(tableName, Collections.singletonList(field)); - datasourceRequest.setQuery(querySQL); + DatasourceProvider datasourceProvider = null; + if (datasetTable.getMode() == 0) {// 直连 + if (StringUtils.isEmpty(datasetTable.getDataSourceId())) return null; + Datasource ds = datasourceService.get(datasetTable.getDataSourceId()); + datasourceProvider = ProviderFactory.getProvider(ds.getType()); + datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) { + datasourceRequest.setTable(dataTableInfoDTO.getTable()); + datasourceRequest.setQuery(qp.createQuerySQL(dataTableInfoDTO.getTable(), Collections.singletonList(field))); + } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { + datasourceRequest.setQuery(qp.createQuerySQLAsTmp(dataTableInfoDTO.getSql(), Collections.singletonList(field))); + } + } else if (datasetTable.getMode() == 1) {// 抽取 + // 连接doris,构建doris数据源查询 + Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); + datasourceProvider = ProviderFactory.getProvider(ds.getType()); + datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + tableName = "ds_" + datasetTable.getId().replaceAll("-", "_"); + datasourceRequest.setTable(tableName); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + datasourceRequest.setQuery(qp.createQuerySQL(tableName, Collections.singletonList(field))); + } + try { List rows = datasourceProvider.getData(datasourceRequest); List results = rows.stream().map(row -> row[0]).distinct().collect(Collectors.toList()); 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 d42d13a454..bfa26e0fd0 100644 --- a/backend/src/main/resources/db/migration/V3__init_data.sql +++ b/backend/src/main/resources/db/migration/V3__init_data.sql @@ -42,9 +42,9 @@ INSERT INTO `sys_menu` VALUES (36, 1, 0, 1, '菜单表单', 'system-menu-form', INSERT INTO `sys_menu` VALUES (37, 1, 0, 1, '组织表单', 'system-dept-form', 'system/dept/form', 12, '', 'dept-form', b'0', b'0', b'1', NULL, NULL, NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (38, 1, 0, 1, '角色表单', 'system-role-form', 'system/role/form', 13, '', 'role-form', b'0', b'0', b'1', NULL, NULL, NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (39, 0, 0, 1, '数据源表单', 'datasource-form', 'system/datasource/form', 5, NULL, '/ds-form', b'0', b'0', b'1', NULL, NULL, NULL, NULL, NULL); -INSERT INTO `sys_menu` VALUES (40, 1, 0, 1, '模板管理', 'system-template', 'panel/template/index', 13, 'dashboard', 'panel/template/index', NULL, b'0', b'0', 'sysparam:read', NULL, NULL, NULL, 1620444227389); -INSERT INTO `sys_menu` VALUES (41, 1, 0, 1, '权限管理', 'system-auth', 'system/authority/index', 14, 'password', 'system/authority/index', b'0', b'0', b'0', 'sysparam:read', NULL, NULL, NULL, 1620447312657); -INSERT INTO `sys_menu` VALUES (42, 1, 0, 1, '插件管理', 'system-plugin', 'system/plugin/index', 15, 'sys-tools', '/plugin', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sys_menu` VALUES (40, 1, 0, 1, '模板管理', 'system-template', 'panel/template/index', 13, 'dashboard', 'panel/template/index', NULL, b'0', b'0', 'template:read', NULL, NULL, NULL, 1620444227389); +INSERT INTO `sys_menu` VALUES (41, 1, 0, 1, '权限管理', 'system-auth', 'system/authority/index', 14, 'password', 'system/authority/index', b'0', b'0', b'0', 'auth:read', NULL, NULL, NULL, 1620447312657); +INSERT INTO `sys_menu` VALUES (42, 1, 0, 1, '插件管理', 'system-plugin', 'system/plugin/index', 15, 'sys-tools', '/plugin', b'0', b'0', b'0', 'plugin:read', NULL, NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (50, 0, 0, 1, '个人信息', 'person-info', 'system/user/privateForm', 999, NULL, '/person-info', b'0', b'0', b'1', NULL, NULL, NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (51, 0, 0, 1, '重置密码', 'person-pwd-reset', 'system/user/personPwd', 999, NULL, '/person-pwd', b'0', b'0', b'1', NULL, NULL, NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (52, 0, 0, 1, '关于', 'about', 'system/about/index', 16, 'system', '/about', b'0', b'0', b'1', NULL, NULL, NULL, NULL, 1620897406691); diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue index 86ce8259df..80ec62a8d4 100644 --- a/frontend/src/components/canvas/components/Editor/Preview.vue +++ b/frontend/src/components/canvas/components/Editor/Preview.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index fd9c585d51..7199c8b327 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -8,7 +8,7 @@ - + @@ -110,6 +110,15 @@ + + + + @@ -130,6 +139,7 @@ import { mapState } from 'vuex' import { uuid } from 'vue-uuid' import Toolbar from '@/components/canvas/components/Toolbar' import { get } from '@/api/panel/panel' +import PreviewFullScreen from '@/components/canvas/components/Editor/PreviewFullScreen' // 引入样式 import '@/components/canvas/assets/iconfont/iconfont.css' @@ -149,7 +159,8 @@ export default { Editor, Toolbar, FilterDialog, - SubjectSetting + SubjectSetting, + PreviewFullScreen }, data() { return { @@ -164,7 +175,8 @@ export default { filterVisible: false, currentWidget: null, currentFilterCom: null, - subjectVisible: false + subjectVisible: false, + previewVisible: false } }, @@ -211,6 +223,10 @@ export default { bus.$on('component-dialog-edit', () => { this.eidtDialog() }) + + bus.$on('previewFullScreenClose', () => { + this.previewVisible = false + }) }, beforeDestroy() { const elx = this.$refs.rightPanel @@ -375,7 +391,11 @@ export default { debugger this.show = false // this.beforeDestroy() + }, + previewFullScreen() { + this.previewVisible = true } + } } diff --git a/frontend/src/views/panel/enshrine/index.vue b/frontend/src/views/panel/enshrine/index.vue index f2b10f89ba..646a68beba 100644 --- a/frontend/src/views/panel/enshrine/index.vue +++ b/frontend/src/views/panel/enshrine/index.vue @@ -28,6 +28,7 @@ import { deleteEnshrine, enshrineList } from '@/api/panel/enshrine' import { uuid } from 'vue-uuid' import { get } from '@/api/panel/panel' +import bus from '@/utils/bus' export default { name: 'Enshrine', data() { @@ -35,7 +36,13 @@ export default { starDatas: [] } }, + computed: { + panelInfo() { + return this.$store.state.panel.panelInfo + } + }, created() { + bus.$on('panle_start_list_refresh', this.refreshStarts) this.initData() }, methods: { @@ -62,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 0bd0414d71..bff2cf7f9d 100644 --- a/frontend/src/views/panel/list/PanelViewShow.vue +++ b/frontend/src/views/panel/list/PanelViewShow.vue @@ -51,6 +51,7 @@ { this.hasStar = true + this.refreshStarList(true) }) }, unstar() { this.panelInfo && deleteEnshrine(this.panelInfo.id).then(res => { this.hasStar = false + this.refreshStarList(false) }) }, initHasStar() { @@ -172,6 +176,9 @@ export default { enshrineList(param).then(res => { this.hasStar = res.data && res.data.some(item => item.panelGroupId === this.panelInfo.id) }) + }, + refreshStarList(isStar) { + bus.$emit('panle_start_list_refresh', isStar) } }