🔨 优化系统配置逻辑.

This commit is contained in:
lijiahangmax
2025-10-09 14:31:43 +08:00
parent 37fc271741
commit b0be444fba
17 changed files with 129 additions and 158 deletions

View File

@@ -34,116 +34,116 @@ public interface ConfigKeys {
/** /**
* SFTP 文件预览大小 * SFTP 文件预览大小
*/ */
String SFTP_PREVIEW_SIZE = "sftp_previewSize"; String SFTP_PREVIEW_SIZE = "sftp.preview-size";
/** /**
* SFTP 重复文件备份 * SFTP 重复文件备份
*/ */
String SFTP_UPLOAD_PRESENT_BACKUP = "sftp_uploadPresentBackup"; String SFTP_UPLOAD_PRESENT_BACKUP = "sftp.upload-present-backup";
/** /**
* SFTP 备份文件名称 * SFTP 备份文件名称
*/ */
String SFTP_UPLOAD_BACKUP_FILE_NAME = "sftp_uploadBackupFileName"; String SFTP_UPLOAD_BACKUP_FILE_NAME = "sftp.upload-backup-file-name";
/** /**
* 加密公钥 * 加密公钥
*/ */
String ENCRYPT_PUBLIC_KEY = "encrypt_publicKey"; String ENCRYPT_PUBLIC_KEY = "encrypt.public-key";
/** /**
* 加密私钥 * 加密私钥
*/ */
String ENCRYPT_PRIVATE_KEY = "encrypt_privateKey"; String ENCRYPT_PRIVATE_KEY = "encrypt.private-key";
/** /**
* 日志前端显示行数 * 日志前端显示行数
*/ */
String LOG_WEB_SCROLL_LINES = "log_webScrollLines"; String LOG_WEB_SCROLL_LINES = "log.web-scroll-lines";
/** /**
* 日志加载偏移行 * 日志加载偏移行
*/ */
String LOG_TRACKER_LOAD_LINES = "log_trackerLoadLines"; String LOG_TRACKER_LOAD_LINES = "log.tracker-load-lines";
/** /**
* 日志加载间隔毫秒 * 日志加载间隔毫秒
*/ */
String LOG_TRACKER_LOAD_INTERVAL = "log_trackerLoadInterval"; String LOG_TRACKER_LOAD_INTERVAL = "log.tracker-load-interval";
/** /**
* 是否生成详细的执行日志 * 是否生成详细的执行日志
*/ */
String LOG_EXEC_DETAIL_LOG = "log_execDetailLog"; String LOG_EXEC_DETAIL_ENABLED = "log.exec-detail.enabled";
/** /**
* 凭证有效期分 * 凭证有效期
*/ */
String LOGIN_LOGIN_SESSION_TIME = "login_loginSessionTime"; String LOGIN_LOGIN_SESSION_TIME = "login.login-session-time";
/** /**
* 允许多端登录 * 允许多端登录
*/ */
String LOGIN_ALLOW_MULTI_DEVICE = "login_allowMultiDevice"; String LOGIN_ALLOW_MULTI_DEVICE = "login.allow-multi-device";
/** /**
* 允许凭证续签 * 允许凭证续签
*/ */
String LOGIN_ALLOW_REFRESH = "login_allowRefresh"; String LOGIN_ALLOW_REFRESH = "login.allow-refresh";
/** /**
* 凭证续签最大次数 * 凭证续签最大次数
*/ */
String LOGIN_MAX_REFRESH_COUNT = "login_maxRefreshCount"; String LOGIN_MAX_REFRESH_COUNT = "login.max-refresh-count";
/** /**
* 凭证续签间隔分 * 凭证续签间隔分
*/ */
String LOGIN_REFRESH_INTERVAL = "login_refreshInterval"; String LOGIN_REFRESH_INTERVAL = "login.refresh-interval";
/** /**
* 登录失败锁定 * 登录失败锁定
*/ */
String LOGIN_LOGIN_FAILED_LOCK = "login_loginFailedLock"; String LOGIN_LOGIN_FAILED_LOCK = "login.login-failed-lock";
/** /**
* 登录失败锁定阈值 * 登录失败锁定阈值
*/ */
String LOGIN_LOGIN_FAILED_LOCK_THRESHOLD = "login_loginFailedLockThreshold"; String LOGIN_LOGIN_FAILED_LOCK_THRESHOLD = "login.login-failed-lock-threshold";
/** /**
* 登录失败锁定时间分 * 登录失败锁定时间
*/ */
String LOGIN_LOGIN_FAILED_LOCK_TIME = "login_loginFailedLockTime"; String LOGIN_LOGIN_FAILED_LOCK_TIME = "login.login-failed-lock-time";
/** /**
* 登录失败发信 * 登录失败发信
*/ */
String LOGIN_LOGIN_FAILED_SEND = "login_loginFailedSend"; String LOGIN_LOGIN_FAILED_SEND = "login.login-failed-send";
/** /**
* 登录失败发信阈值 * 登录失败发信阈值
*/ */
String LOGIN_LOGIN_FAILED_SEND_THRESHOLD = "login_loginFailedSendThreshold"; String LOGIN_LOGIN_FAILED_SEND_THRESHOLD = "login.login-failed-send-threshold";
/** /**
* 是否开启自动清理命令记录 * 是否开启自动清理命令记录
*/ */
String AUTO_CLEAR_EXEC_LOG_ENABLED = "autoClear_execLogEnabled"; String AUTO_CLEAR_EXEC_LOG_ENABLED = "auto-clear.exec-log.enabled";
/** /**
* 自动清理命令记录保留天数 * 自动清理命令记录保留天数
*/ */
String AUTO_CLEAR_EXEC_LOG_KEEP_DAYS = "autoClear_execLogKeepDays"; String AUTO_CLEAR_EXEC_LOG_KEEP_DAYS = "auto-clear.exec-log.keep-days";
/** /**
* 是否开启自动清理终端连接记录 * 是否开启自动清理终端连接记录
*/ */
String AUTO_CLEAR_TERMINAL_LOG_ENABLED = "autoClear_terminalLogEnabled"; String AUTO_CLEAR_TERMINAL_LOG_ENABLED = "auto-clear.terminal-log.enabled";
/** /**
* 自动清理终端连接记录保留天数 * 自动清理终端连接记录保留天数
*/ */
String AUTO_CLEAR_TERMINAL_LOG_KEEP_DAYS = "autoClear_terminalLogKeepDays"; String AUTO_CLEAR_TERMINAL_LOG_KEEP_DAYS = "auto-clear.terminal-log.keep-days";
} }

View File

@@ -14,7 +14,7 @@ spring:
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:Data@123456} password: ${REDIS_PASSWORD:Data@123456}
database: ${REDIS_DATABASE:1} database: ${REDIS_DATABASE:1}
data-version: ${REDIS_DATA_VERSION:1} data-version: ${REDIS_DATA_VERSION:2}
mock: false mock: false
redisson: redisson:
threads: 2 threads: 2

View File

@@ -25,7 +25,7 @@ spring:
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:Data@123456} password: ${REDIS_PASSWORD:Data@123456}
database: ${REDIS_DATABASE:0} database: ${REDIS_DATABASE:0}
data-version: ${REDIS_DATA_VERSION:1} data-version: ${REDIS_DATA_VERSION:2}
redisson: redisson:
threads: 4 threads: 4
netty-threads: 4 netty-threads: 4

View File

@@ -50,12 +50,12 @@ public class AppLogConfig {
/** /**
* 是否生成详细的执行日志 * 是否生成详细的执行日志
*/ */
private final ConfigRef<Boolean> execDetailLog; private final ConfigRef<Boolean> execDetailEnabled;
public AppLogConfig(ConfigStore configStore) { public AppLogConfig(ConfigStore configStore) {
this.trackerLoadLines = configStore.int32(ConfigKeys.LOG_TRACKER_LOAD_LINES); this.trackerLoadLines = configStore.int32(ConfigKeys.LOG_TRACKER_LOAD_LINES);
this.trackerLoadInterval = configStore.int32(ConfigKeys.LOG_TRACKER_LOAD_INTERVAL); this.trackerLoadInterval = configStore.int32(ConfigKeys.LOG_TRACKER_LOAD_INTERVAL);
this.execDetailLog = configStore.bool(ConfigKeys.LOG_EXEC_DETAIL_LOG); this.execDetailEnabled = configStore.bool(ConfigKeys.LOG_EXEC_DETAIL_ENABLED);
} }
public Integer getTrackerLoadLines() { public Integer getTrackerLoadLines() {
@@ -66,8 +66,8 @@ public class AppLogConfig {
return trackerLoadInterval.value; return trackerLoadInterval.value;
} }
public Boolean getExecDetailLog() { public Boolean getExecDetailEnabled() {
return execDetailLog.value; return execDetailEnabled.value;
} }
} }

View File

@@ -193,7 +193,7 @@ public class ExecTaskHandler implements IExecTaskHandler {
* @return handler * @return handler
*/ */
private IExecCommandHandler createCommandHandler(Long execHostId) { private IExecCommandHandler createCommandHandler(Long execHostId) {
if (Booleans.isTrue(appLogConfig.getExecDetailLog())) { if (Booleans.isTrue(appLogConfig.getExecDetailEnabled())) {
// 详细日志 // 详细日志
return new ExecCommandDetailHandler(execHostId, execLog, builtParams, timeoutChecker); return new ExecCommandDetailHandler(execHostId, execLog, builtParams, timeoutChecker);
} else { } else {

View File

@@ -59,6 +59,7 @@ public interface UserCacheKeyDefine {
CacheKeyDefine LOGIN_FAILED_COUNT = new CacheKeyBuilder() CacheKeyDefine LOGIN_FAILED_COUNT = new CacheKeyBuilder()
.key("user:login-failed:{}") .key("user:login-failed:{}")
.desc("用户登录失败次数 ${username}") .desc("用户登录失败次数 ${username}")
.noPrefix()
.type(Integer.class) .type(Integer.class)
.struct(RedisCacheStruct.STRING) .struct(RedisCacheStruct.STRING)
.build(); .build();

View File

@@ -49,6 +49,7 @@ public interface AlarmPolicyCacheKeyDefine {
CacheKeyDefine ALARM_RULE_SILENCE = new CacheKeyBuilder() CacheKeyDefine ALARM_RULE_SILENCE = new CacheKeyBuilder()
.key("alarm:silence:{}:{}") .key("alarm:silence:{}:{}")
.desc("告警规则沉默标志 ${agentKey} ${ruleId}") .desc("告警规则沉默标志 ${agentKey} ${ruleId}")
.noPrefix()
.type(Long.class) .type(Long.class)
.struct(RedisCacheStruct.STRING) .struct(RedisCacheStruct.STRING)
.build(); .build();

View File

@@ -45,53 +45,53 @@ export type SystemSetting = SftpSetting
* SFTP 设置 * SFTP 设置
*/ */
export interface SftpSetting { export interface SftpSetting {
sftp_previewSize: number; ['sftp.preview-size']: number;
sftp_uploadPresentBackup: string; ['sftp.upload-present-backup']: string;
sftp_uploadBackupFileName: string; ['sftp.upload-backup-file-name']: string;
} }
/** /**
* 登录设置 * 登录设置
*/ */
export interface LoginSetting { export interface LoginSetting {
login_allowMultiDevice: string; ['login.allow-multi-device']: string;
login_allowRefresh: string; ['login.allow-refresh']: string;
login_maxRefreshCount: number; ['login.max-refresh-count']: number;
login_refreshInterval: number; ['login.refresh-interval']: number;
login_loginFailedLock: string; ['login.login-failed-lock']: string;
login_loginFailedLockThreshold: number; ['login.login-failed-lock-threshold']: number;
login_loginFailedLockTime: number; ['login.login-failed-lock-time']: number;
login_loginFailedSend: string; ['login.login-failed-send']: string;
login_loginFailedSendThreshold: number; ['login.login-failed-send-threshold']: number;
login_loginSessionTime: number; ['login.login-session-time']: number;
} }
/** /**
* 加密设置 * 加密设置
*/ */
export interface EncryptSetting { export interface EncryptSetting {
encrypt_publicKey: string; ['encrypt.public-key']: string;
encrypt_privateKey: string; ['encrypt.private-key']: string;
} }
/** /**
* 日志设置 * 日志设置
*/ */
export interface LogSetting { export interface LogSetting {
log_webScrollLines: number; ['log.web-scroll-lines']: number;
log_trackerLoadLines: number; ['log.tracker-load-lines']: number;
log_trackerLoadInterval: number; ['log.tracker-load-interval']: number;
log_execDetailLog: string; ['log.exec-detail.enabled']: string;
} }
/** /**
* 自动清理设置 * 自动清理设置
*/ */
export interface AutoClearSetting { export interface AutoClearSetting {
autoClear_execLogEnabled: string; ['auto-clear.exec-log.enabled']: string;
autoClear_execLogKeepDays: number; ['auto-clear.exec-log.keep-days']: number;
autoClear_terminalLogEnabled: string; ['auto-clear.terminal-log.enabled']: string;
autoClear_terminalLogKeepDays: number; ['auto-clear.terminal-log.keep-days']: number;
} }
/** /**

View File

@@ -55,8 +55,8 @@
execLog.value = { ...record }; execLog.value = { ...record };
currentHostExecId.value = record.hosts[0].id; currentHostExecId.value = record.hosts[0].id;
// 获取最大显示行数 // 获取最大显示行数
const { log_webScrollLines } = await useCacheStore().loadSystemSetting(); const { 'log.web-scroll-lines': webScrollLines } = await useCacheStore().loadSystemSetting();
const scrollLines = toAnonymousNumber(log_webScrollLines) || 1000; const scrollLines = toAnonymousNumber(webScrollLines) || 1000;
// 创建 appender // 创建 appender
appender.value = markRaw(new LogAppender({ appender.value = markRaw(new LogAppender({
id: record.id, id: record.id,

View File

@@ -12,7 +12,7 @@ export const encrypt = async (data: string | undefined): Promise<string | undefi
return data; return data;
} }
// 获取公钥 // 获取公钥
const publicKey = (await useCacheStore().loadSystemSetting()).encrypt_publicKey; const publicKey = (await useCacheStore().loadSystemSetting())['encrypt.public-key'];
const encryptor = new JSEncrypt(); const encryptor = new JSEncrypt();
encryptor.setPublicKey(publicKey); encryptor.setPublicKey(publicKey);

View File

@@ -9,11 +9,10 @@
label-align="right" label-align="right"
:auto-label-width="true"> :auto-label-width="true">
<!-- 自动清理执行记录 --> <!-- 自动清理执行记录 -->
<a-form-item field="autoClear_execLogEnabled" <a-form-item label="自动清理执行记录"
label="自动清理执行记录"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.autoClear_execLogEnabled" <a-switch v-model="setting['auto-clear.exec-log.enabled']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -24,11 +23,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 执行记录保留天数 --> <!-- 执行记录保留天数 -->
<a-form-item field="autoClear_execLogKeepDays" <a-form-item label="执行记录保留天数"
label="执行记录保留天数"
:rules="[{required: true, message: '请输入执行记录保留天数'}]" :rules="[{required: true, message: '请输入执行记录保留天数'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.autoClear_execLogKeepDays" <a-input-number v-model="setting['auto-clear.exec-log.keep-days']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -44,11 +42,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 自动清理终端记录 --> <!-- 自动清理终端记录 -->
<a-form-item field="autoClear_terminalLogEnabled" <a-form-item label="自动清理终端记录"
label="自动清理终端记录"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.autoClear_terminalLogEnabled" <a-switch v-model="setting['auto-clear.terminal-log.enabled']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -59,11 +56,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 终端记录保留天数 --> <!-- 终端记录保留天数 -->
<a-form-item field="autoClear_terminalLogKeepDays" <a-form-item label="终端记录保留天数"
label="终端记录保留天数"
:rules="[{required: true, message: '请输入终端记录保留天数'}]" :rules="[{required: true, message: '请输入终端记录保留天数'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.autoClear_terminalLogKeepDays" <a-input-number v-model="setting['auto-clear.terminal-log.keep-days']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -138,8 +134,8 @@
const { data } = await getSystemSetting(SystemSettingTypes.AUTO_CLEAR); const { data } = await getSystemSetting(SystemSettingTypes.AUTO_CLEAR);
setting.value = { setting.value = {
...data, ...data,
autoClear_execLogKeepDays: toAnonymousNumber(data.autoClear_execLogKeepDays), 'auto-clear.exec-log.keep-days': toAnonymousNumber(data['auto-clear.exec-log.keep-days']),
autoClear_terminalLogKeepDays: toAnonymousNumber(data.autoClear_terminalLogKeepDays), 'auto-clear.terminal-log.keep-days': toAnonymousNumber(data['auto-clear.terminal-log.keep-days']),
}; };
} catch (e) { } catch (e) {
} finally { } finally {
@@ -150,7 +146,4 @@
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.input-wrapper {
width: 368px;
}
</style> </style>

View File

@@ -13,23 +13,21 @@
<a-alert>请输入 PKCS8 格式的 RSA Base64 密钥, 用于前后端传输时的数据加密</a-alert> <a-alert>请输入 PKCS8 格式的 RSA Base64 密钥, 用于前后端传输时的数据加密</a-alert>
</a-form-item> </a-form-item>
<!-- 加密公钥 --> <!-- 加密公钥 -->
<a-form-item field="encrypt_publicKey" <a-form-item label="加密公钥"
label="加密公钥"
:rules="[{required: true, message: '请输入加密公钥'}]" :rules="[{required: true, message: '请输入加密公钥'}]"
hide-asterisk> hide-asterisk>
<a-textarea v-model="setting.encrypt_publicKey" <a-textarea v-model="setting['encrypt.public-key']"
class="input-wrapper" class="text-wrapper"
placeholder="RSA 公钥 Base64" placeholder="RSA 公钥 Base64"
:auto-size="{ minRows: 5, maxRows: 5 }" :auto-size="{ minRows: 5, maxRows: 5 }"
allow-clear /> allow-clear />
</a-form-item> </a-form-item>
<!-- 加密私钥 --> <!-- 加密私钥 -->
<a-form-item field="encrypt_privateKey" <a-form-item label="加密私钥"
label="加密私钥"
:rules="[{required: true, message: '请输入加密私钥'}]" :rules="[{required: true, message: '请输入加密私钥'}]"
hide-asterisk> hide-asterisk>
<a-textarea v-model="setting.encrypt_privateKey" <a-textarea v-model="setting['encrypt.private-key']"
class="input-wrapper" class="text-wrapper"
placeholder="RSA 私钥 Base64" placeholder="RSA 私钥 Base64"
:auto-size="{ minRows: 14, maxRows: 14 }" :auto-size="{ minRows: 14, maxRows: 14 }"
allow-clear /> allow-clear />
@@ -97,8 +95,8 @@
setLoading(true); setLoading(true);
try { try {
const { data } = await generatorKeypair(); const { data } = await generatorKeypair();
setting.value.encrypt_publicKey = data.publicKey; setting.value['encrypt.public-key'] = data.publicKey;
setting.value.encrypt_privateKey = data.privateKey; setting.value['encrypt.private-key'] = data.privateKey;
} catch (e) { } catch (e) {
} finally { } finally {
setLoading(false); setLoading(false);
@@ -125,7 +123,7 @@
.main-container { .main-container {
width: 728px !important; width: 728px !important;
.input-wrapper { .text-wrapper {
width: 100%; width: 100%;
} }
} }

View File

@@ -9,11 +9,10 @@
label-align="right" label-align="right"
:auto-label-width="true"> :auto-label-width="true">
<!-- 执行详细日志 --> <!-- 执行详细日志 -->
<a-form-item field="log_execDetailLog" <a-form-item label="执行详细日志"
label="执行详细日志"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.log_execDetailLog" <a-switch v-model="setting['log.exec-detail.enabled']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -24,11 +23,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 最大显示行数 --> <!-- 最大显示行数 -->
<a-form-item field="log_webScrollLines" <a-form-item label="最大显示行数"
label="最大显示行数"
:rules="[{required: true, message: '请输入日志最大显示行数'}]" :rules="[{required: true, message: '请输入日志最大显示行数'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.log_webScrollLines" <a-input-number v-model="setting['log.web-scroll-lines']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="999999" :max="999999"
@@ -44,11 +42,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 日志加载行数 --> <!-- 日志加载行数 -->
<a-form-item field="log_trackerLoadLines" <a-form-item label="日志加载行数"
label="日志加载行数"
:rules="[{required: true, message: '请输入日志加载行数'}]" :rules="[{required: true, message: '请输入日志加载行数'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.log_trackerLoadLines" <a-input-number v-model="setting['log.tracker-load-lines']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -64,11 +61,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 日志监听间隔 --> <!-- 日志监听间隔 -->
<a-form-item field="log_trackerLoadInterval" <a-form-item label="日志监听间隔"
label="日志监听间隔"
:rules="[{required: true, message: '请输入日志监听间隔'}]" :rules="[{required: true, message: '请输入日志监听间隔'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.log_trackerLoadInterval" <a-input-number v-model="setting['log.tracker-load-interval']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -143,9 +139,9 @@
const { data } = await getSystemSetting(SystemSettingTypes.LOG); const { data } = await getSystemSetting(SystemSettingTypes.LOG);
setting.value = { setting.value = {
...data, ...data,
log_webScrollLines: toAnonymousNumber(data.log_webScrollLines), 'log.web-scroll-lines': toAnonymousNumber(data['log.web-scroll-lines']),
log_trackerLoadInterval: toAnonymousNumber(data.log_trackerLoadInterval), 'log.tracker-load-interval': toAnonymousNumber(data['log.tracker-load-interval']),
log_trackerLoadLines: toAnonymousNumber(data.log_trackerLoadLines), 'log.tracker-load-lines': toAnonymousNumber(data['log.tracker-load-lines']),
}; };
} catch (e) { } catch (e) {
} finally { } finally {
@@ -156,7 +152,4 @@
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.input-wrapper {
width: 368px;
}
</style> </style>

View File

@@ -9,11 +9,10 @@
label-align="right" label-align="right"
:auto-label-width="true"> :auto-label-width="true">
<!-- 允许多端登录 --> <!-- 允许多端登录 -->
<a-form-item field="login_allowMultiDevice" <a-form-item label="允许多端登录"
label="允许多端登录"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.login_allowMultiDevice" <a-switch v-model="setting['login.allow-multi-device']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -24,11 +23,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 允许凭证续签 --> <!-- 允许凭证续签 -->
<a-form-item field="login_allowRefresh" <a-form-item label="允许凭证续签"
label="允许凭证续签"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.login_allowRefresh" <a-switch v-model="setting['login.allow-refresh']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -39,11 +37,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 登录失败锁定 --> <!-- 登录失败锁定 -->
<a-form-item field="login_loginFailedLock" <a-form-item label="登录失败锁定"
label="登录失败锁定"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.login_loginFailedLock" <a-switch v-model="setting['login.login-failed-lock']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -54,11 +51,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 登录失败发信 --> <!-- 登录失败发信 -->
<a-form-item field="login_loginFailedSend" <a-form-item label="登录失败发信"
label="登录失败发信"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.login_loginFailedSend" <a-switch v-model="setting['login.login-failed-send']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -69,11 +65,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 凭证有效期 --> <!-- 凭证有效期 -->
<a-form-item field="login_loginSessionTime" <a-form-item label="凭证有效期"
label="凭证有效期"
:rules="[{required: true, message: '请输入凭证有效期'}]" :rules="[{required: true, message: '请输入凭证有效期'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.login_loginSessionTime" <a-input-number v-model="setting['login.login-session-time']"
class="input-wrapper" class="input-wrapper"
:min="1" :min="1"
:max="99999" :max="99999"
@@ -89,11 +84,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 凭证续签间隔 --> <!-- 凭证续签间隔 -->
<a-form-item field="login_refreshInterval" <a-form-item label="凭证续签间隔"
label="凭证续签间隔"
:rules="[{required: true, message: '请输入凭证续签间隔时间'}]" :rules="[{required: true, message: '请输入凭证续签间隔时间'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.login_refreshInterval" <a-input-number v-model="setting['login.refresh-interval']"
class="input-wrapper" class="input-wrapper"
:min="1" :min="1"
:max="99999" :max="99999"
@@ -109,11 +103,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 凭证续签最大次数 --> <!-- 凭证续签最大次数 -->
<a-form-item field="login_maxRefreshCount" <a-form-item label="凭证续签最大次数"
label="凭证续签最大次数"
:rules="[{required: true, message: '请输入凭证续签最大次数'}]" :rules="[{required: true, message: '请输入凭证续签最大次数'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.login_maxRefreshCount" <a-input-number v-model="setting['login.max-refresh-count']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -125,11 +118,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 登录失败锁定阈值 --> <!-- 登录失败锁定阈值 -->
<a-form-item field="login_loginFailedLockThreshold" <a-form-item label="登录失败锁定阈值"
label="登录失败锁定阈值"
:rules="[{required: true, message: '请输入登录失败锁定阈值'}]" :rules="[{required: true, message: '请输入登录失败锁定阈值'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.login_loginFailedLockThreshold" <a-input-number v-model="setting['login.login-failed-lock-threshold']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -141,11 +133,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 登录失败锁定时间 --> <!-- 登录失败锁定时间 -->
<a-form-item field="login_loginFailedLockTime" <a-form-item label="登录失败锁定时间"
label="登录失败锁定时间"
:rules="[{required: true, message: '请输入登录失败锁定时间'}]" :rules="[{required: true, message: '请输入登录失败锁定时间'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.login_loginFailedLockTime" <a-input-number v-model="setting['login.login-failed-lock-time']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="999999" :max="999999"
@@ -161,11 +152,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 登录失败发信阈值 --> <!-- 登录失败发信阈值 -->
<a-form-item field="login_loginFailedSendThreshold" <a-form-item label="登录失败发信阈值"
label="登录失败发信阈值"
:rules="[{required: true, message: '请输入登录失败发信阈值'}]" :rules="[{required: true, message: '请输入登录失败发信阈值'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.login_loginFailedSendThreshold" <a-input-number v-model="setting['login.login-failed-send-threshold']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="99999" :max="99999"
@@ -236,12 +226,12 @@
const { data } = await getSystemSetting(SystemSettingTypes.LOGIN); const { data } = await getSystemSetting(SystemSettingTypes.LOGIN);
setting.value = { setting.value = {
...data, ...data,
login_loginSessionTime: toAnonymousNumber(data.login_loginSessionTime), 'login.login-session-time': toAnonymousNumber(data['login.login-session-time']),
login_maxRefreshCount: toAnonymousNumber(data.login_maxRefreshCount), 'login.max-refresh-count': toAnonymousNumber(data['login.max-refresh-count']),
login_refreshInterval: toAnonymousNumber(data.login_refreshInterval), 'login.refresh-interval': toAnonymousNumber(data['login.refresh-interval']),
login_loginFailedLockThreshold: toAnonymousNumber(data.login_loginFailedLockThreshold), 'login.login-failed-lock-threshold': toAnonymousNumber(data['login.login-failed-lock-threshold']),
login_loginFailedLockTime: toAnonymousNumber(data.login_loginFailedLockTime), 'login.login-failed-lock-time': toAnonymousNumber(data['login.login-failed-lock-time']),
login_loginFailedSendThreshold: toAnonymousNumber(data.login_loginFailedSendThreshold), 'login.login-failed-send-threshold': toAnonymousNumber(data['login.login-failed-send-threshold']),
}; };
} catch (e) { } catch (e) {
} finally { } finally {
@@ -252,7 +242,4 @@
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.input-wrapper {
width: 368px;
}
</style> </style>

View File

@@ -9,11 +9,10 @@
label-align="right" label-align="right"
:auto-label-width="true"> :auto-label-width="true">
<!-- 重复文件备份 --> <!-- 重复文件备份 -->
<a-form-item field="sftp_uploadPresentBackup" <a-form-item label="重复文件备份"
label="重复文件备份"
:rules="[{required: true, message: '请选择此项'}]" :rules="[{required: true, message: '请选择此项'}]"
hide-asterisk> hide-asterisk>
<a-switch v-model="setting.sftp_uploadPresentBackup" <a-switch v-model="setting['sftp.upload-present-backup']"
type="round" type="round"
checked-value="true" checked-value="true"
unchecked-value="false" unchecked-value="false"
@@ -24,11 +23,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 备份文件名称 --> <!-- 备份文件名称 -->
<a-form-item field="sftp_uploadBackupFileName" <a-form-item label="备份文件名称"
label="备份文件名称"
:rules="[{required: true, message: '请输入备份文件名称'}]" :rules="[{required: true, message: '请输入备份文件名称'}]"
hide-asterisk> hide-asterisk>
<a-input v-model="setting.sftp_uploadBackupFileName" <a-input v-model="setting['sftp.upload-backup-file-name']"
class="input-wrapper" class="input-wrapper"
placeholder="请输入备份文件名称模板" placeholder="请输入备份文件名称模板"
allow-clear /> allow-clear />
@@ -37,11 +35,10 @@
</template> </template>
</a-form-item> </a-form-item>
<!-- 文件预览大小 --> <!-- 文件预览大小 -->
<a-form-item field="sftp_previewSize" <a-form-item label="文件预览大小"
label="文件预览大小"
:rules="[{required: true, message: '请输入文件预览大小'}]" :rules="[{required: true, message: '请输入文件预览大小'}]"
hide-asterisk> hide-asterisk>
<a-input-number v-model="setting.sftp_previewSize" <a-input-number v-model="setting['sftp.preview-size']"
class="input-wrapper" class="input-wrapper"
:min="0" :min="0"
:max="200" :max="200"
@@ -116,7 +113,7 @@
const { data } = await getSystemSetting(SystemSettingTypes.SFTP); const { data } = await getSystemSetting(SystemSettingTypes.SFTP);
setting.value = { setting.value = {
...data, ...data,
sftp_previewSize: toAnonymousNumber(data.sftp_previewSize), 'sftp.preview-size': toAnonymousNumber(data['sftp.preview-size']),
}; };
} catch (e) { } catch (e) {
} finally { } finally {
@@ -127,7 +124,4 @@
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.input-wrapper {
width: 368px;
}
</style> </style>

View File

@@ -132,6 +132,10 @@
.alert-href { .alert-href {
text-decoration: none; text-decoration: none;
} }
.input-wrapper {
width: 368px;
}
} }
</style> </style>

View File

@@ -4,5 +4,5 @@ export const SystemSettingTypes = {
ENCRYPT: 'encrypt', ENCRYPT: 'encrypt',
LOGIN: 'login', LOGIN: 'login',
LOG: 'log', LOG: 'log',
AUTO_CLEAR: 'autoClear', AUTO_CLEAR: 'auto-clear',
}; };