/**
* 站点级公共配置:品牌、导航、页脚
*
* 站点信息的数据来源已切换为后端「官网管理 - 站点设置」(应用启动时由 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;
path: string;
}
export interface FooterColumn {
title: string;
links: NavItem[];
}
export const siteInfo = reactive({
brandMark: "WX",
brandName: "温新云科技",
brandSub: "WENXIN TECH",
fullName: "温新云科技有限公司",
slogan: "欢迎访问温新云科技官方网站",
phone: "400-000-0000",
email: "contact@yunzer.com",
address: "北京市海淀区中关村软件园 25 号楼",
postalCode: "100193",
copyright:
"COPYRIGHT (C) 2026 WENXIN 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 指令解析(
{yz:icp}
),未配置或后端未返回时输出空字符串
*/
export const siteTags = reactive>({});
/**
* 拉取站点设置并回填 siteInfo(应用启动时调用一次)。
* 接口异常时静默处理,页面继续使用默认配置。
*/
export async function loadSiteInfo(): Promise {
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[] = [
{ label: "加入我们", path: "/careers" },
{ label: "客户支持", path: "/support" },
{ label: "合作伙伴", path: "/partners" },
];
/** 主导航 */
export const navItems: NavItem[] = [
{ label: "关于我们", path: "/about" },
{ label: "产品中心", path: "/products" },
{ label: "解决方案", path: "/solutions" },
{ label: "客户案例", path: "/cases" },
{ label: "新闻中心", path: "/news" },
];
/** 页脚链接分组 */
export const footerColumns: FooterColumn[] = [
{
title: "产品与方案",
links: [
{ label: "云原生平台", path: "/products/detail/cloud-native" },
{ label: "数据中台", path: "/products/detail/data-platform" },
{ label: "智能分析引擎", path: "/products/detail/analytics" },
{ label: "行业解决方案", path: "/solutions" },
],
},
{
title: "服务与支持",
links: [
{ label: "产品文档", path: "/support/docs" },
{ label: "开发者中心", path: "/support/developer" },
{ label: "申请试用", path: "/support/trial" },
{ label: "服务保障", path: "/support/sla" },
],
},
];
/**
* 页脚底部合规链接
* 隐私政策 {yz:privacy} / 使用条款 {yz:terms} 取自站点设置,未配置时回退站内默认页面
*/
export const policyLinks = computed(() => [
{ 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);