From a7144fd0cb0755a47c9a82ef0db67503205f2c5c Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 20 Oct 2021 14:03:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=AC=E5=85=B1=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=89=E6=95=88=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/base/domain/PanelLink.java | 2 + .../base/domain/PanelLinkExample.java | 60 ++++++++++++++ .../dataease/base/mapper/PanelLinkMapper.xml | 25 ++++-- .../base/mapper/ext/ExtPanelLinkMapper.java | 11 +++ .../base/mapper/ext/ExtPanelLinkMapper.xml | 17 ++++ .../controller/panel/api/LinkApi.java | 5 ++ .../controller/panel/server/LinkServer.java | 10 +++ .../request/panel/link/OverTimeRequest.java | 19 +++++ .../dataease/dto/panel/link/GenerateDto.java | 2 + .../dataease/dto/panel/link/ValidateDto.java | 3 + .../service/panel/PanelLinkService.java | 22 +++++ .../resources/db/migration/V27__de1.4.sql | 4 + .../src/main/resources/generatorConfig.xml | 2 +- frontend/package.json | 2 +- frontend/src/api/link/index.js | 8 ++ frontend/src/lang/en.js | 2 + frontend/src/lang/tw.js | 19 +++++ frontend/src/lang/zh.js | 4 +- frontend/src/link/link.js | 2 +- frontend/src/views/link/generate/index.vue | 81 ++++++++++++++++++- frontend/src/views/link/index.vue | 14 +++- frontend/src/views/link/overtime/index.vue | 3 + 22 files changed, 302 insertions(+), 15 deletions(-) create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.java create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.xml create mode 100644 backend/src/main/java/io/dataease/controller/request/panel/link/OverTimeRequest.java create mode 100644 frontend/src/views/link/overtime/index.vue diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLink.java b/backend/src/main/java/io/dataease/base/domain/PanelLink.java index efe0e389fb..966a8c59c3 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelLink.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelLink.java @@ -13,5 +13,7 @@ public class PanelLink implements Serializable { private String pwd; + private Long overTime; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java b/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java index 0dccb6d0b7..99e7fb3f91 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java @@ -363,6 +363,66 @@ public class PanelLinkExample { addCriterion("pwd not between", value1, value2, "pwd"); return (Criteria) this; } + + public Criteria andOverTimeIsNull() { + addCriterion("over_time is null"); + return (Criteria) this; + } + + public Criteria andOverTimeIsNotNull() { + addCriterion("over_time is not null"); + return (Criteria) this; + } + + public Criteria andOverTimeEqualTo(Long value) { + addCriterion("over_time =", value, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeNotEqualTo(Long value) { + addCriterion("over_time <>", value, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeGreaterThan(Long value) { + addCriterion("over_time >", value, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeGreaterThanOrEqualTo(Long value) { + addCriterion("over_time >=", value, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeLessThan(Long value) { + addCriterion("over_time <", value, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeLessThanOrEqualTo(Long value) { + addCriterion("over_time <=", value, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeIn(List values) { + addCriterion("over_time in", values, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeNotIn(List values) { + addCriterion("over_time not in", values, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeBetween(Long value1, Long value2) { + addCriterion("over_time between", value1, value2, "overTime"); + return (Criteria) this; + } + + public Criteria andOverTimeNotBetween(Long value1, Long value2) { + addCriterion("over_time not between", value1, value2, "overTime"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml index 130aeb61df..eedc1062fe 100644 --- a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml @@ -6,6 +6,7 @@ + @@ -66,7 +67,7 @@ - resource_id, `valid`, enable_pwd, pwd + resource_id, `valid`, enable_pwd, pwd, over_time @@ -156,6 +163,9 @@ pwd = #{record.pwd,jdbcType=VARCHAR}, + + over_time = #{record.overTime,jdbcType=BIGINT}, + @@ -166,7 +176,8 @@ set resource_id = #{record.resourceId,jdbcType=VARCHAR}, `valid` = #{record.valid,jdbcType=BIT}, enable_pwd = #{record.enablePwd,jdbcType=BIT}, - pwd = #{record.pwd,jdbcType=VARCHAR} + pwd = #{record.pwd,jdbcType=VARCHAR}, + over_time = #{record.overTime,jdbcType=BIGINT} @@ -183,6 +194,9 @@ pwd = #{pwd,jdbcType=VARCHAR}, + + over_time = #{overTime,jdbcType=BIGINT}, + where resource_id = #{resourceId,jdbcType=VARCHAR} @@ -190,7 +204,8 @@ update panel_link set `valid` = #{valid,jdbcType=BIT}, enable_pwd = #{enablePwd,jdbcType=BIT}, - pwd = #{pwd,jdbcType=VARCHAR} + pwd = #{pwd,jdbcType=VARCHAR}, + over_time = #{overTime,jdbcType=BIGINT} where resource_id = #{resourceId,jdbcType=VARCHAR} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.java new file mode 100644 index 0000000000..621ccfe6f0 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.java @@ -0,0 +1,11 @@ +package io.dataease.base.mapper.ext; + +import org.apache.ibatis.annotations.Param; + +import io.dataease.controller.request.panel.link.OverTimeRequest; + +public interface ExtPanelLinkMapper { + + void updateOverTime(@Param("request") OverTimeRequest request); + +} diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.xml new file mode 100644 index 0000000000..6e6b278b3f --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + update panel_link set over_time = #{request.overTime} where resource_id = #{request.resourceId} + + + + + + diff --git a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java index b37daef68e..56a1b0f245 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java @@ -6,6 +6,7 @@ import io.dataease.controller.ResultHolder; import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.panel.link.EnablePwdRequest; import io.dataease.controller.request.panel.link.LinkRequest; +import io.dataease.controller.request.panel.link.OverTimeRequest; import io.dataease.controller.request.panel.link.PasswordRequest; import io.dataease.dto.panel.link.GenerateDto; import io.dataease.dto.panel.link.ValidateDto; @@ -29,6 +30,10 @@ public interface LinkApi { @PostMapping("/enablePwd") void enablePwd(EnablePwdRequest request); + @ApiOperation("过期时间") + @PostMapping("/resetOverTime") + void resetOverTime(OverTimeRequest request); + @ApiOperation("启用/禁用链接分享") @PostMapping("/switchLink") void switchLink(LinkRequest request); diff --git a/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java b/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java index cd63ab3b2b..bd7a982145 100644 --- a/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java +++ b/backend/src/main/java/io/dataease/controller/panel/server/LinkServer.java @@ -8,6 +8,7 @@ import io.dataease.controller.panel.api.LinkApi; import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.panel.link.EnablePwdRequest; import io.dataease.controller.request.panel.link.LinkRequest; +import io.dataease.controller.request.panel.link.OverTimeRequest; import io.dataease.controller.request.panel.link.PasswordRequest; import io.dataease.controller.request.panel.link.ValidateRequest; import io.dataease.dto.panel.link.GenerateDto; @@ -46,6 +47,14 @@ public class LinkServer implements LinkApi { panelLinkService.changeEnablePwd(request); } + + + @Override + public void resetOverTime(@RequestBody OverTimeRequest request) { + panelLinkService.overTime(request); + + } + @Override public void switchLink(@RequestBody LinkRequest request) { panelLinkService.changeValid(request); @@ -74,6 +83,7 @@ public class LinkServer implements LinkApi { dto.setValid(one.getValid()); dto.setEnablePwd(one.getEnablePwd()); dto.setPassPwd(panelLinkService.validateHeads(one)); + dto.setExpire(panelLinkService.isExpire(one)); return dto; } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/link/OverTimeRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/link/OverTimeRequest.java new file mode 100644 index 0000000000..47545b0845 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/link/OverTimeRequest.java @@ -0,0 +1,19 @@ +package io.dataease.controller.request.panel.link; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Data +@Getter +@Setter +public class OverTimeRequest { + + @ApiModelProperty("资源ID") + private String resourceId; + + @ApiModelProperty("过期时间") + private Long overTime; + +} diff --git a/backend/src/main/java/io/dataease/dto/panel/link/GenerateDto.java b/backend/src/main/java/io/dataease/dto/panel/link/GenerateDto.java index 5958d12f9a..efad91a31a 100644 --- a/backend/src/main/java/io/dataease/dto/panel/link/GenerateDto.java +++ b/backend/src/main/java/io/dataease/dto/panel/link/GenerateDto.java @@ -14,4 +14,6 @@ public class GenerateDto { private String uri; @ApiModelProperty("密码") private String pwd; + @ApiModelProperty("有效期") + private Long overTime; } diff --git a/backend/src/main/java/io/dataease/dto/panel/link/ValidateDto.java b/backend/src/main/java/io/dataease/dto/panel/link/ValidateDto.java index 7d92ecbe80..29f70f2630 100644 --- a/backend/src/main/java/io/dataease/dto/panel/link/ValidateDto.java +++ b/backend/src/main/java/io/dataease/dto/panel/link/ValidateDto.java @@ -6,6 +6,9 @@ import lombok.Data; @Data public class ValidateDto { + @ApiModelProperty("是否过期") + private boolean expire; + @ApiModelProperty("是否可用") private boolean valid; @ApiModelProperty("是否启用密码") diff --git a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java index ddb7d29fa1..609eb65c1e 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java @@ -9,10 +9,12 @@ import io.dataease.base.domain.PanelGroupWithBLOBs; import io.dataease.base.domain.PanelLink; import io.dataease.base.mapper.PanelGroupMapper; import io.dataease.base.mapper.PanelLinkMapper; +import io.dataease.base.mapper.ext.ExtPanelLinkMapper; import io.dataease.commons.utils.ServletUtils; import io.dataease.controller.ResultHolder; import io.dataease.controller.request.panel.link.EnablePwdRequest; import io.dataease.controller.request.panel.link.LinkRequest; +import io.dataease.controller.request.panel.link.OverTimeRequest; import io.dataease.controller.request.panel.link.PasswordRequest; import io.dataease.dto.panel.link.GenerateDto; import org.apache.commons.lang3.ObjectUtils; @@ -45,6 +47,9 @@ public class PanelLinkService { @Resource private PanelGroupMapper panelGroupMapper; + @Resource + private ExtPanelLinkMapper extPanelLinkMapper; + public void changeValid(LinkRequest request){ PanelLink po = new PanelLink(); po.setResourceId(request.getResourceId()); @@ -66,6 +71,14 @@ public class PanelLinkService { mapper.updateByPrimaryKeySelective(po); } + public void overTime(OverTimeRequest request) { + /* PanelLink po = new PanelLink(); + po.setResourceId(request.getResourceId()); + po.setOverTime(request.getOverTime()); + mapper.updateByPrimaryKeySelective(po); */ + extPanelLinkMapper.updateOverTime(request); + } + public PanelLink findOne(String resourceId){ PanelLink panelLink = mapper.selectByPrimaryKey(resourceId); return panelLink; @@ -123,6 +136,7 @@ public class PanelLinkService { result.setEnablePwd(linl.getEnablePwd()); result.setPwd(linl.getPwd()); result.setUri(baseUrl+buildLinkParam(linl.getResourceId())); + result.setOverTime(linl.getOverTime()); return result; } @@ -144,6 +158,14 @@ public class PanelLinkService { return verify; } + // 验证链接是否过期 + public Boolean isExpire(PanelLink panelLink) { + if (ObjectUtils.isEmpty(panelLink.getOverTime())) { + return false; + } + return System.currentTimeMillis() > panelLink.getOverTime(); + } + public boolean validatePwd(PasswordRequest request) throws Exception { String password = decryptParam(request.getPassword()); String resourceId = request.getResourceId(); diff --git a/backend/src/main/resources/db/migration/V27__de1.4.sql b/backend/src/main/resources/db/migration/V27__de1.4.sql index ff0edde3c0..5a2d140e1c 100644 --- a/backend/src/main/resources/db/migration/V27__de1.4.sql +++ b/backend/src/main/resources/db/migration/V27__de1.4.sql @@ -1,3 +1,7 @@ ALTER TABLE `chart_view` ADD COLUMN `render` varchar(50) COMMENT '视图渲染方式' AFTER `type`; UPDATE `chart_view` SET `render` = 'echarts' WHERE `type` != 'liquid'; UPDATE `chart_view` SET `render` = 'antv' WHERE `type` = 'liquid'; + + + +ALTER TABLE `panel_link` ADD COLUMN `over_time` bigint(13) NULL DEFAULT NULL COMMENT '有效截止时间' AFTER `pwd`; diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index ade934dfaf..77eee6083d 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -65,7 +65,7 @@ - +
diff --git a/frontend/package.json b/frontend/package.json index 6aeade1894..e867c675c2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,7 +22,7 @@ "core-js": "^2.6.5", "echarts": "^5.0.1", "element-resize-detector": "^1.2.3", - "element-ui": "2.13.0", + "element-ui": "2.15.6", "file-save": "^0.2.0", "file-saver": "^2.0.5", "fit2cloud-ui": "1.5.0-beta.0", diff --git a/frontend/src/api/link/index.js b/frontend/src/api/link/index.js index fd637069d0..b7884dd916 100644 --- a/frontend/src/api/link/index.js +++ b/frontend/src/api/link/index.js @@ -26,6 +26,14 @@ export function setPwd(data) { }) } +export function setOverTime(data) { + return request({ + url: 'api/link/resetOverTime', + method: 'post', + data + }) +} + export function switchValid(data) { return request({ url: 'api/link/switchLink', diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 7ed129df3f..8f5e667022 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1180,6 +1180,8 @@ export default { passwd_protect: 'Password Protect', link: 'Link', link_share: 'Share Link', + over_time: 'Over time', + link_expire: 'Link is expire', link_share_desc: 'After opening the link, anyone can access the dashboard through this link.', share: 'Share', datalist: 'Chart List', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 5782cb9485..860a748b81 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1183,6 +1183,8 @@ export default { passwd_protect: '密碼保護', link: '鏈接', link_share: '鏈接分享', + over_time: '有效期', + link_expire: '鏈接已過期!', link_share_desc: '開啓鏈接後,任何人可通過此鏈接訪問儀表板。', share: '分享', datalist: '視圖列表', @@ -1535,6 +1537,23 @@ export default { deyear: { label: '年份', placeholder: '請選擇年份' + }, + deshowdate: { + label: '時間', + show_week: '顯示星期', + show_date: '顯示日期', + time_format: '時間格式', + date_format: '日期格式', + custom: '自定義格式', + open_mode: '展示風格', + m_default: '簡單風格', + m_elec: '電子時鐘', + m_simple: '簡單錶盤', + m_complex: '複雜錶盤', + select_openMode: '請選擇展示風格', + select_time_format: '請選擇時間各式', + select_date_format: '請選擇日期格式' + } } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 230926a63a..273602a890 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1187,6 +1187,8 @@ export default { copy_short_link_passwd: '复制短链接及密码', passwd_protect: '密码保护', link: '链接', + over_time: '有效期', + link_expire: '链接已过期!', link_share: '链接分享', link_share_desc: '开启链接后,任何人可通过此链接访问仪表板。', share: '分享', @@ -1558,7 +1560,7 @@ export default { m_complex: '复杂表盘', select_openMode: '请选择展示风格', select_time_format: '请选择时间格式', - select_date_format: '请选择时间格式' + select_date_format: '请选择日期格式' } } diff --git a/frontend/src/link/link.js b/frontend/src/link/link.js index 420cb45093..4999c9d1f3 100644 --- a/frontend/src/link/link.js +++ b/frontend/src/link/link.js @@ -9,7 +9,7 @@ import '@/components/canvas/custom-component' // 注册自定义组件 import widgets from '@/components/widget' import * as echarts from 'echarts' import UmyUi from 'umy-ui' - +import '@/utils/DateUtil' Vue.use(UmyUi) Vue.prototype.$echarts = echarts Vue.config.productionTip = false diff --git a/frontend/src/views/link/generate/index.vue b/frontend/src/views/link/generate/index.vue index 61d1c68099..1f3ddc0c66 100644 --- a/frontend/src/views/link/generate/index.vue +++ b/frontend/src/views/link/generate/index.vue @@ -2,7 +2,7 @@
- + + + + + {{ $t('panel.passwd_protect') }} @@ -45,7 +58,7 @@