fix: 允许给已批准配置绑定脚本,DTO加scriptStoragePath,无脚本时显示编辑按钮
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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 分组
|
||||
|
||||
Reference in New Issue
Block a user