前端代码
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
<template>
|
||||
<div class="kra-table-box config-layout">
|
||||
<div class="flex items-center justify-between mb-5">
|
||||
<div>
|
||||
<h2 class="text-xl font-semibold">系统配置</h2>
|
||||
<p class="text-sm text-gray-500 mt-1">管理 Kra 后台运行参数和邮件服务。</p>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<el-button @click="reload">重载服务</el-button>
|
||||
<el-button type="primary" :loading="saving" @click="update">保存配置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-tabs v-model="activeKey">
|
||||
<el-tab-pane label="基础设置" name="basic">
|
||||
<el-form label-position="top" class="grid grid-cols-1 md:grid-cols-2 gap-x-5">
|
||||
<el-form-item label="路由前缀">
|
||||
<el-input v-model.trim="config.admin.routerPrefix" placeholder="例如 /api;留空表示无前缀" />
|
||||
</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-form-item>
|
||||
<el-form-item label="本地文件目录">
|
||||
<el-input v-model.trim="config.admin.local.storePath" />
|
||||
</el-form-item>
|
||||
<el-form-item label="文件访问前缀">
|
||||
<el-input v-model.trim="config.admin.local.pathPrefix" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="邮件设置" name="email">
|
||||
<el-form label-position="top" class="grid grid-cols-1 md:grid-cols-2 gap-x-5">
|
||||
<el-form-item label="默认收件人">
|
||||
<el-input v-model.trim="config.email.to" placeholder="多个地址用英文逗号分隔" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发件人">
|
||||
<el-input v-model.trim="config.email.from" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SMTP 主机">
|
||||
<el-input v-model.trim="config.email.host" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SMTP 端口">
|
||||
<el-input-number v-model="config.email.port" :min="1" :max="65535" class="!w-full" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SMTP 密钥">
|
||||
<el-input v-model="config.email.secret" show-password />
|
||||
</el-form-item>
|
||||
<el-form-item label="发件人昵称">
|
||||
<el-input v-model.trim="config.email.nickname" />
|
||||
</el-form-item>
|
||||
<el-form-item label="连接方式">
|
||||
<div class="flex gap-5">
|
||||
<el-switch v-model="config.email['is-ssl']" active-text="SSL" />
|
||||
<el-switch v-model="config.email['is-loginauth']" active-text="LOGIN 认证" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="连通性测试">
|
||||
<el-button :loading="testing" @click="testEmail">发送测试邮件</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { getSystemConfig, reloadSystem, setSystemConfig } from '@/api/system'
|
||||
import { emailTest } from '@/api/email'
|
||||
|
||||
defineOptions({ name: 'Config' })
|
||||
|
||||
const activeKey = ref('basic')
|
||||
const saving = ref(false)
|
||||
const testing = ref(false)
|
||||
const config = ref({
|
||||
admin: {
|
||||
routerPrefix: '',
|
||||
jwt: { signingKey: '******', issuer: 'kra' },
|
||||
local: { storePath: 'uploads/file', pathPrefix: 'uploads/file' }
|
||||
},
|
||||
email: {
|
||||
to: '', from: '', host: '', secret: '******', nickname: '', port: 465,
|
||||
'is-ssl': true, 'is-loginauth': false
|
||||
}
|
||||
})
|
||||
|
||||
const initForm = async () => {
|
||||
const res = await getSystemConfig()
|
||||
if (res.code === 0) {
|
||||
config.value = {
|
||||
admin: { ...config.value.admin, ...res.data.config.admin,
|
||||
jwt: { ...config.value.admin.jwt, ...res.data.config.admin?.jwt },
|
||||
local: { ...config.value.admin.local, ...res.data.config.admin?.local }
|
||||
},
|
||||
email: { ...config.value.email, ...res.data.config.email }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const update = async () => {
|
||||
saving.value = true
|
||||
try {
|
||||
const res = await setSystemConfig({ config: config.value })
|
||||
if (res.code === 0) {
|
||||
ElMessage.success('配置保存成功')
|
||||
await initForm()
|
||||
}
|
||||
} finally {
|
||||
saving.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const reload = async () => {
|
||||
await ElMessageBox.confirm('确定要重载服务配置吗?', '提示')
|
||||
const res = await reloadSystem()
|
||||
if (res.code === 0) ElMessage.success('配置已重载')
|
||||
}
|
||||
|
||||
const testEmail = async () => {
|
||||
testing.value = true
|
||||
try {
|
||||
const res = await emailTest()
|
||||
if (res.code === 0) ElMessage.success('测试邮件发送成功')
|
||||
} finally {
|
||||
testing.value = false
|
||||
}
|
||||
}
|
||||
|
||||
initForm()
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.config-layout { min-height: 520px; }
|
||||
</style>
|
||||
Reference in New Issue
Block a user