后台系统配置列表现在只返回当前真实使用的配置项

This commit is contained in:
yml2213
2026-05-27 08:40:03 +08:00
parent 80c7bb18bb
commit 8cbd06dca4
8 changed files with 144 additions and 18 deletions
@@ -18,6 +18,7 @@ import {
import { fetchSystemConfigs, type SystemConfig } from '@/api/systemConfigs'
import { formatDateTime } from '@/utils/time'
import { safeParseJSON } from '@/utils/json'
import { formatSystemConfigSelectValue } from '@/utils/systemConfigOptions'
// 导入重构后的 Dialog 子组件
import PublishOptionsDialog from './components/PublishOptionsDialog.vue'
@@ -154,6 +155,10 @@ function formatConfigValue(row: SystemConfig) {
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
return 'JSON 配置'
}
const selectedLabel = formatSystemConfigSelectValue(row.key, row.value)
if (selectedLabel) {
return selectedLabel
}
return row.value
}
</script>
@@ -3,6 +3,7 @@ import { ElMessage } from 'element-plus'
import { computed, ref, watch } from 'vue'
import { updateSystemConfig, type SystemConfig } from '@/api/systemConfigs'
import { getSystemConfigSelectOptions, type SystemConfigOption } from '@/utils/systemConfigOptions'
const props = defineProps<{
modelValue: boolean
@@ -34,6 +35,15 @@ const isStructuredConfig = computed(() => {
return trimmed.startsWith('{') || trimmed.startsWith('[')
})
const selectOptions = computed<SystemConfigOption[] | null>(() => {
const options = getSystemConfigSelectOptions(props.config.key)
if (!options) return null
if (!value.value || options.some((item) => item.value === value.value)) {
return options
}
return [{ label: `当前值:${value.value}`, value: value.value }, ...options]
})
async function handleSave() {
submitting.value = true
try {
@@ -73,6 +83,16 @@ function readError(error: unknown, fallback: string) {
<el-form-item v-if="isStructuredConfig" label="配置值 (JSON)" class="full-control">
<el-input v-model="value" type="textarea" :rows="12" placeholder="配置值 JSON" />
</el-form-item>
<el-form-item v-else-if="selectOptions" label="配置值" class="full-control">
<el-select v-model="value" class="full-select" placeholder="请选择配置值">
<el-option
v-for="option in selectOptions"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item v-else label="配置值" class="full-control">
<el-input v-model="value" placeholder="配置值" />
</el-form-item>
@@ -103,6 +123,10 @@ function readError(error: unknown, fallback: string) {
width: 100%;
}
.full-select {
width: 100%;
}
.desc-item {
margin-top: 14px;
margin-bottom: 0;