From f0fc2d76b7e6ecedc1cc243f862c2ec8d0d5c45b Mon Sep 17 00:00:00 2001 From: Acbox Date: Tue, 9 Jun 2026 17:18:56 +0800 Subject: [PATCH] feat: add pricing page --- public/llms.txt | 1 + public/sitemap.xml | 6 ++ src/App.vue | 4 +- src/components/TopBar.vue | 3 +- src/pages/PricingPage.vue | 211 ++++++++++++++++++++++++++++++++++++++ src/router.ts | 2 + 6 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 src/pages/PricingPage.vue diff --git a/public/llms.txt b/public/llms.txt index f880698..2409c14 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -22,6 +22,7 @@ curl -sL https://memoh.sh | bash ## Links - Website: https://memoh.ai +- Pricing: https://memoh.ai/pricing - Blog: https://memoh.ai/blogs - Documentation: https://docs.memoh.ai - GitHub: https://github.com/memohai/Memoh diff --git a/public/sitemap.xml b/public/sitemap.xml index 3e95d10..1780bcd 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -12,6 +12,12 @@ monthly 0.8 + + https://memoh.ai/pricing + 2026-06-09 + monthly + 0.8 + https://memoh.ai/blogs 2026-06-09 diff --git a/src/App.vue b/src/App.vue index d793b7e..e24525a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,8 +17,9 @@ const { isDark } = useThemePreference() const isDownloadRoute = computed(() => route.path.startsWith('/download')) const isBlogsRoute = computed(() => route.path.startsWith('/blogs')) +const isPricingRoute = computed(() => route.path.startsWith('/pricing')) const isHomeRoute = computed(() => route.path === '/') -const isPlainContentRoute = computed(() => isDownloadRoute.value || isBlogsRoute.value) +const isPlainContentRoute = computed(() => isDownloadRoute.value || isBlogsRoute.value || isPricingRoute.value) // Single owner of the `dark` class. The landing page always *renders* // dark, but must never overwrite the user's saved preference — so we force the @@ -91,6 +92,7 @@ const telecomLicenseUrl = 'https://dxzhgl.miit.gov.cn/'
{{ t('footer.product') }} {{ t('nav.download') }} + {{ t('nav.pricing') }} {{ t('nav.supermarket') }}
diff --git a/src/components/TopBar.vue b/src/components/TopBar.vue index ac584c3..18a0ec5 100644 --- a/src/components/TopBar.vue +++ b/src/components/TopBar.vue @@ -29,7 +29,6 @@ const { isDark, toggle: toggleDark } = useThemePreference() const { locale } = useI18n() const docsUrl = computed(() => locale.value === 'zh' ? 'https://docs.memoh.ai/zh' : 'https://docs.memoh.ai') -const pricingUrl = 'https://memoh.ai/pricing' const telegramIconSrc = computed(() => props.overlay || props.lightSocialIcons ? '/brands/telegram-white.svg' : '/brands/telegram.svg') const isLangOpen = ref(false) @@ -70,7 +69,7 @@ const selectLang = (lang: string) => {
diff --git a/src/pages/PricingPage.vue b/src/pages/PricingPage.vue new file mode 100644 index 0000000..c839044 --- /dev/null +++ b/src/pages/PricingPage.vue @@ -0,0 +1,211 @@ + + + diff --git a/src/router.ts b/src/router.ts index 9bfd97c..88ce11c 100644 --- a/src/router.ts +++ b/src/router.ts @@ -3,12 +3,14 @@ import { createRouter, createWebHistory } from 'vue-router' const HomePage = () => import('./pages/HomePage.vue') const DownloadPage = () => import('./pages/DownloadPage.vue') const BlogsPage = () => import('./pages/BlogsPage.vue') +const PricingPage = () => import('./pages/PricingPage.vue') export const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', name: 'home', component: HomePage }, { path: '/download', name: 'download', component: DownloadPage }, + { path: '/pricing', name: 'pricing', component: PricingPage }, { path: '/blogs', name: 'blogs', component: BlogsPage }, { path: '/blogs/:slug', name: 'blog-post', component: BlogsPage }, // /desktop has been merged into /download; keep a redirect for old links.