Dai0814 39209ef591
mirror-to-gitee / mirror (push) Successful in 3s
fix(portal): 导航栏锚点项点击后正确高亮
问题:点「产品功能 / 核心能力 / 界面预览 / 官方文档」跳转后图标不变蓝。
根因:VitePress 的 isActive() 只比较 path,不看 hash。nav 里
「首页 /」「产品功能 /#features」「核心能力 /#core」的路径部分都是 `/`,
默认逻辑要么把首页和当前锚点同时点亮,要么只亮首页。

改动
- 新增 .vitepress/theme/nav-anchor.ts 接管首页内锚点项的激活判定:
  用 data-anchor-active 属性标记,规则为
  在首页且有 hash → 只有 hash 匹配项亮;在首页无 hash → 只有「首页」亮;
  不在首页 → 清标记交回 VitePress 默认逻辑
- 样式侧用 html.portal-nav-home 限定压制默认 active 的作用域,
  只影响首页,不影响 /projects/ 与 /about 的正常高亮
- 导航「项目」加 activeMatch: '^/projects/',
  使 /projects/iotlcm/ 等详情页也保持高亮
- MutationObserver 监听导航 DOM 变化(SPA 切换、主题切换会重建)

踩的坑
- Layout 是函数式组件,onMounted 在其中无效(Vue 报"no active component
  instance"),改用 nextTick 调度
- 初版用 hashOf(a) 判空来识别「首页」,但 /projects/ 与 /about 也没有 hash,
  被误判成首页项一起点亮;改为判断 href 解析后是否为 '/'
- 抑制规则最初没加作用域,导致非首页页面的正常 active 也被压成黑字

验证(8 个场景逐个实测)
首页顶部→首页 / 四个锚点→各自高亮 / 项目页→项目 /
关于页→关于 / iotLCM 详情→项目;构建 13 页 274 引用 0 失效
2026-11-04 15:23:37 +08:00

雪羊科技开源项目门户

开源项目门户站源码。当前收录 iotLCM(物联网卡全生命周期管理平台)、秀杰 DTU 管理平台、XiuAdmin(中后台开发框架)。

  • 站点框架:VitePress 1.6(与 iotLCM 的文档站同构)
  • 产物:纯静态文件
  • 许可:Apache-2.0

目录

.
├── data/projects.ts              # 项目注册表 —— 门户唯一项目清单来源
├── pages/
│   ├── index.md                  # 门户首页
│   ├── projects/index.md         # 全部项目
│   ├── projects/<id>/index.md    # 各项目详情页
│   ├── guide/portal-deploy.md    # 门户自身的构建与部署
│   └── about.md                  # 关于、许可、贡献说明
├── .vitepress/theme/components/  # 项目卡片与列表组件
├── scripts/check-registry.mjs    # 注册表与详情页一致性校验
├── deploy/docker-compose.yml     # 容器部署编排
└── Dockerfile                    # 多阶段构建镜像

新增一个项目

两步,不需要改动站点其它部分:

  1. 在 data/projects.ts 里加一条记录(名称、定位、说明、代码仓、许可证、技术栈、状态、详情页路径、子页面)
  2. 写 pages/projects/<id>/index.md 详情页

首页卡片、项目列表页、侧边栏都会自动带上新项目。

构建前会自动校验注册表与详情页目录是否一一对应,不一致直接报错:

npm run check

本地开发

npm ci
npm run dev      # http://127.0.0.1:5173

构建

npm run build    # 产物在 .vitepress/dist/

部署

docker compose -f deploy/docker-compose.yml up -d --build

默认发布在宿主机 127.0.0.1:8020。站点资源前缀由 SITE_BASE 决定:

形态 参数 访问方式
子路径(过渡,无独立域名) /www/(默认) 由已有网关转发 /www/ 到本容器
独立域名 / 域名根路径
SITE_BASE=/ docker compose -f deploy/docker-compose.yml up -d --build

详见 门户部署。

S
Description
雪羊科技开源项目门户(iotLCM / xiu-dtu / xiu-admin 等开源项目索引)
Readme 1.6 MiB
Languages
TypeScript 31.3%
CSS 28.2%
Vue 24.4%
JavaScript 14.4%
Dockerfile 1.7%