diff --git a/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java b/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java index 2ea358f8ae..22861cab29 100644 --- a/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java +++ b/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java @@ -5,11 +5,11 @@ import java.io.Serializable; /** *

- * + * 公共链接 *

* * @author fit2cloud - * @since 2023-09-22 + * @since 2024-04-07 */ @TableName("xpack_share") public class XpackShare implements Serializable { @@ -61,6 +61,11 @@ public class XpackShare implements Serializable { */ private Integer type; + /** + * 自动生成密码 + */ + private Boolean autoPwd; + public Long getId() { return id; } @@ -133,6 +138,14 @@ public class XpackShare implements Serializable { this.type = type; } + public Boolean getAutoPwd() { + return autoPwd; + } + + public void setAutoPwd(Boolean autoPwd) { + this.autoPwd = autoPwd; + } + @Override public String toString() { return "XpackShare{" + @@ -145,6 +158,7 @@ public class XpackShare implements Serializable { ", resourceId = " + resourceId + ", oid = " + oid + ", type = " + type + + ", autoPwd = " + autoPwd + "}"; } } diff --git a/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java b/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java index 488a2acc43..b2ecd60bb4 100644 --- a/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java +++ b/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java @@ -6,11 +6,11 @@ import org.apache.ibatis.annotations.Mapper; /** *

- * Mapper 接口 + * 公共链接 Mapper 接口 *

* * @author fit2cloud - * @since 2023-09-22 + * @since 2024-04-07 */ @Mapper public interface XpackShareMapper extends BaseMapper { diff --git a/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java b/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java index ee5fababab..fabaf8359a 100644 --- a/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java +++ b/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java @@ -82,12 +82,13 @@ public class XpackShareManage { xpackShareMapper.updateById(originData); } - public void editPwd(Long resourceId, String pwd) { + public void editPwd(Long resourceId, String pwd, Boolean autoPwd) { XpackShare originData = queryByResource(resourceId); if (ObjectUtils.isEmpty(originData)) { DEException.throwException("share instance not exist"); } originData.setPwd(pwd); + originData.setAutoPwd(ObjectUtils.isEmpty(autoPwd) || autoPwd); xpackShareMapper.updateById(originData); } @@ -169,8 +170,7 @@ public class XpackShareManage { if (StringUtils.isBlank(xpackShare.getPwd())) return true; if (StringUtils.isBlank(ciphertext)) return false; String text = RsaUtils.decryptStr(ciphertext); - int len = text.length(); - int splitIndex = len - 4; + int splitIndex = 8; String pwd = text.substring(splitIndex); String uuid = text.substring(0, splitIndex); return StringUtils.equals(xpackShare.getUuid(), uuid) && StringUtils.equals(xpackShare.getPwd(), pwd); @@ -178,8 +178,7 @@ public class XpackShareManage { public boolean validatePwd(XpackSharePwdValidator validator) { String ciphertext = RsaUtils.decryptStr(validator.getCiphertext()); - int len = ciphertext.length(); - int splitIndex = len - 4; + int splitIndex = 8; String pwd = ciphertext.substring(splitIndex); String uuid = ciphertext.substring(0, splitIndex); QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/core/core-backend/src/main/java/io/dataease/share/server/XpackShareServer.java b/core/core-backend/src/main/java/io/dataease/share/server/XpackShareServer.java index 94bb97bb25..11d2b412e6 100644 --- a/core/core-backend/src/main/java/io/dataease/share/server/XpackShareServer.java +++ b/core/core-backend/src/main/java/io/dataease/share/server/XpackShareServer.java @@ -44,7 +44,7 @@ public class XpackShareServer implements XpackShareApi { @Override public void editPwd(XpackSharePwdRequest request) { - xpackShareManage.editPwd(request.getResourceId(), request.getPwd()); + xpackShareManage.editPwd(request.getResourceId(), request.getPwd(), request.getAutoPwd()); } @Override diff --git a/core/core-backend/src/main/resources/db/migration/V2.6__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.6__ddl.sql new file mode 100644 index 0000000000..079735f803 --- /dev/null +++ b/core/core-backend/src/main/resources/db/migration/V2.6__ddl.sql @@ -0,0 +1,2 @@ +ALTER TABLE `xpack_share` + ADD COLUMN `auto_pwd` tinyint(1) NOT NULL DEFAULT 1 COMMENT '自动生成密码' AFTER `type`; \ No newline at end of file diff --git a/core/core-frontend/src/directive/ClickOutside/index.ts b/core/core-frontend/src/directive/ClickOutside/index.ts new file mode 100644 index 0000000000..6e91b07fcc --- /dev/null +++ b/core/core-frontend/src/directive/ClickOutside/index.ts @@ -0,0 +1,13 @@ +export const vClickOutside = { + beforeMount(el, binding) { + el.clickOutsideEvent = function (event) { + if (!(el === event.target || el.contains(event.target))) { + binding.value(event) + } + } + document.addEventListener('click', el.clickOutsideEvent) + }, + unmounted(el) { + document.removeEventListener('click', el.clickOutsideEvent) + } +} diff --git a/core/core-frontend/src/directive/index.ts b/core/core-frontend/src/directive/index.ts index 10759996e9..b3ff90e4d0 100644 --- a/core/core-frontend/src/directive/index.ts +++ b/core/core-frontend/src/directive/index.ts @@ -1,5 +1,7 @@ import { checkPermission } from './Permission' +import { vClickOutside } from './ClickOutside' import type { App } from 'vue' export const installDirective = (app: App) => { app.directive('permission', checkPermission) + app.directive('click-outside', vClickOutside) } diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index 59e8c88890..f521b9129f 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -1884,6 +1884,7 @@ export default { copy_short_link: '复制短链接', copy_short_link_passwd: '复制短链接及密码', passwd_protect: '密码保护', + auto_pwd: '自动生成密码', link: '链接', over_time: '有效期', link_expire: '链接已过期!', diff --git a/core/core-frontend/src/views/share/link/pwd.vue b/core/core-frontend/src/views/share/link/pwd.vue index a9ad6eb164..f43a30047e 100644 --- a/core/core-frontend/src/views/share/link/pwd.vue +++ b/core/core-frontend/src/views/share/link/pwd.vue @@ -15,7 +15,8 @@ ({ { required: true, message: t('pblink.key_pwd'), trigger: 'blur' }, { required: true, - pattern: /^[a-zA-Z0-9]{4}$/, + pattern: /^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{4,10}$/, message: t('pblink.pwd_format_error'), trigger: 'blur' } diff --git a/core/core-frontend/src/views/share/share/ShareHandler.vue b/core/core-frontend/src/views/share/share/ShareHandler.vue index f9b933c6f6..8eb69653eb 100644 --- a/core/core-frontend/src/views/share/share/ShareHandler.vue +++ b/core/core-frontend/src/views/share/share/ShareHandler.vue @@ -20,6 +20,7 @@ v-model="dialogVisible" :close-on-click-modal="true" :append-to-body="true" + :before-close="beforeClose" title="公共链接分享" width="480px" :show-close="false" @@ -62,12 +63,34 @@ @change="pwdEnableSwitcher" :label="t('visualization.passwd_protect')" /> - -
- +
+ +
+
+ @@ -87,7 +110,7 @@