fix: 允许给已批准配置绑定脚本,DTO加scriptStoragePath,无脚本时显示编辑按钮

This commit is contained in:
mediabot-pt
2026-07-01 10:58:56 +08:00
parent 698efbb0c6
commit 8b4517ca6d
4 changed files with 15 additions and 11 deletions

View File

@@ -256,16 +256,16 @@ public class AdminController {
checkAdmin(request);
SiteConfig config = siteConfigMapper.selectById(configId);
if (config == null) return ApiResponse.error(404, "Config not found");
if (config.getStatus() != ConfigStatus.PENDING) {
return ApiResponse.error(400, "只能编辑待审核的配置");
}
String script = payload.get("script");
if (script == null) return ApiResponse.error(400, "script is required");
String scriptPath = config.getScriptStoragePath();
if (scriptPath == null || scriptPath.isBlank()) {
scriptPath = String.format("configs/%s/pending/%s.groovy", config.getSiteId(), config.getConfigHash().substring(0, 8));
String hash = config.getConfigHash() != null ? config.getConfigHash().substring(0, 8)
: Long.toHexString(System.currentTimeMillis());
scriptPath = String.format("configs/%s/%s/%s.groovy", config.getSiteId(),
config.getStatus() == ConfigStatus.PENDING ? "pending" : "approved", hash);
config.setScriptStoragePath(scriptPath);
}
storageService.store(scriptPath, script);

View File

@@ -15,6 +15,7 @@ public class SiteConfigDTO {
private String siteId;
private String version;
private String configHash;
private String scriptStoragePath;
private Long fileSize;
private String schemaVersion;
private ConfigStatus status;

View File

@@ -115,6 +115,7 @@ public class ConfigServiceImpl implements ConfigService {
dto.setSiteId(config.getSiteId());
dto.setVersion(config.getVersion());
dto.setConfigHash(config.getConfigHash());
dto.setScriptStoragePath(config.getScriptStoragePath());
dto.setFileSize(config.getFileSize());
dto.setSchemaVersion(config.getSchemaVersion());
dto.setStatus(config.getStatus());

View File

@@ -44,7 +44,8 @@
<el-button size="small" @click="startEdit">编辑</el-button>
</template>
<el-button size="small" text @click="configVisible=true" v-if="selectedConfigId">查看配置</el-button>
<el-button size="small" type="primary" @click="configVisible=true; configTab='script'" v-if="selectedConfigId && !hasScript">编辑脚本</el-button>
<el-button size="small" @click="configVisible=true" v-else-if="selectedConfigId">查看配置</el-button>
</div>
</el-card>
@@ -74,14 +75,14 @@
</el-tabs>
<template #footer>
<el-button @click="configVisible=false">关闭</el-button>
<template v-if="selectedConfig?.status==='pending'">
<el-button v-if="configTab==='config' && selectedConfigJson" type="primary" size="small" @click="editing? saveEdit() : startEdit()">
<template v-if="configTab==='config' && selectedConfigJson">
<el-button v-if="editing" size="small" @click="cancelEdit">取消</el-button>
<el-button type="primary" size="small" @click="editing? saveEdit() : startEdit()">
{{ editing ? '保存JSON' : '编辑JSON' }}
</el-button>
<el-button v-if="configTab==='config' && editing" size="small" @click="cancelEdit">取消</el-button>
<el-button v-if="configTab==='script'" type="primary" size="small" @click="saveScript" :loading="saving">
保存脚本
</el-button>
</template>
<template v-if="configTab==='script'">
<el-button type="primary" size="small" @click="saveScript" :loading="saving">保存脚本</el-button>
</template>
</template>
</el-dialog>
@@ -193,6 +194,7 @@ const allResults = ref([])
const pageParsed = ref({})
const expandedSet = reactive(new Set())
const hasScript = computed(() => !!selectedConfig.value?.scriptStoragePath)
const totalResults = computed(() => allResults.value.length)
// 始终从 allResults 按 URL 分组