update: 资源优化

This commit is contained in:
ctwj
2025-07-22 00:09:46 +08:00
parent ed6a1567f3
commit 91b743999a
4 changed files with 30 additions and 6 deletions

View File

@@ -46,11 +46,14 @@ func GetResources(c *gin.Context) {
resources, total, err = repoManager.ResourceRepository.FindWithRelationsPaginated(page, pageSize)
}
// 新增只要有search参数就记录
// 新增只要有search参数就记录(但管理员不记录)
if realSearch != "" {
ip := c.ClientIP()
userAgent := c.GetHeader("User-Agent")
repoManager.SearchStatRepository.RecordSearch(realSearch, ip, userAgent)
user, _ := c.Get("user")
if user == nil || (user != nil && user.(entity.User).Role != "admin") {
ip := c.ClientIP()
userAgent := c.GetHeader("User-Agent")
repoManager.SearchStatRepository.RecordSearch(realSearch, ip, userAgent)
}
}
if err != nil {
@@ -286,3 +289,21 @@ func IncrementResourceViewCount(c *gin.Context) {
}
SuccessResponse(c, gin.H{"message": "浏览次数+1"})
}
// BatchDeleteResources 批量删除资源
func BatchDeleteResources(c *gin.Context) {
var req struct {
IDs []uint `json:"ids"`
}
if err := c.ShouldBindJSON(&req); err != nil || len(req.IDs) == 0 {
ErrorResponse(c, "参数错误", 400)
return
}
count := 0
for _, id := range req.IDs {
if err := repoManager.ResourceRepository.Delete(id); err == nil {
count++
}
}
SuccessResponse(c, gin.H{"deleted": count, "message": "批量删除成功"})
}

View File

@@ -125,6 +125,7 @@ func main() {
api.GET("/resources/:id", handlers.GetResourceByID)
api.GET("/resources/check-exists", handlers.CheckResourceExists)
api.POST("/resources/:id/view", handlers.IncrementResourceViewCount)
api.DELETE("/resources/batch", middleware.AuthMiddleware(), middleware.AdminMiddleware(), handlers.BatchDeleteResources)
// 分类管理
api.GET("/categories", handlers.GetCategories)

View File

@@ -50,7 +50,9 @@ export const useResourceApi = () => {
const getResourcesByPan = (panId: number, params?: any) => useApiFetch('/resources', { params: { ...params, pan_id: panId } }).then(parseApiResponse)
// 新增:统一的资源访问次数上报
const incrementViewCount = (id: number) => useApiFetch(`/resources/${id}/view`, { method: 'POST' })
return { getResources, getResource, createResource, updateResource, deleteResource, searchResources, getResourcesByPan, incrementViewCount }
// 新增:批量删除资源
const batchDeleteResources = (ids: number[]) => useApiFetch('/resources/batch', { method: 'DELETE', body: { ids } }).then(parseApiResponse)
return { getResources, getResource, createResource, updateResource, deleteResource, searchResources, getResourcesByPan, incrementViewCount, batchDeleteResources }
}
export const useAuthApi = () => {

View File

@@ -599,7 +599,7 @@ const handleBatchAction = async () => {
switch (batchAction.value) {
case 'delete':
if (confirm(`确定要删除选中的 ${selectedResources.value.length} 个资源吗?`)) {
await Promise.all(selectedResources.value.map(id => resourceApi.deleteResource(id)))
await resourceApi.batchDeleteResources(selectedResources.value)
alert('批量删除成功')
}
break