/** * 站点级公共配置:品牌、导航、页脚 * * 站点信息的数据来源已切换为后端「官网管理 - 站点设置」(应用启动时由 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);