From ca0937f156660a4e24b88588c2dd7e0f3e45bb22 Mon Sep 17 00:00:00 2001 From: cctvcat <14413208+cctvcat@user.noreply.gitee.com> Date: Sun, 23 Mar 2025 17:02:13 +0800 Subject: [PATCH 1/9] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/DocBreadCrumb.vue | 32 ++---- docs/.vitepress/src/components/DocFooter.vue | 2 +- docs/.vitepress/src/layouts/LayoutDoc.vue | 91 ++++------------ docs/.vitepress/src/stores/menu.ts | 89 +--------------- docs/.vitepress/src/stores/node.ts | 89 ++++++++++++++++ docs/.vitepress/src/utils/tree.ts | 100 ++++-------------- .../src/views/docsNode/TheDocsNode.vue | 25 +---- .../src/views/search/TheSearchResult.vue | 3 +- scripts/build.js | 12 ++- 9 files changed, 161 insertions(+), 282 deletions(-) create mode 100644 docs/.vitepress/src/stores/node.ts diff --git a/docs/.vitepress/src/components/DocBreadCrumb.vue b/docs/.vitepress/src/components/DocBreadCrumb.vue index cb82e61..1644368 100644 --- a/docs/.vitepress/src/components/DocBreadCrumb.vue +++ b/docs/.vitepress/src/components/DocBreadCrumb.vue @@ -6,7 +6,7 @@ import { useRoute, useRouter } from 'vitepress'; import IconChevronRight from '~icons/app/icon-chevron-right.svg'; -import { useMenuStore } from '@/stores/menu'; +import { useNodeStore } from '@/stores/node'; import { useSearchingStore } from '@/stores/common'; import { useLocale } from '@/composables/useLocale'; @@ -23,20 +23,7 @@ const props = defineProps({ }); // -------------------- 菜单 -------------------- -const menuStore = useMenuStore(); - -// -------------------- 文档模块节点标题 -------------------- -const moduleNode = computed(() => { - const pathHref = route.path.replace('.html', ''); - const nodeMenu = menuStore.allNodes.find((item) => item?.href && pathHref.includes(item.href.replace('index.html', ''))); - - if (pathHref.includes('/Tools/')) { - const childMenu = nodeMenu?.children?.find((item) => item?.href && pathHref.includes(item.href.replace('index.html', ''))); - return childMenu; - } - - return nodeMenu; -}); +const nodeStore = useNodeStore(); // 是否是贡献指南手册,直接显示 文档中心 > 贡献指南的具体章节 const isContribute = computed(() => { @@ -47,16 +34,15 @@ const isContribute = computed(() => { // -------------------- 当前节点标题 -------------------- const currentTitle = computed(() => { if (props.nodeVisible) { - return moduleNode.value?.label; + return nodeStore.moduleNode?.label; } - return menuStore.currentNode?.href?.includes('#') ? menuStore.currentNode?.parent?.label : menuStore.currentNode?.label; + return nodeStore.currentNode?.href?.includes('#') ? nodeStore.currentNode?.parent?.label : nodeStore.currentNode?.label; }); - // -------------------- 跳转 -------------------- const router = useRouter(); const goToPage = (href: string) => { - menuStore.menuValue = ''; + nodeStore.menuValue = ''; router.go(href); useSearchingStore().isSearching = false; }; @@ -71,8 +57,12 @@ const goToPage = (href: string) => { {{ t('home.docCenter') }} - {{ moduleNode?.label }} - {{ moduleNode?.label }} + {{ + nodeStore.moduleNode?.label + }} + {{ + nodeStore.moduleNode?.label + }} {{ searchStore.isSearching ? t('docs.searchResult') : currentTitle }} diff --git a/docs/.vitepress/src/components/DocFooter.vue b/docs/.vitepress/src/components/DocFooter.vue index 56a0157..b52b2df 100644 --- a/docs/.vitepress/src/components/DocFooter.vue +++ b/docs/.vitepress/src/components/DocFooter.vue @@ -35,7 +35,7 @@ const pathList = computed(() => { }); const config = computed(() => { - const filePath = route.path; + const filePath = route.path.endsWith('/') ? `${route.path}index.html` : route.path; const idx = pathList.value.findIndex((v) => v.path === filePath); const prev = pathList.value[idx - 1]; const next = pathList.value[idx + 1]; diff --git a/docs/.vitepress/src/layouts/LayoutDoc.vue b/docs/.vitepress/src/layouts/LayoutDoc.vue index 059f6e7..27c8a43 100644 --- a/docs/.vitepress/src/layouts/LayoutDoc.vue +++ b/docs/.vitepress/src/layouts/LayoutDoc.vue @@ -41,9 +41,9 @@ import useSelect from '@/composables/useSelect'; import { useLocale } from '@/composables/useLocale'; import { useSearchingStore } from '@/stores/common'; -import { useMenuStore } from '@/stores/menu'; +import { useNodeStore } from '@/stores/node'; -import type { DocMenuNodeT } from '@/utils/tree'; +import { getNodeHrefSafely, type DocMenuNodeT } from '@/utils/tree'; import { getOffsetTop, getScrollRemainingBottom } from '@/utils/element'; import { versions } from '@/config/version'; import { scrollIntoView } from '@/utils/scroll-to'; @@ -71,29 +71,11 @@ const isContribute = computed(() => { // -------------------- 菜单 -------------------- let isScrolling = false; -const menuStore = useMenuStore(); - -// 获取最近可点击href -const getSafeHref = (item: DocMenuNodeT): string => { - // 存在对应的 md 文件 - if (item.href && item.href?.includes('.html')) { - return item.href; - } - - // 查找子节点 - for (const child of item.children) { - const href = getSafeHref(child); - if (href) { - return href; - } - } - - return ''; -}; +const nodeStore = useNodeStore(); // 点击菜单跳转文档 const onClickMenuItem = (item: DocMenuNodeT, newOpener?: boolean) => { - const href = getSafeHref(item); + const href = getNodeHrefSafely(item); if (href) { if (newOpener) { window.open(href, '_blank', 'noopener noreferrer'); @@ -174,11 +156,11 @@ const onScrollAnchor = () => { return; } - if (!menuStore.currentNode || (!menuStore.currentNode.href?.includes('#') && menuStore.currentNode.children.every((item) => !item.href?.includes('#')))) { + if (!nodeStore.currentNode || (!nodeStore.currentNode.href?.includes('#') && nodeStore.currentNode.children.every((item) => !item.href?.includes('#')))) { return; } - const parentNode = menuStore.currentNode.href?.includes('#') ? menuStore.currentNode.parent : menuStore.currentNode; + const parentNode = nodeStore.currentNode.href?.includes('#') ? nodeStore.currentNode.parent : nodeStore.currentNode; if (!parentNode) { return; } @@ -235,22 +217,22 @@ const onScrollAnchor = () => { if (distances.length) { if (scrollRemainingBottom < 10) { - menuStore.menuValue = distances[distances.length - 1].item.id; + nodeStore.menuValue = distances[distances.length - 1].item.id; } else if (scrollRemainingBottom < 110) { const overNodes = distances.filter((item) => item.top >= 110); if (overNodes.length) { const average = Math.round(110 / overNodes.length); const node = overNodes.find((_, i) => (i + 1) * average < 110 - scrollRemainingBottom); if (node) { - menuStore.menuValue = node.item.id; + nodeStore.menuValue = node.item.id; } } } else { const max = distances.reduce((prev, cur) => (prev.top > cur.top ? prev : cur)); - menuStore.menuValue = max.item.id; + nodeStore.menuValue = max.item.id; } } else { - menuStore.menuValue = parentNode.id; + nodeStore.menuValue = parentNode.id; } }; @@ -312,42 +294,15 @@ onUnmounted(() => { nodeScrollContainer.value?.removeEventListener('scroll', onScrollNodeAnchor); }); -// -------------------- 文档模块节点 -------------------- -const moduleNode = computed(() => { - const pathHref = route.path.replace('.html', ''); - const nodeMenu = menuStore.allNodes.find((item) => item?.href && pathHref.includes(item.href.replace('index.html', ''))); - - if (pathHref.includes('/Tools/')) { - const childMenu = nodeMenu?.children?.find((item) => item?.href && pathHref.includes(item.href.replace('index.html', ''))); - return childMenu; - } - - return nodeMenu; -}); - // -------------------- 文档模块menu -------------------- const docsMenu = computed(() => { if (props.nodeVisible) { - /* const flag = menuStore.allNodes.some((item) => item?.href && item.href === pathHref); - // 最外层的子节点可以匹配到url - if (flag) { - const moduleMenu = menuStore.allNodes.find((item) => item?.href && item.href === pathHref); - return moduleMenu?.children || []; - } else { - // 最外层的子节点可以匹配不到url,去匹配第二层的字节的url - const childMenu = menuStore.allNodes.find((item) => item?.href && pathHref.includes(item?.href)); - const nodeMenu = childMenu?.children?.find((item) => item?.href && item.href === pathHref); - - return nodeMenu?.children || []; - } */ - const href = route.path.endsWith('/') ? `${route.path}index.html` : route.path; - const node = menuStore.rootTree.getNodeByHref(menuStore.rootTree.root, href); - return node?.children || []; - } else if (menuStore.bookNodes.length > 0) { - return menuStore.bookNodes; + return nodeStore.moduleNode?.children || []; + } else if (nodeStore.manualNode) { + return [nodeStore.manualNode]; } - return menuStore.currentNode ? [menuStore.currentNode] : []; + return nodeStore.currentNode ? [nodeStore.currentNode] : []; }); // -------------------- 搜索 -------------------- @@ -514,7 +469,7 @@ const closeZoomBtn = () => {
-
- +
+
diff --git a/docs/.vitepress/src/stores/menu.ts b/docs/.vitepress/src/stores/menu.ts index 66223d7..4a0304b 100644 --- a/docs/.vitepress/src/stores/menu.ts +++ b/docs/.vitepress/src/stores/menu.ts @@ -1,90 +1,3 @@ -import { computed, onMounted, ref, watch } from 'vue'; import { defineStore } from 'pinia'; -import { MENU_CONFIG } from '@/config/menu'; -import { DocMenuTree, type DocMenuNodeT } from '@/utils/tree'; -import { useData } from 'vitepress'; -export const useMenuStore = defineStore('menu', () => { - const rootTree = new DocMenuTree(MENU_CONFIG); - const allNodes = rootTree.root.children; - const { hash, page } = useData(); - - // -------------------- 当前菜单节点 -------------------- - const currentNode = computed(() => { - const href = `/${page.value.filePath.replace('.md', '.html')}`; - - // 是否为hash节点 - if (hash.value) { - const hashHref = `/${page.value.filePath.replace('.md', '.html')}${decodeURIComponent(hash.value)}`; - const hashNode = rootTree.getNodeByHref(rootTree.root, hashHref); - if (hashNode) { - return hashNode; - } - } - - return rootTree.getNodeByHref(rootTree.root, href); - }); - - // -------------------- 当前菜单节点的所有前驱节点 -------------------- - const prevNodes = computed(() => { - return currentNode.value ? rootTree.getPrevNodes(currentNode.value, 1) : []; - }); - - // -------------------- 当前菜单节点的手册节点 -------------------- - const bookNode = computed(() => { - if (!currentNode.value) { - return null; - } - - let node: DocMenuNodeT | null = currentNode.value; - while (node && !node.ismanual) { - node = node.parent; - } - - return node; - }); - - const bookNodes = computed(() => (bookNode.value ? [bookNode.value] : [])); - - // -------------------- 菜单绑定值 -------------------- - const menuValue = ref(''); - const menuExpanded = ref([]); - - const updateExpanded = () => { - const node = rootTree.getNodeByHref(rootTree.root, menuValue.value); - if (!node) { - menuExpanded.value = []; - return; - } - - const arr = rootTree.getPrevNodes(node, 1); - if (node.children?.length > 0) { - arr.push(node); - } - - menuExpanded.value = arr.map((item) => item.id); - }; - - onMounted(() => { - menuValue.value = currentNode.value?.id || ''; - }); - - watch(currentNode, () => { - menuValue.value = currentNode.value?.id || ''; - }); - - watch(menuValue, () => { - updateExpanded(); - }); - - return { - menuValue, // 绑定菜单值 - menuExpanded, // 展开值 - rootTree, // 根节点 - allNodes, // 所有节点 - bookNode, // 手册节点 - bookNodes, // 手册节点数组 - currentNode, // 当前节点 - prevNodes, // 当前节点的所有前驱节点 - }; -}); +export const useMenuStore = defineStore('menu', () => {}); diff --git a/docs/.vitepress/src/stores/node.ts b/docs/.vitepress/src/stores/node.ts new file mode 100644 index 0000000..50688b5 --- /dev/null +++ b/docs/.vitepress/src/stores/node.ts @@ -0,0 +1,89 @@ +import { computed, onMounted, ref, watch } from 'vue'; +import { defineStore } from 'pinia'; +import { MENU_CONFIG } from '@/config/menu'; +import { DocMenuTree, type DocMenuNodeT } from '@/utils/tree'; +import { useData } from 'vitepress'; + +export const useNodeStore = defineStore('node', () => { + const rootTree = new DocMenuTree(MENU_CONFIG); + const { hash, page } = useData(); + + // 页面路径 + const pathname = computed(() => { + return `/${page.value.filePath.replace('.md', '.html')}`; + }); + const href = computed(() => { + return `${pathname.value}${decodeURIComponent(hash.value)}`; + }); + + // 页面节点 + const pageNode = computed(() => { + return rootTree.getNode(rootTree.root, 'href', pathname.value); + }); + + // 当前节点 + const currentNode = computed(() => { + return hash.value ? rootTree.getNode(rootTree.root, 'href', href.value) || pageNode.value : pageNode.value; + }); + + // 手册节点 + const manualNode = computed(() => { + let node: DocMenuNodeT | null = pageNode.value; + while (node && !node.ismanual) { + node = node.parent; + } + + return node; + }); + + // 模块节点 + const moduleNode = computed(() => { + const node = rootTree.root.children.find((item) => item.href && pathname.value.includes(item.href.replace('index.html', ''))); + if (node && pathname.value.toLocaleLowerCase().includes('/tools/')) { + return node.children.find((item) => item.href && pathname.value.includes(item.href.replace('index.html', ''))); + } + + return node; + }); + + // -------------------- 菜单绑定值 -------------------- + const menuValue = ref(''); + const menuExpanded = ref([]); + + const updateExpanded = () => { + const node = rootTree.getNode(rootTree.root, 'href', menuValue.value); + if (!node) { + menuExpanded.value = []; + return; + } + + const arr = rootTree.getPrevNodes(node, 1); + if (node.children?.length > 0) { + arr.push(node); + } + + menuExpanded.value = arr.map((item) => item.id); + }; + + onMounted(() => { + menuValue.value = currentNode.value?.id || ''; + }); + + watch(currentNode, () => { + menuValue.value = currentNode.value?.id || ''; + }); + + watch(menuValue, () => { + updateExpanded(); + }); + + return { + menuValue, // 绑定菜单值 + menuExpanded, // 展开值 + + currentNode, // 当前节点 + pageNode, // 页面节点 + manualNode, // 手册节点 + moduleNode, // 模块节点 + }; +}); diff --git a/docs/.vitepress/src/utils/tree.ts b/docs/.vitepress/src/utils/tree.ts index 41de709..f0c0e8b 100644 --- a/docs/.vitepress/src/utils/tree.ts +++ b/docs/.vitepress/src/utils/tree.ts @@ -60,95 +60,26 @@ export class DocMenuTree { } /** - * BFS 广度优先查找节点 + * BFS 广度优先查找第一个符合的节点 * @param {DocMenuNodeT} node 父节点 - * @param {string} val id值 - * @returns {(DocMenuNodeT|undefined)} 查找到节点则返回该节点,未找到返回undefined + * @param {string} key key + * @param {string} val value + * @returns {(DocMenuNodeT|null)} 查找到节点则返回该节点,未找到返回 null */ - getNode(node: DocMenuNodeT, val: string): DocMenuNodeT | undefined { - if (node.href === val) { + getNode(node: DocMenuNodeT, key: keyof DocMenuNodeT, val: any): DocMenuNodeT | null { + if (node[key] === val) { return node; } const children: Array = node.children; for (let i = 0, len = children.length; i < len; i++) { - const rlt = this.getNode(children[i], val); + const rlt = this.getNode(children[i], key, val); if (rlt) { return rlt; } } - } - - /** - * BFS 广度优先查找节点 - * @param {DocMenuNodeT} node 父节点 - * @param {string} val href值 - * @returns {(DocMenuNodeT|undefined)} 查找到节点则返回该节点,未找到返回undefined - */ - getNodeByHref(node: DocMenuNodeT, val: string): DocMenuNodeT | undefined { - if (node.href === val) { - return node; - } - - const children: Array = node.children; - for (let i = 0, len = children.length; i < len; i++) { - const rlt = this.getNodeByHref(children[i], val); - if (rlt) { - return rlt; - } - } - } - - /** - * BFS 广度优先查找节点 - * @param {DocMenuNodeT} node 父节点 - * @param {string} val label - * @returns {(DocMenuNodeT|undefined)} 查找到节点则返回该节点,未找到返回undefined - */ - getNodeByLabel(node: DocMenuNodeT, val: string): DocMenuNodeT | undefined { - if (node.label === val) { - return node; - } - - const children: Array = node.children; - for (let i = 0, len = children.length; i < len; i++) { - const rlt = this.getNodeByLabel(children[i], val); - if (rlt) { - return rlt; - } - } - } - - /** - * 获取菜单首条点击节点 - * @param {DocMenuNodeT} node 父节点 - * @returns {string} 返回节点id - */ - getFirstHrefNode(node: DocMenuNodeT) { - return node.children[0].children[0].id; - } - - /** - * 获取节点-指定深度的前驱节点 - * @param {DocMenuNodeT} node 节点 - * @param {number} targetDepth 目标深度 - * @returns {DocMenuNodeT} 返回前驱节点 - */ - getPrevNode(node: DocMenuNodeT, targetDepth = 0) { - if (targetDepth < 0 || node.depth < targetDepth) { - return undefined; - } - let prev = node.parent; - while (prev) { - if (prev.depth === targetDepth) { - return prev; - } - - prev = prev.parent; - } - - return undefined; + return null; } /** @@ -172,3 +103,18 @@ export class DocMenuTree { return nodes; } } + +export function getNodeHrefSafely(node: DocMenuNodeT): string { + if (node.href && node.href.includes('.html')) { + return node.href; + } + + for (const child of node.children) { + const href = getNodeHrefSafely(child); + if (href) { + return href; + } + } + + return ''; +} diff --git a/docs/.vitepress/src/views/docsNode/TheDocsNode.vue b/docs/.vitepress/src/views/docsNode/TheDocsNode.vue index de9bd08..72d0ecc 100644 --- a/docs/.vitepress/src/views/docsNode/TheDocsNode.vue +++ b/docs/.vitepress/src/views/docsNode/TheDocsNode.vue @@ -2,7 +2,7 @@ import { computed, ref, onMounted, onUnmounted } from 'vue'; import { ORow, OCol, OLink } from '@opensig/opendesign'; -import type { DocMenuNodeT } from '@/utils/tree'; +import { getNodeHrefSafely, type DocMenuNodeT } from '@/utils/tree'; import { type PropType } from 'vue'; import { useScreen } from '@/composables/useScreen'; @@ -36,23 +36,6 @@ const nodeMenu = computed(() => { return props.node || []; }); -const getSafeHref = (item: DocMenuNodeT): string => { - // 存在对应的 md 文件 - if (!item?.children?.length) { - return item.href?.split('#')[0] as string; - } - - // 查找子节点 - for (const child of item.children) { - const href = getSafeHref(child); - if (href) { - return href; - } - } - - return ''; -}; - const oscrollerDom = ref(); const menuScrollDom = ref(); @@ -92,7 +75,7 @@ onUnmounted(() => {
- {{ ch.label }} + {{ ch.label }}

{{ ch?.description }}

@@ -100,7 +83,7 @@ onUnmounted(() => { @@ -108,7 +91,7 @@ onUnmounted(() => {
- {{ item.label }} + {{ item.label }}

{{ item?.description }}

diff --git a/docs/.vitepress/src/views/search/TheSearchResult.vue b/docs/.vitepress/src/views/search/TheSearchResult.vue index a500a9e..13fe65c 100644 --- a/docs/.vitepress/src/views/search/TheSearchResult.vue +++ b/docs/.vitepress/src/views/search/TheSearchResult.vue @@ -19,7 +19,6 @@ import { useLocale } from '@/composables/useLocale'; import { useSearchingStore } from '@/stores/common'; import { scrollToTop } from '@/utils/common'; - const route = useRoute(); const { t, locale } = useLocale(); const searchStore = useSearchingStore(); @@ -103,7 +102,7 @@ const searchResult = async () => { let pathTempData = []; - let node = tree.value.getNodeByHref(tree.value.root, activeVal); + let node = tree.value.getNode(tree.value.root, 'href', activeVal); if (node) { while (node && node.depth !== 0 && node.parent) { diff --git a/scripts/build.js b/scripts/build.js index 9f128be..b5ac029 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -267,15 +267,19 @@ async function mergeReferences(filePath) { const currenDirName = path.dirname(filePath); + // 处理当前文件的 href 字段 if (frontmatter.href) { - // 处理当前文件的 href 字段 frontmatter.href = frontmatter.href.startsWith('http') ? frontmatter.href : parseHref(path.resolve(currenDirName, frontmatter.href), frontmatter.label || ''); frontmatter.type = 'page'; } else if (fs.existsSync(path.join(currenDirName, 'index.md'))) { - frontmatter.href = parseHref(path.join(currenDirName, 'index.md'), frontmatter.label || ''); - frontmatter.type = 'page'; + const indexContent = fs.readFileSync(path.join(currenDirName, 'index.md'), 'utf-8'); + const { data } = matter(indexContent); + if (data.overview) { + frontmatter.href = parseHref(path.join(currenDirName, 'index.md'), frontmatter.label || ''); + frontmatter.type = 'page'; + } } else { frontmatter.href = parseHref(currenDirName, frontmatter.label || ''); frontmatter.type = 'path'; @@ -318,7 +322,7 @@ overview: true fs.outputFileSync(path.join(targetPath, item, 'index.md'), indexMdContent.replace('title', `title: ${frontmatter.label}`)); } }); - } catch(err) { + } catch (err) { errors.push({ file: targetPath.replace(__dirname, '').replace(/\\/g, '/'), error: '构建异常 (Build Exception: createOverviewIndexMd)', -- Gitee From a13188d10c5bb410c24c1acdb6806c810008da98 Mon Sep 17 00:00:00 2001 From: cctvcat <14413208+cctvcat@user.noreply.gitee.com> Date: Sun, 23 Mar 2025 18:12:57 +0800 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=BC=A9=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.ts | 7 +- .../.vitepress/src/assets/style/markdown.scss | 74 +------- .../src/components/markdown/MarkdownImage.vue | 159 ++++++++++++++++++ docs/.vitepress/src/layouts/LayoutDoc.vue | 144 +--------------- docs/.vitepress/theme/index.ts | 2 + 5 files changed, 167 insertions(+), 219 deletions(-) create mode 100644 docs/.vitepress/src/components/markdown/MarkdownImage.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 3833078..ef42263 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -91,8 +91,6 @@ export default { const id = tokens[idx].attrs?.[aIndex]?.[1]; const tag = tokens[idx].tag; const render = self.renderToken(tokens, idx, options); - - // 自定义标题的 HTML 结构 return `${render}${tag === 'h1' || tag === 'h2' ? `` : ''}`; }; @@ -100,12 +98,11 @@ export default { const tag = tokens[idx].tag; return `${tag === 'h1' || tag === 'h2' ? '' : ''}${self.renderToken(tokens, idx, options)}`; }; - + // 图片 const imageRender = md.renderer.rules.image; md.renderer.rules.image = (...args) => { - const el = `${imageRender!!(...args)}`; - return el; + return `${imageRender!!(...args)}`; }; }, }, diff --git a/docs/.vitepress/src/assets/style/markdown.scss b/docs/.vitepress/src/assets/style/markdown.scss index 45eb21f..ff04333 100644 --- a/docs/.vitepress/src/assets/style/markdown.scss +++ b/docs/.vitepress/src/assets/style/markdown.scss @@ -326,7 +326,7 @@ } div.mermaid { - svg[aria-roledescription="error"] { + svg[aria-roledescription='error'] { display: none; } } @@ -338,78 +338,6 @@ } } } - - .img-expand { - width: auto; - max-width: min(936px, 100%); - position: relative; - display: inline-block; - padding: var(--o-gap-2); - margin-left: -8px; - cursor: pointer; - .img-expand-btn { - position: absolute; - width: 32px; - height: 32px; - background-color: rgba(var(--o-black), 0.4); - border: 1px solid rgba(var(--o-black), 0.1); - border-radius: var(--o-radius-xs); - opacity: 0; - z-index: 1; - top: 20px; - right: 20px; - transition: all var(--o-duration-m1) var(--o-easing-standard-in); - &::after { - content: ''; - position: absolute; - top: 3px; - left: 3px; - width: 24px; - height: 24px; - background-color: transparent; - background-image: url('@/assets/category/docs/icon-full-screen.svg'); - background-position: center; - background-size: 24px; - background-repeat: no-repeat; - } - } - - .img-mask { - position: absolute; - top: 8px; - left: 8px; - width: calc(100% - 16px); - height: calc(100% - 16px); - background-color: rgba(var(--o-black), 0.2); - border: 1px solid rgba(var(--o-black), 0.1); - opacity: 0; - border-radius: var(--o-radius-xs); - z-index: 2; - transition: all var(--o-duration-m1) var(--o-easing-standard-in); - } - - @include hover { - .img-expand-btn, - .img-mask { - opacity: 1; - } - } - - @include respond-to('phone') { - max-width: 100%; - .img-expand-btn, - .img-mask { - display: none; - } - } - } - - .img-expand-not { - .img-expand-btn, - .img-mask { - display: none; - } - } } @include in-dark { diff --git a/docs/.vitepress/src/components/markdown/MarkdownImage.vue b/docs/.vitepress/src/components/markdown/MarkdownImage.vue new file mode 100644 index 0000000..801159f --- /dev/null +++ b/docs/.vitepress/src/components/markdown/MarkdownImage.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/docs/.vitepress/src/layouts/LayoutDoc.vue b/docs/.vitepress/src/layouts/LayoutDoc.vue index 27c8a43..0fbf042 100644 --- a/docs/.vitepress/src/layouts/LayoutDoc.vue +++ b/docs/.vitepress/src/layouts/LayoutDoc.vue @@ -1,22 +1,8 @@ @@ -978,45 +881,4 @@ const closeZoomBtn = () => { .version-scroller { max-height: 200px; } - -.img-scaler { - position: relative; -} -.close-btn { - position: absolute; - width: 32px; - height: 32px; - background-color: rgba(var(--o-black), 0.4); - border: 1px solid rgba(var(--o-black), 0.1); - border-radius: var(--o-radius-xs); - z-index: 2; - top: 12px; - right: 12px; - cursor: pointer; - .icon { - color: var(--o-color-white); - margin-top: 3px; - margin-left: 3px; - } - - @include respond-to('phone') { - display: none; - } -} - -.demo { - display: inline-block; - overflow: hidden; - background-color: #fff; - max-width: calc(100vw - 80px); - max-height: calc(100vh - 100px); - - &::before { - position: absolute; - width: 100%; - color: #999; - font-size: 24px; - text-align: center; - } -} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index a89af7a..e13d9de 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -17,6 +17,7 @@ import '@/assets/style/element-plus/index.scss'; import VueDOMPurifyHTML from 'vue-dompurify-html'; import MarkdownTitle from '@/components/markdown/MarkdownTitle.vue'; +import MarkdownImage from '@/components/markdown/MarkdownImage.vue'; export default { Layout, @@ -34,5 +35,6 @@ export default { }); // 注册组件 app.component('MarkdownTitle', MarkdownTitle); + app.component('MarkdownImage', MarkdownImage); }, }; -- Gitee From a45343564ac34a32ffb06c00422dfcc21c683b11 Mon Sep 17 00:00:00 2001 From: cctvcat <14413208+cctvcat@user.noreply.gitee.com> Date: Sun, 23 Mar 2025 19:22:37 +0800 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/src/components/AppFooter2.vue | 2 - .../src/components/doc/DocVersion.vue | 99 ++++++++++ .../src/components/doc/DocVersionMobile.vue | 127 ++++++++++++ docs/.vitepress/src/layouts/LayoutDoc.vue | 183 +----------------- 4 files changed, 235 insertions(+), 176 deletions(-) create mode 100644 docs/.vitepress/src/components/doc/DocVersion.vue create mode 100644 docs/.vitepress/src/components/doc/DocVersionMobile.vue diff --git a/docs/.vitepress/src/components/AppFooter2.vue b/docs/.vitepress/src/components/AppFooter2.vue index 546aff7..b8649d9 100644 --- a/docs/.vitepress/src/components/AppFooter2.vue +++ b/docs/.vitepress/src/components/AppFooter2.vue @@ -19,8 +19,6 @@ defineProps({ const baseUrl = 'https://www.openeuler.org'; const { t } = useLocale(); - -linksData2; @@ -467,11 +447,6 @@ onUnmounted(() => { } } -.feedback-bug-popover { - --popup-bg-color: var(--o-color-fill2); - --popup-radius: var(--o-radius-xs); -} - .article-detail-container { margin-top: var(--o-gap-2); margin-bottom: var(--o-gap-6); @@ -698,22 +673,4 @@ onUnmounted(() => { display: flex; flex-direction: column; } - -.select-feedback-placeholder { - position: absolute; - left: var(--x); - top: var(--y); -} -.feedback-bug-popover { - .o-dropdown-item { - background-image: url('@/assets/category/docs/docsBugBg.png'); - background-position: center; - background-size: cover; - background-repeat: no-repeat; - justify-content: flex-start; - width: auto; - padding: 3px 12px; - color: var(--o-color-info1-inverse); - } -} -- Gitee From ac67dd54691c421f4331a10ad4347d1ca414eab0 Mon Sep 17 00:00:00 2001 From: cctvcat <14413208+cctvcat@user.noreply.gitee.com> Date: Sun, 23 Mar 2025 19:47:12 +0800 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=BA=90=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/GiteeViewSource.vue | 23 ++++++++++++++++++- docs/.vitepress/src/layouts/LayoutDoc.vue | 19 --------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/docs/.vitepress/src/components/GiteeViewSource.vue b/docs/.vitepress/src/components/GiteeViewSource.vue index 34fb77b..e262d04 100644 --- a/docs/.vitepress/src/components/GiteeViewSource.vue +++ b/docs/.vitepress/src/components/GiteeViewSource.vue @@ -56,7 +56,7 @@ const insertGiteeBtn = () => { `; const parser = new DOMParser(); - const svgDoc = parser.parseFromString(svgString, "image/svg+xml"); + const svgDoc = parser.parseFromString(svgString, 'image/svg+xml'); a.appendChild(svgDoc.documentElement); container.appendChild(a); titleDom.nextSibling.parentNode?.insertBefore(container, titleDom.nextSibling); @@ -83,6 +83,27 @@ watch(isPhone, () => {
+ + diff --git a/docs/.vitepress/src/components/doc/DocFooter.vue b/docs/.vitepress/src/components/doc/DocFooter.vue index b52b2df..b8649d9 100644 --- a/docs/.vitepress/src/components/doc/DocFooter.vue +++ b/docs/.vitepress/src/components/doc/DocFooter.vue @@ -1,129 +1,103 @@ diff --git a/docs/.vitepress/src/components/doc/DocPagination.vue b/docs/.vitepress/src/components/doc/DocPagination.vue new file mode 100644 index 0000000..b52b2df --- /dev/null +++ b/docs/.vitepress/src/components/doc/DocPagination.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/docs/.vitepress/src/layouts/LayoutDoc.vue b/docs/.vitepress/src/layouts/LayoutDoc.vue index 17b2f63..6249f45 100644 --- a/docs/.vitepress/src/layouts/LayoutDoc.vue +++ b/docs/.vitepress/src/layouts/LayoutDoc.vue @@ -4,14 +4,14 @@ import { storeToRefs } from 'pinia'; import { Content, useRouter, useRoute, useData } from 'vitepress'; import { OIcon, useMessage } from '@opensig/opendesign'; -import AppFooter2 from '@/components/AppFooter2.vue'; +import DocFooter from '@/components/doc/DocFooter.vue'; import DocVersion from '@/components/doc/DocVersion.vue'; import DocVersionMobile from '@/components/doc/DocVersionMobile.vue'; import DocSearch from '@/components/doc/DocSearch.vue'; import DocMenu from '@/components/doc/DocMenu.vue'; import DocBreadCrumb from '@/components/doc/DocBreadCrumb.vue'; import DocBug from '@/components/doc/DocBug.vue'; -import DocFooter from '@/components/doc/DocFooter.vue'; +import DocPagination from '@/components/doc/DocPagination.vue'; import GiteeViewSource from '@/components/GiteeViewSource.vue'; import TheSearchResult from '@/views/search/TheSearchResult.vue'; @@ -386,7 +386,7 @@ onUnmounted(() => {
- +
@@ -398,7 +398,7 @@ onUnmounted(() => {
- + -- Gitee From 5e338398824fc76addc377d1b11bc688be83ff75 Mon Sep 17 00:00:00 2001 From: cctvcat <14413208+cctvcat@user.noreply.gitee.com> Date: Sun, 23 Mar 2025 21:32:30 +0800 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=82=B9=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/doc/DocBreadCrumb.vue | 1 - docs/.vitepress/src/layouts/LayoutDoc.vue | 52 +++++++++++++------ docs/.vitepress/src/stores/menu.ts | 3 -- docs/.vitepress/src/stores/node.ts | 38 ++------------ 4 files changed, 42 insertions(+), 52 deletions(-) delete mode 100644 docs/.vitepress/src/stores/menu.ts diff --git a/docs/.vitepress/src/components/doc/DocBreadCrumb.vue b/docs/.vitepress/src/components/doc/DocBreadCrumb.vue index 1644368..f322a9f 100644 --- a/docs/.vitepress/src/components/doc/DocBreadCrumb.vue +++ b/docs/.vitepress/src/components/doc/DocBreadCrumb.vue @@ -42,7 +42,6 @@ const currentTitle = computed(() => { // -------------------- 跳转 -------------------- const router = useRouter(); const goToPage = (href: string) => { - nodeStore.menuValue = ''; router.go(href); useSearchingStore().isSearching = false; }; diff --git a/docs/.vitepress/src/layouts/LayoutDoc.vue b/docs/.vitepress/src/layouts/LayoutDoc.vue index 6249f45..1a41a06 100644 --- a/docs/.vitepress/src/layouts/LayoutDoc.vue +++ b/docs/.vitepress/src/layouts/LayoutDoc.vue @@ -1,7 +1,8 @@