From 372b747bd2197b1cfadfbef9d14e4ed6f5c59892 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Mon, 20 Nov 2023 19:51:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AF=B9=E6=8E=A5V2=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E5=B8=82=E5=9C=BA=E6=AD=A3=E5=BC=8F=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/manage/TemplateMarketManage.java | 63 ++- .../server/DataVisualizationServer.java | 4 +- .../main/resources/application-standalone.yml | 2 +- .../src/assets/svg/dv-use-template.svg | 3 + .../src/views/common/DeResourceTree.vue | 45 +- .../component/MarketPreview.vue | 173 ++++---- .../component/TemplateMarketItem.vue | 6 +- .../src/views/template-market/index.vue | 377 +++++++++++++++- .../src/views/template-market/market.vue | 414 ------------------ .../api/template/dto/TemplateMarketDTO.java | 13 + .../template/response/MarketBaseResponse.java | 2 + .../response/MarketMetaDataBaseResponse.java | 21 + .../MarketTemplateV2BaseResponse.java | 16 + .../response/MarketTemplateV2ItemResult.java | 15 + .../vo/MarketApplicationSpecLinkVO.java | 16 + ...MarketApplicationSpecScreenshotBaseVO.java | 13 + .../template/vo/MarketApplicationSpecVO.java | 30 ++ .../api/template/vo/MarketApplicationVO.java | 13 + .../api/template/vo/MarketCategoryVO.java | 6 + .../api/template/vo/MarketMetaDataVO.java | 15 + .../api/template/vo/MarketMetasVO.java | 6 + 21 files changed, 719 insertions(+), 534 deletions(-) create mode 100644 core/core-frontend/src/assets/svg/dv-use-template.svg delete mode 100644 core/core-frontend/src/views/template-market/market.vue create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java diff --git a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java index fbfbd4b7c4..4acc7b8c34 100644 --- a/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java +++ b/core/core-backend/src/main/java/io/dataease/template/manage/TemplateMarketManage.java @@ -1,24 +1,22 @@ package io.dataease.template.manage; -import com.fasterxml.jackson.core.type.TypeReference; import io.dataease.api.template.dto.TemplateManageFileDTO; import io.dataease.api.template.dto.TemplateMarketDTO; -import io.dataease.api.template.request.TemplateMarketSearchRequest; -import io.dataease.api.template.response.MarketBaseResponse; -import io.dataease.api.template.response.MarketCategoryBaseResponse; -import io.dataease.api.template.response.MarketTemplateBaseResponse; +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.exception.DEException; import io.dataease.system.manage.SysParameterManage; import io.dataease.utils.HttpClientConfig; import io.dataease.utils.HttpClientUtil; import io.dataease.utils.JsonUtil; -import io.swagger.v3.core.util.Json; import jakarta.annotation.Resource; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -31,8 +29,12 @@ import java.util.stream.Collectors; public class TemplateMarketManage { private final static String POSTS_API = "/api/content/posts?page=0&size=2000"; + + private final static String POSTS_API_V2 = "/apis/api.store.halo.run/v1alpha1/applications?keyword=&priceMode=&sort=latestReleaseTimestamp%2Cdesc&type=THEME&deVersion=V2&templateType=&label=&page=1&size=2000"; private final static String CATEGORIES_API = "/api/content/categories"; + private final static String TEMPLATE_META_DATA_URL = "/upload/meta_data.json"; + @Resource private SysParameterManage sysParameterManage; @@ -44,7 +46,7 @@ public class TemplateMarketManage { if (StringUtils.isNotEmpty(templateUrl)) { String sufUrl = sysParameterManage.groupVal("template.").get("template.url"); String templateInfo = HttpClientUtil.get(sufUrl + templateUrl, null); - return JsonUtil.parseObject(templateInfo,TemplateManageFileDTO.class); + return JsonUtil.parseObject(templateInfo, TemplateManageFileDTO.class); } else { return null; } @@ -62,7 +64,29 @@ public class TemplateMarketManage { public MarketBaseResponse searchTemplate() { try { - Map templateParams = sysParameterManage.groupVal("template."); + Map templateParams = sysParameterManage.groupVal("template."); + String result = marketGet(templateParams.get("template.url") + POSTS_API_V2, null); + MarketTemplateV2BaseResponse postsResult = JsonUtil.parseObject(result, MarketTemplateV2BaseResponse.class); + return baseResponseV2Trans(postsResult, templateParams.get("template.url")); + } catch (Exception e) { + DEException.throwException(e); + } + return null; + } + + private MarketBaseResponse baseResponseV2Trans(MarketTemplateV2BaseResponse v2BaseResponse, String url) { + Map categoriesMap = getCategoriesBaseV2(); + List contents = new ArrayList<>(); + 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()))); + }); + return new MarketBaseResponse(url, contents); + } + + public MarketBaseResponse searchTemplateV1() { + try { + Map templateParams = sysParameterManage.groupVal("template."); String result = marketGet(templateParams.get("template.url") + POSTS_API, templateParams.get("template.accessKey")); MarketTemplateBaseResponse postsResult = JsonUtil.parseObject(result, MarketTemplateBaseResponse.class); MarketBaseResponse response = new MarketBaseResponse(templateParams.get("template.url"), postsResult.getData().getContent()); @@ -73,8 +97,8 @@ public class TemplateMarketManage { return null; } - public List getCategories() { - Map templateParams = sysParameterManage.groupVal("template."); + public List getCategoriesV1() { + Map templateParams = sysParameterManage.groupVal("template."); String resultStr = marketGet(templateParams.get("template.url") + CATEGORIES_API, templateParams.get("template.accessKey")); MarketCategoryBaseResponse categoryBaseResponse = JsonUtil.parseObject(resultStr, MarketCategoryBaseResponse.class); List categories = categoryBaseResponse.getData(); @@ -85,4 +109,23 @@ public class TemplateMarketManage { } } + + public List getCategories() { + return getCategoriesV2().stream().map(MarketMetaDataVO::getLabel) + .collect(Collectors.toList()); + } + + public Map getCategoriesBaseV2() { + Map categories = getCategoriesV2().stream() + .collect(Collectors.toMap(MarketMetaDataVO::getSlug, MarketMetaDataVO::getLabel)); + return categories; + } + + public List getCategoriesV2() { + Map templateParams = sysParameterManage.groupVal("template."); + String resultStr = marketGet(templateParams.get("template.url") + TEMPLATE_META_DATA_URL, null); + MarketMetaDataBaseResponse metaData = JsonUtil.parseObject(resultStr, MarketMetaDataBaseResponse.class); + List categories = metaData.getLabels(); + return categories; + } } 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 b64f6410a0..a4474aeb86 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 @@ -255,8 +255,8 @@ public class DataVisualizationServer implements DataVisualizationApi { templateData = templateFileInfo.getComponentData(); dynamicData = templateFileInfo.getDynamicData(); staticResource = templateFileInfo.getStaticResource(); - name = request.getName(); - dvType = request.getType(); + name = templateFileInfo.getName(); + dvType = templateFileInfo.getDvType(); } // 解析动态数据 Map dynamicDataMap = JsonUtil.parseObject(dynamicData, Map.class); diff --git a/core/core-backend/src/main/resources/application-standalone.yml b/core/core-backend/src/main/resources/application-standalone.yml index 87971ae75d..44c824b268 100644 --- a/core/core-backend/src/main/resources/application-standalone.yml +++ b/core/core-backend/src/main/resources/application-standalone.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://localhost:3306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false + url: jdbc:mysql://localhost:3306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: 123456 messages: diff --git a/core/core-frontend/src/assets/svg/dv-use-template.svg b/core/core-frontend/src/assets/svg/dv-use-template.svg new file mode 100644 index 0000000000..cae26306a8 --- /dev/null +++ b/core/core-frontend/src/assets/svg/dv-use-template.svg @@ -0,0 +1,3 @@ + + + diff --git a/core/core-frontend/src/views/common/DeResourceTree.vue b/core/core-frontend/src/views/common/DeResourceTree.vue index c03c8f51aa..4f0edce937 100644 --- a/core/core-frontend/src/views/common/DeResourceTree.vue +++ b/core/core-frontend/src/views/common/DeResourceTree.vue @@ -101,15 +101,19 @@ const state = reactive({ templateCreatePid: 0 }) +const dvSvgType = computed(() => + curCanvasType.value === 'dashboard' ? 'dv-dashboard-spine' : 'dv-screen-spine' +) + state.resourceTypeList = [ { - label: newResourceLabel, - svgName: curCanvasType.value === 'dashboard' ? 'dv-dashboard-spine' : 'dv-screen-spine', + label: '空白新建', + svgName: dvSvgType.value, command: 'newLeaf' }, { - label: '从模版新建', - svgName: curCanvasType.value === 'dashboard' ? 'dv-dashboard-spine' : 'dv-screen-spine', + label: '使用模版新建', + svgName: 'dv-use-template', command: 'newFromTemplate' }, { @@ -247,7 +251,7 @@ const addOperation = ( window.open(baseUrl, '_blank') } } else if (cmd === 'newFromTemplate') { - state.templateCreatePid = data.id + state.templateCreatePid = data?.id // newFromTemplate resourceCreateOpt.value.optInit() } else { @@ -337,11 +341,28 @@ defineExpose({ - - + + + - + + + + diff --git a/core/core-frontend/src/views/template-market/component/MarketPreview.vue b/core/core-frontend/src/views/template-market/component/MarketPreview.vue index 146d4b04a6..dcb9c6e425 100644 --- a/core/core-frontend/src/views/template-market/component/MarketPreview.vue +++ b/core/core-frontend/src/views/template-market/component/MarketPreview.vue @@ -1,96 +1,98 @@ diff --git a/core/core-frontend/src/views/template-market/index.vue b/core/core-frontend/src/views/template-market/index.vue index 0f35a0f8bf..cd1a58a484 100644 --- a/core/core-frontend/src/views/template-market/index.vue +++ b/core/core-frontend/src/views/template-market/index.vue @@ -1,35 +1,382 @@ - diff --git a/core/core-frontend/src/views/template-market/market.vue b/core/core-frontend/src/views/template-market/market.vue deleted file mode 100644 index 6809c4cd9e..0000000000 --- a/core/core-frontend/src/views/template-market/market.vue +++ /dev/null @@ -1,414 +0,0 @@ - - - - - diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java index 1e2e1d0991..1505228cc3 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/dto/TemplateMarketDTO.java @@ -3,10 +3,15 @@ package io.dataease.api.template.dto; import io.dataease.api.template.vo.MarketCategoryVO; import io.dataease.api.template.vo.MarketMetasVO; import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.ArrayUtils; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Data +@NoArgsConstructor public class TemplateMarketDTO { private String id; private String title; @@ -18,4 +23,12 @@ public class TemplateMarketDTO { private Boolean showFlag = true; private List categories; private MarketMetasVO metas; + + public TemplateMarketDTO(String id, String title,String themeRepo,String templateUrl,String categoryName) { + this.id = id; + this.title = title; + this.categories = Arrays.asList(new MarketCategoryVO(categoryName),new MarketCategoryVO("全部")); + this.metas = new MarketMetasVO(templateUrl); + this.thumbnail = themeRepo; + } } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java index 449befa5c9..bbd5381917 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketBaseResponse.java @@ -23,4 +23,6 @@ public class MarketBaseResponse { this.contents = contents; } + + } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java new file mode 100644 index 0000000000..1ac58140d9 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketMetaDataBaseResponse.java @@ -0,0 +1,21 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.vo.MarketMetaDataVO; +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketMetaDataBaseResponse { + + private List deVersion; + + private List templateTypes; + + private List labels; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java new file mode 100644 index 0000000000..24cde5b02d --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2BaseResponse.java @@ -0,0 +1,16 @@ +package io.dataease.api.template.response; + +import lombok.Data; + +import java.util.List; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:41 + */ +@Data +public class MarketTemplateV2BaseResponse { + + private List items; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java new file mode 100644 index 0000000000..ca07c4889e --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/response/MarketTemplateV2ItemResult.java @@ -0,0 +1,15 @@ +package io.dataease.api.template.response; + +import io.dataease.api.template.vo.MarketApplicationVO; +import lombok.Data; + +/** + * @author : WangJiaHao + * @date : 2023/11/17 13:41 + */ +@Data +public class MarketTemplateV2ItemResult { + + private MarketApplicationVO application; + +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java new file mode 100644 index 0000000000..fbaf7ff794 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecLinkVO.java @@ -0,0 +1,16 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationSpecLinkVO { + + private String name; + + private String url; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java new file mode 100644 index 0000000000..33c808c426 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecScreenshotBaseVO.java @@ -0,0 +1,13 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationSpecScreenshotBaseVO { + private String url; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java new file mode 100644 index 0000000000..f30e1d73ac --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationSpecVO.java @@ -0,0 +1,30 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationSpecVO { + + private String displayName; + + private String type; + + private String deVersion; + + private String templateType; + + private String label; + + private String readmeName; + + private List screenshots; + + private List links; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java new file mode 100644 index 0000000000..22ac987851 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketApplicationVO.java @@ -0,0 +1,13 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketApplicationVO { + private MarketApplicationSpecVO spec; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java index 3c086909d7..6552cec19c 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketCategoryVO.java @@ -1,6 +1,7 @@ package io.dataease.api.template.vo; import lombok.Data; +import lombok.NoArgsConstructor; /** * Author: wangjiahao @@ -8,8 +9,13 @@ import lombok.Data; * Description: */ @Data +@NoArgsConstructor public class MarketCategoryVO { private String id; private String name; private String slug; + + public MarketCategoryVO(String name) { + this.name = name; + } } 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 new file mode 100644 index 0000000000..b1be8f3bf3 --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetaDataVO.java @@ -0,0 +1,15 @@ +package io.dataease.api.template.vo; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketMetaDataVO { + private String slug; + private String value; + private String label; +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java index d568615ba2..1a9f86e44c 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/template/vo/MarketMetasVO.java @@ -1,6 +1,7 @@ package io.dataease.api.template.vo; import lombok.Data; +import lombok.NoArgsConstructor; /** * Author: wangjiahao @@ -8,6 +9,11 @@ import lombok.Data; * Description: */ @Data +@NoArgsConstructor public class MarketMetasVO { private String theme_repo; + + public MarketMetasVO(String theme_repo) { + this.theme_repo = theme_repo; + } }