feat: 默认脚本分保存本地和上传七牛云两个按钮
This commit is contained in:
@@ -73,8 +73,8 @@ public class ScriptController {
|
||||
return ApiResponse.success(Map.of("siteType", siteType, "script", script != null ? script : ""));
|
||||
}
|
||||
|
||||
/** 保存站点类型默认脚本(管理员) */
|
||||
@PutMapping("/api/v1/admin/scripts/default/{siteType}")
|
||||
/** 保存站点类型默认脚本到本地 */
|
||||
@PutMapping("/api/v1/admin/scripts/default/{siteType}/save")
|
||||
public ApiResponse<Void> saveDefaultScript(
|
||||
@PathVariable String siteType,
|
||||
@RequestBody Map<String, String> payload,
|
||||
@@ -82,6 +82,19 @@ public class ScriptController {
|
||||
checkAdmin(request);
|
||||
String script = payload.get("script");
|
||||
if (script == null || script.isBlank()) return ApiResponse.error(400, "script is required");
|
||||
GroovyScriptEngine.saveDefaultLocal(siteType, script);
|
||||
return ApiResponse.success();
|
||||
}
|
||||
|
||||
/** 上传站点类型默认脚本到七牛云 */
|
||||
@PutMapping("/api/v1/admin/scripts/default/{siteType}/upload")
|
||||
public ApiResponse<Void> uploadDefaultScript(
|
||||
@PathVariable String siteType,
|
||||
@RequestBody Map<String, String> payload,
|
||||
HttpServletRequest request) {
|
||||
checkAdmin(request);
|
||||
String script = payload.get("script");
|
||||
if (script == null || script.isBlank()) return ApiResponse.error(400, "script is required");
|
||||
GroovyScriptEngine.saveDefaultScript(siteType, script);
|
||||
return ApiResponse.success();
|
||||
}
|
||||
|
||||
@@ -53,7 +53,24 @@ public class GroovyScriptEngine {
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存站点类型默认脚本到七牛云+本地缓存
|
||||
* 保存默认脚本到本地文件(不上传七牛云)
|
||||
*/
|
||||
public static void saveDefaultLocal(String siteType, String script) {
|
||||
if (siteType == null || script == null) return;
|
||||
String key = siteType.toLowerCase();
|
||||
DEFAULT_SCRIPTS_CACHE.put(key, script);
|
||||
try {
|
||||
var path = java.nio.file.Paths.get(
|
||||
GroovyScriptEngine.class.getClassLoader().getResource("scripts/default-" + key + ".groovy").toURI());
|
||||
java.nio.file.Files.writeString(path, script, java.nio.charset.StandardCharsets.UTF_8);
|
||||
log.info("Default script saved locally: default-{}.groovy", key);
|
||||
} catch (Exception e) {
|
||||
log.warn("Local save failed: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传默认脚本到七牛云+本地缓存
|
||||
*/
|
||||
public static void saveDefaultScript(String siteType, String script) {
|
||||
if (siteType == null || script == null) return;
|
||||
@@ -61,17 +78,8 @@ public class GroovyScriptEngine {
|
||||
DEFAULT_SCRIPTS_CACHE.put(key, script);
|
||||
if (storageService != null) {
|
||||
storageService.store(DEFAULT_SCRIPTS_PATH + key + ".groovy", script);
|
||||
} else {
|
||||
// 回退到 classpath 写入(开发环境)
|
||||
try {
|
||||
var path = java.nio.file.Paths.get(
|
||||
GroovyScriptEngine.class.getClassLoader().getResource("scripts/default-" + key + ".groovy").toURI());
|
||||
java.nio.file.Files.writeString(path, script, java.nio.charset.StandardCharsets.UTF_8);
|
||||
} catch (Exception e) {
|
||||
log.warn("Fallback save failed: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
log.info("Default script saved: default-{}.groovy", key);
|
||||
log.info("Default script uploaded: default-{}.groovy", key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="defaultEditorVisible=false">取消</el-button>
|
||||
<el-button type="primary" @click="saveDefaultScript" :loading="defaultSaving">保存</el-button>
|
||||
<el-button @click="saveDefaultLocal" :loading="defaultSaving">保存本地</el-button>
|
||||
<el-button type="primary" @click="uploadDefaultScript" :loading="defaultUploading">上传</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
@@ -106,7 +107,7 @@ const sites = ref([])
|
||||
const defaultTypes = ['nexusphp','mtorrent','gazelle','unit3d']
|
||||
const defaultEditorVisible = ref(false), defaultViewVisible = ref(false)
|
||||
const editingDefaultType = ref(''), viewingDefaultType = ref(''), viewingDefaultScript = ref('')
|
||||
const defaultScriptContent = ref(''), defaultSaving = ref(false)
|
||||
const defaultScriptContent = ref(''), defaultSaving = ref(false), defaultUploading = ref(false)
|
||||
|
||||
const editDefaultScript = async (type) => {
|
||||
editingDefaultType.value = type
|
||||
@@ -118,25 +119,24 @@ const editDefaultScript = async (type) => {
|
||||
} catch { ElMessage.error('加载默认脚本失败') }
|
||||
}
|
||||
|
||||
const viewDefaultScript = async (type) => {
|
||||
viewingDefaultType.value = type
|
||||
viewingDefaultScript.value = '加载中...'
|
||||
defaultViewVisible.value = true
|
||||
try {
|
||||
const r = await api.raw.get('/admin/scripts/default/' + type)
|
||||
viewingDefaultScript.value = (r.data||r||{}).script || (r||{}).script || '(空)'
|
||||
} catch { viewingDefaultScript.value = '加载失败' }
|
||||
}
|
||||
|
||||
const saveDefaultScript = async () => {
|
||||
const saveDefaultLocal = async () => {
|
||||
defaultSaving.value = true
|
||||
try {
|
||||
await api.raw.put('/admin/scripts/default/' + editingDefaultType.value, { script: defaultScriptContent.value })
|
||||
ElMessage.success('已保存'); defaultEditorVisible.value = false
|
||||
await api.raw.put('/admin/scripts/default/' + editingDefaultType.value + '/save', { script: defaultScriptContent.value })
|
||||
ElMessage.success('已保存到本地')
|
||||
} catch { ElMessage.error('保存失败') }
|
||||
finally { defaultSaving.value = false }
|
||||
}
|
||||
|
||||
const uploadDefaultScript = async () => {
|
||||
defaultUploading.value = true
|
||||
try {
|
||||
await api.raw.put('/admin/scripts/default/' + editingDefaultType.value + '/upload', { script: defaultScriptContent.value })
|
||||
ElMessage.success('已上传'); defaultEditorVisible.value = false
|
||||
} catch { ElMessage.error('上传失败') }
|
||||
finally { defaultUploading.value = false }
|
||||
}
|
||||
|
||||
const exportScripts = async () => {
|
||||
exporting.value = true
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user