feat: page config upload button for normal sites, add cloud upload endpoint
- SitePagesController: add PUT /admin/site-pages/{siteId}/upload for uploading normal site pages to cloud storage
- SitePages.vue: show upload button for both default templates and normal sites
This commit is contained in:
@@ -290,6 +290,28 @@ public class SitePagesController {
|
|||||||
return ApiResponse.success();
|
return ApiResponse.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 发布普通站点页面配置到云存储 */
|
||||||
|
@PutMapping("/api/v1/admin/site-pages/{siteId}/upload")
|
||||||
|
public ApiResponse<Void> uploadSitePages(
|
||||||
|
@PathVariable String siteId, @RequestBody Map<String, Object> payload, HttpServletRequest request) {
|
||||||
|
checkAdmin(request);
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
var entries = (List<Map<String, Object>>) payload.get("entries");
|
||||||
|
String authType = (String) payload.get("authType");
|
||||||
|
String authValue = (String) payload.get("authValue");
|
||||||
|
sitePagesService.savePages(siteId, entries != null ? entries : List.of(), authType, authValue);
|
||||||
|
try {
|
||||||
|
Map<String, Object> config = new LinkedHashMap<>();
|
||||||
|
config.put("siteId", siteId);
|
||||||
|
if (authType != null) config.put("authType", authType);
|
||||||
|
if (authValue != null) config.put("authValue", authValue);
|
||||||
|
config.put("entries", entries != null ? entries : List.of());
|
||||||
|
String json = objectMapper.writeValueAsString(config);
|
||||||
|
storageService.store("pages/site/" + siteId + ".json", json);
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
return ApiResponse.success();
|
||||||
|
}
|
||||||
|
|
||||||
private void checkAdmin(HttpServletRequest request) {
|
private void checkAdmin(HttpServletRequest request) {
|
||||||
var level = request.getAttribute("trustLevel");
|
var level = request.getAttribute("trustLevel");
|
||||||
if (level == null || !"ADMIN".equals(level.toString())) {
|
if (level == null || !"ADMIN".equals(level.toString())) {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
<h2 style="margin:0">编辑: {{ editSiteId }}</h2>
|
<h2 style="margin:0">编辑: {{ editSiteId }}</h2>
|
||||||
<div style="display:flex;gap:8px">
|
<div style="display:flex;gap:8px">
|
||||||
<el-button size="small" type="primary" @click="savePages" :loading="saving">保存</el-button>
|
<el-button size="small" type="primary" @click="savePages" :loading="saving">保存</el-button>
|
||||||
<el-button v-if="isDefaultEditor" size="small" @click="uploadPages" :loading="uploading">上传</el-button>
|
<el-button size="small" @click="uploadPages" :loading="uploading">上传</el-button>
|
||||||
<el-button size="small" type="danger" @click="deletePages" :loading="deleting">删除</el-button>
|
<el-button size="small" type="danger" @click="deletePages" :loading="deleting">删除</el-button>
|
||||||
<el-button size="small" @click="editSiteId=''">返回列表</el-button>
|
<el-button size="small" @click="editSiteId=''">返回列表</el-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -222,8 +222,12 @@ const deletePages = async () => {
|
|||||||
const uploadPages = async () => {
|
const uploadPages = async () => {
|
||||||
uploading.value = true
|
uploading.value = true
|
||||||
try {
|
try {
|
||||||
const type = editSiteId.value.replace('default:','')
|
if (editSiteId.value.startsWith('default:')) {
|
||||||
await api.raw.put('/admin/default-pages/'+type+'/upload', { entries: parsed.value })
|
const type = editSiteId.value.replace('default:','')
|
||||||
|
await api.raw.put('/admin/default-pages/'+type+'/upload', { entries: parsed.value })
|
||||||
|
} else {
|
||||||
|
await api.raw.put('/admin/site-pages/'+editSiteId.value+'/upload', { entries: parsed.value, authType: authType.value })
|
||||||
|
}
|
||||||
ElMessage.success('已上传到云存储')
|
ElMessage.success('已上传到云存储')
|
||||||
} catch { ElMessage.error('上传失败') }
|
} catch { ElMessage.error('上传失败') }
|
||||||
finally { uploading.value = false }
|
finally { uploading.value = false }
|
||||||
|
|||||||
Reference in New Issue
Block a user