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')"
/>
-
-
-
+
+
+
+
+
-
-
{{ t('commons.reset') }}
+
+
+ {{ t('commons.reset') }}
+
+
+ {{ t('commons.copy') }}
+
@@ -87,7 +110,7 @@