优化
This commit is contained in:
@@ -17,11 +17,24 @@
|
||||
<el-form-item label="路由前缀">
|
||||
<el-input v-model.trim="config.admin.routerPrefix" placeholder="例如 /api;留空表示无前缀" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务端口">
|
||||
<el-input-number v-model="config.admin.system.addr" :min="1" :max="65535" class="!w-full" />
|
||||
</el-form-item>
|
||||
<el-form-item label="IP 限流次数">
|
||||
<el-input-number v-model="config.admin.system.iplimitCount" :min="0" class="!w-full" />
|
||||
</el-form-item>
|
||||
<el-form-item label="IP 限流窗口(秒)">
|
||||
<el-input-number v-model="config.admin.system.iplimitTime" :min="0" class="!w-full" />
|
||||
</el-form-item>
|
||||
<el-form-item label="JWT 签发者">
|
||||
<el-input v-model.trim="config.admin.jwt.issuer" />
|
||||
</el-form-item>
|
||||
<el-form-item label="JWT 签名密钥">
|
||||
<el-input v-model="config.admin.jwt.signingKey" show-password />
|
||||
<el-input v-model="config.admin.jwt.signingKey" show-password>
|
||||
<template #append>
|
||||
<el-button @click="generateSigningKey">生成</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="JWT 有效期">
|
||||
<el-input v-model.trim="config.admin.jwt.expiresTime" placeholder="例如 168h" />
|
||||
@@ -53,6 +66,9 @@
|
||||
<el-form-item label="单文件最大字节数(0 为不限)">
|
||||
<el-input-number v-model="config.admin.media.maxFileSize" :min="0" class="!w-full" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分片目录">
|
||||
<el-input v-model.trim="config.admin.media.chunkDir" />
|
||||
</el-form-item>
|
||||
<el-form-item label="运行开关" class="md:col-span-2">
|
||||
<div class="flex flex-wrap gap-5">
|
||||
<el-switch v-model="config.admin.system.useRedis" active-text="启用 Redis" />
|
||||
@@ -118,9 +134,11 @@
|
||||
<el-form-item label="最大连接池"><el-input-number v-model="config.data.mongo.max_pool_size" :min="0" class="!w-full" /></el-form-item>
|
||||
<el-form-item label="连接超时(毫秒)"><el-input-number v-model="config.data.mongo.connect_timeout_ms" :min="0" class="!w-full" /></el-form-item>
|
||||
<el-form-item label="Socket 超时(毫秒)"><el-input-number v-model="config.data.mongo.socket_timeout_ms" :min="0" class="!w-full" /></el-form-item>
|
||||
<el-form-item label="使用独立 Mongo 日志"><el-switch v-model="config.data.mongo.is_zap" /></el-form-item>
|
||||
<el-form-item label="MongoDB 节点 JSON" class="md:col-span-2"><el-input v-model="mongoHostsText" type="textarea" :rows="4" placeholder='[{"host":"127.0.0.1","port":"27017"}]' /></el-form-item>
|
||||
<el-form-item label="多数据库配置 JSON" class="md:col-span-2"><el-input v-model="databaseListText" type="textarea" :rows="6" /></el-form-item>
|
||||
<el-form-item label="多 Redis 配置 JSON" class="md:col-span-2"><el-input v-model="redisListText" type="textarea" :rows="6" /></el-form-item>
|
||||
<el-form-item label="磁盘挂载点 JSON" class="md:col-span-2"><el-input v-model="diskListText" type="textarea" :rows="3" placeholder='[{"mount_point":"/"}]' /></el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
|
||||
@@ -134,6 +152,7 @@
|
||||
<el-form-item label="堆栈字段"><el-input v-model.trim="config.admin.zap.stacktrace_key" /></el-form-item>
|
||||
<el-form-item label="保留天数"><el-input-number v-model="config.admin.zap.retention_day" :min="0" class="!w-full" /></el-form-item>
|
||||
<el-form-item label="访问日志最大字节"><el-input-number v-model="config.admin.zap.access_log_max_bytes" :min="1024" class="!w-full" /></el-form-item>
|
||||
<el-form-item label="仅写文件的模块(每行一个)"><el-input v-model="fileOnlyModulesText" type="textarea" :rows="3" /></el-form-item>
|
||||
<el-form-item label="输出选项" class="md:col-span-2"><div class="flex flex-wrap gap-5"><el-switch v-model="config.admin.zap.log_in_console" active-text="控制台" /><el-switch v-model="config.admin.zap.show_line" active-text="调用行" /><el-switch v-model="config.admin.zap.access_req_body" active-text="请求体" /><el-switch v-model="config.admin.zap.access_resp_data" active-text="响应体" /><el-switch v-model="config.admin.zap.access_req_headers" active-text="请求头" /></div></el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
@@ -143,7 +162,7 @@
|
||||
<el-form-item label="节点标识"><el-input v-model.trim="config.admin.app.node" /></el-form-item>
|
||||
<el-form-item label="应用 ID"><el-input v-model.trim="config.admin.app.app_id" /></el-form-item>
|
||||
<el-form-item label="运行环境"><el-input v-model.trim="config.admin.app.env" /></el-form-item>
|
||||
<el-form-item label="CORS 模式"><el-select v-model="config.admin.cors.mode" class="!w-full"><el-option label="白名单" value="whitelist" /><el-option label="全部放行" value="allow-all" /></el-select></el-form-item>
|
||||
<el-form-item label="CORS 模式"><el-select v-model="config.admin.cors.mode" class="!w-full"><el-option label="白名单" value="whitelist" /><el-option label="严格白名单" value="strict-whitelist" /><el-option label="全部放行" value="allow-all" /></el-select></el-form-item>
|
||||
<el-form-item label="CORS 白名单 JSON" class="md:col-span-2"><el-input v-model="corsRulesText" type="textarea" :rows="7" /></el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
@@ -218,6 +237,7 @@
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { getSystemConfig, reloadSystem, setSystemConfig } from '@/api/system'
|
||||
import { emailTest } from '@/api/email'
|
||||
import { CreateUUID } from '@/utils/format'
|
||||
|
||||
defineOptions({ name: 'Config' })
|
||||
|
||||
@@ -229,10 +249,10 @@
|
||||
routerPrefix: '',
|
||||
jwt: { signingKey: '******', expiresTime: '168h', bufferTime: '24h', issuer: 'kra' },
|
||||
captcha: { keyLong: 6, imgWidth: 240, imgHeight: 80, storeExpiration: '3m' },
|
||||
local: { storePath: 'uploads/file', pathPrefix: 'uploads/file' }, media: { sessionTtl: 24, maxFileSize: 0 },
|
||||
local: { storePath: 'uploads/file', pathPrefix: 'uploads/file' }, media: { sessionTtl: 24, maxFileSize: 0, chunkDir: 'uploads/chunks' },
|
||||
zap: { level: 'info', prefix: '[kra] ', format: 'json', director: 'logs', encode_level: 'LowercaseLevelEncoder', stacktrace_key: 'stacktrace', show_line: true, log_in_console: true, retention_day: 7, access_req_body: true, access_resp_data: true, access_req_headers: true, access_log_max_bytes: 1024, file_only_modules: [] },
|
||||
cors: { mode: 'whitelist', whitelist: [] }, app: { node: '', app_id: 'kra', env: 'development' },
|
||||
system: { useRedis: false, useMultipoint: false, useStrictAuth: false, disableAutoMigrate: false, useMongo: false },
|
||||
system: { useRedis: false, useMultipoint: false, useStrictAuth: false, disableAutoMigrate: false, useMongo: false, addr: 8000, iplimitCount: 0, iplimitTime: 0 },
|
||||
storage: { type: 'local', qiniu: {}, aliyun_oss: {}, huawei_obs: {}, tencent_cos: {}, aws_s3: {}, cloudflare_r2: {}, minio: {} }
|
||||
},
|
||||
email: {
|
||||
@@ -258,6 +278,8 @@
|
||||
const databaseListText = ref('[]')
|
||||
const redisListText = ref('[]')
|
||||
const corsRulesText = ref('[]')
|
||||
const diskListText = ref('[]')
|
||||
const fileOnlyModulesText = ref('')
|
||||
|
||||
const initForm = async () => {
|
||||
const res = await getSystemConfig()
|
||||
@@ -296,6 +318,8 @@
|
||||
databaseListText.value = JSON.stringify(config.value.data.database_list || [], null, 2)
|
||||
redisListText.value = JSON.stringify(config.value.data.redis_list || [], null, 2)
|
||||
corsRulesText.value = JSON.stringify(config.value.admin.cors.whitelist || [], null, 2)
|
||||
diskListText.value = JSON.stringify(config.value.admin.disk_list || [], null, 2)
|
||||
fileOnlyModulesText.value = (config.value.admin.zap.file_only_modules || []).join('\n')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,8 +332,10 @@
|
||||
config.value.data.database_list = JSON.parse(databaseListText.value || '[]')
|
||||
config.value.data.redis_list = JSON.parse(redisListText.value || '[]')
|
||||
config.value.admin.cors.whitelist = JSON.parse(corsRulesText.value || '[]')
|
||||
config.value.admin.disk_list = JSON.parse(diskListText.value || '[]')
|
||||
config.value.admin.zap.file_only_modules = fileOnlyModulesText.value.split('\n').map(item => item.trim()).filter(Boolean)
|
||||
} catch {
|
||||
ElMessage.error('MongoDB 或多数据库 JSON 格式不正确')
|
||||
ElMessage.error('JSON 配置格式不正确')
|
||||
return
|
||||
}
|
||||
const res = await setSystemConfig({ config: config.value })
|
||||
@@ -322,8 +348,17 @@
|
||||
}
|
||||
}
|
||||
|
||||
const generateSigningKey = () => {
|
||||
config.value.admin.jwt.signingKey = CreateUUID()
|
||||
}
|
||||
|
||||
const reload = async () => {
|
||||
await ElMessageBox.confirm('确定要重载服务配置吗?', '提示')
|
||||
try {
|
||||
await ElMessageBox.confirm('确定要重载服务配置吗?', '提示')
|
||||
} catch {
|
||||
ElMessage.info('取消重载')
|
||||
return
|
||||
}
|
||||
const res = await reloadSystem()
|
||||
if (res.code === 0) ElMessage.success('配置已重载')
|
||||
}
|
||||
@@ -332,7 +367,12 @@
|
||||
testing.value = true
|
||||
try {
|
||||
const res = await emailTest()
|
||||
if (res.code === 0) ElMessage.success('测试邮件发送成功')
|
||||
if (res.code === 0) {
|
||||
ElMessage.success('测试邮件发送成功')
|
||||
await initForm()
|
||||
} else {
|
||||
ElMessage.error('测试邮件发送失败')
|
||||
}
|
||||
} finally {
|
||||
testing.value = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user