From b37b5cc5dedba8fcb965442ced924ef2f1206765 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Tue, 30 Jun 2026 08:44:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=AB=99=E7=82=B9=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=94=B9=E7=94=A8admin=E5=85=A8=E9=87=8F=E6=8E=A5=E5=8F=A3,=20?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=BE=85=E5=AE=A1=E6=A0=B8=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E5=B9=B6=E6=8F=90=E4=BE=9B=E9=80=9A=E8=BF=87/=E6=8B=92?= =?UTF-8?q?=E7=BB=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../par/api/controller/AdminController.java | 7 ++++ .../com/par/core/service/SiteService.java | 3 ++ .../core/service/impl/SiteServiceImpl.java | 8 ++++ web/src/api/index.js | 5 ++- web/src/views/Sites.vue | 37 +++++++++++++++++-- 5 files changed, 56 insertions(+), 4 deletions(-) diff --git a/par-api/src/main/java/com/par/api/controller/AdminController.java b/par-api/src/main/java/com/par/api/controller/AdminController.java index 0dd6657..3b6bbab 100644 --- a/par-api/src/main/java/com/par/api/controller/AdminController.java +++ b/par-api/src/main/java/com/par/api/controller/AdminController.java @@ -258,6 +258,13 @@ public class AdminController { // ===================== 站点审核 ===================== + @GetMapping("/sites") + public ApiResponse> listAllSites(HttpServletRequest request) { + checkAdmin(request); + return ApiResponse.success(siteService.listAllSites().stream() + .map(siteService::toDTO).toList()); + } + @GetMapping("/sites/pending") public ApiResponse> listPendingSites(HttpServletRequest request) { checkAdmin(request); diff --git a/par-core/src/main/java/com/par/core/service/SiteService.java b/par-core/src/main/java/com/par/core/service/SiteService.java index c8ec6af..b4e0176 100644 --- a/par-core/src/main/java/com/par/core/service/SiteService.java +++ b/par-core/src/main/java/com/par/core/service/SiteService.java @@ -43,6 +43,9 @@ public interface SiteService { Site updateSite(String siteId, String name, String description, String baseUrl, String siteType, Long operatorId); + /** 所有站点列表(管理员用) */ + List listAllSites(); + /** 待审核站点列表 */ List listPendingSites(); diff --git a/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java b/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java index 503000d..21f1525 100644 --- a/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java +++ b/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java @@ -172,6 +172,14 @@ public class SiteServiceImpl implements SiteService { return site; } + @Override + public List listAllSites() { + return siteMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(Site::getDeleted, 0) + .orderByAsc(Site::getCreatedAt)); + } + @Override public List listPendingSites() { return siteMapper.selectList( diff --git a/web/src/api/index.js b/web/src/api/index.js index a09fb2d..42380b1 100644 --- a/web/src/api/index.js +++ b/web/src/api/index.js @@ -32,9 +32,12 @@ export default { }, sites: { list: () => api.get('/sites'), + adminList: () => api.get('/admin/sites'), get: (id) => api.get(`/sites/${id}`), create: (data) => api.post('/sites', data), - update: (id, data) => api.put(`/sites/${id}`, data) + update: (id, data) => api.put(`/sites/${id}`, data), + approve: (id) => api.post(`/admin/sites/${id}/approve`), + reject: (id) => api.post(`/admin/sites/${id}/reject`), }, configs: { list: () => api.get('/configs'), diff --git a/web/src/views/Sites.vue b/web/src/views/Sites.vue index d1689ff..a4f63ff 100644 --- a/web/src/views/Sites.vue +++ b/web/src/views/Sites.vue @@ -9,16 +9,20 @@ - + @@ -145,10 +149,16 @@ const escapeHtml = (str) => { return str.replace(/&/g, '&').replace(//g, '>') } +const statusType = (s) => { + if (s === 'active') return 'success' + if (s === 'pending') return 'warning' + return 'info' +} + const fetchSites = async () => { loading.value = true try { - const res = await api.sites.list() + const res = await api.sites.adminList() sites.value = res.data || [] } catch (e) { ElMessage.error('获取站点列表失败') @@ -157,6 +167,27 @@ const fetchSites = async () => { } } +const handleApprove = async (row) => { + try { + await api.sites.approve(row.id) + ElMessage.success('已通过') + fetchSites() + } catch (e) { + ElMessage.error(e.response?.data?.message || '操作失败') + } +} + +const handleReject = async (row) => { + try { + await ElMessageBox.confirm(`确认拒绝站点 "${row.name}"?此操作将删除该站点。`, '警告', { type: 'warning' }) + await api.sites.reject(row.id) + ElMessage.success('已拒绝') + fetchSites() + } catch (e) { + if (e !== 'cancel') ElMessage.error(e.response?.data?.message || '操作失败') + } +} + const handleEdit = (row) => { editForm.value = { id: row.id,