Commit 86facc5e authored by xuchentao's avatar xuchentao

全站将「银饰志」更名为「银饰资讯」

parent 4e4217d1
# 银妆银饰后台 # 银妆银饰资讯后台
本项目采用与官网同端口的 Astro 文章后台:Markdown 文件负责内容存储,Astro 同时提供后台 API 和静态页面生成。文章列表、分类页和详情页全部预渲染为 HTML,便于 SEO 与 GEO 搜索。 本项目采用与官网同端口的 Astro 文章后台:Markdown 文件负责内容存储,Astro 同时提供后台 API 和静态页面生成。文章列表、分类页和详情页全部预渲染为 HTML,便于 SEO 与 GEO 搜索。
...@@ -30,7 +30,7 @@ npm start ...@@ -30,7 +30,7 @@ npm start
- 官网:`http://localhost:8790/` - 官网:`http://localhost:8790/`
- 文章后台:`http://localhost:8790/admin` - 文章后台:`http://localhost:8790/admin`
- 银饰`http://localhost:8790/articles/` - 银饰资讯`http://localhost:8790/articles/`
启动命令会自动读取项目根目录的 `.env`,其中包含: 启动命令会自动读取项目根目录的 `.env`,其中包含:
......
# 银妆企业官网 # 银妆企业官网
长沙银妆文化发展有限公司官方网站。项目基于 Astro 5 + Node standalone adapter,包含品牌官网、产品轮播、响应式页面、银饰内容后台、SEO、原子构建与 GitLab/Nginx 部署配置。 长沙银妆文化发展有限公司官方网站。项目基于 Astro 5 + Node standalone adapter,包含品牌官网、产品轮播、响应式页面、银饰资讯内容后台、SEO、原子构建与 GitLab/Nginx 部署配置。
## 本地运行 ## 本地运行
...@@ -31,7 +31,7 @@ npm start # 启动 standalone 服务 ...@@ -31,7 +31,7 @@ npm start # 启动 standalone 服务
## 内容管理 ## 内容管理
银饰使用 Markdown 存储,并由同端口 `/admin/` 后台管理。工作稿位于 `src/content/articles/`,线上稿位于 `src/content/published/`;生产环境可通过 `CMS_DATA_DIR` 将内容持久化到仓库外。发布、下架、删除和分类修改会触发带共享锁的静态页面重建。 银饰资讯使用 Markdown 存储,并由同端口 `/admin/` 后台管理。工作稿位于 `src/content/articles/`,线上稿位于 `src/content/published/`;生产环境可通过 `CMS_DATA_DIR` 将内容持久化到仓库外。发布、下架、删除和分类修改会触发带共享锁的静态页面重建。
完整后台与部署说明见 [CMS_README.md](./CMS_README.md) 完整后台与部署说明见 [CMS_README.md](./CMS_README.md)
......
...@@ -15,7 +15,7 @@ const { items, categories, totalCount, activeSlug, currentPage, lastPage, basePa ...@@ -15,7 +15,7 @@ const { items, categories, totalCount, activeSlug, currentPage, lastPage, basePa
const pageHref = (page: number) => page <= 1 ? `${basePath}/` : `${basePath}/page/${page}/`; const pageHref = (page: number) => page <= 1 ? `${basePath}/` : `${basePath}/page/${page}/`;
const pages = paginationWindow(currentPage, lastPage); const pages = paginationWindow(currentPage, lastPage);
--- ---
<nav class="article-tabs" aria-label="银饰分类"> <nav class="article-tabs" aria-label="银饰资讯分类">
<a class:list={["article-tab", { active: activeSlug === null }]} href="/articles/">全部 <span>{totalCount}</span></a> <a class:list={["article-tab", { active: activeSlug === null }]} href="/articles/">全部 <span>{totalCount}</span></a>
{categories.map((category) => ( {categories.map((category) => (
<a class:list={["article-tab", { active: activeSlug === category.slug }]} href={`/articles/topic/${category.slug}/`}> <a class:list={["article-tab", { active: activeSlug === category.slug }]} href={`/articles/topic/${category.slug}/`}>
......
...@@ -7,11 +7,11 @@ import { site } from "../data/site"; ...@@ -7,11 +7,11 @@ import { site } from "../data/site";
import { PAGE_SIZE, type Article, type CategoryInfo } from "../lib/articles"; import { PAGE_SIZE, type Article, type CategoryInfo } from "../lib/articles";
interface Props { items: Article[]; categories: CategoryInfo[]; totalCount: number; activeSlug: string | null; activeName: string | null; currentPage: number; lastPage: number; basePath: string; } interface Props { items: Article[]; categories: CategoryInfo[]; totalCount: number; activeSlug: string | null; activeName: string | null; currentPage: number; lastPage: number; basePath: string; }
const { items, categories, totalCount, activeSlug, activeName, currentPage, lastPage, basePath } = Astro.props as Props; const { items, categories, totalCount, activeSlug, activeName, currentPage, lastPage, basePath } = Astro.props as Props;
const heading = activeName ?? "银饰"; const heading = activeName ?? "银饰资讯";
const pageSuffix = currentPage > 1 ? `|第${currentPage}页` : ""; const pageSuffix = currentPage > 1 ? `|第${currentPage}页` : "";
const title = `${heading}${pageSuffix}|${site.brand.name}`; const title = `${heading}${pageSuffix}|${site.brand.name}`;
const description = activeName ? `银妆${activeName}分类文章,分享银饰选购、佩戴养护、传统工艺与定制灵感。` : "银妆银饰:关于银饰选购、日常养护、传统银作工艺与私人定制的实用分享。"; const description = activeName ? `银妆${activeName}分类文章,分享银饰选购、佩戴养护、传统工艺与定制灵感。` : "银妆银饰资讯:关于银饰选购、日常养护、传统银作工艺与私人定制的实用分享。";
const pageUrl = new URL(`${basePath}${currentPage > 1 ? `/page/${currentPage}` : ""}/`, Astro.site).href; const pageUrl = new URL(`${basePath}${currentPage > 1 ? `/page/${currentPage}` : ""}/`, Astro.site).href;
const jsonLd = [{ "@context": "https://schema.org", "@type": "CollectionPage", name: heading, description, url: pageUrl, inLanguage: "zh-CN", mainEntity: { "@type": "ItemList", itemListElement: items.map((item, index) => ({ "@type": "ListItem", position: (currentPage - 1) * PAGE_SIZE + index + 1, name: item.data.title, url: new URL(`/articles/${item.id}/`, Astro.site).href })) } }, { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement: [{ "@type": "ListItem", position: 1, name: "首页", item: Astro.site?.href }, { "@type": "ListItem", position: 2, name: "银饰", item: new URL("/articles/", Astro.site).href }, ...(activeName ? [{ "@type": "ListItem", position: 3, name: activeName, item: pageUrl }] : [])] }]; const jsonLd = [{ "@context": "https://schema.org", "@type": "CollectionPage", name: heading, description, url: pageUrl, inLanguage: "zh-CN", mainEntity: { "@type": "ItemList", itemListElement: items.map((item, index) => ({ "@type": "ListItem", position: (currentPage - 1) * PAGE_SIZE + index + 1, name: item.data.title, url: new URL(`/articles/${item.id}/`, Astro.site).href })) } }, { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement: [{ "@type": "ListItem", position: 1, name: "首页", item: Astro.site?.href }, { "@type": "ListItem", position: 2, name: "银饰资讯", item: new URL("/articles/", Astro.site).href }, ...(activeName ? [{ "@type": "ListItem", position: 3, name: activeName, item: pageUrl }] : [])] }];
--- ---
<Base {title} {description} {jsonLd}><Header /><main id="main-content"><section class="page-hero article-hero" data-word="JOURNAL"><div class="container page-hero__inner" data-reveal><div class="breadcrumb"><a href="/">首页</a> / <a href="/articles/">银饰</a>{activeName && ` / ${activeName}`}</div><div class="eyebrow"><span></span>INZUNG JOURNAL</div><h1>{heading}</h1><p>{description}</p></div></section><section class="section-pad section-cream"><div class="container"><ArticleListing {items} {categories} {totalCount} {activeSlug} {currentPage} {lastPage} {basePath} /></div></section></main><Footer /></Base> <Base {title} {description} {jsonLd}><Header /><main id="main-content"><section class="page-hero article-hero" data-word="JOURNAL"><div class="container page-hero__inner" data-reveal><div class="breadcrumb"><a href="/">首页</a> / <a href="/articles/">银饰资讯</a>{activeName && ` / ${activeName}`}</div><div class="eyebrow"><span></span>INZUNG JOURNAL</div><h1>{heading}</h1><p>{description}</p></div></section><section class="section-pad section-cream"><div class="container"><ArticleListing {items} {categories} {totalCount} {activeSlug} {currentPage} {lastPage} {basePath} /></div></section></main><Footer /></Base>
...@@ -9,7 +9,7 @@ import { site } from "../data/site"; ...@@ -9,7 +9,7 @@ import { site } from "../data/site";
<p>让传统锻银技艺承载每一份值得珍藏的心意。</p> <p>让传统锻银技艺承载每一份值得珍藏的心意。</p>
<div class="footer-tags"><span>足银可复检</span><span>私人定制</span><span>终身养护</span></div> <div class="footer-tags"><span>足银可复检</span><span>私人定制</span><span>终身养护</span></div>
</div> </div>
<div><h2>探索银妆</h2><a href="/about/">品牌故事</a><a href="/services/">产品与定制</a><a href="/articles/">银饰</a><a href="/faq/">常见问题</a></div> <div><h2>探索银妆</h2><a href="/about/">品牌故事</a><a href="/services/">产品与定制</a><a href="/articles/">银饰资讯</a><a href="/faq/">常见问题</a></div>
<div><h2>银饰系列</h2>{site.products.map((item) => <a href={`/services/#${item.slug}`}>{item.name}</a>)}</div> <div><h2>银饰系列</h2>{site.products.map((item) => <a href={`/services/#${item.slug}`}>{item.name}</a>)}</div>
<div class="footer-contact"><h2>联系与到店</h2><a class="footer-phone" href="tel:4008113922">{site.contact.phone}</a><address>{site.contact.address}</address><a class="footer-arrow" href="/contact/">查看联系方式 <span>↗</span></a></div> <div class="footer-contact"><h2>联系与到店</h2><a class="footer-phone" href="tel:4008113922">{site.contact.phone}</a><address>{site.contact.address}</address><a class="footer-arrow" href="/contact/">查看联系方式 <span>↗</span></a></div>
</div> </div>
......
...@@ -118,7 +118,7 @@ export const site = { ...@@ -118,7 +118,7 @@ export const site = {
{ href: "/", label: "首页", children: [{ href: "/#products", label: "银饰系列" }, { href: "/#craft", label: "匠心工艺" }, { href: "/#stories", label: "定制场景" }] }, { href: "/", label: "首页", children: [{ href: "/#products", label: "银饰系列" }, { href: "/#craft", label: "匠心工艺" }, { href: "/#stories", label: "定制场景" }] },
{ href: "/services/", label: "产品与定制", children: [{ href: "/services/#silver-bracelet", label: "足银手镯" }, { href: "/services/#diy-weaving", label: "DIY 编织" }, { href: "/services/#silver-earrings", label: "银耳环" }, { href: "/services/#silver-necklace", label: "银项链" }] }, { href: "/services/", label: "产品与定制", children: [{ href: "/services/#silver-bracelet", label: "足银手镯" }, { href: "/services/#diy-weaving", label: "DIY 编织" }, { href: "/services/#silver-earrings", label: "银耳环" }, { href: "/services/#silver-necklace", label: "银项链" }] },
{ href: "/about/", label: "关于银妆", children: [{ href: "/about/#story", label: "品牌故事" }, { href: "/about/#advantages", label: "核心优势" }, { href: "/about/#values", label: "品牌初心" }] }, { href: "/about/", label: "关于银妆", children: [{ href: "/about/#story", label: "品牌故事" }, { href: "/about/#advantages", label: "核心优势" }, { href: "/about/#values", label: "品牌初心" }] },
{ href: "/articles/", label: "银饰", children: [{ href: "/articles/", label: "全部文章" }] }, { href: "/articles/", label: "银饰资讯", children: [{ href: "/articles/", label: "全部文章" }] },
{ href: "/join/", label: "门店与服务", children: [{ href: "/join/#service-promise", label: "服务承诺" }, { href: "/join/#service-flow", label: "定制流程" }, { href: "/contact/", label: "联系门店" }] }, { href: "/join/", label: "门店与服务", children: [{ href: "/join/#service-promise", label: "服务承诺" }, { href: "/join/#service-flow", label: "定制流程" }, { href: "/contact/", label: "联系门店" }] },
{ href: "/faq/", label: "常见问题", children: [{ href: "/faq/", label: "选购与定制 FAQ" }] }, { href: "/faq/", label: "常见问题", children: [{ href: "/faq/", label: "选购与定制 FAQ" }] },
{ href: "/contact/", label: "联系我们", children: [{ href: "/contact/", label: "联系方式" }, { href: "tel:4008113922", label: "拨打客服热线" }] }, { href: "/contact/", label: "联系我们", children: [{ href: "/contact/", label: "联系方式" }, { href: "tel:4008113922", label: "拨打客服热线" }] },
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="robots" content="noindex,nofollow" /> <meta name="robots" content="noindex,nofollow" />
<title>银妆 · 银饰后台</title> <title>银妆 · 银饰资讯后台</title>
<link rel="stylesheet" href="/admin/style.css" /> <link rel="stylesheet" href="/admin/style.css" />
</head> </head>
<body> <body>
<section id="login" class="login hidden"> <section id="login" class="login hidden">
<form id="login-form" class="login-card"> <form id="login-form" class="login-card">
<div class="brand-mark">银妆</div> <div class="brand-mark">银妆</div>
<h1>银饰后台</h1> <h1>银饰资讯后台</h1>
<p>输入管理密码和图片验证码,管理官网文章内容。</p> <p>输入管理密码和图片验证码,管理官网文章内容。</p>
<label>管理密码<input id="password" type="password" autocomplete="current-password" required /></label> <label>管理密码<input id="password" type="password" autocomplete="current-password" required /></label>
<label>图片验证码</label> <label>图片验证码</label>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<div id="app" class="hidden"> <div id="app" class="hidden">
<header class="topbar"> <header class="topbar">
<div><strong>银妆</strong><span>银饰后台</span></div> <div><strong>银妆</strong><span>银饰资讯后台</span></div>
<div class="top-actions"> <div class="top-actions">
<span id="pending-badge" class="pending-badge hidden"></span> <span id="pending-badge" class="pending-badge hidden"></span>
<a class="button ghost" href="/articles/" target="_blank" rel="noopener">查看前台</a> <a class="button ghost" href="/articles/" target="_blank" rel="noopener">查看前台</a>
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
</header> </header>
<main id="list-view" class="view"> <main id="list-view" class="view">
<div class="view-head"><div><p>CONTENT</p><h1>银饰</h1></div><div class="view-actions"><button id="manage-categories" class="ghost">管理分类</button><button id="new-article" class="primary">+ 新建文章</button></div></div> <div class="view-head"><div><p>CONTENT</p><h1>银饰资讯</h1></div><div class="view-actions"><button id="manage-categories" class="ghost">管理分类</button><button id="new-article" class="primary">+ 新建文章</button></div></div>
<div id="article-list" class="article-list"></div> <div id="article-list" class="article-list"></div>
</main> </main>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
import Base from "../../layouts/Base.astro"; import Header from "../../components/Header.astro"; import Footer from "../../components/Footer.astro"; import { site } from "../../data/site"; import { getPublishedArticle, getPublishedArticles } from "../../lib/article-store"; import { fmtDate } from "../../lib/articles"; import Base from "../../layouts/Base.astro"; import Header from "../../components/Header.astro"; import Footer from "../../components/Footer.astro"; import { site } from "../../data/site"; import { getPublishedArticle, getPublishedArticles } from "../../lib/article-store"; import { fmtDate } from "../../lib/articles";
type ArticleDetail = NonNullable<Awaited<ReturnType<typeof getPublishedArticle>>>; type ArticleDetail = NonNullable<Awaited<ReturnType<typeof getPublishedArticle>>>;
export async function getStaticPaths() { const articles = await getPublishedArticles(); return Promise.all(articles.map(async (article) => ({ params: { slug: article.id }, props: { entry: await getPublishedArticle(article.id) } }))); } export async function getStaticPaths() { const articles = await getPublishedArticles(); return Promise.all(articles.map(async (article) => ({ params: { slug: article.id }, props: { entry: await getPublishedArticle(article.id) } }))); }
const { entry } = Astro.props as { entry: ArticleDetail }; const article = entry.data; const date = fmtDate(article.date); const title = `${article.title}|银饰|${site.brand.name}`; const pageUrl = new URL(`/articles/${entry.id}/`, Astro.site).href; const { entry } = Astro.props as { entry: ArticleDetail }; const article = entry.data; const date = fmtDate(article.date); const title = `${article.title}|银饰资讯|${site.brand.name}`; const pageUrl = new URL(`/articles/${entry.id}/`, Astro.site).href;
const jsonLd = [{ "@context": "https://schema.org", "@type": "Article", headline: article.title, description: article.excerpt, datePublished: date, dateModified: fmtDate(article.updated || article.date), articleSection: article.category, inLanguage: "zh-CN", author: { "@type": "Organization", name: article.author }, publisher: { "@id": new URL("/#organization", Astro.site).href }, mainEntityOfPage: { "@type": "WebPage", "@id": pageUrl }, url: pageUrl }, { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement: [{ "@type": "ListItem", position: 1, name: "首页", item: Astro.site?.href }, { "@type": "ListItem", position: 2, name: "银饰", item: new URL("/articles/", Astro.site).href }, { "@type": "ListItem", position: 3, name: article.title, item: pageUrl }] }]; const jsonLd = [{ "@context": "https://schema.org", "@type": "Article", headline: article.title, description: article.excerpt, datePublished: date, dateModified: fmtDate(article.updated || article.date), articleSection: article.category, inLanguage: "zh-CN", author: { "@type": "Organization", name: article.author }, publisher: { "@id": new URL("/#organization", Astro.site).href }, mainEntityOfPage: { "@type": "WebPage", "@id": pageUrl }, url: pageUrl }, { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement: [{ "@type": "ListItem", position: 1, name: "首页", item: Astro.site?.href }, { "@type": "ListItem", position: 2, name: "银饰资讯", item: new URL("/articles/", Astro.site).href }, { "@type": "ListItem", position: 3, name: article.title, item: pageUrl }] }];
--- ---
<Base {title} description={article.excerpt} ogType="article" {jsonLd}><Header /><main id="main-content" class="article-detail-page"><article><header class="article-detail-head"><div class="container article-detail-head__inner"><div class="breadcrumb"><a href="/">首页</a> / <a href="/articles/">银饰志</a> / {article.category}</div><span class="article-detail-category">{article.category}</span><h1>{article.title}</h1><p>{article.excerpt}</p><div class="article-detail-meta"><time datetime={date}>{date}</time><span>{article.author}</span></div></div></header><div class="container article-detail-layout"><aside><a href="/articles/">← 返回银饰志</a><p>银饰材质、价格与售后规则请以实际产品标识和购买门店说明为准。</p></aside><div class="article-prose" set:html={entry.html}></div></div></article></main><Footer /></Base> <Base {title} description={article.excerpt} ogType="article" {jsonLd}><Header /><main id="main-content" class="article-detail-page"><article><header class="article-detail-head"><div class="container article-detail-head__inner"><div class="breadcrumb"><a href="/">首页</a> / <a href="/articles/">银饰资讯</a> / {article.category}</div><span class="article-detail-category">{article.category}</span><h1>{article.title}</h1><p>{article.excerpt}</p><div class="article-detail-meta"><time datetime={date}>{date}</time><span>{article.author}</span></div></div></header><div class="container article-detail-layout"><aside><a href="/articles/">← 返回银饰资讯</a><p>银饰材质、价格与售后规则请以实际产品标识和购买门店说明为准。</p></aside><div class="article-prose" set:html={entry.html}></div></div></article></main><Footer /></Base>
...@@ -75,7 +75,7 @@ const jsonLd = { "@context": "https://schema.org", "@type": "WebSite", name: sit ...@@ -75,7 +75,7 @@ const jsonLd = { "@context": "https://schema.org", "@type": "WebSite", name: sit
<section class="section-pad service-promise-section"><div class="container"><div class="section-intro-row"><SectionHeading eyebrow="OUR PROMISE" title="一件银饰,四重安心" description="从真材实料到长期养护,让购买之后的每一天都更放心。" light /><a class="text-link text-link--light" href="/join/">了解服务体系 <span>↗</span></a></div><div class="promise-grid">{site.promises.map((item) => <article data-reveal><span>{item.number}</span><h3>{item.title}</h3><p>{item.desc}</p></article>)}</div></div></section> <section class="section-pad service-promise-section"><div class="container"><div class="section-intro-row"><SectionHeading eyebrow="OUR PROMISE" title="一件银饰,四重安心" description="从真材实料到长期养护,让购买之后的每一天都更放心。" light /><a class="text-link text-link--light" href="/join/">了解服务体系 <span>↗</span></a></div><div class="promise-grid">{site.promises.map((item) => <article data-reveal><span>{item.number}</span><h3>{item.title}</h3><p>{item.desc}</p></article>)}</div></div></section>
{latest.length > 0 && <section class="section-pad section-cream"><div class="container"><div class="section-intro-row"><SectionHeading eyebrow="INZUNG JOURNAL" title="银饰" description="关于选购、佩戴、养护与传统银作的实用分享。" /><a class="text-link" href="/articles/">查看全部文章 <span>↗</span></a></div><div class="article-grid">{latest.map((item, index) => <article class="article-card" data-reveal><a href={`/articles/${item.id}/`}><div class="article-card__meta"><span>{item.data.category}</span><time>{fmtDate(item.data.date)}</time></div><div class="article-card__index">0{index + 1}</div><h2>{item.data.title}</h2><p>{item.data.excerpt}</p><strong>阅读全文 ↗</strong></a></article>)}</div></div></section>} {latest.length > 0 && <section class="section-pad section-cream"><div class="container"><div class="section-intro-row"><SectionHeading eyebrow="INZUNG JOURNAL" title="银饰资讯" description="关于选购、佩戴、养护与传统银作的实用分享。" /><a class="text-link" href="/articles/">查看全部文章 <span>↗</span></a></div><div class="article-grid">{latest.map((item, index) => <article class="article-card" data-reveal><a href={`/articles/${item.id}/`}><div class="article-card__meta"><span>{item.data.category}</span><time>{fmtDate(item.data.date)}</time></div><div class="article-card__index">0{index + 1}</div><h2>{item.data.title}</h2><p>{item.data.excerpt}</p><strong>阅读全文 ↗</strong></a></article>)}</div></div></section>}
<CTA /> <CTA />
</main> </main>
<Footer /> <Footer />
......
...@@ -11,8 +11,8 @@ export async function GET() { ...@@ -11,8 +11,8 @@ export async function GET() {
`银妆是拥有 14 年行业积淀的银饰连锁品牌,提供足银首饰零售、来料加工、专属雕刻与银饰 DIY 编织服务。`, `银妆是拥有 14 年行业积淀的银饰连锁品牌,提供足银首饰零售、来料加工、专属雕刻与银饰 DIY 编织服务。`,
"", "",
"## 核心页面", "## 核心页面",
"- [首页](/)", "- [产品与定制](/services/)", "- [关于银妆](/about/)", "- [门店与服务](/join/)", "- [银饰](/articles/)", "- [常见问题](/faq/)", "- [联系我们](/contact/)", "- [首页](/)", "- [产品与定制](/services/)", "- [关于银妆](/about/)", "- [门店与服务](/join/)", "- [银饰资讯](/articles/)", "- [常见问题](/faq/)", "- [联系我们](/contact/)",
"", "## 银饰", "", "## 银饰资讯",
...articles.map((article) => `- [${article.data.title}](/articles/${article.id}/): ${article.data.excerpt}`), ...articles.map((article) => `- [${article.data.title}](/articles/${article.id}/): ${article.data.excerpt}`),
"", `客服电话:${site.contact.phone}`, `公司地址:${site.contact.address}`, "", `客服电话:${site.contact.phone}`, `公司地址:${site.contact.address}`,
]; ];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment