fix: 站点管理改用admin全量接口, 显示待审核站点并提供通过/拒绝

This commit is contained in:
mediabot-pt
2026-06-30 08:44:46 +08:00
parent ec9d00f25a
commit b37b5cc5de
5 changed files with 56 additions and 4 deletions

View File

@@ -258,6 +258,13 @@ public class AdminController {
// ===================== 站点审核 =====================
@GetMapping("/sites")
public ApiResponse<List<com.par.core.dto.SiteDTO>> listAllSites(HttpServletRequest request) {
checkAdmin(request);
return ApiResponse.success(siteService.listAllSites().stream()
.map(siteService::toDTO).toList());
}
@GetMapping("/sites/pending")
public ApiResponse<List<com.par.core.dto.SiteDTO>> listPendingSites(HttpServletRequest request) {
checkAdmin(request);

View File

@@ -43,6 +43,9 @@ public interface SiteService {
Site updateSite(String siteId, String name, String description, String baseUrl,
String siteType, Long operatorId);
/** 所有站点列表(管理员用) */
List<Site> listAllSites();
/** 待审核站点列表 */
List<Site> listPendingSites();

View File

@@ -172,6 +172,14 @@ public class SiteServiceImpl implements SiteService {
return site;
}
@Override
public List<Site> listAllSites() {
return siteMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Site>()
.eq(Site::getDeleted, 0)
.orderByAsc(Site::getCreatedAt));
}
@Override
public List<Site> listPendingSites() {
return siteMapper.selectList(

View File

@@ -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'),

View File

@@ -9,16 +9,20 @@
<el-table-column prop="siteType" label="类型" width="100" />
<el-table-column prop="status" label="状态" width="100">
<template #default="scope">
<el-tag :type="scope.row.status === 'active' ? 'success' : 'info'">
<el-tag :type="statusType(scope.row.status)">
{{ scope.row.status }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="schemaVersion" label="Schema版本" width="120" />
<el-table-column label="操作" width="200">
<el-table-column label="操作" width="280">
<template #default="scope">
<el-button size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-button size="small" @click="handleViewConfig(scope.row)">配置</el-button>
<template v-if="scope.row.status === 'pending'">
<el-button size="small" type="success" @click="handleApprove(scope.row)">通过</el-button>
<el-button size="small" type="danger" @click="handleReject(scope.row)">拒绝</el-button>
</template>
</template>
</el-table-column>
</el-table>
@@ -145,10 +149,16 @@ const escapeHtml = (str) => {
return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
}
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,