From e925dc2364004a389a33cae9ab964d36061ef719 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Tue, 19 Jul 2022 11:57:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF)=20:=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=9C=A8DataEase=E4=B8=AD=E6=9F=A5=E7=9C=8B=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=B8=82=E5=9C=BA=E6=A8=A1=E6=9D=BF=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E5=BA=94=E7=94=A8=E6=A8=A1=E6=9D=BF=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BB=AA=E8=A1=A8=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/constants/PanelConstants.java | 3 + .../commons/constants/ParamConstants.java | 4 +- .../commons/utils/HttpClientUtil.java | 6 + .../request/panel/PanelGroupRequest.java | 2 + .../TemplateMarketSearchRequest.java | 12 + .../controller/sys/response/BasicInfo.java | 4 + .../TemplateMarketController.java | 44 +++ .../dto/panel/PanelTemplateFileDTO.java | 20 ++ .../templateMarket/MarketBaseResponse.java | 25 ++ .../dto/templateMarket/MarketCategory.java | 15 + .../dto/templateMarket/MarketMetas.java | 13 + .../dto/templateMarket/TemplateCategory.java | 17 ++ .../dto/templateMarket/TemplateMarketDTO.java | 24 ++ .../service/panel/PanelGroupService.java | 28 +- .../system/SystemParameterService.java | 26 ++ .../templateMarket/TemplateMarketService.java | 85 ++++++ .../main/resources/db/migration/V38__1.13.sql | 6 +- frontend/src/api/templateMarket/index.js | 20 ++ .../components/canvas/components/Toolbar.vue | 1 + frontend/src/icons/svg/none_select.svg | 5 + frontend/src/lang/en.js | 5 + frontend/src/lang/tw.js | 5 + frontend/src/lang/zh.js | 5 + frontend/src/layout/components/Topbar.vue | 31 ++- frontend/src/views/panel/list/PanelList.vue | 13 +- .../component/TemplateMarketItem.vue | 116 ++++++++ .../src/views/panel/templateMarket/index.vue | 260 ++++++++++++++++++ 27 files changed, 785 insertions(+), 10 deletions(-) create mode 100644 backend/src/main/java/io/dataease/controller/request/templateMarket/TemplateMarketSearchRequest.java create mode 100644 backend/src/main/java/io/dataease/controller/templateMarket/TemplateMarketController.java create mode 100644 backend/src/main/java/io/dataease/dto/panel/PanelTemplateFileDTO.java create mode 100644 backend/src/main/java/io/dataease/dto/templateMarket/MarketBaseResponse.java create mode 100644 backend/src/main/java/io/dataease/dto/templateMarket/MarketCategory.java create mode 100644 backend/src/main/java/io/dataease/dto/templateMarket/MarketMetas.java create mode 100644 backend/src/main/java/io/dataease/dto/templateMarket/TemplateCategory.java create mode 100644 backend/src/main/java/io/dataease/dto/templateMarket/TemplateMarketDTO.java create mode 100644 backend/src/main/java/io/dataease/service/templateMarket/TemplateMarketService.java create mode 100644 frontend/src/api/templateMarket/index.js create mode 100644 frontend/src/icons/svg/none_select.svg create mode 100644 frontend/src/views/panel/templateMarket/component/TemplateMarketItem.vue create mode 100644 frontend/src/views/panel/templateMarket/index.vue diff --git a/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java b/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java index a412b9bddf..22b00b9587 100644 --- a/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/PanelConstants.java @@ -41,6 +41,9 @@ public class PanelConstants { // 外部模板新建 public static final String NEW_OUTER_TEMPLATE = "new_outer_template"; + // 模板市场新建 + public static final String NEW_MARKET_TEMPLATE = "new_market_template"; + } //仪表板类型 diff --git a/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java b/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java index e1dc4b9285..9c309442ed 100644 --- a/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/ParamConstants.java @@ -111,7 +111,9 @@ public interface ParamConstants { FRONT_TIME_OUT("basic.frontTimeOut"), MSG_TIME_OUT("basic.msgTimeOut"), DEFAULT_LOGIN_TYPE("basic.loginType"), - OPEN_HOME_PAGE("ui.openHomePage"); + OPEN_HOME_PAGE("ui.openHomePage"), + TEMPLATE_MARKET_ULR("basic.templateMarketUlr"), + TEMPLATE_ACCESS_KEY("basic.templateAccessKey"); private String value; diff --git a/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java b/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java index 70565fed75..26b93e7ebb 100755 --- a/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java +++ b/backend/src/main/java/io/dataease/commons/utils/HttpClientUtil.java @@ -65,6 +65,12 @@ public class HttpClientUtil { } } + public static void main(String[] args) { + String url = "http://123.56.8.132:8090/upload/2022/04/%E9%99%88%E7%BA%AA%E5%85%89-%E6%B5%B7%E9%80%9A%E8%AF%81%E5%8A%B5%E6%A1%8C%E9%9D%A2%E4%BA%91%E5%A4%A7%E5%B1%8F-TEMPLATE.DET"; + + String info = get(url,null); + System.out.println("=="+info); + } /** * Get http请求 * diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java index 433dfe8706..a9da1cb542 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java @@ -27,6 +27,8 @@ public class PanelGroupRequest extends PanelGroupDTO { private String templateId; @ApiModelProperty("静态文件") private String staticResource; + @ApiModelProperty("模板链接") + private String templateUrl; public PanelGroupRequest() { } diff --git a/backend/src/main/java/io/dataease/controller/request/templateMarket/TemplateMarketSearchRequest.java b/backend/src/main/java/io/dataease/controller/request/templateMarket/TemplateMarketSearchRequest.java new file mode 100644 index 0000000000..d2a89a130a --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/templateMarket/TemplateMarketSearchRequest.java @@ -0,0 +1,12 @@ +package io.dataease.controller.request.templateMarket; + +import io.dataease.dto.templateMarket.TemplateMarketDTO; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +public class TemplateMarketSearchRequest extends TemplateMarketDTO { + +} diff --git a/backend/src/main/java/io/dataease/controller/sys/response/BasicInfo.java b/backend/src/main/java/io/dataease/controller/sys/response/BasicInfo.java index 91ced9becc..c2ce08e501 100644 --- a/backend/src/main/java/io/dataease/controller/sys/response/BasicInfo.java +++ b/backend/src/main/java/io/dataease/controller/sys/response/BasicInfo.java @@ -16,5 +16,9 @@ public class BasicInfo implements Serializable { private String openHomePage; @ApiModelProperty("默认登录方式") private Integer loginType = 0; + @ApiModelProperty("模板市场链接") + private String templateMarketUlr; + @ApiModelProperty("模板市场AccessKey") + private String templateAccessKey; } diff --git a/backend/src/main/java/io/dataease/controller/templateMarket/TemplateMarketController.java b/backend/src/main/java/io/dataease/controller/templateMarket/TemplateMarketController.java new file mode 100644 index 0000000000..274a9da8ab --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/templateMarket/TemplateMarketController.java @@ -0,0 +1,44 @@ +package io.dataease.controller.templateMarket; + +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.controller.request.templateMarket.TemplateMarketSearchRequest; +import io.dataease.dto.templateMarket.MarketBaseResponse; +import io.dataease.dto.templateMarket.TemplateMarketDTO; +import io.dataease.service.templateMarket.TemplateMarketService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@RestController +@Api(tags = "系统:模板市场") +@ApiSupport(order = 220) +@RequestMapping("/template/market") +public class TemplateMarketController { + + @Resource + private TemplateMarketService marketService; + + + @ApiOperation("查询模板") + @PostMapping("/search") + private MarketBaseResponse searchTemplate(@RequestBody TemplateMarketSearchRequest request){ + return marketService.searchTemplate(request); + } + + @ApiOperation("查询分类") + @GetMapping("/categories") + private List categories(){ + return marketService.getCategories(); + } + + +} diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelTemplateFileDTO.java b/backend/src/main/java/io/dataease/dto/panel/PanelTemplateFileDTO.java new file mode 100644 index 0000000000..bee2d2cf96 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/PanelTemplateFileDTO.java @@ -0,0 +1,20 @@ +package io.dataease.dto.panel; + +import io.dataease.plugins.common.base.domain.PanelTemplateWithBLOBs; +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/14 + * Description: + */ +@Data +public class PanelTemplateFileDTO extends PanelTemplateWithBLOBs { + + private String panelStyle; + + private String panelData; + + private String staticResource; + +} diff --git a/backend/src/main/java/io/dataease/dto/templateMarket/MarketBaseResponse.java b/backend/src/main/java/io/dataease/dto/templateMarket/MarketBaseResponse.java new file mode 100644 index 0000000000..3fd26687b9 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/templateMarket/MarketBaseResponse.java @@ -0,0 +1,25 @@ +package io.dataease.dto.templateMarket; + +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketBaseResponse { + private String baseUrl; + + private List contents; + + public MarketBaseResponse() { + } + + public MarketBaseResponse(String baseUrl, List contents) { + this.baseUrl = baseUrl; + this.contents = contents; + } +} diff --git a/backend/src/main/java/io/dataease/dto/templateMarket/MarketCategory.java b/backend/src/main/java/io/dataease/dto/templateMarket/MarketCategory.java new file mode 100644 index 0000000000..17be643e1d --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/templateMarket/MarketCategory.java @@ -0,0 +1,15 @@ +package io.dataease.dto.templateMarket; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketCategory { + private String id; + private String name; + private String slug; +} diff --git a/backend/src/main/java/io/dataease/dto/templateMarket/MarketMetas.java b/backend/src/main/java/io/dataease/dto/templateMarket/MarketMetas.java new file mode 100644 index 0000000000..f60ea8354a --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/templateMarket/MarketMetas.java @@ -0,0 +1,13 @@ +package io.dataease.dto.templateMarket; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class MarketMetas { + private String theme_repo; +} diff --git a/backend/src/main/java/io/dataease/dto/templateMarket/TemplateCategory.java b/backend/src/main/java/io/dataease/dto/templateMarket/TemplateCategory.java new file mode 100644 index 0000000000..dd78b81ec4 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/templateMarket/TemplateCategory.java @@ -0,0 +1,17 @@ +package io.dataease.dto.templateMarket; + +import lombok.Data; + +/** + * Author: wangjiahao + * Date: 2022/7/18 + * Description: + */ +@Data +public class TemplateCategory { + private Integer id; + + private String name; + + private String slug; +} diff --git a/backend/src/main/java/io/dataease/dto/templateMarket/TemplateMarketDTO.java b/backend/src/main/java/io/dataease/dto/templateMarket/TemplateMarketDTO.java new file mode 100644 index 0000000000..9614dc3dc0 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/templateMarket/TemplateMarketDTO.java @@ -0,0 +1,24 @@ +package io.dataease.dto.templateMarket; + +import lombok.Data; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 2022/7/15 + * Description: + */ +@Data +public class TemplateMarketDTO { + private String id; + private String title; + private String status; + private String slug; + private String editorType; + private String summary; + private String thumbnail; + private Boolean showFlag = true; + private List categories; + private MarketMetas metas; +} diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 8f4119f477..35eb934abb 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -3,14 +3,12 @@ package io.dataease.service.panel; import com.google.gson.Gson; import io.dataease.auth.annotation.DeCleaner; import io.dataease.commons.constants.*; -import io.dataease.commons.utils.AuthUtils; -import io.dataease.commons.utils.DeLogUtils; -import io.dataease.commons.utils.LogUtil; -import io.dataease.commons.utils.TreeUtils; +import io.dataease.commons.utils.*; import io.dataease.controller.request.authModel.VAuthModelRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.panel.PanelGroupBaseInfoRequest; import io.dataease.controller.request.panel.PanelGroupRequest; +import io.dataease.controller.request.panel.PanelTemplateRequest; import io.dataease.controller.request.panel.PanelViewDetailsRequest; import io.dataease.dto.PanelGroupExtendDataDTO; import io.dataease.dto.SysLogDTO; @@ -18,6 +16,7 @@ import io.dataease.dto.authModel.VAuthModelDTO; import io.dataease.dto.chart.ChartViewDTO; import io.dataease.dto.dataset.DataSetTableDTO; import io.dataease.dto.panel.PanelGroupDTO; +import io.dataease.dto.panel.PanelTemplateFileDTO; import io.dataease.dto.panel.po.PanelViewInsertDTO; import io.dataease.exception.DataEaseException; import io.dataease.ext.*; @@ -389,6 +388,16 @@ public class PanelGroupService { dynamicData = request.getDynamicData(); staticResource = request.getStaticResource(); mobileLayout = panelViewService.havaMobileLayout(templateData); + } else if (PanelConstants.NEW_PANEL_FROM.NEW_MARKET_TEMPLATE.equals(newFrom)){ + PanelTemplateFileDTO templateFileInfo = getTemplateFromMarket(request.getTemplateUrl()); + if(templateFileInfo == null){ + DataEaseException.throwException("Can't find the template's info from market,please check"); + } + templateStyle = templateFileInfo.getPanelStyle(); + templateData = templateFileInfo.getPanelData(); + dynamicData = templateFileInfo.getDynamicData(); + staticResource = templateFileInfo.getStaticResource(); + mobileLayout = panelViewService.havaMobileLayout(templateData); } Map dynamicDataMap = gson.fromJson(dynamicData, Map.class); List panelViews = new ArrayList<>(); @@ -583,4 +592,15 @@ public class PanelGroupService { panelGroup.setStatus(request.getStatus()); panelGroupMapper.updateByPrimaryKeySelective(panelGroup); } + + + public PanelTemplateFileDTO getTemplateFromMarket(String templateUrl){ + if(StringUtils.isNotEmpty(templateUrl)){ + Gson gson = new Gson(); + String templateInfo = HttpClientUtil.get(templateUrl,null); + return gson.fromJson(templateInfo, PanelTemplateFileDTO.class); + }else{ + return null; + } + } } diff --git a/backend/src/main/java/io/dataease/service/system/SystemParameterService.java b/backend/src/main/java/io/dataease/service/system/SystemParameterService.java index 1a85f3046b..594389b4ee 100644 --- a/backend/src/main/java/io/dataease/service/system/SystemParameterService.java +++ b/backend/src/main/java/io/dataease/service/system/SystemParameterService.java @@ -6,6 +6,7 @@ import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.EncryptUtils; import io.dataease.controller.sys.response.BasicInfo; import io.dataease.dto.SystemParameterDTO; +import io.dataease.exception.DataEaseException; import io.dataease.plugins.common.base.domain.FileMetadata; import io.dataease.plugins.common.base.domain.SystemParameter; import io.dataease.plugins.common.base.domain.SystemParameterExample; @@ -69,6 +70,13 @@ public class SystemParameterService { boolean open = StringUtils.equals("true", param.getParamValue()); result.setOpenHomePage(open ? "true" : "false"); } + if (StringUtils.equals(param.getParamKey(), ParamConstants.BASIC.TEMPLATE_MARKET_ULR.getValue())) { + result.setTemplateMarketUlr(param.getParamValue()); + } + if (StringUtils.equals(param.getParamKey(), ParamConstants.BASIC.TEMPLATE_ACCESS_KEY.getValue())) { + result.setTemplateAccessKey(param.getParamValue()); + } + } } return result; @@ -270,5 +278,23 @@ public class SystemParameterService { } } + public BasicInfo templateMarketInfo(){ + BasicInfo basicInfo = new BasicInfo(); + List result = this.getParamList("basic.template"); + if(CollectionUtils.isNotEmpty(result)){ + result.stream().forEach(param -> { + if (StringUtils.equals(param.getParamKey(), ParamConstants.BASIC.TEMPLATE_MARKET_ULR.getValue())) { + basicInfo.setTemplateMarketUlr(param.getParamValue()); + } + if (StringUtils.equals(param.getParamKey(), ParamConstants.BASIC.TEMPLATE_ACCESS_KEY.getValue())) { + basicInfo.setTemplateAccessKey(param.getParamValue()); + } + }); + } + if(StringUtils.isEmpty(basicInfo.getTemplateMarketUlr())|| StringUtils.isEmpty(basicInfo.getTemplateAccessKey())){ + DataEaseException.throwException("Please check market setting info"); + } + return basicInfo; + } } diff --git a/backend/src/main/java/io/dataease/service/templateMarket/TemplateMarketService.java b/backend/src/main/java/io/dataease/service/templateMarket/TemplateMarketService.java new file mode 100644 index 0000000000..427d111358 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/templateMarket/TemplateMarketService.java @@ -0,0 +1,85 @@ +package io.dataease.service.templateMarket; + +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import io.dataease.commons.utils.HttpClientConfig; +import io.dataease.commons.utils.HttpClientUtil; +import io.dataease.controller.request.templateMarket.TemplateMarketSearchRequest; +import io.dataease.controller.sys.response.BasicInfo; +import io.dataease.dto.panel.PanelTemplateFileDTO; +import io.dataease.dto.templateMarket.MarketBaseResponse; +import io.dataease.dto.templateMarket.TemplateCategory; +import io.dataease.dto.templateMarket.TemplateMarketDTO; +import io.dataease.exception.DataEaseException; +import io.dataease.service.system.SystemParameterService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Author: wangjiahao + * Date: 2022/7/14 + * Description: ${userName} + */ +@Service +public class TemplateMarketService { + + private final static String POSTS_API="/api/content/posts?page=0&size=2000"; + private final static String CATEGORIES_API="/api/content/categories"; + + @Resource + private SystemParameterService systemParameterService; + + /** + * @Description Get template file from template market + * @param templateUrl template url + */ + public PanelTemplateFileDTO getTemplateFromMarket(String templateUrl){ + if(StringUtils.isNotEmpty(templateUrl)){ + String sufUrl = systemParameterService.templateMarketInfo().getTemplateMarketUlr(); + Gson gson = new Gson(); + String templateInfo = HttpClientUtil.get(sufUrl+templateUrl,null); + return gson.fromJson(templateInfo, PanelTemplateFileDTO.class); + }else{ + return null; + } + } + + /** + * @Description Get info from template market content api + * @param url content api url + */ + public String marketGet(String url,String accessKey){ + HttpClientConfig config = new HttpClientConfig(); + config.addHeader("API-Authorization",accessKey); + return HttpClientUtil.get(url,config); + } + + public MarketBaseResponse searchTemplate(TemplateMarketSearchRequest request){ + try{ + BasicInfo basicInfo = systemParameterService.templateMarketInfo(); + String result = marketGet(basicInfo.getTemplateMarketUlr()+POSTS_API,basicInfo.getTemplateAccessKey()); + List postsResult = JSONObject.parseObject(result).getJSONObject("data").getJSONArray("content").toJavaList(TemplateMarketDTO.class); + return new MarketBaseResponse(basicInfo.getTemplateMarketUlr(),postsResult); + }catch (Exception e){ + DataEaseException.throwException(e); + } + return null; + } + + public List getCategories(){ + BasicInfo basicInfo = systemParameterService.templateMarketInfo(); + String resultStr = marketGet(basicInfo.getTemplateMarketUlr()+CATEGORIES_API,basicInfo.getTemplateAccessKey()); + List categories = JSONObject.parseObject(resultStr).getJSONArray("data").toJavaList(TemplateCategory.class); + if(CollectionUtils.isNotEmpty(categories)){ + return categories.stream().map(TemplateCategory :: getName).collect(Collectors.toList()); + }else{ + return null; + } + + } +} diff --git a/backend/src/main/resources/db/migration/V38__1.13.sql b/backend/src/main/resources/db/migration/V38__1.13.sql index 44c035b200..ba5dc6f822 100644 --- a/backend/src/main/resources/db/migration/V38__1.13.sql +++ b/backend/src/main/resources/db/migration/V38__1.13.sql @@ -36,4 +36,8 @@ ADD COLUMN `phone_prefix` varchar(255) NULL COMMENT '手机号前缀' AFTER `sub INSERT INTO `my_plugin` (`name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `creator`, `load_mybatis`, `install_time`, `module_name`, `ds_type`) VALUES ('Mongo 数据源插件', 'default', '0', '0', 'datasource', 'Mongo 数据源插件', '1.0-SNAPSHOT', 'DATAEASE', '0', - '1650765903630', 'mongo-backend', 'mongobi'); \ No newline at end of file + '1650765903630', 'mongo-backend', 'mongobi'); + + +INSERT INTO `system_parameter` (`param_key`, `param_value`, `type`, `sort`) VALUES ('basic.templateAccessKey', 'dataease', 'text', NULL); +INSERT INTO `system_parameter` (`param_key`, `param_value`, `type`, `sort`) VALUES ('basic.templateMarketUlr', 'https://dataease.io/templates', 'text', 4); diff --git a/frontend/src/api/templateMarket/index.js b/frontend/src/api/templateMarket/index.js new file mode 100644 index 0000000000..74534221d3 --- /dev/null +++ b/frontend/src/api/templateMarket/index.js @@ -0,0 +1,20 @@ +import request from '@/utils/request' + +export function searchMarket(data) { + return request({ + url: '/template/market/search', + method: 'post', + loading: true, + hideMsg: true, + data + }) +} + +export function getCategories() { + return request({ + url: '/template/market/categories', + method: 'get', + hideMsg: true, + loading: false + }) +} diff --git a/frontend/src/components/canvas/components/Toolbar.vue b/frontend/src/components/canvas/components/Toolbar.vue index 391a18d0f2..aad29b1a67 100644 --- a/frontend/src/components/canvas/components/Toolbar.vue +++ b/frontend/src/components/canvas/components/Toolbar.vue @@ -26,6 +26,7 @@
+ + + + + diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 0bcc2905b3..6e1d082176 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1495,6 +1495,11 @@ export default { sure_bt: 'Confirm' }, panel: { + market_network_tips: 'View template Market template requires server and template Market( https://dataease.io/templates ), please check the network... ', + enter_name_tips: 'Please enter the name of the panel', + name: 'Name', + apply_template: 'Apply Template', + enter_template_name_tips: 'Please enter the template name...', pic_adaptation: 'Adaptation', pic_equiratio: 'Equiratio', pic_original: 'Original', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 1e2e7f279e..5d2cb77c4f 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1496,6 +1496,11 @@ export default { sure_bt: '確定' }, panel: { + market_network_tips: '查看模板市场模板需要服务器与模板市场(https://dataease.io/templates)联通,请检查网络...', + enter_name_tips: '请输入仪表板名称', + name: '名称', + apply_template: '应用模板', + enter_template_name_tips: '请输入模板名称...', pic_adaptation: '适应组件', pic_equiratio: '等比适应', pic_original: '原始尺寸', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 25c295f2f8..2bd4bcacaa 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1504,6 +1504,11 @@ export default { sure_bt: '确定' }, panel: { + market_network_tips: '查看模板市场模板需要服务器与模板市场(https://dataease.io/templates)联通,请检查网络...', + enter_name_tips: '请输入仪表板名称', + name: '名称', + apply_template: '应用模板', + enter_template_name_tips: '请输入模板名称...', pic_adaptation: '适应组件', pic_equiratio: '等比适应', pic_original: '原始尺寸', diff --git a/frontend/src/layout/components/Topbar.vue b/frontend/src/layout/components/Topbar.vue index 932850a3a5..825f2a279b 100644 --- a/frontend/src/layout/components/Topbar.vue +++ b/frontend/src/layout/components/Topbar.vue @@ -22,7 +22,7 @@
@@ -95,9 +104,11 @@ import { import { initTheme } from '@/utils/ThemeUtil' +import TemplateMarket from '@/views/panel/templateMarket' export default { name: 'Topbar', components: { + TemplateMarket, AppLink, Notification, LangSelect @@ -114,7 +125,8 @@ export default { uiInfo: null, logoUrl: null, axiosFinished: false, - isPluginLoaded: false + isPluginLoaded: false, + templateMarketShow: false } }, @@ -357,6 +369,9 @@ export default { }, setTopTextActiveInfo(val) { this.loadUiInfo() + }, + changeTemplateMarketShow(isShow) { + this.templateMarketShow = isShow } } @@ -387,5 +402,15 @@ export default { background-color: var(--MainBG); } + .template-market-item{ + display: flex; + color: var(--MenuActiveBG, #409EFF); + font-size: 14px!important; + line-height: 38px!important; + } + + .dialog-css ::v-deep .el-dialog__header{ + display: none; + } diff --git a/frontend/src/views/panel/list/PanelList.vue b/frontend/src/views/panel/list/PanelList.vue index 965a98994d..12e0731d6f 100644 --- a/frontend/src/views/panel/list/PanelList.vue +++ b/frontend/src/views/panel/list/PanelList.vue @@ -354,7 +354,7 @@ export default { watch: { // 切换展示页面后 重新点击一下当前节点 '$store.state.panel.mainActiveName': function(newVal, oldVal) { - if (newVal === 'PanelMain' && this.lastActiveNode && this.lastActiveNodeData) { + if (newVal === 'PanelMain' && this.lastActiveNodeData) { this.activeNodeAndClickOnly(this.lastActiveNodeData) } }, @@ -369,14 +369,25 @@ export default { this.$refs.panel_list_tree.filter(this.filterText) } }, + beforeDestroy() { + bus.$off('newPanelFromMarket', this.newPanelFromMarket) + }, mounted() { this.$store.commit('setComponentData', []) this.$store.commit('setCanvasStyle', DEFAULT_COMMON_CANVAS_STYLE_STRING) this.defaultTree(true) this.tree(true) this.initCache() + bus.$on('newPanelFromMarket', this.newPanelFromMarket) }, methods: { + newPanelFromMarket(panelInfo) { + if (panelInfo) { + this.defaultTree() + this.tree() + this.edit(panelInfo, null) + } + }, initCache() { // 初始化时提前加载视图和数据集的缓存 this.initLocalStorage.forEach(item => { diff --git a/frontend/src/views/panel/templateMarket/component/TemplateMarketItem.vue b/frontend/src/views/panel/templateMarket/component/TemplateMarketItem.vue new file mode 100644 index 0000000000..022822d587 --- /dev/null +++ b/frontend/src/views/panel/templateMarket/component/TemplateMarketItem.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/frontend/src/views/panel/templateMarket/index.vue b/frontend/src/views/panel/templateMarket/index.vue new file mode 100644 index 0000000000..97621f9675 --- /dev/null +++ b/frontend/src/views/panel/templateMarket/index.vue @@ -0,0 +1,260 @@ + + + + +