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