39209ef591
mirror-to-gitee / mirror (push) Successful in 3s
问题:点「产品功能 / 核心能力 / 界面预览 / 官方文档」跳转后图标不变蓝。 根因: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 失效
82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
import { defineConfig } from 'vitepress'
|
|
import { projects } from '../data/projects'
|
|
|
|
/**
|
|
* 门户站构建配置
|
|
*
|
|
* SITE_BASE 由构建参数注入:
|
|
* - /www/ 过渡形态:挂在已有网关的 /www/ 路径下(没有独立域名时用)
|
|
* - / 独立域名形态:站点独占域名根路径
|
|
* 两者内容完全同源,只有资源前缀与路由前缀不同,所以用构建参数而不是改代码。
|
|
*/
|
|
const SITE_BASE = process.env.SITE_BASE ?? '/www/'
|
|
|
|
/** 代码仓组织(雪羊科技企业仓) */
|
|
const ORG_URL = process.env.ORG_URL ?? 'https://gitee.com/snowgoat'
|
|
|
|
/** 各项目的文档站地址(按项目 id 覆盖) */
|
|
const DOCS_URL: Record<string, string> = {
|
|
iotlcm: 'http://open.5iot.com:5051/docs/',
|
|
}
|
|
|
|
export default defineConfig({
|
|
srcDir: './pages',
|
|
base: SITE_BASE,
|
|
title: '雪羊科技开源',
|
|
description: '雪羊科技开源项目门户:物联网卡管理、DTU 设备管理、中后台开发框架',
|
|
lang: 'zh-CN',
|
|
cleanUrls: true,
|
|
lastUpdated: false,
|
|
head: [
|
|
['link', { rel: 'icon', type: 'image/svg+xml', href: `${SITE_BASE}favicon.svg` }],
|
|
],
|
|
themeConfig: {
|
|
siteTitle: '雪羊科技',
|
|
logo: { src: '/snowgoat-logo.png', alt: '雪羊科技' },
|
|
nav: [
|
|
{ text: '首页', link: '/' },
|
|
{ text: '产品功能', link: '/#features' },
|
|
{ text: '核心能力', link: '/#core' },
|
|
{ text: '界面预览', link: '/#preview' },
|
|
// activeMatch:进入任一项目详情页时「项目」保持高亮
|
|
{ text: '项目', link: '/projects/', activeMatch: '^/projects/' },
|
|
{ text: '官方文档', link: '/#docs' },
|
|
{ text: '关于', link: '/about' },
|
|
],
|
|
sidebar: {
|
|
'/projects/': [
|
|
{
|
|
text: '项目',
|
|
collapsed: false,
|
|
items: projects.map((p) => ({ text: p.name, link: p.page })),
|
|
},
|
|
],
|
|
'/guide/': [
|
|
{
|
|
text: '门户',
|
|
collapsed: false,
|
|
items: [{ text: '门户部署', link: '/guide/portal-deploy' }],
|
|
},
|
|
],
|
|
},
|
|
socialLinks: [
|
|
{ icon: 'github', link: ORG_URL },
|
|
],
|
|
footer: {
|
|
message: '雪羊科技开源 · Apache-2.0',
|
|
copyright: 'Copyright © 雪羊科技',
|
|
},
|
|
search: {
|
|
provider: 'local',
|
|
},
|
|
outline: {
|
|
level: [2, 3],
|
|
label: '本页目录',
|
|
},
|
|
docFooter: {
|
|
prev: '上一页',
|
|
next: '下一页',
|
|
},
|
|
},
|
|
})
|