feat: 页面配置默认模板回退+删除功能

This commit is contained in:
mediabot-pt
2026-07-06 00:18:27 +08:00
parent d04dcdec4f
commit c140105cdc
2 changed files with 26 additions and 3 deletions

View File

@@ -16,12 +16,26 @@ import java.util.Map;
public class SitePagesController { public class SitePagesController {
private final SitePagesService sitePagesService; private final SitePagesService sitePagesService;
private final com.par.core.mapper.SiteMapper siteMapper;
@GetMapping("/api/v1/sites/{siteId}/pages") @GetMapping("/api/v1/sites/{siteId}/pages")
public ApiResponse<Map<String, Object>> getPages(@PathVariable String siteId) { public ApiResponse<Map<String, Object>> getPages(@PathVariable String siteId) {
Map<String, Object> data = sitePagesService.getPages(siteId); Map<String, Object> data = sitePagesService.getPages(siteId);
if (data == null) return ApiResponse.error(404, "页面配置不存在"); if (data != null) {
return ApiResponse.success(data); data.put("source", "custom");
return ApiResponse.success(data);
}
// 回退到站点类型默认模板
var site = siteMapper.selectBySiteId(siteId);
String siteType = site != null && site.getSiteType() != null ? site.getSiteType().getValue() : null;
if (siteType != null) {
Map<String, Object> def = sitePagesService.getPages("default:" + siteType);
if (def != null) {
def.put("source", "default");
return ApiResponse.success(def);
}
}
return ApiResponse.error(404, "页面配置不存在");
} }
@GetMapping("/api/v1/sites/{siteId}/pages/version") @GetMapping("/api/v1/sites/{siteId}/pages/version")

View File

@@ -31,6 +31,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 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>
</div> </div>
@@ -70,7 +71,7 @@
<script setup> <script setup>
import api from '../api'; import { Refresh } from '@element-plus/icons-vue' import api from '../api'; import { Refresh } from '@element-plus/icons-vue'
const loading = ref(false), saving = ref(false), sites = ref([]), pagesMap = ref({}), sitesList = ref([]) const loading = ref(false), saving = ref(false), deleting = ref(false), sites = ref([]), pagesMap = ref({}), sitesList = ref([])
const editSiteId = ref(''), editorJson = ref('[]') const editSiteId = ref(''), editorJson = ref('[]')
const fmt = (t) => t ? (t.substring(0,19)||'').replace('T',' ') : '-' const fmt = (t) => t ? (t.substring(0,19)||'').replace('T',' ') : '-'
const parsed = computed(() => { try { return JSON.parse(editorJson.value) } catch { return [] } }) const parsed = computed(() => { try { return JSON.parse(editorJson.value) } catch { return [] } })
@@ -106,6 +107,14 @@ const editPage = async (row) => {
const syncToJson = () => { editorJson.value = JSON.stringify(parsed.value, null, 2) } const syncToJson = () => { editorJson.value = JSON.stringify(parsed.value, null, 2) }
const remove = (idx) => { parsed.value.splice(idx,1); syncToJson() } const remove = (idx) => { parsed.value.splice(idx,1); syncToJson() }
const addEntry = () => { parsed.value.push({key:'',label:'',url:'{base}',method:'GET'}); syncToJson() } const addEntry = () => { parsed.value.push({key:'',label:'',url:'{base}',method:'GET'}); syncToJson() }
const deletePages = async () => {
try { await ElMessageBox.confirm('删除后站点将使用默认模板','确认',{type:'warning',confirmButtonText:'确认删除'}) } catch { return }
deleting.value = true
try { await api.raw.delete('/admin/site-pages/'+editSiteId.value); ElMessage.success('已删除'); editSiteId.value=''; fetchAll() }
catch { ElMessage.error('删除失败') }
finally { deleting.value = false }
}
const savePages = async () => { const savePages = async () => {
saving.value = true saving.value = true
try { await api.raw.put('/sites/'+editSiteId.value+'/pages', { entries: parsed.value }); ElMessage.success('已保存'); editSiteId.value=''; fetchAll() } try { await api.raw.put('/sites/'+editSiteId.value+'/pages', { entries: parsed.value }); ElMessage.success('已保存'); editSiteId.value=''; fetchAll() }