From 1bdbfaf3b3a85626dd10ce0edeb74768a1bda53b Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 29 Nov 2023 18:27:35 +0800 Subject: [PATCH 01/29] =?UTF-8?q?perf:=20=E8=AE=B8=E5=8F=AF=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/io/dataease/license/server/LicenseServer.java | 2 +- core/core-frontend/src/views/about/index.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/license/server/LicenseServer.java b/core/core-backend/src/main/java/io/dataease/license/server/LicenseServer.java index a268317e8e..69978d0abe 100644 --- a/core/core-backend/src/main/java/io/dataease/license/server/LicenseServer.java +++ b/core/core-backend/src/main/java/io/dataease/license/server/LicenseServer.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/license") public class LicenseServer implements LicenseApi { - private static final String product = "DataEase"; + private static final String product = "DataEase v2"; @Resource private CoreLicManage coreLicManage; diff --git a/core/core-frontend/src/views/about/index.vue b/core/core-frontend/src/views/about/index.vue index 3fd3c4b07e..a837d29507 100644 --- a/core/core-frontend/src/views/about/index.vue +++ b/core/core-frontend/src/views/about/index.vue @@ -90,7 +90,7 @@ const validateHandler = (param, success) => { } const getLicense = result => { if (result.status === 'valid') { - tipsSuffix.value = result.edition === 'Embedded' ? '套' : '个账号' + tipsSuffix.value = result?.license?.edition === 'Embedded' ? '套' : '个账号' } return { status: result.status, From 0ded6b371925c1c186613ad32a0aebad15c79475 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 29 Nov 2023 18:34:47 +0800 Subject: [PATCH 02/29] =?UTF-8?q?perf:=20=E9=9A=90=E8=97=8F=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index 6d3d203321..0ff807a3f1 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 6d3d203321dce09f2fee101af80345bd30536ced +Subproject commit 0ff807a3f1df3c373353ac8f67488e1cdab2ad66 From 1e40c280efcf1adf2b42e4d3969c9b9f1f63c009 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 29 Nov 2023 18:45:16 +0800 Subject: [PATCH 03/29] =?UTF-8?q?perf:=20=E9=9A=90=E8=97=8F=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index 0ff807a3f1..3ac39a121c 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 0ff807a3f1df3c373353ac8f67488e1cdab2ad66 +Subproject commit 3ac39a121cd415012d66c912ccd788ac1272aaf6 From 1afa7e612f034c5775dc45c73913bb842751fe23 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 29 Nov 2023 19:05:24 +0800 Subject: [PATCH 04/29] =?UTF-8?q?feat:=20=E8=AF=BB=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E6=9B=B4=E6=96=B0=E9=A2=91=E7=8E=87=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/server/DatasourceServer.java | 34 ++++++++++++++++++- .../io/dataease/job/sechedule/Schedular.java | 5 --- .../listener/DataSourceInitStartListener.java | 12 +++++++ .../system/manage/SysParameterManage.java | 4 +++ 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index 3e07e263b4..8ef8b3c598 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -33,14 +33,20 @@ import io.dataease.datasource.request.DatasourceRequest; import io.dataease.engine.constant.SQLConstants; import io.dataease.exception.DEException; import io.dataease.i18n.Translator; +import io.dataease.job.sechedule.CheckDsStatusJob; +import io.dataease.job.sechedule.ScheduleManager; import io.dataease.license.config.XpackInteract; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; +import io.dataease.system.dao.auto.entity.CoreSysSetting; import io.dataease.system.manage.CoreUserManage; import io.dataease.utils.*; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.TriggerKey; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -85,7 +91,8 @@ public class DatasourceServer implements DatasourceApi { @Resource private DatasetDataManage datasetDataManage; - + @Resource + private ScheduleManager scheduleManager; @Resource private CoreUserManage coreUserManage; @@ -605,6 +612,31 @@ public class DatasourceServer implements DatasourceApi { return validate(coreDatasource); } + public void addJob(List sysSettings) { + String type = "minute"; + String interval = "30"; + for (CoreSysSetting sysSetting : sysSettings) { + if (sysSetting.getPkey().equalsIgnoreCase("basic.dsExecuteTime")) { + type = sysSetting.getPval(); + } + if (sysSetting.getPkey().equalsIgnoreCase("basic.dsIntervalTime")) { + interval = sysSetting.getPval(); + } + } + String cron = ""; + switch (type) { + case "hour": + cron = "0 0 0/hour * * ? *".replace("hour", interval.toString()); + break; + default: + cron = "0 0/minute * * * ? *".replace("minute", interval.toString()); + } + scheduleManager.addOrUpdateCronJob(new JobKey("Datasource", "check_status"), + new TriggerKey("Datasource", "check_status"), + CheckDsStatusJob.class, + cron, new Date(System.currentTimeMillis()), null, new JobDataMap()); + } + private DatasourceDTO validate(CoreDatasource coreDatasource) { checkDatasourceStatus(coreDatasource); DatasourceDTO datasourceDTO = new DatasourceDTO(); diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java b/core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java index 4acfab638c..cb42755571 100644 --- a/core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java +++ b/core/core-backend/src/main/java/io/dataease/job/sechedule/Schedular.java @@ -18,9 +18,4 @@ public class Schedular { datasourceServer.updateStopJobStatus(); } - @QuartzScheduled(cron = "0 0/30 * * * ?") - public void updateDatasourceStatus() { - datasourceServer.updateDatasourceStatus(); - } - } diff --git a/core/core-backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java b/core/core-backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java index 72dbae8e67..ec8324d30d 100644 --- a/core/core-backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java +++ b/core/core-backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java @@ -6,6 +6,8 @@ import io.dataease.datasource.provider.CalciteProvider; import io.dataease.datasource.server.DatasourceServer; import io.dataease.datasource.server.DatasourceTaskServer; import io.dataease.datasource.server.EngineServer; +import io.dataease.system.dao.auto.entity.CoreSysSetting; +import io.dataease.system.manage.SysParameterManage; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.springframework.boot.context.event.ApplicationReadyEvent; @@ -29,6 +31,8 @@ public class DataSourceInitStartListener implements ApplicationListener coreSysSettings = sysParameterManage.groupList("basic."); + datasourceServer.addJob(coreSysSettings); + }catch (Exception e){ + e.printStackTrace(); + } + } diff --git a/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java b/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java index 4f9d477557..063757433e 100644 --- a/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java +++ b/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java @@ -2,6 +2,7 @@ package io.dataease.system.manage; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.dataease.api.system.vo.SettingItemVO; +import io.dataease.datasource.server.DatasourceServer; import io.dataease.license.config.XpackInteract; import io.dataease.system.dao.auto.entity.CoreSysSetting; import io.dataease.system.dao.auto.mapper.CoreSysSettingMapper; @@ -31,6 +32,8 @@ public class SysParameterManage { @Resource private ExtCoreSysSettingMapper extCoreSysSettingMapper; + @Resource + private DatasourceServer datasourceServer; public String singleVal(String key) { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -100,6 +103,7 @@ public class SysParameterManage { return sysSetting; }).collect(Collectors.toList()); extCoreSysSettingMapper.saveBatch(sysSettings); + datasourceServer.addJob(sysSettings); } From 23a3cbd5d0b4340d1c1a7edfc3524dfc647e20e6 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 30 Nov 2023 00:01:55 +0800 Subject: [PATCH 05/29] =?UTF-8?q?refactor:=20=E4=BD=BF=E7=94=A8=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=AD=E5=BF=83=E5=88=9B=E5=BB=BAUI=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-backend/pom.xml | 4 + .../constants/DataVisualizationConstants.java | 8 + .../template/manage/TemplateCenterManage.java | 63 ++++--- .../server/DataVisualizationServer.java | 2 + .../src/views/common/DeResourceTree.vue | 16 +- .../component/MarketPreviewV2.vue | 1 - .../component/TemplateMarketV2Item.vue | 11 +- .../src/views/template-market/index.vue | 155 +++++++++++++++--- .../src/views/workbranch/index.vue | 14 +- .../api/template/vo/MarketMetaDataVO.java | 11 ++ .../io/dataease/constant/CommonConstants.java | 9 + 11 files changed, 234 insertions(+), 60 deletions(-) diff --git a/core/core-backend/pom.xml b/core/core-backend/pom.xml index 202a279ec8..30230151fe 100644 --- a/core/core-backend/pom.xml +++ b/core/core-backend/pom.xml @@ -92,6 +92,10 @@ + + com.h2database + h2 + diff --git a/core/core-backend/src/main/java/io/dataease/commons/constants/DataVisualizationConstants.java b/core/core-backend/src/main/java/io/dataease/commons/constants/DataVisualizationConstants.java index 25acbfd475..19cc6e310c 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/constants/DataVisualizationConstants.java +++ b/core/core-backend/src/main/java/io/dataease/commons/constants/DataVisualizationConstants.java @@ -51,5 +51,13 @@ public class DataVisualizationConstants { public static final String COPY = "copy"; } + public static final class TEMPLATE_SOURCE { + //模板市场 + public static final String MARKET = "market"; + //模板管理 + public static final String MANAGE = "manage"; + //公共 + public static final String PUBLIC = "public"; + } } diff --git a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java index 451e4c08d6..31b9bc83b9 100644 --- a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java +++ b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateCenterManage.java @@ -1,5 +1,6 @@ package io.dataease.template.manage; +import com.mysql.cj.log.Log; import io.dataease.api.template.dto.TemplateManageDTO; import io.dataease.api.template.dto.TemplateManageFileDTO; import io.dataease.api.template.dto.TemplateMarketDTO; @@ -8,6 +9,7 @@ import io.dataease.api.template.response.*; import io.dataease.api.template.vo.MarketApplicationSpecVO; import io.dataease.api.template.vo.MarketMetaDataVO; import io.dataease.api.template.vo.TemplateCategoryVO; +import io.dataease.constant.CommonConstants; import io.dataease.exception.DEException; import io.dataease.operation.manage.CoreOptRecentManage; import io.dataease.system.manage.SysParameterManage; @@ -71,9 +73,14 @@ public class TemplateCenterManage { } private MarketTemplateV2BaseResponse templateQuery(Map templateParams) { - String result = marketGet(templateParams.get("template.url") + POSTS_API_V2, null); - MarketTemplateV2BaseResponse postsResult = JsonUtil.parseObject(result, MarketTemplateV2BaseResponse.class); - return postsResult; + try { + String result = marketGet(templateParams.get("template.url") + POSTS_API_V2, null); + MarketTemplateV2BaseResponse postsResult = JsonUtil.parseObject(result, MarketTemplateV2BaseResponse.class); + return postsResult; + } catch (Exception e) { + LogUtil.error(e); + return null; + } } public MarketBaseResponse searchTemplate() { @@ -81,7 +88,7 @@ public class TemplateCenterManage { Map templateParams = sysParameterManage.groupVal("template."); return baseResponseV2Trans(templateQuery(templateParams), searchTemplateFromManage(), templateParams.get("template.url")); } catch (Exception e) { - DEException.throwException(e); + LogUtil.error(e); } return null; } @@ -124,7 +131,7 @@ public class TemplateCenterManage { Map templateParams = sysParameterManage.groupVal("template."); return basePreviewResponseV2Trans(templateQuery(templateParams), searchTemplateFromManage(), templateParams.get("template.url")); } catch (Exception e) { - DEException.throwException(e); + LogUtil.error(e); } return null; } @@ -133,12 +140,14 @@ public class TemplateCenterManage { Map useTime = coreOptRecentManage.findTemplateRecentUseTime(); Map categoriesMap = getCategoriesBaseV2(); List contents = new ArrayList<>(); - v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { - MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); - if ("Y".equalsIgnoreCase(spec.getSuggest())) { - contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()), spec.getTemplateType(), useTime.get(spec.getReadmeName()), "Y")); - } - }); + if (v2BaseResponse != null) { + v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { + MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); + if ("Y".equalsIgnoreCase(spec.getSuggest())) { + contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()), spec.getTemplateType(), useTime.get(spec.getReadmeName()), "Y")); + } + }); + } // 最近使用排序 Collections.sort(contents); return new MarketBaseResponse(url, contents); @@ -147,10 +156,16 @@ public class TemplateCenterManage { private MarketBaseResponse baseResponseV2Trans(MarketTemplateV2BaseResponse v2BaseResponse, List contents, String url) { Map useTime = coreOptRecentManage.findTemplateRecentUseTime(); Map categoriesMap = getCategoriesBaseV2(); - v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { - MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); - contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()), spec.getTemplateType(), useTime.get(spec.getReadmeName()), spec.getSuggest())); + contents.stream().forEach(templateMarketDTO -> { + Long recentUseTime = useTime.get(templateMarketDTO.getId()); + templateMarketDTO.setRecentUseTime(recentUseTime == null ? 0 : recentUseTime); }); + if (v2BaseResponse != null) { + v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { + MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); + contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()), spec.getTemplateType(), useTime.get(spec.getReadmeName()), spec.getSuggest())); + }); + } // 最近使用排序 Collections.sort(contents); return new MarketBaseResponse(url, contents); @@ -167,12 +182,14 @@ public class TemplateCenterManage { categoriesMap.forEach((key, value) -> { if (!"全部".equalsIgnoreCase(value)) { List contents = new ArrayList<>(); - v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { - MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); - if (key.equalsIgnoreCase(spec.getLabel())) { - contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()), spec.getTemplateType(), useTime.get(spec.getReadmeName()), spec.getSuggest())); - } - }); + if (v2BaseResponse != null) { + v2BaseResponse.getItems().stream().forEach(marketTemplateV2ItemResult -> { + MarketApplicationSpecVO spec = marketTemplateV2ItemResult.getApplication().getSpec(); + if (key.equalsIgnoreCase(spec.getLabel())) { + contents.add(new TemplateMarketDTO(spec.getReadmeName(), spec.getDisplayName(), spec.getScreenshots().get(0).getUrl(), spec.getLinks().get(0).getUrl(), categoriesMap.get(spec.getLabel()), spec.getTemplateType(), useTime.get(spec.getReadmeName()), spec.getSuggest())); + } + }); + } manageContents.stream().forEach(templateMarketDTO -> { if (value.equalsIgnoreCase(templateMarketDTO.getMainCategory())) { contents.add(templateMarketDTO); @@ -194,8 +211,7 @@ public class TemplateCenterManage { public List getCategoriesObject() { List result = getCategoriesV2(); - result.add(0, new MarketMetaDataVO("suggest", "推荐")); - result.add(0, new MarketMetaDataVO("recent", "最近使用")); + result.add(0, new MarketMetaDataVO("recent", "最近使用", "public")); return result; } @@ -209,13 +225,14 @@ public class TemplateCenterManage { List allCategories = new ArrayList<>(); List manageCategories = templateManageMapper.findBaseTemplateList("folder"); List manageCategoriesTrans = manageCategories.stream() - .map(templateCategory -> new MarketMetaDataVO(templateCategory.getId(), templateCategory.getName())) + .map(templateCategory -> new MarketMetaDataVO(templateCategory.getId(), templateCategory.getName(), CommonConstants.TEMPLATE_SOURCE.MANAGE)) .collect(Collectors.toList()); try { Map templateParams = sysParameterManage.groupVal("template."); String resultStr = marketGet(templateParams.get("template.url") + TEMPLATE_META_DATA_URL, null); MarketMetaDataBaseResponse metaData = JsonUtil.parseObject(resultStr, MarketMetaDataBaseResponse.class); allCategories.addAll(metaData.getLabels()); + allCategories.add(0, new MarketMetaDataVO("suggest", "推荐")); } catch (Exception e) { LogUtil.error("模板市场分类获取错误", e); } diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java index 188a83c7d4..ba43f7c297 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java @@ -242,6 +242,8 @@ public class DataVisualizationServer implements DataVisualizationApi { dynamicData = visualizationTemplate.getDynamicData(); name = visualizationTemplate.getName(); dvType = visualizationTemplate.getDvType(); + // 模板市场记录 + coreOptRecentManage.saveOpt(request.getTemplateId(), OptConstants.OPT_RESOURCE_TYPE.TEMPLATE,OptConstants.OPT_TYPE.NEW); } else if (DataVisualizationConstants.NEW_PANEL_FROM.NEW_OUTER_TEMPLATE.equals(newFrom)) { templateStyle = request.getCanvasStyleData(); templateData = request.getComponentData(); diff --git a/core/core-frontend/src/views/common/DeResourceTree.vue b/core/core-frontend/src/views/common/DeResourceTree.vue index 2c42687aad..c77beb8d63 100644 --- a/core/core-frontend/src/views/common/DeResourceTree.vue +++ b/core/core-frontend/src/views/common/DeResourceTree.vue @@ -450,17 +450,17 @@ defineExpose({ @finish="resourceOptFinish" ref="resourceGroupOpt" /> - - - + - + + + diff --git a/core/core-frontend/src/views/template-market/component/MarketPreviewV2.vue b/core/core-frontend/src/views/template-market/component/MarketPreviewV2.vue index 9ad45f6d98..4a936cd2f9 100644 --- a/core/core-frontend/src/views/template-market/component/MarketPreviewV2.vue +++ b/core/core-frontend/src/views/template-market/component/MarketPreviewV2.vue @@ -98,7 +98,6 @@ {{ t('visualization.apply_this_template') }} diff --git a/core/core-frontend/src/views/template-market/component/TemplateMarketV2Item.vue b/core/core-frontend/src/views/template-market/component/TemplateMarketV2Item.vue index bfac0cc847..e0d32eeff3 100644 --- a/core/core-frontend/src/views/template-market/component/TemplateMarketV2Item.vue +++ b/core/core-frontend/src/views/template-market/component/TemplateMarketV2Item.vue @@ -2,7 +2,10 @@
- + {{ template.title }} @@ -33,6 +36,9 @@ const props = defineProps({ return {} } }, + curPosition: { + type: String + }, baseUrl: { type: String }, @@ -130,4 +136,7 @@ const templateInnerPreview = e => { color: deepskyblue; cursor: pointer; } +.create-area { + bottom: -38px !important; +} diff --git a/core/core-frontend/src/views/template-market/index.vue b/core/core-frontend/src/views/template-market/index.vue index 48e14c0c4e..b106702baa 100644 --- a/core/core-frontend/src/views/template-market/index.vue +++ b/core/core-frontend/src/views/template-market/index.vue @@ -3,14 +3,47 @@ class="template-outer-body" :class="{ 'template-outer-body-padding': outPaddingState }" v-loading="state.loading" + v-show="state.initReady" > - + + + + {{ state.curTemplate.title }} + + 上一个 + 下一个 + {{ t('visualization.apply_this_template') }} + + + + + + + + + + + {{ title }} @@ -30,7 +63,7 @@ /> - + @@ -54,7 +86,7 @@ @@ -122,24 +155,59 @@ import { useCache } from '@/hooks/web/useCache' import TemplateMarketV2Item from '@/views/template-market/component/TemplateMarketV2Item.vue' import MarketPreviewV2 from '@/views/template-market/component/MarketPreviewV2.vue' import { propTypes } from '@/utils/propTypes' +import { imgUrlTrans } from '@/utils/imgUtils' const { t } = useI18n() const { wsCache } = useCache() const route = useRoute() -const previewModel = ref(false) -const title = ref('模版市场') +// full 正常展示 marketPreview 模板中心预览 createPreview 创建界面预览 +const previewModel = ref('full') +const emits = defineEmits(['close']) + +const close = () => { + emits('close') +} + +const title = computed(() => (state.curPosition === 'branch' ? '模板中心' : '使用模版新建')) + +const categoriesComputed = computed(() => { + if (state.templateSourceType === 'all') { + return state.marketTabs + } else { + return state.marketTabs.filter( + category => category.source === 'public' || category.source === state.templateSourceType + ) + } +}) + +const curTemplateImg = computed(() => { + if ( + state.curTemplate.thumbnail.indexOf('http') > -1 || + state.curTemplate.thumbnail.indexOf('static-resource') > -1 + ) { + return imgUrlTrans(state.curTemplate.thumbnail) + } else { + return imgUrlTrans(state.baseUrl + state.curTemplate.thumbnail) + } +}) const outPaddingState = computed(() => { - return state.curPosition === 'branch' && !previewModel.value + return state.curPosition === 'branch' && previewModel.value !== 'marketPreview' }) const optInit = params => { + state.initReady = false state.curPosition = params.curPosition state.templateType = params.templateType + previewModel.value = 'full' state.pid = params.pid + nextTick(() => { + state.initReady = true + }) } const state = reactive({ + initReady: true, curPosition: 'branch', pid: null, treeProps: { @@ -183,7 +251,7 @@ const state = reactive({ templateSpan: '25%', previewVisible: false, templatePreviewId: '', - marketTabs: null, + marketTabs: [], marketActiveTab: null, searchText: null, dvCreateForm: { @@ -203,6 +271,9 @@ const state = reactive({ folderSelectShow: false, baseUrl: 'https://dataease.io/templates', currentMarketTemplateShowList: [], + curTemplateShowFilter: [], + curTemplateIndex: 0, + curTemplate: null, networkStatus: true, rule: { name: [ @@ -252,7 +323,7 @@ const nodeClick = data => { initTemplateShow() } const closePreview = () => { - previewModel.value = false + previewModel.value = 'full' } const initMarketTemplate = async () => { @@ -294,6 +365,20 @@ const normalizer = node => { } } +const preOne = () => { + if (state.curTemplateIndex > 0) { + state.curTemplateIndex-- + state.curTemplate = state.curTemplateShowFilter[state.curTemplateIndex] + } +} + +const nextOne = () => { + if (state.curTemplateIndex < state.curTemplateShowFilter.length - 1) { + state.curTemplateIndex++ + state.curTemplate = state.curTemplateShowFilter[state.curTemplateIndex] + } +} + const templateApply = template => { state.curApplyTemplate = template state.dvCreateForm.name = template.title @@ -305,7 +390,6 @@ const templateApply = template => { state.dvCreateForm.newFrom = 'new_inner_template' state.dvCreateForm.templateId = template.id } - apply() } @@ -317,6 +401,7 @@ const apply = () => { state.loading = true decompression(state.dvCreateForm) .then(response => { + state.curApplyTemplate.recentUseTime = Date.now() state.loading = false const templateData = response.data // do create @@ -383,14 +468,19 @@ const templateShow = templateItem => { } const templatePreview = previewId => { - state.templatePreviewId = previewId - previewModel.value = true + if (state.curPosition === 'branch') { + // 模版中心模式 + state.templatePreviewId = previewId + previewModel.value = 'marketPreview' + } else { + state.curTemplateShowFilter = state.currentMarketTemplateShowList.filter(ele => ele.showFlag) + state.curTemplateIndex = state.curTemplateShowFilter.findIndex(temp => temp.id === previewId) + state.curTemplate = state.curTemplateShowFilter[state.curTemplateIndex] + previewModel.value = 'createPreview' + } } onMounted(() => { - if (route.params.add === '1') { - title.value = '使用模版新建' - } previewInit() initMarketTemplate() const erd = elementResizeDetectorMaker() @@ -522,7 +612,30 @@ defineExpose({ } .custom-divider-line { - height: 30px; + height: 16px; + margin-top: 6px; +} + +.custom-market-icon { + font-size: 20px; + margin-top: 4px; + cursor: pointer; +} + +.custom-back-icon { + font-size: 20px; + cursor: pointer; + margin-right: 8px; +} + +.img-main-create { + display: inherit; + justify-content: center; + width: 100%; + background: #0f1114; + overflow-x: auto; + overflow-y: hidden; + height: 100%; } diff --git a/core/core-frontend/src/views/workbranch/index.vue b/core/core-frontend/src/views/workbranch/index.vue index b886327fd9..cb447cb1cf 100644 --- a/core/core-frontend/src/views/workbranch/index.vue +++ b/core/core-frontend/src/views/workbranch/index.vue @@ -13,6 +13,7 @@ import TemplateBranchItem from '@/views/workbranch/TemplateBranchItem.vue' import { ElMessage } from 'element-plus-secondary' import { decompression } from '@/api/visualization/dataVisualization' import { useCache } from '@/hooks/web/useCache' +import DeResourceCreateOptV2 from '@/views/common/DeResourceCreateOptV2.vue' const userStore = useUserStoreWithOut() const interactiveStore = interactiveStoreWithOut() const permissionStore = usePermissionStoreWithOut() @@ -23,6 +24,7 @@ const busiCountCardList = ref([]) const { wsCache } = useCache() const { push } = useRouter() const router = useRouter() +const resourceCreateOpt = ref(null) const quickCreationList = shallowRef([ { @@ -225,12 +227,11 @@ const toTemplateMarket = () => { } const toTemplateMarketAdd = () => { - push({ - name: 'template-market', - params: { - add: '1' - } - }) + const params = { + curPosition: 'branchCreate', + templateType: 'all' + } + resourceCreateOpt.value.optInit(params) } fillCardInfo() @@ -351,6 +352,7 @@ initMarketTemplate()
+ diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java index 1f0bc3f2f0..2f3471c5f6 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java @@ -1,5 +1,6 @@ package io.dataease.api.template.vo; +import io.dataease.constant.CommonConstants; import lombok.Data; import lombok.NoArgsConstructor; @@ -15,9 +16,19 @@ public class MarketMetaDataVO { private String value; private String label; + // market 模板中心 manage 模版管理 public 公共 + private String source = CommonConstants.TEMPLATE_SOURCE.MARKET; + public MarketMetaDataVO(String value, String label) { this.label = label; this.value = value; this.slug = value; } + + public MarketMetaDataVO(String value, String label,String source) { + this.label = label; + this.value = value; + this.slug = value; + this.source = source; + } } diff --git a/sdk/common/src/main/java/io/dataease/constant/CommonConstants.java b/sdk/common/src/main/java/io/dataease/constant/CommonConstants.java index 652fa25c28..419a92ef37 100644 --- a/sdk/common/src/main/java/io/dataease/constant/CommonConstants.java +++ b/sdk/common/src/main/java/io/dataease/constant/CommonConstants.java @@ -79,4 +79,13 @@ public class CommonConstants { public static final String CHART = "dataset"; } + + public static final class TEMPLATE_SOURCE { + //模板市场 + public static final String MARKET = "market"; + //模板管理 + public static final String MANAGE = "manage"; + //公共 + public static final String PUBLIC = "public"; + } } From 60bfa919bcfc97d748bdb8975c2290ba9551d157 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 30 Nov 2023 09:29:21 +0800 Subject: [PATCH 06/29] =?UTF-8?q?feat:=20=E8=AF=BB=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E6=9B=B4=E6=96=B0=E9=A2=91=E7=8E=87=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../job/sechedule/CheckDsStatusJob.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java diff --git a/core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java b/core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java new file mode 100644 index 0000000000..71c63b3b70 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/job/sechedule/CheckDsStatusJob.java @@ -0,0 +1,27 @@ +package io.dataease.job.sechedule; + + +import io.dataease.datasource.server.DatasourceServer; +import io.dataease.utils.CommonBeanFactory; +import io.dataease.utils.LogUtil; +import jakarta.annotation.Resource; +import org.quartz.*; +import org.springframework.stereotype.Component; + +@Component +public class CheckDsStatusJob implements Job { + + @Resource + private DatasourceServer datasourceServer; + + public CheckDsStatusJob() { + datasourceServer = (DatasourceServer) CommonBeanFactory.getBean(DatasourceServer.class); + } + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + LogUtil.info("Begin to check ds status..."); + datasourceServer.updateDatasourceStatus(); + } + +} From 18a8f9ff8f52dbfa7ec17b8bad395e7759c82603 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Thu, 30 Nov 2023 11:17:29 +0800 Subject: [PATCH 07/29] =?UTF-8?q?fix:=20=E9=9D=A2=E7=A7=AF=E5=9B=BE?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=B8=90=E5=8F=98=E5=90=8E=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E9=9A=8F=E5=A4=A7=E5=B0=8F=E6=94=B9=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/components/js/panel/charts/line/area.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts index 4b2b6b3181..777e024bfe 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/line/area.ts @@ -176,8 +176,16 @@ export class Area extends G2PlotChartView { const areaColors = [...colors, ...colors] let areaStyle if (customAttr.basicStyle.gradient) { - areaStyle = () => { - const ele = areaColors.shift() + const colorMap = new Map() + areaStyle = item => { + let ele + const key = `${item.field}-${item.category}` + if (colorMap.has(key)) { + ele = colorMap.get(key) + } else { + ele = areaColors.shift() + colorMap.set(key, ele) + } if (ele) { return { fill: setGradientColor(hexColorToRGBA(ele, alpha), true, 270) From d61bbef03fba81dbfc96903dd95d67def4d2c925 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 30 Nov 2023 14:02:44 +0800 Subject: [PATCH 08/29] =?UTF-8?q?refactor:=20=E5=8D=87=E7=BA=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-backend/pom.xml | 2 +- core/core-frontend/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 4 ++-- sdk/api/api-base/pom.xml | 2 +- sdk/api/api-permissions/pom.xml | 2 +- sdk/api/pom.xml | 2 +- sdk/common/pom.xml | 2 +- sdk/distributed/pom.xml | 2 +- sdk/pom.xml | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/core-backend/pom.xml b/core/core-backend/pom.xml index 202a279ec8..e86dbf9911 100644 --- a/core/core-backend/pom.xml +++ b/core/core-backend/pom.xml @@ -5,7 +5,7 @@ core io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/core/core-frontend/pom.xml b/core/core-frontend/pom.xml index ad838cb91a..a0a15e958e 100644 --- a/core/core-frontend/pom.xml +++ b/core/core-frontend/pom.xml @@ -5,7 +5,7 @@ core io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/core/pom.xml b/core/pom.xml index 269dc444c1..2d279d3294 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -5,7 +5,7 @@ dataease io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/pom.xml b/pom.xml index 90b930b54e..5ce6a3e8cf 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.dataease dataease - ${dataease.version} + 2.1.0 pom @@ -13,7 +13,7 @@ - 2.0.0 + 2.1.0 17 UTF-8 2022.0.0.0-RC1 diff --git a/sdk/api/api-base/pom.xml b/sdk/api/api-base/pom.xml index b2e74b6717..b8de53fce1 100644 --- a/sdk/api/api-base/pom.xml +++ b/sdk/api/api-base/pom.xml @@ -5,7 +5,7 @@ api io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/sdk/api/api-permissions/pom.xml b/sdk/api/api-permissions/pom.xml index 6518305373..babfca223f 100644 --- a/sdk/api/api-permissions/pom.xml +++ b/sdk/api/api-permissions/pom.xml @@ -5,7 +5,7 @@ api io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/sdk/api/pom.xml b/sdk/api/pom.xml index fd72db054b..ff4a2c611b 100644 --- a/sdk/api/pom.xml +++ b/sdk/api/pom.xml @@ -5,7 +5,7 @@ sdk io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/sdk/common/pom.xml b/sdk/common/pom.xml index 509c22dbb5..752247c08c 100644 --- a/sdk/common/pom.xml +++ b/sdk/common/pom.xml @@ -5,7 +5,7 @@ sdk io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/sdk/distributed/pom.xml b/sdk/distributed/pom.xml index 6bfacea1f7..5c4bdb0b85 100644 --- a/sdk/distributed/pom.xml +++ b/sdk/distributed/pom.xml @@ -5,7 +5,7 @@ sdk io.dataease - 2.0.0 + 2.1.0 4.0.0 diff --git a/sdk/pom.xml b/sdk/pom.xml index 7908069836..25ff3e080a 100644 --- a/sdk/pom.xml +++ b/sdk/pom.xml @@ -5,7 +5,7 @@ dataease io.dataease - 2.0.0 + 2.1.0 4.0.0 From 03c27f7e10fe95cf8710bc267e8f54738a1d81d0 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 30 Nov 2023 17:04:26 +0800 Subject: [PATCH 09/29] =?UTF-8?q?perf:=20=E9=A3=9E=E4=B9=A6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5=E9=9D=A2=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/system/common/InfoTemplate.vue | 74 ++++++++++++++++--- de-xpack | 2 +- .../io/dataease/api/lark/api/LarkApi.java | 4 + .../api/lark/dto/LarkEnableEditor.java | 11 +++ 4 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/lark/dto/LarkEnableEditor.java diff --git a/core/core-frontend/src/views/system/common/InfoTemplate.vue b/core/core-frontend/src/views/system/common/InfoTemplate.vue index 4dc05b29de..0d8eeb3dce 100644 --- a/core/core-frontend/src/views/system/common/InfoTemplate.vue +++ b/core/core-frontend/src/views/system/common/InfoTemplate.vue @@ -1,6 +1,6 @@