更新website后端
This commit is contained in:
@@ -1,7 +1,20 @@
|
||||
/**
|
||||
* 站点级公共配置:品牌、导航、页脚
|
||||
* 后续接入后端 CMS 时,只需替换此处的数据来源即可。
|
||||
*
|
||||
* 站点信息的数据来源已切换为后端「官网管理 - 站点设置」(应用启动时由 loadSiteInfo 拉取),
|
||||
* 与官网模板 themes/ 中使用的标签同源,括号内为对应标签:
|
||||
* sitename 站点名称 {yz:sitename}
|
||||
* logoDark 深色 Logo {yz:logo}
|
||||
* logoLight 浅色 Logo {yz:logow}
|
||||
* icp ICP 备案号 {yz:icp}
|
||||
* policeIcp 公安备案号 {yz:policeicp}
|
||||
* copyright 版权信息 {yz:copyright}
|
||||
* privacy 隐私政策链接 {yz:privacy}
|
||||
* terms 使用条款链接 {yz:terms}
|
||||
* 后端未返回的字段保留文件内默认值。
|
||||
*/
|
||||
import { computed, reactive } from "vue";
|
||||
import { fetchSiteSetting } from "@/api/site";
|
||||
|
||||
export interface NavItem {
|
||||
label: string;
|
||||
@@ -13,7 +26,7 @@ export interface FooterColumn {
|
||||
links: NavItem[];
|
||||
}
|
||||
|
||||
export const siteInfo = {
|
||||
export const siteInfo = reactive({
|
||||
brandMark: "YZ",
|
||||
brandName: "云泽科技",
|
||||
brandSub: "YUNZER TECH",
|
||||
@@ -25,7 +38,63 @@ export const siteInfo = {
|
||||
postalCode: "100193",
|
||||
copyright:
|
||||
"COPYRIGHT (C) 2026 YUNZER TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.",
|
||||
};
|
||||
|
||||
// ↓↓↓ 以下字段由「官网管理 - 站点设置」下发(对应官网模板标签) ↓↓↓
|
||||
/** {yz:sitename} 站点名称 */
|
||||
sitename: "",
|
||||
/** {yz:subtitle} 副标题 */
|
||||
subtitle: "",
|
||||
/** {yz:logo} 深色 Logo,用于浅色背景(页头) */
|
||||
logoDark: "",
|
||||
/** {yz:logow} 浅色 Logo,用于深色背景(页脚) */
|
||||
logoLight: "",
|
||||
/** {yz:icp} ICP 备案号 */
|
||||
icp: "",
|
||||
/** {yz:policeicp} 公安备案号 */
|
||||
policeIcp: "",
|
||||
/** {yz:privacy} 隐私政策链接 */
|
||||
privacy: "",
|
||||
/** {yz:terms} 使用条款链接 */
|
||||
terms: "",
|
||||
});
|
||||
|
||||
/**
|
||||
* 站点设置标签值:key 就是模板标签名,与后端 {yz:xxx} 完全一致
|
||||
* 供 v-yz 指令解析(<p v-yz>{yz:icp}</p>),未配置或后端未返回时输出空字符串
|
||||
*/
|
||||
export const siteTags = reactive<Record<string, string>>({});
|
||||
|
||||
/**
|
||||
* 拉取站点设置并回填 siteInfo(应用启动时调用一次)。
|
||||
* 接口异常时静默处理,页面继续使用默认配置。
|
||||
*/
|
||||
export async function loadSiteInfo(): Promise<void> {
|
||||
const data = await fetchSiteSetting();
|
||||
if (!data) return;
|
||||
|
||||
// {yz:sitename} → 页头品牌名
|
||||
if (data.sitename) {
|
||||
siteInfo.sitename = data.sitename;
|
||||
siteInfo.brandName = data.sitename;
|
||||
}
|
||||
if (data.subtitle) siteInfo.subtitle = data.subtitle;
|
||||
if (data.logo) siteInfo.logoDark = data.logo;
|
||||
if (data.logow) siteInfo.logoLight = data.logow;
|
||||
// 公司信息:站点设置里有值就覆盖本地默认(页脚联系栏、页脚品牌全称),没填则保留默认
|
||||
if (data.companyname) siteInfo.fullName = data.companyname;
|
||||
if (data.phone) siteInfo.phone = data.phone;
|
||||
if (data.email) siteInfo.email = data.email;
|
||||
if (data.address) siteInfo.address = data.address;
|
||||
if (data.icp) siteInfo.icp = data.icp;
|
||||
if (data.policeicp) siteInfo.policeIcp = data.policeicp;
|
||||
if (data.copyright) siteInfo.copyright = data.copyright;
|
||||
if (data.privacy) siteInfo.privacy = data.privacy;
|
||||
if (data.terms) siteInfo.terms = data.terms;
|
||||
|
||||
// 标签值:直接以接口返回的「标签名 -> 值」为准(v-yz 指令解析用)。
|
||||
// 数据驱动:表里新增的设置项会自动进入 siteTags,模板里写 {yz:新tag} 即可,无需改代码。
|
||||
Object.assign(siteTags, data);
|
||||
}
|
||||
|
||||
/** 顶部工具条链接 */
|
||||
export const utilityLinks: NavItem[] = [
|
||||
@@ -65,9 +134,16 @@ export const footerColumns: FooterColumn[] = [
|
||||
},
|
||||
];
|
||||
|
||||
/** 页脚底部合规链接 */
|
||||
export const policyLinks: NavItem[] = [
|
||||
{ label: "隐私政策", path: "/policy/privacy" },
|
||||
{ label: "使用条款", path: "/policy/terms" },
|
||||
/**
|
||||
* 页脚底部合规链接
|
||||
* 隐私政策 {yz:privacy} / 使用条款 {yz:terms} 取自站点设置,未配置时回退站内默认页面
|
||||
*/
|
||||
export const policyLinks = computed<NavItem[]>(() => [
|
||||
{ label: "隐私政策", path: siteInfo.privacy || "/policy/privacy" },
|
||||
{ label: "使用条款", path: siteInfo.terms || "/policy/terms" },
|
||||
{ label: "网站地图", path: "/policy/sitemap" },
|
||||
];
|
||||
]);
|
||||
|
||||
/** 是否为站外链接(站点设置里可能填完整 URL) */
|
||||
export const isExternalLink = (path: string): boolean =>
|
||||
/^https?:\/\//i.test(path);
|
||||
|
||||
Reference in New Issue
Block a user