diff --git a/backend/pom.xml b/backend/pom.xml index 0dbfcb18e5..519f4acc6d 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -420,7 +420,7 @@ - + @@ -486,7 +486,7 @@ - + diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.java index c32cc032a9..2b4aa36180 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.java @@ -1,9 +1,11 @@ package io.dataease.base.mapper.ext; - import io.dataease.dto.panel.outerParams.PanelOuterParamsDTO; +import io.dataease.dto.panel.outerParams.PanelOuterParamsInfoDTO; import org.apache.ibatis.annotations.Param; +import java.util.List; + public interface ExtPanelOuterParamsMapper { PanelOuterParamsDTO queryWithPanelId(@Param("panelId") String panelId); @@ -14,4 +16,6 @@ public interface ExtPanelOuterParamsMapper { void deleteOuterParamsWithPanelId(@Param("panelId") String panelId); + List getPanelOuterParamsInfo(@Param("panelId") String panelId); + } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.xml index 7d535fd956..ced559f72c 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelOuterParamsMapper.xml @@ -17,6 +17,13 @@ + + + + + + + + SELECT DISTINCT + param_name AS sourceInfo, + CONCAT( poptvi.target_view_id, '#', poptvi.target_field_id ) AS targetInfo + FROM + panel_outer_params pop + LEFT JOIN panel_outer_params_info popi ON pop.params_id = popi.params_id + LEFT JOIN panel_outer_params_target_view_info poptvi ON popi.params_info_id = poptvi.params_info_id + WHERE + pop.panel_id = #{panelId} + diff --git a/backend/src/main/java/io/dataease/config/WebSecurityConfig.java b/backend/src/main/java/io/dataease/config/WebSecurityConfig.java new file mode 100644 index 0000000000..c3c29f34a4 --- /dev/null +++ b/backend/src/main/java/io/dataease/config/WebSecurityConfig.java @@ -0,0 +1,9 @@ +package io.dataease.config; + +/** + * Author: wangjiahao + * Date: 2022/3/27 + * Description: + */ +public class WebSecurityConfig { +} diff --git a/backend/src/main/java/io/dataease/controller/IndexController.java b/backend/src/main/java/io/dataease/controller/IndexController.java index 02f7aca44f..22a1c4d6ed 100644 --- a/backend/src/main/java/io/dataease/controller/IndexController.java +++ b/backend/src/main/java/io/dataease/controller/IndexController.java @@ -7,12 +7,15 @@ import io.dataease.commons.utils.CodingUtil; import io.dataease.commons.utils.LogUtil; import io.dataease.commons.utils.ServletUtils; import io.dataease.service.panel.PanelLinkService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import javax.annotation.Resource; import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -59,6 +62,12 @@ public class IndexController { } HttpServletResponse response = ServletUtils.response(); try { + // TODO 增加仪表板外部参数 + HttpServletRequest request = ServletUtils.request(); + String attachParams = request.getParameter("attachParams"); + if(StringUtils.isNotEmpty(attachParams)){ + url = url+"&attachParams="+attachParams; + } response.sendRedirect(url); } catch (IOException e) { LogUtil.error(e.getMessage()); diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelOuterParamsController.java b/backend/src/main/java/io/dataease/controller/panel/PanelOuterParamsController.java index e412a65a8b..7a9ca00a08 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelOuterParamsController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelOuterParamsController.java @@ -1,6 +1,7 @@ package io.dataease.controller.panel; import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.dto.panel.outerParams.PanelOuterParamsBaseResponse; import io.dataease.dto.panel.outerParams.PanelOuterParamsDTO; import io.dataease.service.panel.PanelOuterParamsService; import io.swagger.annotations.Api; @@ -34,4 +35,10 @@ public class PanelOuterParamsController { public void updateOuterParamsSet(@RequestBody PanelOuterParamsDTO OuterParamsDTO) { panelOuterParamsService.updateOuterParamsSet(OuterParamsDTO); } + + @ApiOperation("仪表板外部参数映射关系") + @GetMapping("/getOuterParamsInfo/{panelId}") + public PanelOuterParamsBaseResponse getOuterParamsInfo(@PathVariable("panelId") String panelId){ + return panelOuterParamsService.getOuterParamsInfo(panelId); + } } diff --git a/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java b/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java index 03ec1abeaa..a98ae98a97 100644 --- a/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java @@ -18,10 +18,12 @@ public class ChartExtRequest { @ApiModelProperty("视图额外过滤条件集合") private List filter; - // 联动过滤条件 @ApiModelProperty("联动过滤条件集合") private List linkageFilters; + @ApiModelProperty("外部参数过滤条件集合") + private List outerParamsFilters; + @ApiModelProperty("下钻维度集合") private List drill; diff --git a/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsBaseResponse.java b/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsBaseResponse.java new file mode 100644 index 0000000000..618c98ccd0 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsBaseResponse.java @@ -0,0 +1,25 @@ +package io.dataease.dto.panel.outerParams; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * Author: wangjiahao + * Date: 2022/3/25 + * Description: + */ +@Data +public class PanelOuterParamsBaseResponse { + + // 获取仪表板外部参数映射信息 + private Map> outerParamsInfoMap; + + public PanelOuterParamsBaseResponse(Map> outerParamsInfoMap) { + this.outerParamsInfoMap = outerParamsInfoMap; + } + + public PanelOuterParamsBaseResponse() { + } +} diff --git a/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsInfoDTO.java b/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsInfoDTO.java index 0f79c1bb77..3cdd539e78 100644 --- a/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsInfoDTO.java +++ b/backend/src/main/java/io/dataease/dto/panel/outerParams/PanelOuterParamsInfoDTO.java @@ -18,4 +18,10 @@ public class PanelOuterParamsInfoDTO extends PanelOuterParamsInfo { private String panelId; private List targetViewInfoList=new ArrayList<>(); + + //仪表板外部参数信息 panelId#paramName + private String sourceInfo; + + //目标联动参数 targetViewId#targetFieldId + private List targetInfoList; } diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 85ba7779ef..02c11d0164 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -426,9 +426,20 @@ public class ChartViewService { } } - //联动过滤条件联动条件全部加上 - if (ObjectUtils.isNotEmpty(requestList.getLinkageFilters())) { - for (ChartExtFilterRequest request : requestList.getLinkageFilters()) { + List filters = new ArrayList<>(); + // 联动条件 + if(ObjectUtils.isNotEmpty(requestList.getLinkageFilters())){ + filters.addAll(requestList.getLinkageFilters()); + } + + // 外部参数条件 + if(ObjectUtils.isNotEmpty(requestList.getOuterParamsFilters())){ + filters.addAll(requestList.getOuterParamsFilters()); + } + + //联动过滤条件和外部参数过滤条件全部加上 + if (ObjectUtils.isNotEmpty(filters)) { + for (ChartExtFilterRequest request : filters) { DatasetTableField datasetTableField = dataSetTableFieldsService.get(request.getFieldId()); if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { request.setDatasetTableField(datasetTableField); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java index a6b42f3038..c7144d4129 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -5,6 +5,7 @@ import io.dataease.base.domain.DatasetGroup; import io.dataease.base.domain.DatasetGroupExample; import io.dataease.base.mapper.DatasetGroupMapper; import io.dataease.base.mapper.ext.ExtDataSetGroupMapper; +import io.dataease.commons.constants.AuthConstants; import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; @@ -14,6 +15,7 @@ import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.dataset.DataSetGroupDTO; import io.dataease.dto.dataset.DataSetTableDTO; import io.dataease.i18n.Translator; +import io.dataease.listener.util.CacheUtils; import io.dataease.service.sys.SysAuthService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -49,6 +51,8 @@ public class DataSetGroupService { datasetGroup.setCreateBy(AuthUtils.getUser().getUsername()); datasetGroup.setCreateTime(System.currentTimeMillis()); datasetGroupMapper.insert(datasetGroup); + // 清理权限缓存 + CacheUtils.removeAll(AuthConstants.USER_PERMISSION_CACHE_NAME); } else { datasetGroupMapper.updateByPrimaryKeySelective(datasetGroup); } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 7ed436beda..e02ae364f9 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -24,6 +24,7 @@ import io.dataease.dto.dataset.union.UnionParamDTO; import io.dataease.dto.datasource.TableField; import io.dataease.exception.DataEaseException; import io.dataease.i18n.Translator; +import io.dataease.listener.util.CacheUtils; import io.dataease.plugins.common.constants.DatasourceTypes; import io.dataease.plugins.loader.ClassloaderResponsity; import io.dataease.provider.ProviderFactory; @@ -115,6 +116,10 @@ public class DataSetTableService { public void batchInsert(List datasetTable) throws Exception { for (DataSetTableRequest table : datasetTable) { save(table); + // 清理权限缓存 + CacheUtils.removeAll(AuthConstants.USER_DATASET_NAME); + CacheUtils.removeAll(AuthConstants.ROLE_DATASET_NAME); + CacheUtils.removeAll(AuthConstants.DEPT_DATASET_NAME); } } 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 1d47c4da11..b88280396b 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -6,6 +6,7 @@ import io.dataease.auth.annotation.DeCleaner; import io.dataease.base.domain.*; import io.dataease.base.mapper.*; import io.dataease.base.mapper.ext.*; +import io.dataease.commons.constants.AuthConstants; import io.dataease.commons.constants.CommonConstants; import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.constants.PanelConstants; @@ -24,6 +25,7 @@ import io.dataease.dto.panel.linkJump.PanelLinkJumpBaseRequest; import io.dataease.dto.panel.po.PanelViewInsertDTO; import io.dataease.exception.DataEaseException; import io.dataease.i18n.Translator; +import io.dataease.listener.util.CacheUtils; import io.dataease.service.chart.ChartViewService; import io.dataease.service.dataset.DataSetTableService; import io.dataease.service.sys.SysAuthService; @@ -119,6 +121,8 @@ public class PanelGroupService { checkPanelName(request.getName(), request.getPid(), PanelConstants.OPT_TYPE_INSERT, null, request.getNodeType()); panelId = newPanel(request); panelGroupMapper.insert(request); + // 清理权限缓存 + clearPermissionCache(); } else if ("toDefaultPanel".equals(request.getOptType())) { panelId = UUID.randomUUID().toString(); // 转存为默认仪表板 @@ -133,8 +137,12 @@ public class PanelGroupService { newDefaultPanel.setCreateBy(AuthUtils.getUser().getUsername()); checkPanelName(newDefaultPanel.getName(), newDefaultPanel.getPid(), PanelConstants.OPT_TYPE_INSERT, newDefaultPanel.getId(), newDefaultPanel.getNodeType()); panelGroupMapper.insertSelective(newDefaultPanel); + // 清理权限缓存 + clearPermissionCache(); } else if ("copy".equals(request.getOptType())) { panelId = this.panelGroupCopy(request, null, true); + // 清理权限缓存 + clearPermissionCache(); } else if ("move".equals(request.getOptType())) { PanelGroupWithBLOBs panelInfo = panelGroupMapper.selectByPrimaryKey(request.getId()); if (panelInfo.getPid().equalsIgnoreCase(request.getPid())) { @@ -431,9 +439,10 @@ public class PanelGroupService { } return null; } - - public void findPanelAttachInfo(String panelId) { - + private void clearPermissionCache(){ + CacheUtils.removeAll(AuthConstants.USER_PANEL_NAME); + CacheUtils.removeAll(AuthConstants.ROLE_PANEL_NAME); + CacheUtils.removeAll(AuthConstants.DEPT_PANEL_NAME); } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelOuterParamsService.java b/backend/src/main/java/io/dataease/service/panel/PanelOuterParamsService.java index 0bbd7d0997..c5e2b0c068 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelOuterParamsService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelOuterParamsService.java @@ -5,15 +5,19 @@ import io.dataease.base.mapper.PanelOuterParamsMapper; import io.dataease.base.mapper.PanelOuterParamsTargetViewInfoMapper; import io.dataease.base.mapper.ext.ExtPanelOuterParamsMapper; import io.dataease.dto.panel.linkJump.PanelLinkJumpDTO; +import io.dataease.dto.panel.outerParams.PanelOuterParamsBaseResponse; import io.dataease.dto.panel.outerParams.PanelOuterParamsDTO; +import io.dataease.dto.panel.outerParams.PanelOuterParamsInfoDTO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.stream.Collectors; /** * Author: wangjiahao @@ -67,4 +71,9 @@ public class PanelOuterParamsService { }); } + public PanelOuterParamsBaseResponse getOuterParamsInfo(String panelId){ + List result = extPanelOuterParamsMapper.getPanelOuterParamsInfo(panelId); + return new PanelOuterParamsBaseResponse(Optional.ofNullable(result).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(PanelOuterParamsInfoDTO::getSourceInfo, PanelOuterParamsInfoDTO::getTargetInfoList))); + } + } diff --git a/backend/src/main/resources/db/migration/V33__1.9.sql b/backend/src/main/resources/db/migration/V33__1.9.sql index 9b92b7000f..7d70f7e67d 100644 --- a/backend/src/main/resources/db/migration/V33__1.9.sql +++ b/backend/src/main/resources/db/migration/V33__1.9.sql @@ -89,4 +89,162 @@ INSERT INTO `system_parameter`(`param_key`, `param_value`, `type`, `sort`) VALUE UPDATE `demo_gdp_district_top100` set `province` = '新疆维吾尔自治区' WHERE `province` = '新疆维吾尔族自治区'; +ALTER TABLE `sys_auth` +ADD COLUMN `copy_from` varchar(255) NULL COMMENT '复制来源' AFTER `update_time`, +ADD COLUMN `copy_id` varchar(255) NULL COMMENT '复制ID' AFTER `copy_from`; + +ALTER TABLE `sys_auth_detail` +ADD COLUMN `copy_from` varchar(255) NULL COMMENT '复制来源' AFTER `update_time`, +ADD COLUMN `copy_id` varchar(255) NULL COMMENT '复制ID' AFTER `copy_from`; + + +-- ---------------------------- +-- Function structure for copy_auth +-- ---------------------------- +DROP FUNCTION IF EXISTS `copy_auth`; +delimiter ;; +CREATE FUNCTION `copy_auth`(authSource varchar(255),authSourceType varchar(255),authUser varchar(255)) + RETURNS varchar(255) CHARSET utf8mb4 + READS SQL DATA +BEGIN + +DECLARE authId varchar(255); + +DECLARE userId varchar(255); + +DECLARE copyId varchar(255); + +select uuid() into authId; + +select uuid() into copyId; + +select max(sys_user.user_id) into userId from sys_user where username= authUser; + +delete from sys_auth_detail where auth_id in ( +select id from sys_auth where sys_auth.auth_source=authSource and sys_auth.auth_source_type=authSourceType +); + +delete from sys_auth where sys_auth.auth_source=authSource and sys_auth.auth_source_type=authSourceType; + +INSERT INTO sys_auth ( + id, + auth_source, + auth_source_type, + auth_target, + auth_target_type, + auth_time, + auth_user +) +VALUES + ( + authId, + authSource, + authSourceType, + userId, + 'user', + unix_timestamp( + now())* 1000,'auto'); + + INSERT INTO sys_auth_detail ( + id, + auth_id, + privilege_name, + privilege_type, + privilege_value, + privilege_extend, + remark, + create_user, + create_time + ) SELECT + uuid() AS id, + authId AS auth_id, + sys_auth_detail.privilege_name, + sys_auth_detail.privilege_type, + 1, + sys_auth_detail.privilege_extend, + sys_auth_detail.remark, + 'auto' AS create_user, + unix_timestamp(now())* 1000 AS create_time + FROM + sys_auth_detail where auth_id =authSourceType; + +/**继承第一父级权限**/ + +insert into sys_auth( +id, + auth_source, + auth_source_type, + auth_target, + auth_target_type, + auth_time, + auth_user, + copy_from, + copy_id +) +SELECT + uuid() as id, + authSource as auth_source, + authSourceType as auth_source_type, + auth_target, + auth_target_type, + NOW()* 1000 as auth_time, + 'auto' as auth_user, + id as copy_from, + copyId as copy_id +FROM + sys_auth +WHERE + auth_source IN ( + SELECT + pid + FROM + v_auth_model + WHERE + id = authSource + AND model_type = authSourceType + ) + AND auth_source_type = authSourceType; +INSERT INTO sys_auth_detail ( + id, + auth_id, + privilege_name, + privilege_type, + privilege_value, + privilege_extend, + remark, + create_user, + create_time, + copy_from, + copy_id +) SELECT +uuid() AS id, +sa_copy.t_id AS auth_id, +sys_auth_detail.privilege_name, +sys_auth_detail.privilege_type, +sys_auth_detail.privilege_value, +sys_auth_detail.privilege_extend, +sys_auth_detail.remark, +'auto' AS create_user, +unix_timestamp( +now())* 1000 AS create_time, +id AS copy_from, +copyId AS copy_id +FROM + sys_auth_detail + INNER JOIN ( + SELECT + id AS t_id, + copy_from AS s_id + FROM + sys_auth + WHERE + copy_id = copyId + ) sa_copy ON sys_auth_detail.auth_id = sa_copy.s_id; + +RETURN 'success'; + +END +;; +delimiter ; + INSERT INTO `my_plugin`(`plugin_id`, `name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `install_type`, `creator`, `load_mybatis`, `release_time`, `install_time`, `module_name`, `icon`) VALUES (3, 'tabs插件', 'default', 0, 20000, 'panel', 'tabs插件', '1.0-SNAPSHOT', NULL, 'fit2cloud-chenyw', 0, NULL, NULL, 'dataease-extensions-tabs-backend', NULL); \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index 9cd95b9828..e0c6fa78f8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -54,6 +54,7 @@ "vue-axios": "3.2.4", "vue-clipboard2": "0.3.1", "vue-codemirror": "^4.0.6", + "vue-friendly-iframe": "^0.20.0", "vue-fullscreen": "^2.5.2", "vue-i18n": "7.3.2", "vue-proportion-directive": "^1.1.0", diff --git a/frontend/public/link.html b/frontend/public/link.html index dd609e0dd8..b3008b8551 100644 --- a/frontend/public/link.html +++ b/frontend/public/link.html @@ -32,6 +32,7 @@ const link = getQueryVariable('link') const user = getQueryVariable('user') const terminal = getQueryVariable('terminal') + const attachParams = getQueryVariable('attachParams') let url = "/#/delink?link=" + encodeURIComponent(link) if (terminal) { url += '&terminal=' + terminal @@ -39,6 +40,9 @@ if (user) { url += '&user=' + user } + if (attachParams) { + url += '&attachParams=' + attachParams + } window.location.href = url diff --git a/frontend/src/api/panel/outerParams.js b/frontend/src/api/panel/outerParams.js index 7f8ecb3c5d..31d2a7890b 100644 --- a/frontend/src/api/panel/outerParams.js +++ b/frontend/src/api/panel/outerParams.js @@ -7,8 +7,6 @@ export function queryWithPanelId(panelId) { }) } - - export function updateOuterParamsSet(requestInfo) { return request({ url: '/outerParams/updateOuterParamsSet', @@ -17,3 +15,11 @@ export function updateOuterParamsSet(requestInfo) { loading: true }) } + +export function getOuterParamsInfo(panelId) { + return request({ + url: '/outerParams/getOuterParamsInfo/' + panelId, + method: 'get', + loading: true + }) +} diff --git a/frontend/src/components/canvas/components/Editor/FrameLinks.vue b/frontend/src/components/canvas/components/Editor/FrameLinks.vue new file mode 100644 index 0000000000..b7f918dd96 --- /dev/null +++ b/frontend/src/components/canvas/components/Editor/FrameLinks.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/frontend/src/components/canvas/components/Editor/PreviewEject.vue b/frontend/src/components/canvas/components/Editor/PreviewEject.vue index 5746f77bef..068c6e77e1 100644 --- a/frontend/src/components/canvas/components/Editor/PreviewEject.vue +++ b/frontend/src/components/canvas/components/Editor/PreviewEject.vue @@ -9,6 +9,7 @@ import { uuid } from 'vue-uuid' import { initPanelData } from '@/api/panel/panel' import { queryTargetPanelJumpInfo } from '@/api/panel/linkJump' import { proxyInitPanelData } from '@/api/panel/shareProxy' +import { getOuterParamsInfo } from '@/api/panel/outerParams' export default { components: { Preview }, @@ -75,9 +76,33 @@ export default { }, initCallBack() { - this.dataLoading = false + this.dataLoading = true + let loadingCount = 0 // 如果含有跳转参数 进行触发 const tempParam = localStorage.getItem('jumpInfoParam') + // 添加外部参数 + const attachParamsEncode = this.$route.query.attachParams + tempParam && loadingCount++ + attachParamsEncode && loadingCount++ + + if (attachParamsEncode) { + try { + const Base64 = require('js-base64').Base64 + const attachParam = JSON.parse(Base64.decode(attachParamsEncode)) + getOuterParamsInfo(this.panelId).then(rsp => { + if (--loadingCount === 0) { + this.dataLoading = false + } + this.$store.commit('setNowPanelOuterParamsInfo', rsp.data) + this.$store.commit('addOuterParamsFilter', attachParam) + }) + } catch (e) { + if (--loadingCount === 0) { + this.dataLoading = false + } + console.log('outerParams Deocode error:', e) + } + } if (tempParam) { localStorage.removeItem('jumpInfoParam') const jumpParam = JSON.parse(tempParam) @@ -87,13 +112,24 @@ export default { sourceFieldId: jumpParam.sourceFieldId, targetPanelId: this.panelId } - this.dataLoading = true - // 刷新跳转目标仪表板联动信息 - queryTargetPanelJumpInfo(jumpRequestParam).then(rsp => { - this.dataLoading = false - this.$store.commit('setNowTargetPanelJumpInfo', rsp.data) - this.$store.commit('addViewTrackFilter', jumpParam) - }) + try { + // 刷新跳转目标仪表板联动信息 + queryTargetPanelJumpInfo(jumpRequestParam).then(rsp => { + if (--loadingCount === 0) { + this.dataLoading = false + } + this.$store.commit('setNowTargetPanelJumpInfo', rsp.data) + this.$store.commit('addViewTrackFilter', jumpParam) + }) + } catch (e) { + if (--loadingCount === 0) { + this.dataLoading = false + } + console.log('queryTargetPanelJumpInfo error:', e) + } + } + if (loadingCount === 0) { + this.dataLoading = false } }, resetID(data) { diff --git a/frontend/src/components/canvas/components/TextAttr.vue b/frontend/src/components/canvas/components/TextAttr.vue index 94cdc24b5c..3f89341cc8 100644 --- a/frontend/src/components/canvas/components/TextAttr.vue +++ b/frontend/src/components/canvas/components/TextAttr.vue @@ -134,6 +134,11 @@ +
+ + + +
@@ -156,9 +161,10 @@ import Hyperlinks from '@/components/canvas/components/Editor/Hyperlinks' import VideoLinks from '@/components/canvas/components/Editor/VideoLinks' import DateFormat from '@/components/canvas/components/Editor/DateFormat' import { COLOR_PANEL } from '@/views/chart/chart/chart' +import FrameLinks from '@/components/canvas/components/Editor/FrameLinks' export default { - components: { Hyperlinks, DateFormat, VideoLinks }, + components: { FrameLinks, Hyperlinks, DateFormat, VideoLinks }, props: { scrollLeft: { type: Number, @@ -292,6 +298,10 @@ export default { 'de-video': [ 'opacity', 'videoLinks' + ], + 'de-frame': [ + 'opacity', + 'frameLinks' ] } }, diff --git a/frontend/src/components/canvas/custom-component/DeFrame.vue b/frontend/src/components/canvas/custom-component/DeFrame.vue new file mode 100644 index 0000000000..61e8d7cf7d --- /dev/null +++ b/frontend/src/components/canvas/custom-component/DeFrame.vue @@ -0,0 +1,106 @@ +