From 92b68b9eef379acdd895fcabe77ab8a0f83ba6d5 Mon Sep 17 00:00:00 2001 From: freefire Date: Sun, 30 Aug 2026 01:53:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Admin=20=E5=8F=8B=E9=93=BE=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=9B=9E=E9=93=BE=E5=A4=8D=E6=A3=80=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调用 RecheckReciprocal,开启检测且有回链页时可复检。 Co-authored-by: Cursor --- docs/rebuild-spec/02-features.md | 2 +- docs/rebuild-spec/06-pages-ux.md | 2 +- routers/web/admin_friend_links.go | 22 ++++++++++++++++++++++ routers/web/home.go | 1 + templates/admin/friend_links.tmpl | 6 ++++++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/rebuild-spec/02-features.md b/docs/rebuild-spec/02-features.md index 3f2ef39..c97d563 100644 --- a/docs/rebuild-spec/02-features.md +++ b/docs/rebuild-spec/02-features.md @@ -143,7 +143,7 @@ - [x] 用户申请(名称、URL、Logo、是否上首页、回链页)— `POST /links/apply` - [x] Logo 上传 — 表单 multipart 或 `POST /links/logo` - [x] 我的申请列表;取消待审 — `/links`(修改待审:取消后重提) -- [x] 管理员审核:通过 / 拒绝 — SSR `/admin/friend-links`(复检按钮未迁;创建时可异步检测) +- [x] 管理员审核:通过 / 拒绝 / 回链复检 — SSR `/admin/friend-links`(创建时可异步检测) - [x] 管理员维护品牌友链列表 — `/admin/friend-links` 增删 --- diff --git a/docs/rebuild-spec/06-pages-ux.md b/docs/rebuild-spec/06-pages-ux.md index f256ac2..b25bb9a 100644 --- a/docs/rebuild-spec/06-pages-ux.md +++ b/docs/rebuild-spec/06-pages-ux.md @@ -188,7 +188,7 @@ | Dashboard | 看计数与待办;点进对应列表 | | Boards | 拖拽或数字排序;图标/色板选择;增删改 | | Pages | 列表发布开关;编辑正文(HTML textarea);nav/footer 勾选 — SSR `/admin/pages` | -| Links | 品牌友链增删;申请通过/拒绝;回链检测开关;nav/footer/aside 开关 — SSR `/admin/friend-links`(aside 与 Settings 侧栏组件共用 `aside_widgets`;复检按钮未迁) | +| Links | 品牌友链增删;申请通过/拒绝/回链复检;回链检测开关;nav/footer/aside 开关 — SSR `/admin/friend-links`(aside 与 Settings 侧栏组件共用 `aside_widgets`) | | Posts | 审核通过/拒绝 — SSR `/admin/moderation`;置顶/版顶/精华/锁编/锁评/软删 — 帖详情 Admin 条;回收站恢复/清除 — SSR `/admin/trash` | | Comments | 审核 — SSR `/admin/moderation`;修订查看未迁 | | Reports | 处理动作:dismiss / resolve / reject_post / reject_comment — SSR `/admin/reports` | diff --git a/routers/web/admin_friend_links.go b/routers/web/admin_friend_links.go index 131da4d..d209710 100644 --- a/routers/web/admin_friend_links.go +++ b/routers/web/admin_friend_links.go @@ -32,6 +32,7 @@ type adminFriendLinkApplyRow struct { RecipNote string CreatedAt string CanReview bool + CanRecheck bool } type adminFriendLinksData struct { @@ -92,6 +93,7 @@ func (d Deps) renderAdminFriendLinks(ctx *webctx.Context, errMsg string) { RecipNote: a.ReciprocalCheckNote, CreatedAt: a.CreatedAt.Format("2006-01-02 15:04"), CanReview: a.Status == models.FriendLinkApplyStatusPending, + CanRecheck: data.ReciprocalCheck && strings.TrimSpace(a.ReciprocalPageURL) != "", }) } } @@ -210,3 +212,23 @@ func (d Deps) AdminFriendLinkRejectPost(c *gin.Context) { ctx.SetFlash("已拒绝友链申请") ctx.Redirect("/admin/friend-links") } + +// AdminFriendLinkRecheckPost 重新检测回链 +func (d Deps) AdminFriendLinkRecheckPost(c *gin.Context) { + ctx := d.ctx(c) + if !ctx.CheckCSRF() { + d.renderAdminFriendLinks(ctx, "无效请求,请重试") + return + } + if d.FriendLink == nil { + d.renderAdminFriendLinks(ctx, "友链服务未就绪") + return + } + id64, _ := strconv.ParseUint(c.Param("id"), 10, 64) + if _, err := d.FriendLink.RecheckReciprocal(uint(id64), d.publicBaseURL(c)); err != nil { + d.renderAdminFriendLinks(ctx, err.Error()) + return + } + ctx.SetFlash("已开始重新检测回链") + ctx.Redirect("/admin/friend-links") +} diff --git a/routers/web/home.go b/routers/web/home.go index 49ccd72..2d295a9 100644 --- a/routers/web/home.go +++ b/routers/web/home.go @@ -84,6 +84,7 @@ func Register(r *gin.Engine, deps Deps, authMW *auth.AuthMiddleware) { admin.POST("/friend-links/brand/delete", deps.AdminFriendLinksBrandDeletePost) admin.POST("/friend-links/applies/:id/approve", deps.AdminFriendLinkApprovePost) admin.POST("/friend-links/applies/:id/reject", deps.AdminFriendLinkRejectPost) + admin.POST("/friend-links/applies/:id/recheck", deps.AdminFriendLinkRecheckPost) admin.GET("/pages", deps.AdminPagesGet) admin.POST("/pages", deps.AdminPageCreate) admin.GET("/pages/:id/edit", deps.AdminPageEditGet) diff --git a/templates/admin/friend_links.tmpl b/templates/admin/friend_links.tmpl index 3085ba6..776375c 100644 --- a/templates/admin/friend_links.tmpl +++ b/templates/admin/friend_links.tmpl @@ -82,6 +82,12 @@ {{end}} + {{if .CanRecheck}} +
+ + +
+ {{end}} {{end}}