fix: 允许给已批准配置绑定脚本,DTO加scriptStoragePath,无脚本时显示编辑按钮
This commit is contained in:
@@ -256,16 +256,16 @@ public class AdminController {
|
|||||||
checkAdmin(request);
|
checkAdmin(request);
|
||||||
SiteConfig config = siteConfigMapper.selectById(configId);
|
SiteConfig config = siteConfigMapper.selectById(configId);
|
||||||
if (config == null) return ApiResponse.error(404, "Config not found");
|
if (config == null) return ApiResponse.error(404, "Config not found");
|
||||||
if (config.getStatus() != ConfigStatus.PENDING) {
|
|
||||||
return ApiResponse.error(400, "只能编辑待审核的配置");
|
|
||||||
}
|
|
||||||
|
|
||||||
String script = payload.get("script");
|
String script = payload.get("script");
|
||||||
if (script == null) return ApiResponse.error(400, "script is required");
|
if (script == null) return ApiResponse.error(400, "script is required");
|
||||||
|
|
||||||
String scriptPath = config.getScriptStoragePath();
|
String scriptPath = config.getScriptStoragePath();
|
||||||
if (scriptPath == null || scriptPath.isBlank()) {
|
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);
|
config.setScriptStoragePath(scriptPath);
|
||||||
}
|
}
|
||||||
storageService.store(scriptPath, script);
|
storageService.store(scriptPath, script);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ public class SiteConfigDTO {
|
|||||||
private String siteId;
|
private String siteId;
|
||||||
private String version;
|
private String version;
|
||||||
private String configHash;
|
private String configHash;
|
||||||
|
private String scriptStoragePath;
|
||||||
private Long fileSize;
|
private Long fileSize;
|
||||||
private String schemaVersion;
|
private String schemaVersion;
|
||||||
private ConfigStatus status;
|
private ConfigStatus status;
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ public class ConfigServiceImpl implements ConfigService {
|
|||||||
dto.setSiteId(config.getSiteId());
|
dto.setSiteId(config.getSiteId());
|
||||||
dto.setVersion(config.getVersion());
|
dto.setVersion(config.getVersion());
|
||||||
dto.setConfigHash(config.getConfigHash());
|
dto.setConfigHash(config.getConfigHash());
|
||||||
|
dto.setScriptStoragePath(config.getScriptStoragePath());
|
||||||
dto.setFileSize(config.getFileSize());
|
dto.setFileSize(config.getFileSize());
|
||||||
dto.setSchemaVersion(config.getSchemaVersion());
|
dto.setSchemaVersion(config.getSchemaVersion());
|
||||||
dto.setStatus(config.getStatus());
|
dto.setStatus(config.getStatus());
|
||||||
|
|||||||
@@ -44,7 +44,8 @@
|
|||||||
<el-button size="small" @click="startEdit">编辑</el-button>
|
<el-button size="small" @click="startEdit">编辑</el-button>
|
||||||
</template>
|
</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>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@@ -74,14 +75,14 @@
|
|||||||
</el-tabs>
|
</el-tabs>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="configVisible=false">关闭</el-button>
|
<el-button @click="configVisible=false">关闭</el-button>
|
||||||
<template v-if="selectedConfig?.status==='pending'">
|
<template v-if="configTab==='config' && selectedConfigJson">
|
||||||
<el-button v-if="configTab==='config' && selectedConfigJson" type="primary" size="small" @click="editing? saveEdit() : startEdit()">
|
<el-button v-if="editing" size="small" @click="cancelEdit">取消</el-button>
|
||||||
|
<el-button type="primary" size="small" @click="editing? saveEdit() : startEdit()">
|
||||||
{{ editing ? '保存JSON' : '编辑JSON' }}
|
{{ editing ? '保存JSON' : '编辑JSON' }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button v-if="configTab==='config' && editing" size="small" @click="cancelEdit">取消</el-button>
|
</template>
|
||||||
<el-button v-if="configTab==='script'" type="primary" size="small" @click="saveScript" :loading="saving">
|
<template v-if="configTab==='script'">
|
||||||
保存脚本
|
<el-button type="primary" size="small" @click="saveScript" :loading="saving">保存脚本</el-button>
|
||||||
</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -193,6 +194,7 @@ const allResults = ref([])
|
|||||||
const pageParsed = ref({})
|
const pageParsed = ref({})
|
||||||
const expandedSet = reactive(new Set())
|
const expandedSet = reactive(new Set())
|
||||||
|
|
||||||
|
const hasScript = computed(() => !!selectedConfig.value?.scriptStoragePath)
|
||||||
const totalResults = computed(() => allResults.value.length)
|
const totalResults = computed(() => allResults.value.length)
|
||||||
|
|
||||||
// 始终从 allResults 按 URL 分组
|
// 始终从 allResults 按 URL 分组
|
||||||
|
|||||||
Reference in New Issue
Block a user