fix: 站点管理改用admin全量接口, 显示待审核站点并提供通过/拒绝
This commit is contained in:
@@ -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")
|
@GetMapping("/sites/pending")
|
||||||
public ApiResponse<List<com.par.core.dto.SiteDTO>> listPendingSites(HttpServletRequest request) {
|
public ApiResponse<List<com.par.core.dto.SiteDTO>> listPendingSites(HttpServletRequest request) {
|
||||||
checkAdmin(request);
|
checkAdmin(request);
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ public interface SiteService {
|
|||||||
Site updateSite(String siteId, String name, String description, String baseUrl,
|
Site updateSite(String siteId, String name, String description, String baseUrl,
|
||||||
String siteType, Long operatorId);
|
String siteType, Long operatorId);
|
||||||
|
|
||||||
|
/** 所有站点列表(管理员用) */
|
||||||
|
List<Site> listAllSites();
|
||||||
|
|
||||||
/** 待审核站点列表 */
|
/** 待审核站点列表 */
|
||||||
List<Site> listPendingSites();
|
List<Site> listPendingSites();
|
||||||
|
|
||||||
|
|||||||
@@ -172,6 +172,14 @@ public class SiteServiceImpl implements SiteService {
|
|||||||
return site;
|
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
|
@Override
|
||||||
public List<Site> listPendingSites() {
|
public List<Site> listPendingSites() {
|
||||||
return siteMapper.selectList(
|
return siteMapper.selectList(
|
||||||
|
|||||||
@@ -32,9 +32,12 @@ export default {
|
|||||||
},
|
},
|
||||||
sites: {
|
sites: {
|
||||||
list: () => api.get('/sites'),
|
list: () => api.get('/sites'),
|
||||||
|
adminList: () => api.get('/admin/sites'),
|
||||||
get: (id) => api.get(`/sites/${id}`),
|
get: (id) => api.get(`/sites/${id}`),
|
||||||
create: (data) => api.post('/sites', data),
|
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: {
|
configs: {
|
||||||
list: () => api.get('/configs'),
|
list: () => api.get('/configs'),
|
||||||
|
|||||||
@@ -9,16 +9,20 @@
|
|||||||
<el-table-column prop="siteType" label="类型" width="100" />
|
<el-table-column prop="siteType" label="类型" width="100" />
|
||||||
<el-table-column prop="status" label="状态" width="100">
|
<el-table-column prop="status" label="状态" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag :type="scope.row.status === 'active' ? 'success' : 'info'">
|
<el-tag :type="statusType(scope.row.status)">
|
||||||
{{ scope.row.status }}
|
{{ scope.row.status }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="schemaVersion" label="Schema版本" width="120" />
|
<el-table-column prop="schemaVersion" label="Schema版本" width="120" />
|
||||||
<el-table-column label="操作" width="200">
|
<el-table-column label="操作" width="280">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
<el-button size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
||||||
<el-button size="small" @click="handleViewConfig(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>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -145,10 +149,16 @@ const escapeHtml = (str) => {
|
|||||||
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')
|
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const statusType = (s) => {
|
||||||
|
if (s === 'active') return 'success'
|
||||||
|
if (s === 'pending') return 'warning'
|
||||||
|
return 'info'
|
||||||
|
}
|
||||||
|
|
||||||
const fetchSites = async () => {
|
const fetchSites = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const res = await api.sites.list()
|
const res = await api.sites.adminList()
|
||||||
sites.value = res.data || []
|
sites.value = res.data || []
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
ElMessage.error('获取站点列表失败')
|
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) => {
|
const handleEdit = (row) => {
|
||||||
editForm.value = {
|
editForm.value = {
|
||||||
id: row.id,
|
id: row.id,
|
||||||
|
|||||||
Reference in New Issue
Block a user