diff --git a/par-api/src/main/java/com/par/api/controller/SitePagesController.java b/par-api/src/main/java/com/par/api/controller/SitePagesController.java index a24984c..b0d8158 100644 --- a/par-api/src/main/java/com/par/api/controller/SitePagesController.java +++ b/par-api/src/main/java/com/par/api/controller/SitePagesController.java @@ -91,6 +91,15 @@ public class SitePagesController { return ApiResponse.success(Map.of("siteId", siteId, "version", version, "content", content)); } + /** 获取页面入口 key 枚举列表 */ + @GetMapping("/api/v1/admin/page-keys") + public ApiResponse>> pageKeys() { + var list = java.util.Arrays.stream(com.par.core.enums.PageKey.values()) + .map(pk -> Map.of("key", pk.getKey(), "label", pk.getLabel(), "defaultMethod", pk.getDefaultMethod())) + .toList(); + return ApiResponse.success(list); + } + @GetMapping("/api/v1/admin/default-pages/{type}") public ApiResponse> getDefaultPages(@PathVariable String type, HttpServletRequest request) { checkAdmin(request); diff --git a/par-core/src/main/java/com/par/core/enums/PageKey.java b/par-core/src/main/java/com/par/core/enums/PageKey.java new file mode 100644 index 0000000..0dc5310 --- /dev/null +++ b/par-core/src/main/java/com/par/core/enums/PageKey.java @@ -0,0 +1,41 @@ +package com.par.core.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * 站点页面入口 key 枚举 — 统一命名,脚本据此分发解析逻辑 + */ +public enum PageKey { + SYNC("sync", "同步", "GET"), + SIGN_IN("signIn", "签到", "POST"), + SEARCH("search", "搜索", "GET"), + DETAIL("detail", "资源详情", "GET"), + DOWNLOAD("download", "下载", "GET"), + USER("user", "用户信息", "GET"), + HOME("home", "首页", "GET"), + TORRENTS("torrents", "种子列表", "GET"), + BONUS("bonus", "魔力值", "GET"), + MESSAGES("messages", "消息", "GET"); + + private final String key; + private final String label; + private final String defaultMethod; + + PageKey(String key, String label, String defaultMethod) { + this.key = key; + this.label = label; + this.defaultMethod = defaultMethod; + } + + @JsonValue + public String getKey() { return key; } + public String getLabel() { return label; } + public String getDefaultMethod() { return defaultMethod; } + + public static PageKey fromKey(String key) { + for (var pk : values()) { + if (pk.key.equalsIgnoreCase(key)) return pk; + } + return null; + } +} diff --git a/web/src/views/SitePages.vue b/web/src/views/SitePages.vue index dd73ecd..d09c054 100644 --- a/web/src/views/SitePages.vue +++ b/web/src/views/SitePages.vue @@ -61,8 +61,12 @@
双向可视化
- - + + @@ -91,6 +95,18 @@ const loading = ref(false), saving = ref(false), uploading = ref(false), deletin const editSiteId = ref(''), editorJson = ref('[]') const defaultTypes = ['nexusphp','mtorrent','gazelle','unit3d'] const isDefaultEditor = computed(() => editSiteId.value.startsWith('default:')) +const pageKeys = ref([]) + +const loadPageKeys = async () => { + try { const r = await api.raw.get('/admin/page-keys'); pageKeys.value = r?.data || r || [] } + catch {} +} + +const onKeyChange = (row) => { + const pk = pageKeys.value.find(k => k.key === row.key) + if (pk?.defaultMethod) row.method = pk.defaultMethod + syncToJson() +} const fmt = (t) => t ? (t.substring(0,19)||'').replace('T',' ') : '-' const parsed = computed(() => { try { return JSON.parse(editorJson.value) } catch { return [] } }) const resolveUrl = (url) => url?.replace('{base}', sitesList.value.find(s=>s.siteId===editSiteId.value)?.urls?.[0] || '{base}') || '' @@ -157,5 +173,5 @@ const savePages = async () => { } catch { ElMessage.error('保存失败') } finally { saving.value = false } } -onMounted(fetchAll) +onMounted(() => { fetchAll(); loadPageKeys() })