签入版本
This commit is contained in:
@@ -1,51 +1,47 @@
|
||||
// import type { DefaultTheme, LocaleSpecificConfig } from "vitepress";
|
||||
import type { DefaultTheme, LocaleSpecificConfig } from "vitepress";
|
||||
|
||||
// export const META_URL = "https://www.rxthink.cn";
|
||||
// export const META_TITLE = "RXThinkCMF";
|
||||
// export const META_DESCRIPTION = "Enterprise Admin Framework";
|
||||
export const META_URL = "https://www.easygoadmin.vip";
|
||||
export const META_TITLE = "EasyGoAdmin";
|
||||
export const META_DESCRIPTION = "Enterprise Admin Framework";
|
||||
|
||||
// export const enConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
// description: META_DESCRIPTION,
|
||||
// head: [
|
||||
// ["meta", { property: "og:url", content: META_URL }],
|
||||
// ["meta", { property: "og:description", content: META_DESCRIPTION }],
|
||||
// ["meta", { property: "twitter:url", content: META_URL }],
|
||||
// ["meta", { property: "twitter:title", content: META_TITLE }],
|
||||
// ["meta", { property: "twitter:description", content: META_DESCRIPTION }],
|
||||
// [
|
||||
// "script",
|
||||
// {},
|
||||
// `
|
||||
// var _hmt = _hmt || [];
|
||||
// (function() {
|
||||
// var hm = document.createElement("script");
|
||||
// hm.src = "https://hm.baidu.com/hm.js?f2662051bbed33ef4673edf8bfe609fe";
|
||||
// var s = document.getElementsByTagName("script")[0];
|
||||
// s.parentNode.insertBefore(hm, s);
|
||||
// })();
|
||||
// `,
|
||||
// ],
|
||||
// ],
|
||||
//
|
||||
// themeConfig: {
|
||||
// editLink: {
|
||||
// pattern: "https://gitee.com/rxthinkcmf/RXThinkCMF_ThinkPhp8_EleVue",
|
||||
// text: "Suggest changes to this page",
|
||||
// },
|
||||
//
|
||||
// nav: [
|
||||
// { text: "Guide", link: "/en/introduction.html" },
|
||||
// ],
|
||||
//
|
||||
// sidebar: {
|
||||
// "/en/": [
|
||||
// {
|
||||
// text: "Introduction",
|
||||
// items: [
|
||||
// { text: "About", link: "/en/introduction.html" },
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// },
|
||||
// };
|
||||
export const enConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
description: META_DESCRIPTION,
|
||||
head: [
|
||||
["meta", { property: "og:url", content: META_URL }],
|
||||
["meta", { property: "og:description", content: META_DESCRIPTION }],
|
||||
["meta", { property: "twitter:url", content: META_URL }],
|
||||
["meta", { property: "twitter:title", content: META_TITLE }],
|
||||
["meta", { property: "twitter:description", content: META_DESCRIPTION }],
|
||||
[
|
||||
"script",
|
||||
{},
|
||||
`
|
||||
var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?f2662051bbed33ef4673edf8bfe609fe";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
`,
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig: {
|
||||
editLink: {
|
||||
pattern: "https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue",
|
||||
text: "Suggest changes to this page",
|
||||
},
|
||||
|
||||
nav: [{ text: "Guide", link: "/en/introduction.html" }],
|
||||
|
||||
sidebar: {
|
||||
"/en/": [
|
||||
{
|
||||
text: "Introduction",
|
||||
items: [{ text: "About", link: "/en/introduction.html" }],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
export declare const SITE_URL: string;
|
||||
export declare const SITE_DESCRIPTION: string;
|
||||
export declare function stripNumberPrefix(title: string): string;
|
||||
export declare function extractDescription(md: string): string;
|
||||
export declare function extractFaqs(md: string): { q: string; a: string }[];
|
||||
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* SEO/GEO 共享工具(纯 ESM,零依赖)。
|
||||
*
|
||||
* 同时被两类调用方 import:
|
||||
* 1. VitePress 配置(.ts,esbuild 打包时内联本文件)
|
||||
* 2. scripts/generate-llms-txt.mjs(Node 直接运行)
|
||||
*
|
||||
* 注意:SITE_URL 是全站唯一 URL 真相源。
|
||||
* docs 子域当前 TLS 证书为腾讯 CDN 默认证书(*.cdn.myqcloud.com,校验失败),
|
||||
* 故暂用 http;证书修复后只需改这里一处。
|
||||
*/
|
||||
|
||||
export const SITE_URL = "http://docs.gin.elevue.easygoadmin.vip";
|
||||
|
||||
export const SITE_DESCRIPTION =
|
||||
"EasyGoAdmin 企业级多租户后台管理基座 - Gin + GORM + Vue3 + ElementPlus";
|
||||
|
||||
/**
|
||||
* 剥离 H1/标题中的章节编号前缀,用于 <title> 与 JSON-LD headline。
|
||||
* 例:"5.10 字典模块" → "字典模块";"K. 贡献指南" → "贡献指南"。
|
||||
* 页内 H1 与侧边栏编号保持不变,仅影响 SEO 输出。
|
||||
*/
|
||||
export function stripNumberPrefix(title) {
|
||||
return String(title)
|
||||
.replace(/^(?:\d+(?:\.\d+)+|[A-Z]\.)\s+/, "")
|
||||
.trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* 从页面 Markdown 提取 meta description:
|
||||
* 1. 首选 `:::tip xxx` 容器内的首句(141/143 页的标准 opener)
|
||||
* 2. 回退到 H1 后的第一个普通段落
|
||||
* 输出压缩为单行、去除行内 Markdown,按中文句末标点截断(≤100 字符)。
|
||||
*/
|
||||
export function extractDescription(md) {
|
||||
let body = String(md).replace(/^---[\s\S]*?\n---\s*/, "");
|
||||
|
||||
let text = "";
|
||||
const tip = body.match(/^:::\s*tip[^\n]*\n([\s\S]*?)\n:::/m);
|
||||
if (tip) {
|
||||
text = tip[1];
|
||||
} else {
|
||||
const afterH1 = body.match(/^# (?!#)(.+)$/m);
|
||||
if (afterH1) {
|
||||
const rest = body.slice((afterH1.index ?? 0) + afterH1[0].length);
|
||||
const para = rest
|
||||
.split(/\n{2,}/)
|
||||
.find(
|
||||
(p) =>
|
||||
p.trim() &&
|
||||
!/^\s*#/.test(p) &&
|
||||
!/^\s*:::/.test(p) &&
|
||||
!/^\s*```/.test(p) &&
|
||||
!/^\s*\|/.test(p),
|
||||
);
|
||||
text = para || "";
|
||||
}
|
||||
}
|
||||
|
||||
text = text
|
||||
.replace(/\s+/g, " ")
|
||||
.replace(/`([^`]+)`/g, "$1")
|
||||
.replace(/\*\*([^*]+)\*\*/g, "$1")
|
||||
.replace(/\[([^\]]+)\]\([^)]*\)/g, "$1")
|
||||
.trim();
|
||||
|
||||
if (!text) return "";
|
||||
|
||||
// 按中文句末标点截取首句,上限 100 字符;截断时避免切碎词
|
||||
const m = text.match(/^.{1,100}?(?:[。!?!?]|$)/);
|
||||
let out = m ? m[0] : text.slice(0, 100);
|
||||
if (out.length < text.length && !/[。!?!?]$/.test(out)) {
|
||||
out = out.replace(/[^\s,、;:,;:]+$/, "");
|
||||
}
|
||||
return out.trim() || text.slice(0, 100);
|
||||
}
|
||||
|
||||
function cleanText(s) {
|
||||
return s
|
||||
.replace(/^:::[^\n]*$/gm, "")
|
||||
.replace(/^```[^\n]*$/gm, "")
|
||||
.replace(/`([^`]+)`/g, "$1")
|
||||
.replace(/\*\*([^*]+)\*\*/g, "$1")
|
||||
.replace(/\[([^\]]+)\]\([^)]*\)/g, "$1")
|
||||
.replace(/\s+/g, " ")
|
||||
.trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取页面中的 Q/A 对(用于 FAQPage JSON-LD),支持两种站内格式:
|
||||
* A. `### Q:问题` 标题式(如 zh/quickstart/faq.md)
|
||||
* B. `**Q:问题**` 加粗式(如 zh/appendix/faq.md)
|
||||
* 返回 [{ q, a }];无匹配返回 []。
|
||||
*/
|
||||
export function extractFaqs(md) {
|
||||
const body = String(md).replace(/^---[\s\S]*?\n---\s*/, "");
|
||||
let faqs = [];
|
||||
|
||||
// 格式 A:按 `### Q:` 切块,答案截断到下一个标题
|
||||
for (const part of body.split(/(?=^###\s*Q[::])/m)) {
|
||||
const m = part.match(/^###\s*Q[::]\s*([^\n]+)\n+([\s\S]*)/);
|
||||
if (!m) continue;
|
||||
let a = m[2];
|
||||
const cut = a.search(/^#{1,4}\s/m);
|
||||
if (cut >= 0) a = a.slice(0, cut);
|
||||
faqs.push({ q: cleanText(m[1]), a: cleanText(a) });
|
||||
}
|
||||
|
||||
// 格式 B:按 `**Q:` 切块
|
||||
if (!faqs.length) {
|
||||
for (const part of body.split(/(?=^\*\*Q[::])/m)) {
|
||||
const m = part.match(/^\*\*Q[::]\s*([^*]+)\*\*\s*\n+([\s\S]*)/);
|
||||
if (!m) continue;
|
||||
let a = m[2];
|
||||
const cut = a.search(/^(?:#{1,4}\s|\*\*Q)/m);
|
||||
if (cut >= 0) a = a.slice(0, cut);
|
||||
faqs.push({ q: cleanText(m[1]), a: cleanText(a) });
|
||||
}
|
||||
}
|
||||
|
||||
return faqs.filter((f) => f.q && f.a);
|
||||
}
|
||||
@@ -1,14 +1,22 @@
|
||||
import { defineConfig } from "vitepress";
|
||||
import { enConfig } from "./en";
|
||||
import { createSeoHooks } from "./seo";
|
||||
import { sharedConfig } from "./shared";
|
||||
import { zhConfig } from "./zh";
|
||||
|
||||
const seo = createSeoHooks(zhConfig.themeConfig?.sidebar);
|
||||
|
||||
export default defineConfig({
|
||||
...sharedConfig,
|
||||
ignoreDeadLinks: [
|
||||
(link) => link.includes('localhost'),
|
||||
],
|
||||
|
||||
// SEO:页面级 title/description、canonical/OG/JSON-LD、sitemap+lastmod
|
||||
transformPageData: seo.transformPageData,
|
||||
transformHead: seo.transformHead,
|
||||
sitemap: seo.sitemap,
|
||||
|
||||
locales: {
|
||||
root: { label: "简体中文", lang: "zh-CN", link: "/", ...zhConfig },
|
||||
// root: { label: "English", lang: "en-US", link: "/", ...enConfig },
|
||||
|
||||
@@ -0,0 +1,304 @@
|
||||
/**
|
||||
* SEO/GEO 构建期钩子(仅 Node 构建时运行,不进客户端 bundle):
|
||||
* - transformPageData:每页独立 title(去编号前缀)与 description(取 :::tip 首句)
|
||||
* - transformHead:canonical / Open Graph / twitter 卡片 / JSON-LD 结构化数据
|
||||
* - sitemap.transformItems:注入 lastmod(git 最后提交时间)并过滤 404
|
||||
*
|
||||
* 由 config/index.ts 通过 createSeoHooks(zhConfig.themeConfig?.sidebar) 挂载。
|
||||
* 依赖 extract.mjs(纯 ESM,同被 scripts/generate-llms-txt.mjs 复用)。
|
||||
*/
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { execSync } from "node:child_process";
|
||||
import {
|
||||
SITE_URL,
|
||||
extractDescription,
|
||||
extractFaqs,
|
||||
stripNumberPrefix,
|
||||
} from "./extract.mjs";
|
||||
|
||||
/** 与 vitepress HeadConfig 同构:[tag, attrs, innerHTML?] */
|
||||
type HeadTuple = [string, Record<string, any>, string?];
|
||||
|
||||
interface SideItem {
|
||||
text?: string;
|
||||
link?: string;
|
||||
items?: SideItem[];
|
||||
}
|
||||
|
||||
interface PageDataLike {
|
||||
relativePath?: string;
|
||||
title?: string;
|
||||
description?: string;
|
||||
frontmatter?: Record<string, any>;
|
||||
[k: string]: any;
|
||||
}
|
||||
|
||||
interface TransformCtx {
|
||||
pageData?: PageDataLike;
|
||||
title?: string;
|
||||
description?: string;
|
||||
content?: string;
|
||||
siteConfig?: { root?: string; srcDir?: string };
|
||||
}
|
||||
|
||||
const ORG = {
|
||||
"@type": "Organization",
|
||||
name: "EasyGoAdmin",
|
||||
url: "https://www.easygoadmin.vip",
|
||||
logo: `${SITE_URL}/logo.png`,
|
||||
sameAs: [
|
||||
"https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue",
|
||||
"https://www.easygoadmin.vip",
|
||||
],
|
||||
};
|
||||
|
||||
/** 相对路径 → 站内路由(cleanUrls 关闭,正文页带 .html) */
|
||||
function routeOf(relativePath: string): string {
|
||||
if (relativePath === "index.md") return "/";
|
||||
if (relativePath === "404.md") return "/404.html";
|
||||
return `/${relativePath.replace(/\.md$/, ".html")}`;
|
||||
}
|
||||
|
||||
/** 去掉侧边栏文案前导 emoji/符号,保留 "1.1 项目介绍" 这类编号文字 */
|
||||
function cleanLabel(s?: string): string {
|
||||
return (s || "").replace(/^[^\p{L}\p{N}]+/u, "").trim();
|
||||
}
|
||||
|
||||
/** 从侧边栏构建 route → 面包屑文案链(含分组小节) */
|
||||
function buildCrumbMap(sidebar: unknown): Map<string, string[]> {
|
||||
const map = new Map<string, string[]>();
|
||||
const groups: SideItem[] = Array.isArray(sidebar)
|
||||
? sidebar
|
||||
: ((sidebar as Record<string, SideItem[]>)?.["/zh/"] ?? []);
|
||||
const walk = (items: SideItem[], trail: string[]) => {
|
||||
for (const item of items) {
|
||||
if (item.link && item.link.startsWith("/")) {
|
||||
map.set(item.link, [...trail, cleanLabel(item.text)]);
|
||||
} else if (item.items?.length) {
|
||||
walk(item.items, [...trail, cleanLabel(item.text)]);
|
||||
}
|
||||
}
|
||||
};
|
||||
for (const group of groups) {
|
||||
walk(group.items ?? [], [cleanLabel(group.text)].filter(Boolean));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/** 从渲染后的 HTML 提取 H1 纯文本(JSON-LD headline 须与页面 H1 一致) */
|
||||
function h1OfHtml(html?: string): string {
|
||||
const m = (html || "").match(/<h1[^>]*>([\s\S]*?)<\/h1>/i);
|
||||
if (!m) return "";
|
||||
return m[1]
|
||||
.replace(/<[^>]+>/g, "")
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, "'")
|
||||
.trim();
|
||||
}
|
||||
|
||||
/** 从 Markdown 源提取 H1 纯文本(去除行内 markdown 标记) */
|
||||
function h1OfMd(md: string): string {
|
||||
const m = md.match(/^# (?!#)(.+)$/m);
|
||||
if (!m) return "";
|
||||
return m[1]
|
||||
.replace(/`([^`]+)`/g, "$1")
|
||||
.replace(/\*\*([^*]+)\*\*/g, "$1")
|
||||
.trim();
|
||||
}
|
||||
|
||||
export function createSeoHooks(sidebar: unknown) {
|
||||
const crumbs = buildCrumbMap(sidebar);
|
||||
const projectDirs: string[] = [];
|
||||
let gitDates: Map<string, string> | null = null;
|
||||
|
||||
const readMd = (relativePath: string, srcDir?: string): string => {
|
||||
try {
|
||||
return fs.readFileSync(
|
||||
path.resolve(srcDir || process.cwd(), relativePath),
|
||||
"utf8",
|
||||
);
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 项目内每个文件最后一次 git 提交的 ISO 时间。
|
||||
* 单次 git log 调用构建全量映射(key = 相对路径,与 pageData.relativePath 一致);
|
||||
* git 不可用时静默降级(sitemap 无 lastmod、JSON-LD 无 dateModified)。
|
||||
*/
|
||||
const getGitDates = (root: string): Map<string, string> => {
|
||||
if (gitDates) return gitDates;
|
||||
gitDates = new Map<string, string>();
|
||||
try {
|
||||
const out = execSync(
|
||||
"git log --format=:::%cI --name-only --relative -n 500 -- .",
|
||||
{
|
||||
cwd: root,
|
||||
encoding: "utf8",
|
||||
maxBuffer: 64 * 1024 * 1024,
|
||||
stdio: ["ignore", "pipe", "ignore"],
|
||||
},
|
||||
);
|
||||
let current = "";
|
||||
for (const line of out.split(/\r?\n/)) {
|
||||
if (line.startsWith(":::")) {
|
||||
current = line.slice(3).trim();
|
||||
continue;
|
||||
}
|
||||
const file = line.trim();
|
||||
if (file && current && !gitDates.has(file)) {
|
||||
gitDates.set(file, current);
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// 降级:无 lastmod / dateModified
|
||||
}
|
||||
return gitDates;
|
||||
};
|
||||
|
||||
/** 每页独立 title(去 "5.10 " 编号前缀,关键词前置)与 description(:::tip 首句) */
|
||||
function transformPageData(pageData: PageDataLike, ctx?: any): Record<string, unknown> {
|
||||
const srcDir: string | undefined = ctx?.siteConfig?.srcDir;
|
||||
const root: string | undefined = ctx?.siteConfig?.root;
|
||||
if (root && !projectDirs.includes(root)) projectDirs.push(root);
|
||||
|
||||
const out: Record<string, unknown> = {};
|
||||
const rel = pageData.relativePath;
|
||||
if (rel && !pageData.frontmatter?.description) {
|
||||
const desc = extractDescription(readMd(rel, srcDir));
|
||||
if (desc) out.description = desc;
|
||||
}
|
||||
if (pageData.title) {
|
||||
out.title = stripNumberPrefix(pageData.title);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/** 构建期注入 canonical / OG / twitter / JSON-LD */
|
||||
function transformHead(ctx: TransformCtx): HeadTuple[] {
|
||||
const rel = ctx?.pageData?.relativePath || "";
|
||||
if (!rel || rel === "404.md") return [];
|
||||
|
||||
const route = routeOf(rel);
|
||||
const url = `${SITE_URL}${route}`;
|
||||
const title = ctx.pageData?.title || ctx.title || "";
|
||||
const desc = ctx.description || "";
|
||||
const isHome = rel === "index.md";
|
||||
const image = `${SITE_URL}/logo.png`;
|
||||
|
||||
const heads: HeadTuple[] = [
|
||||
["link", { rel: "canonical", href: url }],
|
||||
["meta", { property: "og:type", content: isHome ? "website" : "article" }],
|
||||
["meta", { property: "og:site_name", content: "EasyGoAdmin" }],
|
||||
["meta", { property: "og:locale", content: "zh_CN" }],
|
||||
["meta", { property: "og:title", content: title }],
|
||||
["meta", { property: "og:description", content: desc }],
|
||||
["meta", { property: "og:url", content: url }],
|
||||
["meta", { property: "og:image", content: image }],
|
||||
["meta", { property: "twitter:title", content: title }],
|
||||
["meta", { property: "twitter:description", content: desc }],
|
||||
["meta", { property: "twitter:url", content: url }],
|
||||
["meta", { property: "twitter:image", content: image }],
|
||||
];
|
||||
|
||||
// ---- JSON-LD ----
|
||||
const root = ctx.siteConfig?.root || projectDirs[0] || process.cwd();
|
||||
const srcDir = ctx.siteConfig?.srcDir || root;
|
||||
const lastMod = getGitDates(root).get(rel);
|
||||
const blocks: Record<string, any>[] = [];
|
||||
|
||||
if (isHome) {
|
||||
blocks.push({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
name: "EasyGoAdmin 开发文档",
|
||||
url: `${SITE_URL}/`,
|
||||
inLanguage: "zh-CN",
|
||||
description: desc,
|
||||
});
|
||||
blocks.push({ "@context": "https://schema.org", ...ORG });
|
||||
} else {
|
||||
const md = readMd(rel, srcDir);
|
||||
const article: Record<string, any> = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "TechArticle",
|
||||
headline: h1OfMd(md) || h1OfHtml(ctx.content) || title,
|
||||
description: desc,
|
||||
url,
|
||||
inLanguage: "zh-CN",
|
||||
mainEntityOfPage: { "@type": "WebPage", "@id": url },
|
||||
publisher: ORG,
|
||||
};
|
||||
if (lastMod) article.dateModified = lastMod;
|
||||
blocks.push(article);
|
||||
|
||||
const trail = crumbs.get(route);
|
||||
if (trail?.length) {
|
||||
const items: Record<string, any>[] = [
|
||||
{ "@type": "ListItem", position: 1, name: "首页", item: `${SITE_URL}/` },
|
||||
];
|
||||
trail.forEach((name, i) => {
|
||||
const node: Record<string, any> = {
|
||||
"@type": "ListItem",
|
||||
position: i + 2,
|
||||
name,
|
||||
};
|
||||
if (i === trail.length - 1) node.item = url;
|
||||
items.push(node);
|
||||
});
|
||||
blocks.push({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
itemListElement: items,
|
||||
});
|
||||
}
|
||||
|
||||
const faqs = extractFaqs(md);
|
||||
if (faqs.length) {
|
||||
blocks.push({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
mainEntity: faqs.map((f) => ({
|
||||
"@type": "Question",
|
||||
name: f.q,
|
||||
acceptedAnswer: { "@type": "Answer", text: f.a },
|
||||
})),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 转义 "<",防止内容中出现 </script> 破坏注入
|
||||
const json = JSON.stringify(blocks).replace(/</g, "\\u003c");
|
||||
heads.push(["script", { type: "application/ld+json" }, json]);
|
||||
return heads;
|
||||
}
|
||||
|
||||
/** sitemap.xml:过滤 404/README,注入 git lastmod */
|
||||
const sitemap = {
|
||||
hostname: SITE_URL,
|
||||
transformItems(items: { url: string; lastmod?: string }[]) {
|
||||
const root = projectDirs[0] || process.cwd();
|
||||
const dates = getGitDates(root);
|
||||
const out: { url: string; lastmod?: string }[] = [];
|
||||
for (const item of items) {
|
||||
// ⚠ vitepress 传入的 item.url 是相对路径("404.html"、"zh/x.html"、""),
|
||||
// 无前导斜杠也无域名——hostname 由 SitemapStream 事后拼接。
|
||||
if (/(^|\/)404\.html$/.test(item.url)) continue; // 404 页不收录
|
||||
if (/(^|\/)README\.html$/.test(item.url)) continue; // 仓库 README 非文档页
|
||||
const p = item.url.replace(/^\//, "");
|
||||
const rel =
|
||||
p === "" || p === "index.html" ? "index.md" : p.replace(/\.html$/, ".md");
|
||||
const lastmod = dates.get(rel);
|
||||
out.push(lastmod ? { ...item, lastmod } : item);
|
||||
}
|
||||
return out;
|
||||
},
|
||||
};
|
||||
|
||||
return { transformPageData, transformHead, sitemap };
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { defineConfig, HeadConfig } from "vitepress";
|
||||
|
||||
export const META_IMAGE = "/social.png";
|
||||
export const META_IMAGE = "/logo.png";
|
||||
|
||||
const rControl = /[\u0000-\u001f]/g;
|
||||
const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'“”‘’<>,.?/]+/g;
|
||||
@@ -22,7 +22,9 @@ export const slugify = (str: string): string =>
|
||||
.replace(/^(\d)/, "_$1");
|
||||
|
||||
export const sharedConfig = defineConfig({
|
||||
title: "小蚂蚁云",
|
||||
title: "EasyGoAdmin",
|
||||
// 页面 <title> 后缀:「字典模块 | EasyGoAdmin 开发文档」(index.md frontmatter 可覆盖)
|
||||
titleTemplate: "EasyGoAdmin 开发文档",
|
||||
appearance: "light",
|
||||
|
||||
markdown: {
|
||||
@@ -87,18 +89,18 @@ export const sharedConfig = defineConfig({
|
||||
socialLinks: [
|
||||
{
|
||||
icon: "github",
|
||||
link: "https://gitee.com/rxthinkcmf/RXThinkCMF_ThinkPhp8_EleVue",
|
||||
link: "https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue",
|
||||
},
|
||||
],
|
||||
|
||||
footer: {
|
||||
copyright:
|
||||
"Copyright © 2018~2026 www.rxthink.cn. All rights reserved.",
|
||||
"Copyright © 2026 www.easygoadmin.vip. Apache-2.0 Licensed.",
|
||||
message: "小蚂蚁云团队 · 提供技术支持",
|
||||
},
|
||||
|
||||
editLink: {
|
||||
pattern: "https://gitee.com/rxthinkcmf/RXThinkCMF_ThinkPhp8_EleVue",
|
||||
pattern: "https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue",
|
||||
text: "对本页提出修改建议",
|
||||
},
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import type { DefaultTheme, LocaleSpecificConfig } from "vitepress";
|
||||
|
||||
export const META_URL = "https://www.rxthink.cn";
|
||||
export const META_TITLE = "RXThinkCMF ThinkPHP8+ElementPlus 开发文档";
|
||||
export const META_DESCRIPTION =
|
||||
"RXThinkCMF 企业级前后端分离后台管理系统 - ThinkPHP8 + Vue3 + ElementPlus";
|
||||
export const META_URL = "http://docs.gin.elevue.easygoadmin.vip";
|
||||
export const META_TITLE = "EasyGoAdmin Gin+ElementPlus 开发文档";
|
||||
export const META_DESCRIPTION = "EasyGoAdmin 企业级多租户后台管理基座 - Gin + GORM + Vue3 + ElementPlus";
|
||||
|
||||
export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
description: META_DESCRIPTION,
|
||||
@@ -30,7 +29,7 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
|
||||
themeConfig: {
|
||||
editLink: {
|
||||
pattern: "https://gitee.com/rxthinkcmf/RXThinkCMF_ThinkPhp8_EleVue",
|
||||
pattern: "https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue",
|
||||
text: "对本页提出修改建议",
|
||||
},
|
||||
|
||||
@@ -44,58 +43,74 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
},
|
||||
|
||||
nav: [
|
||||
{ text: "官网", link: "https://www.rxthink.cn" },
|
||||
{ text: "授权", link: "https://www.rxthink.cn/goods/detail/2" },
|
||||
{ text: "官网", link: "https://www.easygoadmin.vip" },
|
||||
{ text: "授权", link: "https://www.easygoadmin.vip/goods/detail/2" },
|
||||
{
|
||||
text: "部署文档",
|
||||
items: [
|
||||
{
|
||||
text: "RXThinkCMF混编版ThinkPHP6+Layui版本",
|
||||
link: "http://docs.thinkphp6.layui.rxthink.cn",
|
||||
text: "EasyGoAdmin混编版GoFrame+Layui版本",
|
||||
link: "http://docs.goframe.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP6+ElementPlus版本",
|
||||
link: "http://docs.thinkphp6.elevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离GoFrame+ElementPlus版本",
|
||||
link: "http://docs.goframe.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP6+AntDesign版本",
|
||||
link: "http://docs.thinkphp6.antdvue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离GoFrame+AntDesign版本",
|
||||
link: "http://docs.goframe.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP6+NaiveUI版本",
|
||||
link: "http://docs.thinkphp6.naivevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离GoFrame+NaiveUI版本",
|
||||
link: "http://docs.goframe.naivevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF混编版ThinkPHP8+Layui版本",
|
||||
link: "http://docs.thinkphp8.layui.rxthink.cn",
|
||||
text: "EasyGoAdmin混编版Gin+Layui版本",
|
||||
link: "http://docs.gin.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP8+ElementPlus版本",
|
||||
link: "http://docs.thinkphp8.elevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Gin+ElementPlus版本",
|
||||
link: "http://docs.gin.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP8+AntDesign版本",
|
||||
link: "http://docs.thinkphp8.antdvue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Gin+AntDesign版本",
|
||||
link: "http://docs.gin.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP8+NaiveUI版本",
|
||||
link: "http://docs.thinkphp8.naivevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Gin+NaiveUI版本",
|
||||
link: "http://docs.gin.naivevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF混编版Laravel13+Layui版本",
|
||||
link: "http://docs.laravel13.layui.rxthink.cn",
|
||||
text: "EasyGoAdmin混编版Beego+Layui版本",
|
||||
link: "http://docs.beego.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离Laravel13+ElementPlus版本",
|
||||
link: "http://docs.laravel13.elevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Beego+ElementPlus版本",
|
||||
link: "http://docs.beego.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离Laravel13+AntDesign版本",
|
||||
link: "http://docs.laravel13.antdvue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Beego+AntDesign版本",
|
||||
link: "http://docs.beego.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离Laravel13+NaiveUI版本",
|
||||
link: "http://docs.laravel13.naivevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Beego+NaiveUI版本",
|
||||
link: "http://docs.beego.naivevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin混编版Iris+Layui版本",
|
||||
link: "http://docs.iris.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin前后端分离Iris+ElementPlus版本",
|
||||
link: "http://docs.iris.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin前后端分离Iris+AntDesign版本",
|
||||
link: "http://docs.iris.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin前后端分离Iris+NaiveUI版本",
|
||||
link: "http://docs.iris.naivevue.easygoadmin.vip",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -103,52 +118,68 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "在线演示",
|
||||
items: [
|
||||
{
|
||||
text: "RXThinkCMF混编版ThinkPHP6+Layui版本",
|
||||
link: "http://manage.thinkphp6.layui.rxthink.cn",
|
||||
text: "EasyGoAdmin混编版GoFrame+Layui版本",
|
||||
link: "http://manage.goframe.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP6+ElementPlus版本",
|
||||
link: "http://manage.thinkphp6.elevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离GoFrame+ElementPlus版本",
|
||||
link: "http://manage.goframe.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP6+AntDesign版本",
|
||||
link: "http://manage.thinkphp6.antdvue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离GoFrame+AntDesign版本",
|
||||
link: "http://manage.goframe.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP6+NaiveUI版本",
|
||||
link: "http://manage.thinkphp6.naivevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离GoFrame+NaiveUI版本",
|
||||
link: "http://manage.goframe.naivevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF混编版ThinkPHP8+Layui版本",
|
||||
link: "http://manage.thinkphp8.layui.rxthink.cn",
|
||||
text: "EasyGoAdmin混编版Gin+Layui版本",
|
||||
link: "http://manage.gin.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP8+ElementPlus版本",
|
||||
link: "http://manage.thinkphp8.elevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Gin+ElementPlus版本",
|
||||
link: "http://manage.gin.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP8+AntDesign版本",
|
||||
link: "http://manage.thinkphp8.antdvue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Gin+AntDesign版本",
|
||||
link: "http://manage.gin.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离ThinkPHP8+NaiveUI版本",
|
||||
link: "http://manage.thinkphp8.naivevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Gin+NaiveUI版本",
|
||||
link: "http://manage.gin.naivevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF混编版Laravel13+Layui版本",
|
||||
link: "http://manage.laravel13.layui.rxthink.cn",
|
||||
text: "EasyGoAdmin混编版Beego+Layui版本",
|
||||
link: "http://manage.beego.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离Laravel13+ElementPlus版本",
|
||||
link: "http://manage.laravel13.elevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Beego+ElementPlus版本",
|
||||
link: "http://manage.beego.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离Laravel13+AntDesign版本",
|
||||
link: "http://manage.laravel13.antdvue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Beego+AntDesign版本",
|
||||
link: "http://manage.beego.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "RXThinkCMF前后端分离Laravel13+NaiveUI版本",
|
||||
link: "http://manage.laravel13.naivevue.rxthink.cn",
|
||||
text: "EasyGoAdmin前后端分离Beego+NaiveUI版本",
|
||||
link: "http://manage.beego.naivevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin混编版Iris+Layui版本",
|
||||
link: "http://manage.iris.layui.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin前后端分离Iris+ElementPlus版本",
|
||||
link: "http://manage.iris.elevue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin前后端分离Iris+AntDesign版本",
|
||||
link: "http://manage.iris.antdvue.easygoadmin.vip",
|
||||
},
|
||||
{
|
||||
text: "EasyGoAdmin前后端分离Iris+NaiveUI版本",
|
||||
link: "http://manage.iris.naivevue.easygoadmin.vip",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -159,11 +190,11 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
{
|
||||
text: "相关链接",
|
||||
items: [
|
||||
{ text: "官方网站", link: "https://www.rxthink.cn" },
|
||||
{ text: "Gitee 仓库", link: "https://gitee.com/rxthinkcmf/RXThinkCMF_ThinkPhp8_EleVue" },
|
||||
{ text: "ThinkPHP 官网", link: "https://www.thinkphp.cn/" },
|
||||
{ text: "Gin 官网", link: "https://gin-gonic.com/zh-cn/" },
|
||||
{ text: "GORM 文档", link: "https://gorm.io/zh_CN/" },
|
||||
{ text: "Vue3 文档", link: "https://cn.vuejs.org/" },
|
||||
{ text: "ElementPlus", link: "https://element-plus.org/zh-CN/" },
|
||||
{ text: "VitePress", link: "https://vitepress.dev/zh/" },
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -177,12 +208,12 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "📖 1. 了解项目",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "1.1 项目介绍", link: "/zh/introduction.html" },
|
||||
{ text: "1.2 为什么选择我们", link: "/zh/why.html" },
|
||||
{ text: "1.3 项目目录结构", link: "/zh/directory.html" },
|
||||
{ text: "1.4 新手入门指南", link: "/zh/course.html" },
|
||||
{ text: "1.5 技术栈说明", link: "/zh/tech-stack.html" },
|
||||
{ text: "1.6 更新日志", link: "/zh/changelog.html" },
|
||||
{ text: "📄 1.1 项目介绍", link: "/zh/introduction.html" },
|
||||
{ text: "📄 1.2 核心特性", link: "/zh/why.html" },
|
||||
{ text: "📄 1.3 项目目录结构", link: "/zh/directory.html" },
|
||||
{ text: "📄 1.4 新手入门指南", link: "/zh/course.html" },
|
||||
{ text: "📄 1.5 技术栈说明", link: "/zh/tech-stack.html" },
|
||||
{ text: "📄 1.6 更新日志", link: "/zh/changelog.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -193,14 +224,14 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "🚀 2. 快速入门",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "2.1 开发环境准备", link: "/zh/quickstart/environment.html" },
|
||||
{ text: "2.2 后端服务启动", link: "/zh/quickstart/backend-start.html" },
|
||||
{ text: "2.3 前端服务启动", link: "/zh/quickstart/frontend-start.html" },
|
||||
{ text: "2.4 数据库初始化", link: "/zh/quickstart/database-init.html" },
|
||||
{ text: "2.5 环境变量配置", link: "/zh/quickstart/env-vars.html" },
|
||||
{ text: "2.6 第一个接口调试", link: "/zh/quickstart/first-api.html" },
|
||||
{ text: "2.7 Docker 快速体验", link: "/zh/quickstart/docker.html" },
|
||||
{ text: "2.8 常见问题 FAQ", link: "/zh/quickstart/faq.html" },
|
||||
{ text: "📄 2.1 开发环境准备", link: "/zh/quickstart/environment.html" },
|
||||
{ text: "📄 2.2 数据库初始化", link: "/zh/quickstart/database-init.html" },
|
||||
{ text: "📄 2.3 配置文件与环境变量", link: "/zh/quickstart/env-vars.html" },
|
||||
{ text: "📄 2.4 后端服务启动", link: "/zh/quickstart/backend-start.html" },
|
||||
{ text: "📄 2.5 前端服务启动", link: "/zh/quickstart/frontend-start.html" },
|
||||
{ text: "📄 2.6 第一个接口调试", link: "/zh/quickstart/first-api.html" },
|
||||
{ text: "📄 2.7 Docker 快速体验", link: "/zh/quickstart/docker.html" },
|
||||
{ text: "📄 2.8 常见问题 FAQ", link: "/zh/quickstart/faq.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -211,17 +242,18 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "🧪 3. 模块开发实战",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "3.1 概述与目标", link: "/zh/guide/overview.html" },
|
||||
{ text: "3.2 数据库建表", link: "/zh/guide/database.html" },
|
||||
{ text: "3.3 模型层开发", link: "/zh/guide/model.html" },
|
||||
{ text: "3.4 验证器开发", link: "/zh/guide/validator.html" },
|
||||
{ text: "3.5 逻辑层开发", link: "/zh/guide/logic.html" },
|
||||
{ text: "3.6 控制器开发", link: "/zh/guide/controller.html" },
|
||||
{ text: "3.7 路由注册", link: "/zh/guide/route.html" },
|
||||
{ text: "3.8 权限节点配置", link: "/zh/guide/permission.html" },
|
||||
{ text: "3.9 前端联调指引", link: "/zh/guide/frontend-integration.html" },
|
||||
{ text: "3.10 完整代码清单", link: "/zh/guide/code-list.html" },
|
||||
{ text: "3.11 常见问题与排错", link: "/zh/guide/faq.html" },
|
||||
{ text: "📄 3.1 概述与目标", link: "/zh/guide/overview.html" },
|
||||
{ text: "📄 3.2 数据库建表", link: "/zh/guide/database.html" },
|
||||
{ text: "📄 3.3 契约层开发(dto)", link: "/zh/guide/dto.html" },
|
||||
{ text: "📄 3.4 数据访问层(repository)", link: "/zh/guide/repository.html" },
|
||||
{ text: "📄 3.5 业务层开发(service)", link: "/zh/guide/service.html" },
|
||||
{ text: "📄 3.6 接口层开发(handler)", link: "/zh/guide/handler.html" },
|
||||
{ text: "📄 3.7 路由与元数据注册(RouteSpec)", link: "/zh/guide/route.html" },
|
||||
{ text: "📄 3.8 参数校验与错误上抛", link: "/zh/guide/validation.html" },
|
||||
{ text: "📄 3.9 权限节点配置", link: "/zh/guide/permission.html" },
|
||||
{ text: "📄 3.10 前端联调指引", link: "/zh/guide/frontend-integration.html" },
|
||||
{ text: "📄 3.11 完整代码清单", link: "/zh/guide/code-list.html" },
|
||||
{ text: "📄 3.12 常见问题与排错", link: "/zh/guide/faq.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -232,17 +264,18 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "🏛️ 4. 架构设计",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "4.1 整体架构概览", link: "/zh/architecture/overview.html" },
|
||||
{ text: "4.2 请求处理链路", link: "/zh/architecture/request-flow.html" },
|
||||
{ text: "4.3 后端分层架构", link: "/zh/architecture/backend-layer.html" },
|
||||
{ text: "4.4 前端分层架构", link: "/zh/architecture/frontend-layer.html" },
|
||||
{ text: "4.5 目录结构设计", link: "/zh/architecture/directory-design.html" },
|
||||
{ text: "4.6 核心基类体系", link: "/zh/architecture/base-classes.html" },
|
||||
{ text: "4.7 横切机制", link: "/zh/architecture/cross-cutting.html" },
|
||||
{ text: "4.8 缓存架构设计", link: "/zh/architecture/cache.html" },
|
||||
{ text: "4.9 数据库设计", link: "/zh/architecture/database-design.html" },
|
||||
{ text: "4.10 安全架构设计", link: "/zh/architecture/security.html" },
|
||||
{ text: "4.11 扩展性设计", link: "/zh/architecture/extensibility.html" },
|
||||
{ text: "📄 5.1 整体架构概览", link: "/zh/architecture/overview.html" },
|
||||
{ text: "📄 5.2 请求处理链路", link: "/zh/architecture/request-flow.html" },
|
||||
{ text: "📄 5.3 后端分层架构", link: "/zh/architecture/backend-layer.html" },
|
||||
{ text: "📄 5.4 反射元数据驱动机制", link: "/zh/architecture/bind-mechanism.html" },
|
||||
{ text: "📄 5.5 前端分层架构", link: "/zh/architecture/frontend-layer.html" },
|
||||
{ text: "📄 5.6 目录结构设计", link: "/zh/architecture/directory-design.html" },
|
||||
{ text: "📄 5.7 基座与公共体系", link: "/zh/architecture/base-system.html" },
|
||||
{ text: "📄 5.8 横切机制", link: "/zh/architecture/cross-cutting.html" },
|
||||
{ text: "📄 5.9 缓存架构设计", link: "/zh/architecture/cache.html" },
|
||||
{ text: "📄 5.10 数据库设计", link: "/zh/architecture/database-design.html" },
|
||||
{ text: "📄 5.11 安全架构设计", link: "/zh/architecture/security.html" },
|
||||
{ text: "📄 5.12 扩展性设计", link: "/zh/architecture/extensibility.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -254,51 +287,46 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
collapsed: false,
|
||||
items: [
|
||||
{
|
||||
text: "认证与安全",
|
||||
text: "📄 认证与安全",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "5.1 用户认证(JWT)", link: "/zh/core/jwt.html" },
|
||||
{ text: "5.2 认证流程实战", link: "/zh/core/auth-flow.html" },
|
||||
{ text: "5.3 验证码机制", link: "/zh/core/captcha.html" },
|
||||
{ text: "5.4 权限管理(RBAC)", link: "/zh/core/rbac.html" },
|
||||
{ text: "5.5 跨域资源共享", link: "/zh/core/cors.html" },
|
||||
{ text: "5.6 密码加密服务", link: "/zh/core/password.html" },
|
||||
{ text: "5.7 演示模式", link: "/zh/core/demo-mode.html" },
|
||||
{ text: "📄 5.1 用户认证(JWT)", link: "/zh/core/jwt.html" },
|
||||
{ text: "📄 5.2 认证与授权流程", link: "/zh/core/auth-flow.html" },
|
||||
{ text: "📄 5.3 验证码机制", link: "/zh/core/captcha.html" },
|
||||
{ text: "📄 5.4 权限管理(RBAC)", link: "/zh/core/rbac.html" },
|
||||
{ text: "📄 5.5 跨域配置(CORS)", link: "/zh/core/cors.html" },
|
||||
{ text: "📄 5.6 密码与加密服务", link: "/zh/core/password.html" },
|
||||
{ text: "📄 5.7 接口限流(RateLimit)", link: "/zh/core/ratelimit.html" },
|
||||
{ text: "📄 5.8 演示模式", link: "/zh/core/demo-mode.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "数据与配置",
|
||||
text: "📄 数据与配置",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "5.8 多租户隔离", link: "/zh/core/tenant.html" },
|
||||
{ text: "5.9 数据权限", link: "/zh/core/data-scope.html" },
|
||||
{ text: "5.10 字典模块", link: "/zh/core/dict.html" },
|
||||
{ text: "5.11 字典配置与使用", link: "/zh/core/dict-guide.html" },
|
||||
{ text: "5.12 系统配置管理", link: "/zh/core/config.html" },
|
||||
{ text: "5.13 系统参数管理", link: "/zh/core/param.html" },
|
||||
{ text: "📄 5.9 多租户隔离", link: "/zh/core/tenant.html" },
|
||||
{ text: "📄 5.10 数据权限", link: "/zh/core/data-scope.html" },
|
||||
{ text: "📄 5.11 字典模块", link: "/zh/core/dict.html" },
|
||||
{ text: "📄 5.12 系统配置管理", link: "/zh/core/config.html" },
|
||||
{ text: "📄 5.13 系统参数管理", link: "/zh/core/param.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "日志与监控",
|
||||
text: "📄 日志与监控",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "5.14 操作日志", link: "/zh/core/operation-log.html" },
|
||||
{ text: "5.15 登录日志", link: "/zh/core/login-log.html" },
|
||||
{ text: "5.16 异常与响应处理", link: "/zh/core/exception.html" },
|
||||
{ text: "📄 5.14 操作日志", link: "/zh/core/operation-log.html" },
|
||||
{ text: "📄 5.15 登录日志", link: "/zh/core/login-log.html" },
|
||||
{ text: "📄 5.16 异常与统一响应", link: "/zh/core/exception.html" },
|
||||
{ text: "📄 5.17 链路追踪与指标", link: "/zh/core/trace-metrics.html" },
|
||||
{ text: "📄 5.18 服务与缓存监控", link: "/zh/core/server-monitor.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "防护与治理",
|
||||
text: "📄 任务调度",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "5.17 防重复提交", link: "/zh/core/idempotent.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "注解系统",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "5.18 注解系统总览", link: "/zh/core/attributes.html" },
|
||||
{ text: "📄 5.19 定时任务调度机制", link: "/zh/core/job-scheduler.html" },
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -311,21 +339,59 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "📦 6. 业务模块",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "6.1 用户管理", link: "/zh/modules/user.html" },
|
||||
{ text: "6.2 角色管理", link: "/zh/modules/role.html" },
|
||||
{ text: "6.3 菜单管理", link: "/zh/modules/menu.html" },
|
||||
{ text: "6.4 部门管理", link: "/zh/modules/dept.html" },
|
||||
{ text: "6.5 职级管理", link: "/zh/modules/level.html" },
|
||||
{ text: "6.6 岗位管理", link: "/zh/modules/position.html" },
|
||||
{ text: "6.7 文章管理", link: "/zh/modules/article.html" },
|
||||
{ text: "6.8 公告与链接管理", link: "/zh/modules/content.html" },
|
||||
{ text: "6.9 行政区划管理", link: "/zh/modules/city.html" },
|
||||
{ text: "6.10 分类管理", link: "/zh/modules/category.html" },
|
||||
{ text: "6.11 定时任务", link: "/zh/modules/job.html" },
|
||||
{ text: "6.12 参数管理", link: "/zh/modules/param.html" },
|
||||
{ text: "6.13 租户管理", link: "/zh/modules/tenant.html" },
|
||||
{ text: "6.14 文件模板管理", link: "/zh/modules/filetemplate.html" },
|
||||
{ text: "6.15 首页与个人中心", link: "/zh/modules/index.html" },
|
||||
{
|
||||
text: "📄 组织与权限",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "📄 6.1 用户管理", link: "/zh/modules/user.html" },
|
||||
{ text: "📄 6.2 角色管理", link: "/zh/modules/role.html" },
|
||||
{ text: "📄 6.3 菜单管理", link: "/zh/modules/menu.html" },
|
||||
{ text: "📄 6.4 部门管理", link: "/zh/modules/dept.html" },
|
||||
{ text: "📄 6.5 职级管理", link: "/zh/modules/level.html" },
|
||||
{ text: "📄 6.6 岗位管理", link: "/zh/modules/position.html" },
|
||||
{ text: "📄 6.7 租户管理", link: "/zh/modules/tenant.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "📄 内容管理",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "📄 6.8 文章管理", link: "/zh/modules/article.html" },
|
||||
{ text: "📄 6.9 分类管理", link: "/zh/modules/category.html" },
|
||||
{ text: "📄 6.10 公告管理", link: "/zh/modules/notice.html" },
|
||||
{ text: "📄 6.11 友情链接管理", link: "/zh/modules/link.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "📄 数据与配置",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "📄 6.12 字典管理", link: "/zh/modules/dict.html" },
|
||||
{ text: "📄 6.13 参数管理", link: "/zh/modules/param.html" },
|
||||
{ text: "📄 6.14 配置管理", link: "/zh/modules/config.html" },
|
||||
{ text: "📄 6.15 行政区划管理", link: "/zh/modules/city.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "📄 任务与监控",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "📄 6.16 定时任务管理", link: "/zh/modules/job.html" },
|
||||
{ text: "📄 6.17 在线用户", link: "/zh/modules/online-user.html" },
|
||||
{ text: "📄 6.18 服务监控", link: "/zh/modules/server-monitor.html" },
|
||||
{ text: "📄 6.19 缓存监控", link: "/zh/modules/cache-monitor.html" },
|
||||
{ text: "📄 6.20 日志管理", link: "/zh/modules/logger.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "📄 文件与工具",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "📄 6.21 文件模板管理", link: "/zh/modules/file-template.html" },
|
||||
{ text: "📄 6.22 示例模块(example)", link: "/zh/modules/example.html" },
|
||||
{ text: "📄 6.23 首页与个人中心", link: "/zh/modules/index.html" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -336,12 +402,12 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "🧰 7. 文件处理",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "7.1 文件上传全流程", link: "/zh/tools/upload.html" },
|
||||
{ text: "7.2 上传配置详解", link: "/zh/tools/upload-config.html" },
|
||||
{ text: "7.3 富文本处理", link: "/zh/tools/rich-text.html" },
|
||||
{ text: "7.4 数据导入导出", link: "/zh/tools/excel.html" },
|
||||
{ text: "7.5 前端文件组件", link: "/zh/tools/file-components.html" },
|
||||
{ text: "7.6 数据库迁移工具", link: "/zh/tools/db-migrate.html" },
|
||||
{ text: "📄 7.1 文件上传全流程", link: "/zh/tools/upload.html" },
|
||||
{ text: "📄 7.2 上传配置详解", link: "/zh/tools/upload-config.html" },
|
||||
{ text: "📄 7.3 富文本处理", link: "/zh/tools/rich-text.html" },
|
||||
{ text: "📄 7.4 数据导入导出", link: "/zh/tools/excel.html" },
|
||||
{ text: "📄 7.5 前端文件组件", link: "/zh/tools/file-components.html" },
|
||||
{ text: "📄 7.6 数据库迁移工具", link: "/zh/tools/db-migrate.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -352,13 +418,14 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "🔗 8. 接口规范与对接",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "8.1 统一响应格式", link: "/zh/api-spec/response.html" },
|
||||
{ text: "8.2 错误码对照表", link: "/zh/api-spec/error-code.html" },
|
||||
{ text: "8.3 分页查询规范", link: "/zh/api-spec/pagination.html" },
|
||||
{ text: "8.4 文件上传接口", link: "/zh/api-spec/upload.html" },
|
||||
{ text: "8.5 字典数据接口", link: "/zh/api-spec/dict-api.html" },
|
||||
{ text: "8.6 Token 使用说明", link: "/zh/api-spec/token.html" },
|
||||
{ text: "8.7 API 接口总览", link: "/zh/api-spec/overview.html" },
|
||||
{ text: "📄 8.1 统一响应格式", link: "/zh/api-spec/response.html" },
|
||||
{ text: "📄 8.2 错误码对照表", link: "/zh/api-spec/error-code.html" },
|
||||
{ text: "📄 8.3 分页查询规范", link: "/zh/api-spec/pagination.html" },
|
||||
{ text: "📄 8.4 请求绑定与参数校验", link: "/zh/api-spec/binding.html" },
|
||||
{ text: "📄 8.5 文件上传接口", link: "/zh/api-spec/upload.html" },
|
||||
{ text: "📄 8.6 字典数据接口", link: "/zh/api-spec/dict-api.html" },
|
||||
{ text: "📄 8.7 Token 使用说明", link: "/zh/api-spec/token.html" },
|
||||
{ text: "📄 8.8 API 接口总览", link: "/zh/api-spec/overview.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -370,44 +437,45 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
collapsed: false,
|
||||
items: [
|
||||
{
|
||||
text: "工程基础",
|
||||
text: "📄 工程基础",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "9.1 前端工程概述", link: "/zh/frontend/overview.html" },
|
||||
{ text: "9.2 目录结构详解", link: "/zh/frontend/directory.html" },
|
||||
{ text: "9.3 环境与构建配置", link: "/zh/frontend/env-config.html" },
|
||||
{ text: "📄 9.1 前端工程概述", link: "/zh/frontend/overview.html" },
|
||||
{ text: "📄 9.2 目录结构详解", link: "/zh/frontend/directory.html" },
|
||||
{ text: "📄 9.3 环境与构建配置", link: "/zh/frontend/env-config.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "核心机制",
|
||||
text: "📄 核心机制",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "9.4 HTTP 请求封装", link: "/zh/frontend/http.html" },
|
||||
{ text: "9.5 路由与动态菜单", link: "/zh/frontend/router.html" },
|
||||
{ text: "9.6 状态管理(Pinia)", link: "/zh/frontend/store.html" },
|
||||
{ text: "9.7 权限控制", link: "/zh/frontend/permission.html" },
|
||||
{ text: "9.8 登录流程", link: "/zh/frontend/login.html" },
|
||||
{ text: "📄 9.4 HTTP 请求封装", link: "/zh/frontend/http.html" },
|
||||
{ text: "📄 9.5 路由与动态菜单", link: "/zh/frontend/router.html" },
|
||||
{ text: "📄 9.6 状态管理(Pinia)", link: "/zh/frontend/store.html" },
|
||||
{ text: "📄 9.7 权限控制", link: "/zh/frontend/permission.html" },
|
||||
{ text: "📄 9.8 登录流程", link: "/zh/frontend/login.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "公共组件",
|
||||
text: "📄 公共组件",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "9.9 数据展示组件", link: "/zh/frontend/display-components.html" },
|
||||
{ text: "9.10 数据录入组件", link: "/zh/frontend/form-components.html" },
|
||||
{ text: "9.11 Excel 导入导出组件", link: "/zh/frontend/excel-components.html" },
|
||||
{ text: "📄 9.9 表格与页面组件", link: "/zh/frontend/table-components.html" },
|
||||
{ text: "📄 9.10 数据录入组件", link: "/zh/frontend/form-components.html" },
|
||||
{ text: "📄 9.11 数据展示组件", link: "/zh/frontend/display-components.html" },
|
||||
{ text: "📄 9.12 Excel 导入导出组件", link: "/zh/frontend/excel-components.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "开发实践",
|
||||
text: "📄 开发实践",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "9.12 新增页面开发步骤", link: "/zh/frontend/new-page.html" },
|
||||
{ text: "9.13 API 模块编写规范", link: "/zh/frontend/api-module.html" },
|
||||
{ text: "9.14 样式与主题定制", link: "/zh/frontend/style.html" },
|
||||
{ text: "9.15 布局系统", link: "/zh/frontend/layout.html" },
|
||||
{ text: "9.16 工具函数", link: "/zh/frontend/utils.html" },
|
||||
{ text: "9.17 国际化(i18n)", link: "/zh/frontend/i18n.html" },
|
||||
{ text: "📄 9.13 新增页面开发步骤", link: "/zh/frontend/new-page.html" },
|
||||
{ text: "📄 9.14 API 模块编写规范", link: "/zh/frontend/api-module.html" },
|
||||
{ text: "📄 9.15 样式与主题定制", link: "/zh/frontend/style.html" },
|
||||
{ text: "📄 9.16 布局系统", link: "/zh/frontend/layout.html" },
|
||||
{ text: "📄 9.17 工具函数", link: "/zh/frontend/utils.html" },
|
||||
{ text: "📄 9.18 Hooks 与枚举", link: "/zh/frontend/hooks-enums.html" },
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -420,15 +488,14 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "🔧 10. 代码生成器",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "10.1 概述与架构", link: "/zh/generator/overview.html" },
|
||||
{ text: "10.2 CLI 命令行使用", link: "/zh/generator/cli.html" },
|
||||
{ text: "10.3 Web 管理界面", link: "/zh/generator/web-ui.html" },
|
||||
{ text: "10.4 表结构解析引擎", link: "/zh/generator/parser.html" },
|
||||
{ text: "10.5 代码生成引擎", link: "/zh/generator/code-engine.html" },
|
||||
{ text: "10.6 自定义模板开发", link: "/zh/generator/templates.html" },
|
||||
{ text: "10.7 配置文件详解", link: "/zh/generator/config.html" },
|
||||
{ text: "10.8 实战案例", link: "/zh/generator/demo.html" },
|
||||
{ text: "10.9 常见问题", link: "/zh/generator/faq.html" },
|
||||
{ text: "📄 10.1 概述与架构", link: "/zh/generator/overview.html" },
|
||||
{ text: "📄 10.2 CLI 命令行使用", link: "/zh/generator/cli.html" },
|
||||
{ text: "📄 10.3 Web 管理界面", link: "/zh/generator/web-ui.html" },
|
||||
{ text: "📄 10.4 表结构解析与渲染引擎", link: "/zh/generator/code-engine.html" },
|
||||
{ text: "📄 10.5 模板体系", link: "/zh/generator/templates.html" },
|
||||
{ text: "📄 10.6 配置与覆盖策略", link: "/zh/generator/config.html" },
|
||||
{ text: "📄 10.7 实战案例", link: "/zh/generator/demo.html" },
|
||||
{ text: "📄 10.8 常见问题", link: "/zh/generator/faq.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -439,17 +506,17 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "⚙️ 11. 运维部署",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "11.1 部署 Checklist", link: "/zh/deploy/checklist.html" },
|
||||
{ text: "11.2 环境规划", link: "/zh/deploy/env-plan.html" },
|
||||
{ text: "11.3 数据库迁移", link: "/zh/deploy/db-migrate.html" },
|
||||
{ text: "11.4 后端部署", link: "/zh/deploy/backend.html" },
|
||||
{ text: "11.5 前端部署", link: "/zh/deploy/frontend.html" },
|
||||
{ text: "11.6 Docker 生产部署", link: "/zh/deploy/docker.html" },
|
||||
{ text: "11.7 性能调优", link: "/zh/deploy/performance.html" },
|
||||
{ text: "11.8 安全加固清单", link: "/zh/deploy/security.html" },
|
||||
{ text: "11.9 备份与恢复", link: "/zh/deploy/backup.html" },
|
||||
{ text: "11.10 故障排查手册", link: "/zh/deploy/troubleshooting.html" },
|
||||
{ text: "11.11 CI/CD 流水线", link: "/zh/deploy/ci-cd.html" },
|
||||
{ text: "📄 11.1 部署 Checklist", link: "/zh/deploy/checklist.html" },
|
||||
{ text: "📄 11.2 环境规划", link: "/zh/deploy/env-plan.html" },
|
||||
{ text: "📄 11.3 数据库初始化与迁移", link: "/zh/deploy/db-migrate.html" },
|
||||
{ text: "📄 11.4 后端部署", link: "/zh/deploy/backend.html" },
|
||||
{ text: "📄 11.5 前端部署", link: "/zh/deploy/frontend.html" },
|
||||
{ text: "📄 11.6 Docker 生产部署", link: "/zh/deploy/docker.html" },
|
||||
{ text: "📄 11.7 性能调优", link: "/zh/deploy/performance.html" },
|
||||
{ text: "📄 11.8 安全加固清单", link: "/zh/deploy/security.html" },
|
||||
{ text: "📄 11.9 备份与恢复", link: "/zh/deploy/backup.html" },
|
||||
{ text: "📄 11.10 故障排查手册", link: "/zh/deploy/troubleshooting.html" },
|
||||
{ text: "📄 11.11 CI/CD 与质量门禁", link: "/zh/deploy/ci-cd.html" },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -464,19 +531,21 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
text: "⭐ 必须遵守",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "12.1 API 响应规范", link: "/zh/standards/api-response.html" },
|
||||
{ text: "12.2 分页查询规范", link: "/zh/standards/pagination.html" },
|
||||
{ text: "12.3 Git 提交规范", link: "/zh/standards/git.html" },
|
||||
{ text: "📄 12.1 API 响应规范", link: "/zh/standards/api-response.html" },
|
||||
{ text: "📄 12.2 分页查询规范", link: "/zh/standards/pagination.html" },
|
||||
{ text: "📄 12.3 数据访问铁律", link: "/zh/standards/data-access.html" },
|
||||
{ text: "📄 12.4 模块开发规约", link: "/zh/standards/module-code.html" },
|
||||
{ text: "📄 12.5 Git 提交规范", link: "/zh/standards/git.html" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "📌 建议遵守",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "12.4 数据删除规范", link: "/zh/standards/deletion.html" },
|
||||
{ text: "12.5 代码审查清单", link: "/zh/standards/code-review.html" },
|
||||
{ text: "12.6 后端编码规范", link: "/zh/standards/backend-code.html" },
|
||||
{ text: "12.7 前端编码规范", link: "/zh/standards/frontend-code.html" },
|
||||
{ text: "📄 12.6 数据删除规范", link: "/zh/standards/deletion.html" },
|
||||
{ text: "📄 12.7 代码审查清单", link: "/zh/standards/code-review.html" },
|
||||
{ text: "📄 12.8 后端编码规范", link: "/zh/standards/backend-code.html" },
|
||||
{ text: "📄 12.9 前端编码规范", link: "/zh/standards/frontend-code.html" },
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -492,17 +561,16 @@ export const zhConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
|
||||
{ text: "A. 常见问题汇总", link: "/zh/appendix/faq.html" },
|
||||
{ text: "B. 数据库表结构速查", link: "/zh/appendix/database-tables.html" },
|
||||
{ text: "C. 配置项速查", link: "/zh/appendix/config-reference.html" },
|
||||
{ text: "D. 公共函数速查", link: "/zh/appendix/functions.html" },
|
||||
{ text: "D. Utility 函数速查", link: "/zh/appendix/functions.html" },
|
||||
{ text: "E. API 接口速查表", link: "/zh/appendix/api-cheatsheet.html" },
|
||||
{ text: "F. 中间件执行顺序", link: "/zh/appendix/middleware.html" },
|
||||
{ text: "G. 前端组件速查", link: "/zh/appendix/components.html" },
|
||||
{ text: "H. 前端 Store 速查", link: "/zh/appendix/stores.html" },
|
||||
{ text: "I. 前端 Enums 速查", link: "/zh/appendix/enums.html" },
|
||||
{ text: "J. 术语表", link: "/zh/appendix/glossary.html" },
|
||||
{ text: "K. 贡献指南", link: "/zh/other/contributing.html" },
|
||||
{ text: "L. 免责声明", link: "/zh/other/declare.html" },
|
||||
{ text: "M. 广告赞助", link: "/zh/other/sponsor.html" },
|
||||
{ text: "N. 开源协议", link: "https://gitee.com/rxthinkcmf/RXThinkCMF_ThinkPhp8_EleVue" },
|
||||
{ text: "G. ModuleSpec 声明速查", link: "/zh/appendix/module-spec.html" },
|
||||
{ text: "H. 前端组件速查", link: "/zh/appendix/components.html" },
|
||||
{ text: "I. 前端 Store 速查", link: "/zh/appendix/stores.html" },
|
||||
{ text: "J. 前端枚举速查", link: "/zh/appendix/enums.html" },
|
||||
{ text: "K. 术语表", link: "/zh/appendix/glossary.html" },
|
||||
{ text: "L. 贡献指南", link: "/zh/other/contributing.html" },
|
||||
{ text: "M. 免责声明", link: "/zh/other/declare.html" },
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -552,4 +620,4 @@ export const zhSearch: DefaultTheme.AlgoliaSearchOptions["locales"] = {
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
@@ -24,8 +24,8 @@ const asideSponsors = computed(() => {
|
||||
: [
|
||||
{
|
||||
name: "Become a sponsor",
|
||||
url: "https://www.rxthink.cn",
|
||||
img: "/sponsor/rxthinkcmf.png",
|
||||
url: "https://www.easygoadmin.vip",
|
||||
img: "/sponsor/sponsor.png",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -45,8 +45,8 @@ const asideSponsors = computed(() => {
|
||||
<template>
|
||||
<VPDocAsideSponsors :data="asideSponsors" />
|
||||
|
||||
<a class="banner mp" href="https://www.rxthink.cn" target="_blank">
|
||||
<img width="22" height="22" src="/sponsor/rxthinkcmf.png" />
|
||||
<a class="banner mp" href="https://www.easygoadmin.vip" target="_blank">
|
||||
<img width="22" height="22" src="/sponsor/sponsor.png" />
|
||||
<span>
|
||||
<p class="extra-info">赋能开发者</p>
|
||||
<p class="heading">企业级中台解决方案</p>
|
||||
@@ -54,8 +54,8 @@ const asideSponsors = computed(() => {
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<a class="banner cert" href="https://www.rxthink.cn" target="_blank">
|
||||
<img width="22" height="22" src="/sponsor/rxthinkcmf.png" />
|
||||
<a class="banner cert" href="https://www.easygoadmin.vip" target="_blank">
|
||||
<img width="22" height="22" src="/sponsor/sponsor.png" />
|
||||
<span>
|
||||
<p class="extra-info">赋能开发者</p>
|
||||
<p class="heading">企业级中台解决方案</p>
|
||||
|
||||
@@ -67,12 +67,12 @@ const isVideoOpen = ref(false);
|
||||
<div class="watch-more">
|
||||
{{ translations.watchMoreA[site.lang] }}
|
||||
<a
|
||||
:href="mpLink || 'https://www.rxthink.cn'"
|
||||
:href="mpLink || 'https://www.easygoadmin.vip'"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
小蚂蚁云
|
||||
<img src="../../../public/logo.svg" alt="小蚂蚁云" />
|
||||
EasyGoAdmin
|
||||
<img src="../../../public/logo.svg" alt="EasyGoAdmin" />
|
||||
</a>
|
||||
{{ translations.watchMoreB[site.lang] }}
|
||||
</div>
|
||||
|
||||
@@ -4,35 +4,35 @@
|
||||
"silver": [
|
||||
{
|
||||
"alt": "企业级中台解决方案",
|
||||
"href": "https://www.rxthink.cn",
|
||||
"imgSrcDark": "/sponsor/rxthinkcmf.png",
|
||||
"imgSrcLight": "/sponsor/rxthinkcmf.png"
|
||||
"href": "https://www.easygoadmin.vip",
|
||||
"imgSrcDark": "/sponsor/sponsor.png",
|
||||
"imgSrcLight": "/sponsor/sponsor.png"
|
||||
},
|
||||
{
|
||||
"alt": "企业级中台解决方案",
|
||||
"href": "https://www.rxthink.cn",
|
||||
"imgSrcDark": "/sponsor/rxthinkcmf.png",
|
||||
"imgSrcLight": "/sponsor/rxthinkcmf.png"
|
||||
"href": "https://www.easygoadmin.vip",
|
||||
"imgSrcDark": "/sponsor/sponsor.png",
|
||||
"imgSrcLight": "/sponsor/sponsor.png"
|
||||
}
|
||||
],
|
||||
"bronze": [
|
||||
{
|
||||
"alt": "企业级中台解决方案",
|
||||
"href": "https://www.rxthink.cn",
|
||||
"imgSrcDark": "/sponsor/rxthinkcmf.png",
|
||||
"imgSrcLight": "/sponsor/rxthinkcmf.png"
|
||||
"href": "https://www.easygoadmin.vip",
|
||||
"imgSrcDark": "/sponsor/sponsor.png",
|
||||
"imgSrcLight": "/sponsor/sponsor.png"
|
||||
},
|
||||
{
|
||||
"alt": "企业级中台解决方案",
|
||||
"href": "https://www.rxthink.cn",
|
||||
"imgSrcDark": "/sponsor/rxthinkcmf.png",
|
||||
"imgSrcLight": "/sponsor/rxthinkcmf.png"
|
||||
"href": "https://www.easygoadmin.vip",
|
||||
"imgSrcDark": "/sponsor/sponsor.png",
|
||||
"imgSrcLight": "/sponsor/sponsor.png"
|
||||
},
|
||||
{
|
||||
"alt": "企业级中台解决方案",
|
||||
"href": "https://www.rxthink.cn",
|
||||
"imgSrcDark": "/sponsor/rxthinkcmf.png",
|
||||
"imgSrcLight": "/sponsor/rxthinkcmf.png"
|
||||
"href": "https://www.easygoadmin.vip",
|
||||
"imgSrcDark": "/sponsor/sponsor.png",
|
||||
"imgSrcLight": "/sponsor/sponsor.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ const theme: Theme = {
|
||||
{ class: "image-src" },
|
||||
h("img", {
|
||||
src: "/logo.png",
|
||||
alt: "小蚂蚁云",
|
||||
alt: "EasyGoAdmin",
|
||||
}),
|
||||
),
|
||||
"aside-ads-before": () => h(AsideSponsors),
|
||||
|
||||
Reference in New Issue
Block a user