diff --git a/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java b/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java
index 8555d2c381..cc37ef3cb4 100644
--- a/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java
+++ b/backend/src/main/java/io/dataease/auth/entity/AccountLockStatus.java
@@ -12,4 +12,6 @@ public class AccountLockStatus {
private Long unlockTime;
private Integer relieveTimes;
+
+ private Integer remainderTimes;
}
diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java
index 4455484c75..44fe78b13e 100644
--- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java
+++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java
@@ -81,8 +81,8 @@ public class AuthServer implements AuthApi {
ValidateResult validateResult = ldapXpackService.login(request);
if (!validateResult.isSuccess()) {
- authUserService.recordLoginFail(username, 1);
- DataEaseException.throwException(validateResult.getMsg());
+ AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 1);
+ DataEaseException.throwException(appendLoginErrorMsg(validateResult.getMsg(), lockStatus));
}
XpackLdapUserEntity ldapUserEntity = validateResult.getData();
if (StringUtils.isBlank(ldapUserEntity.getEmail())) {
@@ -120,19 +120,19 @@ public class AuthServer implements AuthApi {
SysUserEntity user = authUserService.getUserByName(username);
if (ObjectUtils.isEmpty(user)) {
- authUserService.recordLoginFail(username, 0);
- DataEaseException.throwException(Translator.get("i18n_user_do_not_exist"));
+ AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0);
+ DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_id_or_pwd_error"), lockStatus));
}
// 验证登录类型是否与用户类型相同
if (!sysUserService.validateLoginType(user.getFrom(), loginType)) {
- authUserService.recordLoginFail(username, 0);
- DataEaseException.throwException(Translator.get("i18n_login_type_error"));
+ AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0);
+ DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_login_type_error"), lockStatus));
}
if (user.getEnabled() == 0) {
- authUserService.recordLoginFail(username, 0);
- DataEaseException.throwException(Translator.get("i18n_user_is_disable"));
+ AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0);
+ DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_user_is_disable"), lockStatus));
}
String realPwd = user.getPassword();
@@ -144,8 +144,8 @@ public class AuthServer implements AuthApi {
pwd = CodingUtil.md5(pwd);
if (!StringUtils.equals(pwd, realPwd)) {
- authUserService.recordLoginFail(username, 0);
- DataEaseException.throwException(Translator.get("i18n_id_or_pwd_error"));
+ AccountLockStatus lockStatus = authUserService.recordLoginFail(username, 0);
+ DataEaseException.throwException(appendLoginErrorMsg(Translator.get("i18n_id_or_pwd_error"), lockStatus));
}
}
@@ -161,6 +161,15 @@ public class AuthServer implements AuthApi {
return result;
}
+ private String appendLoginErrorMsg(String msg, AccountLockStatus lockStatus) {
+ if (ObjectUtils.isEmpty(lockStatus)) return msg;
+ if (ObjectUtils.isNotEmpty(lockStatus.getRemainderTimes())) {
+ String i18n = Translator.get("i18n_login_remainder_times");
+ msg += String.format(i18n, lockStatus.getRemainderTimes());
+ }
+ return msg;
+ }
+
@Override
public CurrentUserDto userInfo() {
CurrentUserDto userDto = (CurrentUserDto) SecurityUtils.getSubject().getPrincipal();
diff --git a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
index e8704f5dc5..6db8a61695 100644
--- a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
+++ b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
@@ -55,7 +55,7 @@ public interface AuthUserService {
void checkAdmin(String uname, String pwd);
- void recordLoginFail(String username, Integer logintype);
+ AccountLockStatus recordLoginFail(String username, Integer logintype);
void unlockAccount(String username, Integer logintype);
diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
index f5329eb743..c65ef79ab6 100644
--- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
+++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
@@ -277,14 +277,16 @@ public class AuthUserServiceImpl implements AuthUserService {
}
@Override
- public void recordLoginFail(String username, Integer logintype) {
- if (!supportLoginLimit()) return;
+ public AccountLockStatus recordLoginFail(String username, Integer logintype) {
+ if (!supportLoginLimit()) return null;
long now = System.currentTimeMillis();
SysLoginLimit sysLoginLimit = new SysLoginLimit();
sysLoginLimit.setUsername(username);
sysLoginLimit.setLoginType(logintype);
sysLoginLimit.setRecordTime(now);
sysLoginLimitMapper.insert(sysLoginLimit);
+ return lockStatus(username, logintype);
+
}
@Override
@@ -312,13 +314,16 @@ public class AuthUserServiceImpl implements AuthUserService {
SysLoginLimitExample example = new SysLoginLimitExample();
example.createCriteria().andUsernameEqualTo(username).andLoginTypeEqualTo(logintype).andRecordTimeGreaterThan(dividingPointTime);
List sysLoginLimits = sysLoginLimitMapper.selectByExample(example);
+ accountLockStatus.setRemainderTimes(limitTimes);
if (CollectionUtils.isNotEmpty(sysLoginLimits)) {
boolean needLock = sysLoginLimits.size() >= limitTimes;
+ accountLockStatus.setRemainderTimes(limitTimes - sysLoginLimits.size());
accountLockStatus.setLocked(needLock);
if (needLock) {
long unlockTime = now + (longRelieveTimes * 60L * 1000L);
accountLockStatus.setUnlockTime(unlockTime);
accountLockStatus.setRelieveTimes(relieveTimes);
+ accountLockStatus.setRemainderTimes(0);
}
}
diff --git a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
index 41de90d9c6..d7963002c6 100644
--- a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
+++ b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
@@ -364,10 +364,11 @@ public class DorisQueryProvider extends QueryProvider {
@Override
public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
+ String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
if (isTable) {
- return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize();
+ return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit;
} else {
- return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize();
+ return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit;
}
}
diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
index 29888495af..e072cba02a 100644
--- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
+++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
@@ -364,10 +364,11 @@ public class MysqlQueryProvider extends QueryProvider {
@Override
public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
+ String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
if (isTable) {
- return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize();
+ return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit;
} else {
- return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize();
+ return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit;
}
}
diff --git a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
index a990aed009..25cc5c4a04 100644
--- a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
+++ b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
@@ -381,10 +381,11 @@ public class MysqlQueryProvider extends QueryProvider {
@Override
public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
- if(isTable){
- return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize();
- }else {
- return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize();
+ String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
+ if (isTable) {
+ return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit;
+ } else {
+ return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit;
}
}
diff --git a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java
index 2e50a71a12..71e32cb73f 100644
--- a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java
+++ b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java
@@ -1011,7 +1011,7 @@ public class ChartDataBuild {
} else {
switch (columnPermissionItem.getDesensitizationRule().getCustomBuiltInRule()) {
case RetainBeforeMAndAfterN:
- if (StringUtils.isEmpty(originStr) || originStr.length() < columnPermissionItem.getDesensitizationRule().getM() + columnPermissionItem.getDesensitizationRule().getN() + 1) {
+ if (StringUtils.isEmpty(originStr) || originStr.length() <= columnPermissionItem.getDesensitizationRule().getM() + columnPermissionItem.getDesensitizationRule().getN() + 1) {
desensitizationStr = String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getM(), "X")) + "***" + String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getN(), "X"));
} else {
desensitizationStr = StringUtils.substring(originStr, 0, columnPermissionItem.getDesensitizationRule().getM() - 1) + "***" + StringUtils.substring(originStr, originStr.length() - columnPermissionItem.getDesensitizationRule().getN(), originStr.length() - 1);
diff --git a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java
index add7270d39..77fba010d0 100644
--- a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java
+++ b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java
@@ -13,6 +13,7 @@ import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.config.SpringContextUtil;
import io.dataease.plugins.xpack.auth.dto.request.*;
+import io.dataease.plugins.xpack.auth.dto.response.Item;
import io.dataease.plugins.xpack.auth.service.ColumnPermissionService;
import io.dataease.plugins.xpack.auth.service.RowPermissionService;
import org.apache.commons.collections4.CollectionUtils;
@@ -112,14 +113,14 @@ public class PermissionService {
}
if (CollectionUtils.isNotEmpty(fieldRoleColumnPermissionItems)) {
if (fieldRoleColumnPermissionItems.stream().map(ColumnPermissionItem::getOpt).collect(Collectors.toList()).contains(ColumnPermissionConstants.Desensitization)) {
- desensitizationList.put(field.getDataeaseName(), fieldUserColumnPermissionItems.get(0));
+ desensitizationList.put(field.getDataeaseName(), fieldRoleColumnPermissionItems.get(0));
result.add(field);
}
return;
}
if (CollectionUtils.isNotEmpty(fieldDeptColumnPermissionItems)) {
if (fieldDeptColumnPermissionItems.stream().map(ColumnPermissionItem::getOpt).collect(Collectors.toList()).contains(ColumnPermissionConstants.Desensitization)) {
- desensitizationList.put(field.getDataeaseName(), fieldUserColumnPermissionItems.get(0));
+ desensitizationList.put(field.getDataeaseName(), fieldDeptColumnPermissionItems.get(0));
result.add(field);
}
return;
@@ -209,34 +210,46 @@ public class PermissionService {
dataSetColumnPermissionsDTO.setAuthTargetType("user");
datasetColumnPermissions.addAll(columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO));
if (CollectionUtils.isNotEmpty(roleIds)) {
- dataSetColumnPermissionsDTO.setAuthTargetIds(roleIds);
- dataSetColumnPermissionsDTO.setAuthTargetType("role");
- List roleColumnPermissionsDTOS = new ArrayList<>();
- for (DataSetColumnPermissionsDTO columnPermissionsDTO : columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)) {
- columnPermissionsDTO.getWhiteListUser();
- List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken>() {
- }.getType());
- if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)) {
- roleColumnPermissionsDTOS.add(columnPermissionsDTO);
+ DataSetColumnPermissionsDTO request = new DataSetColumnPermissionsDTO();
+ request.setDatasetId(datasetId);
+ request.setAuthTargetType("role");
+ List- items = (List
- )columnPermissionService.authObjs(request);
+ roleIds = roleIds.stream().filter(id -> {return items.stream().map(Item::getId).collect(Collectors.toList()).contains(id);}).collect(Collectors.toList());
+ if(CollectionUtils.isNotEmpty(roleIds)){
+ dataSetColumnPermissionsDTO.setAuthTargetIds(roleIds);
+ dataSetColumnPermissionsDTO.setAuthTargetType("role");
+ List roleColumnPermissionsDTOS = new ArrayList<>();
+ for (DataSetColumnPermissionsDTO columnPermissionsDTO : columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)) {
+ columnPermissionsDTO.getWhiteListUser();
+ List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken
>() {
+ }.getType());
+ if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)) {
+ roleColumnPermissionsDTOS.add(columnPermissionsDTO);
+ }
}
+ datasetColumnPermissions.addAll(roleColumnPermissionsDTOS);
}
- datasetColumnPermissions.addAll(roleColumnPermissionsDTOS);
}
if (deptId != null) {
- dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId));
- dataSetColumnPermissionsDTO.setAuthTargetType("dept");
- List deptColumnPermissionsDTOS = new ArrayList<>();
- for (DataSetColumnPermissionsDTO columnPermissionsDTO : columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)) {
- List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken>() {
- }.getType());
- if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)) {
- deptColumnPermissionsDTOS.add(columnPermissionsDTO);
+ DataSetColumnPermissionsDTO request = new DataSetColumnPermissionsDTO();
+ request.setDatasetId(datasetId);
+ request.setAuthTargetType("dept");
+ List- items = (List
- )columnPermissionService.authObjs(request);
+ if(items.stream().map(Item::getId).collect(Collectors.toList()).contains(deptId)){
+ dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId));
+ dataSetColumnPermissionsDTO.setAuthTargetType("dept");
+ List deptColumnPermissionsDTOS = new ArrayList<>();
+ for (DataSetColumnPermissionsDTO columnPermissionsDTO : columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)) {
+ List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken
>() {
+ }.getType());
+ if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)) {
+ deptColumnPermissionsDTOS.add(columnPermissionsDTO);
+ }
}
+ datasetColumnPermissions.addAll(deptColumnPermissionsDTOS);
}
- datasetColumnPermissions.addAll(deptColumnPermissionsDTOS);
}
-
return datasetColumnPermissions;
}
diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties
index bc8f5acbb8..e2095991b5 100644
--- a/backend/src/main/resources/application.properties
+++ b/backend/src/main/resources/application.properties
@@ -73,28 +73,7 @@ dataease.sqlinjection.whitelists=/dataset/table/sqlPreview,/dataset/table/update
server.compression.enabled=true
server.compression.mime-types=application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plain
server.compression.min-response-size=1024
-#\u4E0B\u9762\u7684\u914D\u7F6E\u65B0\u589E\u5230/opt/dataease/conf/dataease/properties
-#\u7F13\u5B58\u7C7B\u578B
-##spring.cache.type=redis
-#spring.cache.type=ehcache
-#redis\u516C\u5171\u914D\u7F6E
-#spring.redis.timeout=10000
-#spring.redis.lettuce.pool.max-active=8
-#spring.redis.lettuce.pool.max-wait=-1
-#spring.redis.lettuce.pool.max-idle=8
-#\u5355\u673A\u6A21\u5F0Fredis\u914D\u7F6E
-#spring.redis.database=0
-#spring.redis.host=192.168.0.110
-#spring.redis.port=6379
-#spring.redis.password=DataEase_ZNB@REDIS
-#\u54E8\u5175\u6A21\u5F0Fredis\u914D\u7F6E
-#spring.redis.sentinel.master=mymaster
-#spring.redis.sentinel.nodes=192.168.0.110:26379,192.168.0.110:26380,192.168.0.110:26381
-#spring.redis.sentinel.password=
-#cluster\u6A21\u5F0Fredis\u914D\u7F6E
-#spring.redis.cluster.nodes=192.168.0.110:7001,192.168.0.110:7002,192.168.0.110:7003,192.168.0.110:7004,192.168.0.110:7005,192.168.0.110:7006
-#spring.redis.cluster.max-redirects=3
-#spring.redis.password=DataEase_ZNB@REDIS
+
server.servlet.context-parameters.configurationStrategy=SYSTEM_PROPERTIES
server.servlet.session.cookie.http-only=true
server.servlet.session.tracking-modes=cookie
diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties
index 951dca55a6..44b053e949 100644
--- a/backend/src/main/resources/i18n/messages_en_US.properties
+++ b/backend/src/main/resources/i18n/messages_en_US.properties
@@ -75,6 +75,7 @@ i18n_sql_not_empty=SQL can not be empty.
i18n_datasource_not_allow_delete_msg=datasets are using this data source and cannot be deleted
i18n_task_name_repeat=Name is used in same data set
i18n_id_or_pwd_error=Invalid ID or password
+i18n_login_remainder_times=(You can still enter %s times)
i18n_user_do_not_exist=User do not exist
i18n_user_is_disable=User is disabled
i18n_login_type_error=Login type error
diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties
index 6ec5cc2064..d51c0e69cf 100644
--- a/backend/src/main/resources/i18n/messages_zh_CN.properties
+++ b/backend/src/main/resources/i18n/messages_zh_CN.properties
@@ -75,6 +75,7 @@ i18n_sql_not_empty=SQL \u4E0D\u80FD\u4E3A\u7A7A
i18n_datasource_not_allow_delete_msg=\u4E2A\u6570\u636E\u96C6\u6B63\u5728\u4F7F\u7528\u6B64\u6570\u636E\u6E90\uFF0C\u65E0\u6CD5\u5220\u9664
i18n_task_name_repeat=\u540C\u4E00\u6570\u636E\u96C6\u4E0B\u4EFB\u52A1\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528
i18n_id_or_pwd_error=\u65E0\u6548\u7684ID\u6216\u5BC6\u7801
+i18n_login_remainder_times=(\u8FD8\u80FD\u8F93\u5165%s\u6B21)
i18n_user_do_not_exist=\u7528\u6237\u4E0D\u5B58\u5728
i18n_user_is_disable=\u7528\u6237\u72B6\u6001\u65E0\u6548
i18n_login_type_error=\u767B\u5F55\u65B9\u5F0F\u9519\u8BEF
diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties
index 0f0c6d30f2..37072949cb 100644
--- a/backend/src/main/resources/i18n/messages_zh_TW.properties
+++ b/backend/src/main/resources/i18n/messages_zh_TW.properties
@@ -75,6 +75,7 @@ i18n_sql_not_empty=SQL \u4E0D\u80FD\u70BA\u7A7A
i18n_datasource_not_allow_delete_msg=\u500B\u6578\u64DA\u96C6\u6B63\u5728\u4F7F\u7528\u6B64\u6578\u64DA\u6E90\uFF0C\u7121\u6CD5\u522A\u9664
i18n_task_name_repeat=\u540C\u4E00\u6578\u64DA\u96C6\u4E0B\u4EFB\u52D9\u540D\u7A31\u5DF2\u88AB\u4F7F\u7528
i18n_id_or_pwd_error=\u7121\u6548\u7684ID\u6216\u5BC6\u78BC
+i18n_login_remainder_times=(\u9084\u80FD\u8F38\u5165%s\u6B21)
i18n_user_do_not_exist=\u7528\u6236\u4E0D\u5B58\u5728
i18n_user_is_disable=\u7528\u6236\u72C0\u614B\u7121\u6548
i18n_login_type_error=\u767B\u9304\u65B9\u5F0F\u932F\u8AA4
diff --git a/frontend/src/views/dataset/data/UpdateInfo.vue b/frontend/src/views/dataset/data/UpdateInfo.vue
index a44ebedf1f..fc9075b9d7 100644
--- a/frontend/src/views/dataset/data/UpdateInfo.vue
+++ b/frontend/src/views/dataset/data/UpdateInfo.vue
@@ -136,7 +136,7 @@
key="__operation"
:label="$t('commons.operating')"
fixed="right"
- min-width="100"
+ min-width="180"
>
{{
$t(disableEdit(scope.row) ? 'auth.view' : 'commons.edit')
}}
+
+ {{ $t("emailtask.execute_now") }}
+
+
-
- {{ $t('components.run_once') }}
-
selectDataset()"
- >{{ $t("dataset.add_task") }}
+ >{{ $t("dataset.add_task") }}
+
{{ $t("organization.delete") }}
+ >{{ $t("organization.delete") }}
+
{{ $t("user.filter")
- }}
- ({{ filterTexts.length }})
-
+ >{{
+ $t("user.filter")
+ }}
+
+ ({{ filterTexts.length }})
+
{{ $t("user.list") }}
+ >{{ $t("user.list") }}
+
{{ $t("dataset.check_all") }}
+ >{{ $t("dataset.check_all") }}
+
{{ $t(column.label) }}
+ >{{ $t(column.label) }}
+
@@ -76,7 +83,7 @@
>
{{ paginationConfig.total }}
{{ $t("user.result_one") }}
-
+
{{ ele }}
+ class="el-icon-close"
+ @click="clearOneFilter(index)"
+ />
{{ $t("user.clear_filter") }}
+ >{{ $t("user.clear_filter") }}
+
{{
- $t("dataset.execute_once")
- }}
+ $t("dataset.execute_once")
+ }}
{{
- $t("dataset.cron_config")
- }}
+ $t("dataset.cron_config")
+ }}
{{
- $t("dataset.simple_cron")
- }}
+ $t("dataset.simple_cron")
+ }}
@@ -189,8 +197,8 @@
v-if="scope.row.lastExecStatus"
:class="[`de-${scope.row.lastExecStatus}-pre`, 'de-status']"
>{{
- $t(`dataset.${scope.row.lastExecStatus.toLocaleLowerCase()}`)
- }}
+ $t(`dataset.${scope.row.lastExecStatus.toLocaleLowerCase()}`)
+ }}
{{
- $t(disableEdit(scope.row) ? "auth.view" : "commons.edit")
- }}
+ >{{ $t(disableEdit(scope.row) ? "auth.view" : "commons.edit") }}
+
+ {{ $t("emailtask.execute_now") }}
+
-
- {{ $t("components.run_once") }}
-
{{
- $t("dataset.close")
- }}
+ $t("dataset.close")
+ }}