feat(docs): 文档站重制 — 参照 opsxapi/opsxshell 体系,服务端渲染三栏布局
CI / Backend (go vet + test) (push) Canceled after 0s
CI / Frontend (lint + build + test) (push) Canceled after 0s

- 后端 goldmark 渲染管线:/docs/:slug 页面 + /docs/search-data.json 搜索索引,
  manifest.json 驱动分组导航,正文剥 H1 避免与页面头重复
- 三栏布局(分组侧栏/内容/本页目录)+ 顶栏(品牌/版本徽章/搜索面板/官网入口),
  docs.css 品牌绿版 + docs.js(代码复制/轻量高亮/提示块/TOC 滚动高亮/移动端抽屉)
- 替换 docsify;无上一页时空占位无边框;visual-judge 两轮评审(初版 fail → 修复后 pass)
This commit is contained in:
opsx committed 2026-10-29 15:30:25 +08:00
1 parent c1f822fb10
commit 437ff56992
11 files changed
+854 -43

No files matched your search

+8 -1
View File
@@ -10,6 +10,7 @@ import (
"lokistack/controllers"
"lokistack/middleware"
"lokistack/pkg/metrics"
"lokistack/services"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
@@ -233,7 +234,13 @@ func SetupRouter() *gin.Engine {
// 文档站(docsify,docs/)与落地页(homepage/)随二进制一起发布;
// 独立于前端 dist 存在与否注册,目录不存在时路由不生效
serveStaticDir(r, "/docs", "docs")
docsCtrl := controllers.NewDocsController()
if services.DocsBaseDir() != "" {
r.GET("/docs", docsCtrl.Home)
r.GET("/docs/search-data.json", docsCtrl.SearchData)
r.GET("/docs/:slug", docsCtrl.Page)
r.Static("/docs/assets", filepath.Join(services.DocsBaseDir(), "assets"))
}
serveStaticDir(r, "/homepage", "homepage")
// Static files - use executable directory as base