diff --git a/.github/workflows/typos_check.yml b/.github/workflows/typos_check.yml new file mode 100644 index 0000000000..099b219d3e --- /dev/null +++ b/.github/workflows/typos_check.yml @@ -0,0 +1,13 @@ +name: Typos Check +on: [push, pull_request] + +jobs: + run: + name: Spell Check with Typos + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v2 + + - name: Check spelling + uses: crate-ci/typos@master diff --git a/.typos.toml b/.typos.toml new file mode 100644 index 0000000000..3c57b09777 --- /dev/null +++ b/.typos.toml @@ -0,0 +1,12 @@ +[default.extend-words] +Rela = "Rela" +eles = "eles" +delink = "delink" +testng = "testng" +ba = "ba" +referer = "referer" +keynode = "keynode" + +[files] +extend-exclude = ["public/", "amap-wx/", "m-icon/", "uni-card/", "uni-col/", "uni-link/", "uni-list/", "uni-list-item/", "uni-row/", "migration/", "mapFiles/"] + diff --git a/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java b/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java index 806fc846a9..63fbc57589 100644 --- a/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java +++ b/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java @@ -2,6 +2,7 @@ package io.dataease.provider; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.Datasource; +import org.apache.commons.lang3.StringUtils; import java.util.Arrays; import java.util.List; @@ -41,11 +42,15 @@ public class DDLProviderImpl extends DDLProvider { Integer realSize = page * pageNumber < dataList.size() ? page * pageNumber : dataList.size(); for (String[] strings : dataList.subList((page - 1) * pageNumber, realSize)) { String[] strings1 = new String[strings.length]; - for(int i=0; i< strings.length;i++){ - strings1[i] = strings[i].replace("'","\\'"); + for (int i = 0; i < strings.length; i++) { + if (StringUtils.isEmpty(strings[i])) { + strings1[i] = ""; + } else { + strings1[i] = strings[i].replace("'", "\\'"); + } } values.append("('").append(UUID.randomUUID()) - .append("','" ).append(String.join("','", Arrays.asList(strings1))) + .append("','").append(String.join("','", Arrays.asList(strings1))) .append("'),"); } return insertSql + values.substring(0, values.length() - 1); diff --git a/backend/src/main/java/io/dataease/provider/ProviderFactory.java b/backend/src/main/java/io/dataease/provider/ProviderFactory.java index 76b38d89dd..6a5a12de4f 100644 --- a/backend/src/main/java/io/dataease/provider/ProviderFactory.java +++ b/backend/src/main/java/io/dataease/provider/ProviderFactory.java @@ -66,10 +66,11 @@ public class ProviderFactory implements ApplicationContextAware { switch (type) { case "mysql": case "mariadb": + return context.getBean("mysqlQueryProvider", QueryProvider.class); case "ds_doris": case "TiDB": case "StarRocks": - return context.getBean("mysqlQueryProvider", QueryProvider.class); + return context.getBean("dorisQueryProvider", QueryProvider.class); default: return SpringContextUtil.getApplicationContext().getBean(type + "QueryProvider", QueryProvider.class); } diff --git a/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java new file mode 100644 index 0000000000..c051fbdda4 --- /dev/null +++ b/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java @@ -0,0 +1,11 @@ +package io.dataease.provider.query.doris; + +import io.dataease.provider.query.mysql.MysqlQueryProvider; +import org.springframework.stereotype.Service; + + + +@Service("dorisQueryProvider") +public class DorisQueryProvider extends MysqlQueryProvider { + +} diff --git a/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java index 2a7c7134fe..ac2852a74b 100644 --- a/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java @@ -1324,4 +1324,8 @@ public class EsQueryProvider extends QueryProvider { "{\"dateformat\": \"yyyy-MM-dd HH:mm:ss\"}\n" + "]", Dateformat.class); } + + public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { + return null; + } } diff --git a/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java index 14fa0d1b06..2329aaf5c1 100644 --- a/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java @@ -1144,7 +1144,7 @@ public class HiveQueryProvider extends QueryProvider { if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { - fieldName = String.format(HiveConstants.DATE_FORMAT, originField, format); + fieldName = String.format(HiveConstants.DATE_FORMAT, String.format(HiveConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : HiveConstants.DEFAULT_DATE_FORMAT), format); } else { String cast = String.format(HiveConstants.CAST, originField, HiveConstants.DEFAULT_INT_FORMAT) + "/1000"; String from_unixtime = String.format(HiveConstants.FROM_UNIXTIME, cast, HiveConstants.DEFAULT_DATE_FORMAT); diff --git a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index 25cc5c4a04..be8b8414c5 100644 --- a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -1174,7 +1174,7 @@ public class MysqlQueryProvider extends QueryProvider { if (x.getDeType() == 1) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == 0) { - fieldName = String.format(MySQLConstants.DATE_FORMAT, originField, format); + fieldName = String.format(MySQLConstants.DATE_FORMAT, String.format(MySQLConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT), format); } else { String cast = String.format(MySQLConstants.CAST, originField, MySQLConstants.DEFAULT_INT_FORMAT) + "/1000"; String from_unixtime = String.format(MySQLConstants.FROM_UNIXTIME, cast, MySQLConstants.DEFAULT_DATE_FORMAT); diff --git a/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java index 227fb75f1d..469f9a1dc4 100644 --- a/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java @@ -457,7 +457,7 @@ public class PgQueryProvider extends QueryProvider { .build(); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return sqlLimit(st.render(), view); + return st.render(); } @Override @@ -964,7 +964,7 @@ public class PgQueryProvider extends QueryProvider { } if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.CAST, originName, "timestamp"); + whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); @@ -1063,7 +1063,7 @@ public class PgQueryProvider extends QueryProvider { if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.CAST, originName, "timestamp"); + whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); @@ -1177,7 +1177,9 @@ public class PgQueryProvider extends QueryProvider { if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { - fieldName = String.format(PgConstants.DATE_FORMAT, String.format(PgConstants.CAST, originField, "timestamp"), format); + fieldName = String.format(PgConstants.DATE_FORMAT, + String.format(PgConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT), + format); } else { String cast = String.format(PgConstants.CAST, originField, "bigint"); String from_unixtime = String.format(PgConstants.FROM_UNIXTIME, cast); diff --git a/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java index 4a8fa038aa..3b447866d4 100644 --- a/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java @@ -963,7 +963,7 @@ public class RedshiftQueryProvider extends QueryProvider { } if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.CAST, originName, "timestamp"); + whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); @@ -1058,7 +1058,7 @@ public class RedshiftQueryProvider extends QueryProvider { if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.CAST, originName, "timestamp"); + whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); @@ -1166,7 +1166,7 @@ public class RedshiftQueryProvider extends QueryProvider { if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { - fieldName = String.format(PgConstants.DATE_FORMAT, originField, format); + fieldName = String.format(PgConstants.DATE_FORMAT, String.format(PgConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT), format); } else { String cast = String.format(PgConstants.CAST, originField, "bigint"); String from_unixtime = String.format(PgConstants.FROM_UNIXTIME, cast); diff --git a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index 5acfdef48b..3e15036f49 100644 --- a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -1343,4 +1343,8 @@ public class SqlserverQueryProvider extends QueryProvider { "{\"dateformat\": \"120\", \"desc\": \"yyyy-mm-dd hh:mi:ss\"}\n" + "]", Dateformat.class); } + + public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { + return null; + } } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java index c473c05660..50286f90d0 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java @@ -209,7 +209,6 @@ public class PanelAppTemplateService { DatasetTableField newTableField = dataSetTableFieldsService.save(datasetTableField); datasetFieldsRealMap.put(oldId, newTableField.getId()); datasetFieldsMd5FormatRealMap.put(TableUtils.fieldNameShort(oldTableId + "_" + datasetTableField.getOriginName()), TableUtils.fieldNameShort(newTableField.getTableId() + "_" + datasetTableField.getOriginName())); - System.out.println(); } } //数据集计算字段替换 diff --git a/backend/src/main/resources/db/migration/V44__1.17.sql b/backend/src/main/resources/db/migration/V44__1.17.sql index a94905a739..82be6e301f 100644 --- a/backend/src/main/resources/db/migration/V44__1.17.sql +++ b/backend/src/main/resources/db/migration/V44__1.17.sql @@ -52,3 +52,7 @@ where id = '3986ba4c-5a8e-11ed-bc5b-cf4a43b3b40c'; update `my_plugin` set `name` = '气泡地图插件' where `plugin_id` = 2; + +ALTER TABLE `dataset_table_field` + CHANGE COLUMN `origin_name` `origin_name` LONGTEXT CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin' NOT NULL ; + diff --git a/frontend/src/assets/datasource/StarRocks.jpg b/frontend/src/assets/datasource/StarRocks.jpg index 60764d2fa4..c350a02fb9 100644 Binary files a/frontend/src/assets/datasource/StarRocks.jpg and b/frontend/src/assets/datasource/StarRocks.jpg differ diff --git a/frontend/src/assets/datasource/TiDB.jpg b/frontend/src/assets/datasource/TiDB.jpg index 7ab43f2a13..2e1af1f40c 100644 Binary files a/frontend/src/assets/datasource/TiDB.jpg and b/frontend/src/assets/datasource/TiDB.jpg differ diff --git a/frontend/src/assets/datasource/api.jpg b/frontend/src/assets/datasource/api.jpg index 8526d245bd..854e216287 100644 Binary files a/frontend/src/assets/datasource/api.jpg and b/frontend/src/assets/datasource/api.jpg differ diff --git a/frontend/src/assets/datasource/ck.jpg b/frontend/src/assets/datasource/ck.jpg index ee80f1a7bd..12767a1c16 100644 Binary files a/frontend/src/assets/datasource/ck.jpg and b/frontend/src/assets/datasource/ck.jpg differ diff --git a/frontend/src/assets/datasource/db2.jpg b/frontend/src/assets/datasource/db2.jpg index f094daa022..691083d883 100644 Binary files a/frontend/src/assets/datasource/db2.jpg and b/frontend/src/assets/datasource/db2.jpg differ diff --git a/frontend/src/assets/datasource/ds_doris.jpg b/frontend/src/assets/datasource/ds_doris.jpg index 5fcc515a31..f87d61b343 100644 Binary files a/frontend/src/assets/datasource/ds_doris.jpg and b/frontend/src/assets/datasource/ds_doris.jpg differ diff --git a/frontend/src/assets/datasource/es.jpg b/frontend/src/assets/datasource/es.jpg index 2251cf4473..51832faaea 100644 Binary files a/frontend/src/assets/datasource/es.jpg and b/frontend/src/assets/datasource/es.jpg differ diff --git a/frontend/src/assets/datasource/hive.jpg b/frontend/src/assets/datasource/hive.jpg index 60e5cfe130..8f1410ec90 100644 Binary files a/frontend/src/assets/datasource/hive.jpg and b/frontend/src/assets/datasource/hive.jpg differ diff --git a/frontend/src/assets/datasource/impala.jpg b/frontend/src/assets/datasource/impala.jpg index 556309b018..0c4d5cee8c 100644 Binary files a/frontend/src/assets/datasource/impala.jpg and b/frontend/src/assets/datasource/impala.jpg differ diff --git a/frontend/src/assets/datasource/mariadb.jpg b/frontend/src/assets/datasource/mariadb.jpg index 7d2bcf44db..7411826067 100644 Binary files a/frontend/src/assets/datasource/mariadb.jpg and b/frontend/src/assets/datasource/mariadb.jpg differ diff --git a/frontend/src/assets/datasource/mongo.jpg b/frontend/src/assets/datasource/mongo.jpg index 08c15580f9..a1fe93381c 100644 Binary files a/frontend/src/assets/datasource/mongo.jpg and b/frontend/src/assets/datasource/mongo.jpg differ diff --git a/frontend/src/assets/datasource/mysql.jpg b/frontend/src/assets/datasource/mysql.jpg index be0e90e1b1..06d4b217ca 100644 Binary files a/frontend/src/assets/datasource/mysql.jpg and b/frontend/src/assets/datasource/mysql.jpg differ diff --git a/frontend/src/assets/datasource/oracle.jpg b/frontend/src/assets/datasource/oracle.jpg index 3397b63159..f5a61f76dd 100644 Binary files a/frontend/src/assets/datasource/oracle.jpg and b/frontend/src/assets/datasource/oracle.jpg differ diff --git a/frontend/src/assets/datasource/pg.jpg b/frontend/src/assets/datasource/pg.jpg index cc2106b924..7e5e9db2e9 100644 Binary files a/frontend/src/assets/datasource/pg.jpg and b/frontend/src/assets/datasource/pg.jpg differ diff --git a/frontend/src/assets/datasource/redshift.jpg b/frontend/src/assets/datasource/redshift.jpg index 3a62522f24..2121996465 100644 Binary files a/frontend/src/assets/datasource/redshift.jpg and b/frontend/src/assets/datasource/redshift.jpg differ diff --git a/frontend/src/assets/datasource/sqlServer.jpg b/frontend/src/assets/datasource/sqlServer.jpg index 0832e68adf..d77494a226 100644 Binary files a/frontend/src/assets/datasource/sqlServer.jpg and b/frontend/src/assets/datasource/sqlServer.jpg differ diff --git a/frontend/src/components/canvas/components/editor/CanvasOptBar.vue b/frontend/src/components/canvas/components/editor/CanvasOptBar.vue index 4aae7a12ad..82bcb35e63 100644 --- a/frontend/src/components/canvas/components/editor/CanvasOptBar.vue +++ b/frontend/src/components/canvas/components/editor/CanvasOptBar.vue @@ -106,6 +106,7 @@ export default { this.$router.back(-1) }, exportPDF() { + this.$refs['widget-div'].style.display = '' this.$emit('link-export-pdf') }, setWidgetStatus() { diff --git a/frontend/src/components/canvas/components/editor/ComponentWrapper.vue b/frontend/src/components/canvas/components/editor/ComponentWrapper.vue index 639bb5f740..4cd9f3d347 100644 --- a/frontend/src/components/canvas/components/editor/ComponentWrapper.vue +++ b/frontend/src/components/canvas/components/editor/ComponentWrapper.vue @@ -13,6 +13,7 @@ :canvas-id="canvasId" :chart="chart" :show-position="showPosition" + :series-id-map="seriesIdMap" @showViewDetails="showViewDetails" />
{ + if (item?.['responseResetButton']) { + item.responseResetButton() + } + }) }, refreshButtonInfo(isClear = false) { const result = this.buildButtonFilterMap(this.componentData, isClear) diff --git a/frontend/src/components/canvas/components/editor/EditBar.vue b/frontend/src/components/canvas/components/editor/EditBar.vue index 588422692a..471c4186f2 100644 --- a/frontend/src/components/canvas/components/editor/EditBar.vue +++ b/frontend/src/components/canvas/components/editor/EditBar.vue @@ -144,6 +144,7 @@
@@ -239,6 +240,14 @@ export default { chart: { type: Object, default: null + }, + seriesIdMap: { + type: Object, + default: () => { + return { + id: '' + } + } } }, data() { diff --git a/frontend/src/components/canvas/components/editor/Preview.vue b/frontend/src/components/canvas/components/editor/Preview.vue index 9c27ac73e7..f731bbfa89 100644 --- a/frontend/src/components/canvas/components/editor/Preview.vue +++ b/frontend/src/components/canvas/components/editor/Preview.vue @@ -95,6 +95,49 @@ @closePreExport="closePreExport" /> + + + + + + {{ $t('chart.export_img') }} + + + {{ $t('chart.export') }}Excel + + + + @@ -117,10 +160,11 @@ import html2canvas from 'html2canvasde' import { queryAll } from '@/api/panel/pdfTemplate' import PDFPreExport from '@/views/panel/export/PDFPreExport' import { listenGlobalKeyDownPreview } from '@/components/canvas/utils/shortcutKey' +import UserViewDialog from '@/components/canvas/customComponent/UserViewDialog' const erd = elementResizeDetectorMaker() export default { - components: { ComponentWrapper, CanvasOptBar, PDFPreExport }, + components: { UserViewDialog, ComponentWrapper, CanvasOptBar, PDFPreExport }, model: { prop: 'show', event: 'change' @@ -189,6 +233,10 @@ export default { }, data() { return { + chartDetailsVisible: false, + showChartInfo: {}, + showChartTableInfo: {}, + showChartInfoType: 'details', mainHeightCount: null, userInfo: null, previewMainDomId: 'preview-main-' + this.canvasId, @@ -381,6 +429,7 @@ export default { if (this.terminal === 'mobile') { this.initMobileCanvas() } + this.canvasId === 'canvas-main' && bus.$on('pcChartDetailsDialog', this.openChartDetailsDialog) bus.$on('trigger-search-button', this.triggerSearchButton) bus.$on('trigger-reset-button', this.triggerResetButton) this.initPdfTemplate() @@ -389,10 +438,19 @@ export default { erd.uninstall(this.$refs[this.previewTempRefId]) erd.uninstall(this.$refs[this.previewRefId]) clearInterval(this.timer) + this.canvasId === 'canvas-main' && bus.$off('pcChartDetailsDialog', this.openChartDetailsDialog) bus.$off('trigger-search-button', this.triggerSearchButton) bus.$off('trigger-reset-button', this.triggerResetButton) }, methods: { + openChartDetailsDialog(paramInfo) { + if (this.canvasId === 'canvas-main') { + this.showChartInfo = paramInfo.showChartInfo + this.showChartTableInfo = paramInfo.showChartTableInfo + this.showChartInfoType = paramInfo.showChartInfoType + this.chartDetailsVisible = true + } + }, initWatermark(waterDomId = 'preview-main-canvas-main') { if (this.panelInfo.watermarkInfo && this.canvasId === 'canvas-main') { if (this.userInfo) { @@ -410,6 +468,11 @@ export default { }, triggerResetButton() { this.triggerSearchButton(true) + this.$refs['viewWrapperChild']?.forEach(item => { + if (item?.responseResetButton) { + item.responseResetButton() + } + }) }, triggerSearchButton(isClear = false) { const result = this.buildButtonFilterMap(this.componentData, isClear) @@ -585,10 +648,10 @@ export default { } }, exportExcel() { - this.$refs['userViewDialog'].exportExcel() + this.$refs['userViewDialog-canvas-main'].exportExcel() }, exportViewImg() { - this.$refs['userViewDialog'].exportViewImg() + this.$refs['userViewDialog-canvas-main'].exportViewImg() }, deselectCurComponent(e) { if (!this.isClickComponent) { diff --git a/frontend/src/components/canvas/customComponent/UserView.vue b/frontend/src/components/canvas/customComponent/UserView.vue index a6cd3f3a8c..04c08401fe 100644 --- a/frontend/src/components/canvas/customComponent/UserView.vue +++ b/frontend/src/components/canvas/customComponent/UserView.vue @@ -232,6 +232,11 @@ export default { ChartComponentG2 }, props: { + inScreen: { + type: Boolean, + required: false, + default: true + }, canvasId: { type: String, required: true @@ -469,7 +474,7 @@ export default { }, 'cfilters': { handler: function(val1, val2) { - if ((isChange(val1, val2) || isChange(val1, this.filters)) && !this.isFirstLoad) { + if (isChange(val1, val2) && !this.isFirstLoad) { this.getData(this.element.propValue.viewId) } }, @@ -555,6 +560,11 @@ export default { } }, methods: { + responseResetButton() { + if (!this.cfilters?.length) { + this.getData(this.element.propValue.viewId, false) + } + }, exportExcel() { this.$refs['userViewDialog'].exportExcel() }, @@ -871,7 +881,13 @@ export default { this.showChartInfo = this.chart this.showChartTableInfo = tableChart this.showChartInfoType = params.openType - if (this.terminal === 'pc') { + if (!this.inScreen) { + bus.$emit('pcChartDetailsDialog', { + showChartInfo: this.showChartInfo, + showChartTableInfo: this.showChartTableInfo, + showChartInfoType: this.showChartInfoType + }) + } else if (this.terminal === 'pc') { this.chartDetailsVisible = true } else { this.mobileChartDetailsVisible = true diff --git a/frontend/src/components/canvas/store/layer.js b/frontend/src/components/canvas/store/layer.js index b485b86b61..7eb799156f 100644 --- a/frontend/src/components/canvas/store/layer.js +++ b/frontend/src/components/canvas/store/layer.js @@ -1,9 +1,11 @@ -import { toBottom, toTop, moveUp, moveDown } from '@/components/canvas/utils/utils' +import { findCurComponentIndex, moveDown, moveUp, toBottom, toTop } from '@/components/canvas/utils/utils' import toast from '@/components/canvas/utils/toast' export default { mutations: { - upComponent({ componentData, curComponentIndex }) { + + upComponent({ componentData, curComponent }) { + const curComponentIndex = findCurComponentIndex(componentData, curComponent) // 上移图层 index,表示元素在数组中越往后 if (curComponentIndex < componentData.length - 1) { moveUp(componentData, curComponentIndex) @@ -12,7 +14,8 @@ export default { } }, - downComponent({ componentData, curComponentIndex }) { + downComponent({ componentData, curComponent }) { + const curComponentIndex = findCurComponentIndex(componentData, curComponent) // 下移图层 index,表示元素在数组中越往前 if (curComponentIndex > 0) { moveDown(componentData, curComponentIndex) @@ -21,14 +24,16 @@ export default { } }, - topComponent({ componentData, curComponentIndex }) { + topComponent({ componentData, curComponent }) { + const curComponentIndex = findCurComponentIndex(componentData, curComponent) // 置顶 if (curComponentIndex < componentData.length - 1) { toTop(componentData, curComponentIndex) } }, - bottomComponent({ componentData, curComponentIndex }) { + bottomComponent({ componentData, curComponent }) { + const curComponentIndex = findCurComponentIndex(componentData, curComponent) // 置底 if (curComponentIndex > 0) { toBottom(componentData, curComponentIndex) diff --git a/frontend/src/components/canvas/utils/utils.js b/frontend/src/components/canvas/utils/utils.js index bb8e851623..b02e2dd98a 100644 --- a/frontend/src/components/canvas/utils/utils.js +++ b/frontend/src/components/canvas/utils/utils.js @@ -246,3 +246,15 @@ export function getNowCanvasComponentData(canvasId, showPosition) { return store.state.componentData.filter(item => item.canvasId === canvasId) } } + +export function findCurComponentIndex(componentData, curComponent) { + let curIndex = 0 + for (let index = 0; index < componentData.length; index++) { + const element = componentData[index] + if (element.id && element.id === curComponent.id) { + curIndex = index + break + } + } + return curIndex +} diff --git a/frontend/src/components/dataease/DeOutWidget.vue b/frontend/src/components/dataease/DeOutWidget.vue index f12aae39d9..2a87d53365 100644 --- a/frontend/src/components/dataease/DeOutWidget.vue +++ b/frontend/src/components/dataease/DeOutWidget.vue @@ -2,7 +2,7 @@
{ - const nowIndex = switchCount % this.element.options.tabList.length + _this.timer = setInterval(() => { + const nowIndex = switchCount % _this.element.options.tabList.length switchCount++ - this.activeTabName = this.element.options.tabList[nowIndex].name + _this.activeTabName = _this.element.options.tabList[nowIndex].name + const targetRef = _this.$refs['canvasTabRef-' + _this.activeTabName] + if (targetRef) { + targetRef[0].restore() + } }, switchTime) } }, @@ -705,21 +708,27 @@ export default { } ::v-deep .el-tabs__nav { - width: 100%; + display: flex; +} +::v-deep .el-tabs__nav-prev { + line-height: 25px; +} +::v-deep .el-tabs__nav-next { + line-height: 25px; } .tab-head-left ::v-deep .el-tabs__nav { - width: 100%; + display: flex; text-align: left; } .tab-head-right ::v-deep .el-tabs__nav { - width: 100%; + display: flex; text-align: right; } .tab-head-center ::v-deep .el-tabs__nav { - width: 100%; + display: flex; text-align: center; } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 1ab2176296..8ff6d4a01d 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1758,7 +1758,7 @@ export default { http_port: 'Http Port', port: 'Port', datasource_url: 'URL address', - please_input_datasource_url: 'Please enter Elasticsearch 地址,e.g: http://es_host:es_port', + please_input_datasource_url: 'Please enter Elasticsearch URL address,e.g: http://es_host:es_port', please_input_data_base: 'Please enter the database name', please_select_oracle_type: 'Select connection type', please_input_user_name: 'Please enter user name', diff --git a/frontend/src/views/chart/components/map/MapLayerController.vue b/frontend/src/views/chart/components/map/MapLayerController.vue index 57b68c7963..34cb830212 100644 --- a/frontend/src/views/chart/components/map/MapLayerController.vue +++ b/frontend/src/views/chart/components/map/MapLayerController.vue @@ -42,6 +42,14 @@ export default { chart: { type: Object, required: true + }, + seriesIdMap: { + type: Object, + default: () => { + return { + id: '' + } + } } }, data() { @@ -79,11 +87,12 @@ export default { id: this.chart.id, seriesId: this.currentSeriesId } + this.seriesIdMap.id = this.currentSeriesId bus.$emit('change-series-id', param) }, init() { - this.currentSeriesId = this.customAttr.currentSeriesId + this.currentSeriesId = this.seriesIdMap?.id || this.customAttr.currentSeriesId } } } diff --git a/frontend/src/views/dataset/data/FieldEdit.vue b/frontend/src/views/dataset/data/FieldEdit.vue index bb7b609979..eb46831c15 100644 --- a/frontend/src/views/dataset/data/FieldEdit.vue +++ b/frontend/src/views/dataset/data/FieldEdit.vue @@ -860,7 +860,9 @@ export default { item.dateFormat = item.dateFormatType } } - + if(item.dateFormatType === 'custom' && !item.dateFormat){ + return; + } post('/dataset/field/save', item) .then((response) => { this.initField() @@ -895,7 +897,7 @@ export default { if (val && val !== '') { this.tableFields.dimensionListData = JSON.parse( JSON.stringify( - this.tableFields.dimensionListData.filter((ele) => { + this.tableFields.dimensionList.filter((ele) => { return ele.name .toLocaleLowerCase() .includes(val.toLocaleLowerCase()) diff --git a/frontend/src/views/dataset/data/UpdateInfo.vue b/frontend/src/views/dataset/data/UpdateInfo.vue index 89f14bba8a..731aafb176 100644 --- a/frontend/src/views/dataset/data/UpdateInfo.vue +++ b/frontend/src/views/dataset/data/UpdateInfo.vue @@ -861,7 +861,7 @@ export default { }, disableExec(task) { return ( - task.status === 'Pending' || task.status === 'Exec' || !hasDataPermission('manage', task.privileges) + (task.status === 'Stopped' && task.rate !== 'SIMPLE') || task.status === 'Pending' || task.status ==='Exec' || !hasDataPermission('manage', task.privileges) ) }, disableDelete(task) { diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index b3f5812ab6..43c765439d 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -729,7 +729,6 @@ export default { optType: 'rename', titlePre: this.$t('commons.edit'), panelInfo: { - pid: param.data.pid, id: param.data.id, name: param.data.name, nodeType: param.type diff --git a/frontend/src/views/system/datasource/DsForm.vue b/frontend/src/views/system/datasource/DsForm.vue index c8963f6941..e93c0794ef 100644 --- a/frontend/src/views/system/datasource/DsForm.vue +++ b/frontend/src/views/system/datasource/DsForm.vue @@ -155,7 +155,7 @@ { - this.isLoginStatu() || this.destroy() + this.timer = this.isLoginStatus() && setInterval(() => { + this.isLoginStatus() || this.destroy() try { _this.client && _this.client.send('heart detection') } catch (error) { @@ -41,12 +41,12 @@ class DeWebsocket { this.initialize() } - isLoginStatu() { + isLoginStatus() { return store.state && store.state.user && store.state.user.user && store.state.user.user.userId } connection() { - if (!this.isLoginStatu()) { + if (!this.isLoginStatus()) { return } const socket = new SockJS(this.ws_url + '?userId=' + store.state.user.user.userId) @@ -70,6 +70,7 @@ class DeWebsocket { } ).bind(this) } + subscribe() { this.channels.forEach(channel => { this.client.subscribe('/user/' + store.state.user.user.userId + channel.topic, res => { @@ -77,6 +78,7 @@ class DeWebsocket { }) }) } + disconnect() { this.client && this.client.disconnect() }