`)被丢弃。
diff --git a/src/api/cms/cmsContactLead/index.ts b/src/api/cms/cmsContactLead/index.ts
new file mode 100644
index 0000000..0f53783
--- /dev/null
+++ b/src/api/cms/cmsContactLead/index.ts
@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+import type { ApiResult, PageResult } from '@/api'
+import type { CmsContactLead, CmsContactLeadParam } from './model'
+
+/**
+ * 提交联系线索(留言咨询),免登录
+ */
+export async function submitCmsContactLead(data: Partial
) {
+ const res = await request.post>(
+ '/cms/cms-contact-lead/submit',
+ data
+ )
+ if (res.code === 0) {
+ return res.message
+ }
+ return Promise.reject(new Error(res.message))
+}
+
+/**
+ * 分页查询我的联系线索
+ */
+export async function pageCmsContactLead(params: CmsContactLeadParam) {
+ const res = await request.get>>(
+ '/cms/cms-contact-lead/page',
+ params
+ )
+ if (res.code === 0) {
+ return res.data
+ }
+ return Promise.reject(new Error(res.message))
+}
diff --git a/src/api/cms/cmsContactLead/model/index.ts b/src/api/cms/cmsContactLead/model/index.ts
new file mode 100644
index 0000000..6ef0763
--- /dev/null
+++ b/src/api/cms/cmsContactLead/model/index.ts
@@ -0,0 +1,36 @@
+import type { PageParam } from '@/api'
+
+/**
+ * 联系线索(留言咨询)
+ */
+export interface CmsContactLead {
+ // 线索ID
+ leadId?: number
+ // 称呼
+ name?: string
+ // 手机号
+ phone?: string
+ // 公司
+ company?: string
+ // 邮箱
+ email?: string
+ // 需求描述
+ need?: string
+ // 来源 web|miniapp|app
+ source?: string
+ // 状态 0待跟进 1已回复 2已完成 3已归档
+ status?: number
+ // 租户id
+ tenantId?: number
+ // 创建时间
+ createTime?: string
+}
+
+/**
+ * 联系线索搜索条件
+ */
+export interface CmsContactLeadParam extends PageParam {
+ name?: string
+ phone?: string
+ source?: string
+}
diff --git a/src/api/cms/cmsWebsite/index.ts b/src/api/cms/cmsWebsite/index.ts
index 0679bcf..8b7b662 100644
--- a/src/api/cms/cmsWebsite/index.ts
+++ b/src/api/cms/cmsWebsite/index.ts
@@ -118,6 +118,19 @@ export async function getCmsWebsite(id: number) {
return Promise.reject(new Error(res.message));
}
+/**
+ * 获取站点信息(含 topNavs / bottomNavs),官网首页与关于页使用
+ */
+export async function getCmsWebsiteSiteInfo() {
+ const res = await request.get>(
+ '/cms/cms-website/getSiteInfo'
+ );
+ if (res.code === 0 && res.data) {
+ return res.data;
+ }
+ return Promise.reject(new Error(res.message));
+}
+
/**
* 清除缓存
*/
diff --git a/src/api/official/index.ts b/src/api/official/index.ts
new file mode 100644
index 0000000..ce109ba
--- /dev/null
+++ b/src/api/official/index.ts
@@ -0,0 +1,19 @@
+/**
+ * 官网(企业官网展示端)统一 API 出口
+ * 复用 src/api/cms 下已有模块,并补齐两个缺口:
+ * - getCmsWebsiteSiteInfo:站点信息(含顶部/底部导航)
+ * - submitCmsContactLead / pageCmsContactLead:留言咨询
+ *
+ * 内容读取走与现有 listCmsAd / listCmsArticle 一致的默认请求链路(shop-api 已代理 /cms)。
+ */
+export { pageCmsArticle, getCmsArticle, listCmsArticle } from '@/api/cms/cmsArticle'
+export { treeNavigation, listCmsNavigation } from '@/api/cms/cmsNavigation'
+export { listCmsMpPages } from '@/api/cms/cmsMpPages'
+export { getCmsWebsiteSiteInfo, listCmsWebsite, getCmsWebsite } from '@/api/cms/cmsWebsite'
+export { listCmsAd } from '@/api/cms/cmsAd'
+export { submitCmsContactLead, pageCmsContactLead } from '@/api/cms/cmsContactLead'
+
+export type { CmsArticle } from '@/api/cms/cmsArticle/model'
+export type { CmsWebsite, CmsNavigation } from '@/api/cms/cmsWebsite/model'
+export type { CmsAd } from '@/api/cms/cmsAd/model'
+export type { CmsContactLead } from '@/api/cms/cmsContactLead/model'
diff --git a/src/app.config.ts b/src/app.config.ts
index f62ccb8..f18b6e8 100644
--- a/src/app.config.ts
+++ b/src/app.config.ts
@@ -144,6 +144,17 @@ export default {
"unified-qr/index",
"pay/index"
]
+ },
+ {
+ "root": "official",
+ "pages": [
+ "index",
+ "article",
+ "article-detail",
+ "about",
+ "message",
+ "mine"
+ ]
}
],
window: {
diff --git a/src/app.scss b/src/app.scss
index 5122105..723b653 100644
--- a/src/app.scss
+++ b/src/app.scss
@@ -15,6 +15,9 @@
--text-color: #333333;
--bg-color: #ffffff;
--border-color: #e8e8e8;
+ // 官网品牌色(统一 token)
+ --brand-color: #185FA5;
+ --brand-light: #EAF2FB;
}
// 暗黑模式
@@ -78,3 +81,72 @@ page {
to { transform: rotate(360deg); }
}
+// 官网分包富文本渲染(RichText nodes 内的标签样式)
+.official-rich {
+ font-size: 30px;
+ line-height: 1.8;
+ color: #333333;
+ word-break: break-all;
+
+ img {
+ max-width: 100% !important;
+ height: auto !important;
+ display: block;
+ margin: 16px 0;
+ border-radius: 12px;
+ }
+
+ p {
+ margin: 0 0 20px 0;
+ }
+
+ h1, h2, h3, h4 {
+ font-weight: 600;
+ color: #1a1a1a;
+ margin: 28px 0 16px 0;
+ line-height: 1.5;
+ }
+
+ h1 { font-size: 38px; }
+ h2 { font-size: 34px; }
+ h3 { font-size: 32px; }
+ h4 { font-size: 30px; }
+
+ a {
+ color: var(--brand-color);
+ }
+
+ ul, ol {
+ padding-left: 40px;
+ margin: 0 0 20px 0;
+ }
+
+ li {
+ margin-bottom: 10px;
+ }
+
+ blockquote {
+ margin: 20px 0;
+ padding: 16px 20px;
+ background-color: var(--brand-light);
+ border-left: 6px solid var(--brand-color);
+ color: #555555;
+ }
+
+ table {
+ width: 100%;
+ border-collapse: collapse;
+ margin: 20px 0;
+ }
+
+ th, td {
+ border: 1px solid #e8e8e8;
+ padding: 12px;
+ font-size: 26px;
+ }
+
+ video {
+ width: 100%;
+ }
+}
+
diff --git a/src/official/about/index.tsx b/src/official/about/index.tsx
new file mode 100644
index 0000000..5f7769d
--- /dev/null
+++ b/src/official/about/index.tsx
@@ -0,0 +1,66 @@
+import React, { useState, useEffect } from 'react'
+import { View, Text, ScrollView, RichText, Image } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { getCmsWebsiteSiteInfo } from '@/api/official'
+import type { CmsWebsite } from '@/api/official'
+import { getCompressedImageUrl } from '@/utils/image'
+import OfficialTabBar from '../components/OfficialTabBar'
+import NavBar from '@/components/NavBar'
+
+definePageConfig({
+ navigationBarTitleText: '关于我们',
+})
+
+const About: React.FC = () => {
+ const [site, setSite] = useState()
+ const [loading, setLoading] = useState(true)
+
+ useEffect(() => {
+ getCmsWebsiteSiteInfo()
+ .then((s) => setSite(s))
+ .catch(() => {})
+ .finally(() => setLoading(false))
+ }, [])
+
+ const aboutHtml =
+ (site as any)?.config?.about || (site as any)?.description || ''
+
+ return (
+
+
+
+
+
+ {site?.websiteLogo && (
+
+ )}
+
+ {site?.websiteName || '企业官网'}
+
+
+
+ {aboutHtml ? (
+
+ ) : (
+
+ {loading ? '加载中...' : '暂无介绍'}
+
+ )}
+
+
+ 联系电话:{site?.phone || '—'}
+ 邮箱:{site?.email || '—'}
+ 地址:{site?.address || '—'}
+
+
+
+
+
+ )
+}
+
+export default About
diff --git a/src/official/article-detail/index.tsx b/src/official/article-detail/index.tsx
new file mode 100644
index 0000000..b0dfa48
--- /dev/null
+++ b/src/official/article-detail/index.tsx
@@ -0,0 +1,61 @@
+import React, { useState, useEffect } from 'react'
+import { View, Text, ScrollView, RichText } from '@tarojs/components'
+import Taro, { useRouter } from '@tarojs/taro'
+import { getCmsArticle } from '@/api/official'
+import type { CmsArticle } from '@/api/official'
+import NavBar from '@/components/NavBar'
+
+definePageConfig({
+ navigationBarTitleText: '资讯详情',
+})
+
+const ArticleDetail: React.FC = () => {
+ const router = useRouter()
+ const id = router.params.id
+ const [article, setArticle] = useState()
+ const [loading, setLoading] = useState(true)
+
+ useEffect(() => {
+ if (!id) return
+ getCmsArticle(Number(id))
+ .then((a) => setArticle(a))
+ .catch(() => {})
+ .finally(() => setLoading(false))
+ }, [id])
+
+ return (
+
+
+
+
+
+ {article?.title || '加载中...'}
+
+
+ {article?.source || article?.author || ''}
+ {article?.createTime?.slice(0, 10)}
+
+ {article?.content ? (
+
+ ) : (
+
+ {loading ? '加载中...' : '暂无内容'}
+
+ )}
+
+
+
+ Taro.navigateTo({ url: '/official/message' })}
+ >
+ 立即咨询
+
+
+
+ )
+}
+
+export default ArticleDetail
diff --git a/src/official/article/index.tsx b/src/official/article/index.tsx
new file mode 100644
index 0000000..130db51
--- /dev/null
+++ b/src/official/article/index.tsx
@@ -0,0 +1,72 @@
+import React, { useState, useEffect } from 'react'
+import { View, Text, ScrollView } from '@tarojs/components'
+import Taro, { useRouter } from '@tarojs/taro'
+import { pageCmsArticle } from '@/api/official'
+import type { CmsArticle } from '@/api/official'
+import ArticleCard from '../components/ArticleCard'
+import OfficialTabBar from '../components/OfficialTabBar'
+import NavBar from '@/components/NavBar'
+
+definePageConfig({
+ navigationBarTitleText: '资讯',
+})
+
+const ArticleList: React.FC = () => {
+ const router = useRouter()
+ const categoryId = router.params.categoryId
+ const [articles, setArticles] = useState([])
+ const [page, setPage] = useState(1)
+ const [finished, setFinished] = useState(false)
+ const [loading, setLoading] = useState(false)
+
+ const load = async (p: number) => {
+ if (loading || finished) return
+ setLoading(true)
+ try {
+ const res = await pageCmsArticle({
+ status: 0,
+ deleted: 0,
+ page: p,
+ limit: 10,
+ categoryId: categoryId ? Number(categoryId) : undefined,
+ })
+ const list = res?.list || []
+ setArticles((prev) => (p === 1 ? list : [...prev, ...list]))
+ setPage(p)
+ if (list.length < 10) setFinished(true)
+ } catch (e) {
+ console.error('资讯列表加载失败', e)
+ } finally {
+ setLoading(false)
+ }
+ }
+
+ useEffect(() => {
+ load(1)
+ }, [])
+
+ return (
+
+
+ load(page + 1)}>
+
+ {articles.length > 0 ? (
+ articles.map((a) => )
+ ) : (
+
+ {loading ? '加载中...' : '暂无资讯'}
+
+ )}
+ {loading && (
+
+ 加载中...
+
+ )}
+
+
+
+
+ )
+}
+
+export default ArticleList
diff --git a/src/official/components/ArticleCard.tsx b/src/official/components/ArticleCard.tsx
new file mode 100644
index 0000000..6c03f8d
--- /dev/null
+++ b/src/official/components/ArticleCard.tsx
@@ -0,0 +1,49 @@
+import { View, Text, Image } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { getCompressedImageUrl } from '@/utils/image'
+import type { CmsArticle } from '@/api/cms/cmsArticle/model'
+
+interface Props {
+ article: CmsArticle
+ onClick?: () => void
+}
+
+/**
+ * 资讯列表卡片:左图右文,点击进入详情。
+ * 复用项目图片工具 getCompressedImageUrl 保证 OSS 压缩一致。
+ */
+export default function ArticleCard({ article, onClick }: Props) {
+ const handle = () => {
+ if (onClick) {
+ onClick()
+ } else {
+ Taro.navigateTo({ url: `/official/article-detail?id=${article.articleId}` })
+ }
+ }
+
+ return (
+
+ {article.image ? (
+
+ ) : (
+
+ 无图
+
+ )}
+
+ {article.title}
+ {article.overview ? (
+ {article.overview}
+ ) : null}
+
+ {article.source || article.author || ''}
+ {article.createTime?.slice(0, 10)}
+
+
+
+ )
+}
diff --git a/src/official/components/OfficialTabBar.tsx b/src/official/components/OfficialTabBar.tsx
new file mode 100644
index 0000000..f45a13e
--- /dev/null
+++ b/src/official/components/OfficialTabBar.tsx
@@ -0,0 +1,38 @@
+import { View, Text } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+
+const TABS = [
+ { key: 'home', text: '首页', icon: '🏠', path: '/official/index' },
+ { key: 'article', text: '资讯', icon: '📰', path: '/official/article' },
+ { key: 'about', text: '关于', icon: 'ℹ️', path: '/official/about' },
+ { key: 'mine', text: '我的', icon: '👤', path: '/official/mine' },
+]
+
+/**
+ * 官网分包内底部导航(微信原生 tabBar 不支持分包页,故自实现)
+ * 通过 redirectTo 在四个官网页面间切换,避免页面栈无限增长。
+ */
+export default function OfficialTabBar({ active }: { active: string }) {
+ const go = (path: string) => {
+ if (path === active) return
+ Taro.redirectTo({ url: path })
+ }
+
+ return (
+
+ {TABS.map((t) => {
+ const on = active === t.key
+ return (
+ go(t.path)}
+ >
+ {t.icon}
+ {t.text}
+
+ )
+ })}
+
+ )
+}
diff --git a/src/official/components/SectionTitle.tsx b/src/official/components/SectionTitle.tsx
new file mode 100644
index 0000000..ee40f05
--- /dev/null
+++ b/src/official/components/SectionTitle.tsx
@@ -0,0 +1,29 @@
+import { View, Text } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+
+interface Props {
+ title: string
+ moreUrl?: string
+}
+
+/**
+ * 区块标题:左侧色条 + 标题,右侧「更多」跳转。
+ */
+export default function SectionTitle({ title, moreUrl }: Props) {
+ return (
+
+
+
+ {title}
+
+ {moreUrl && (
+ Taro.navigateTo({ url: moreUrl })}
+ >
+ 更多 ›
+
+ )}
+
+ )
+}
diff --git a/src/official/index/index.tsx b/src/official/index/index.tsx
new file mode 100644
index 0000000..fc268c8
--- /dev/null
+++ b/src/official/index/index.tsx
@@ -0,0 +1,166 @@
+import React, { useState, useEffect } from 'react'
+import { View, Text, Swiper, SwiperItem, Image, ScrollView } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { getCompressedImageUrl } from '@/utils/image'
+import {
+ listCmsAd,
+ getCmsWebsiteSiteInfo,
+ pageCmsArticle,
+ treeNavigation,
+} from '@/api/official'
+import type { CmsAd, CmsWebsite, CmsArticle, CmsNavigation } from '@/api/official'
+import OfficialTabBar from '../components/OfficialTabBar'
+import ArticleCard from '../components/ArticleCard'
+import SectionTitle from '../components/SectionTitle'
+
+definePageConfig({
+ navigationBarTitleText: '企业官网',
+ enableShareAppMessage: true,
+})
+
+const OfficialIndex: React.FC = () => {
+ const [site, setSite] = useState()
+ const [banners, setBanners] = useState([])
+ const [navs, setNavs] = useState([])
+ const [articles, setArticles] = useState([])
+ const [loading, setLoading] = useState(true)
+
+ useEffect(() => {
+ let mounted = true
+ ;(async () => {
+ try {
+ const [siteRes, adRes, navRes, artRes] = await Promise.all([
+ getCmsWebsiteSiteInfo().catch(() => undefined),
+ listCmsAd({ adType: 'banner', status: 0 }).catch(() => [] as CmsAd[]),
+ treeNavigation({ top: 1 }).catch(() => [] as CmsNavigation[]),
+ pageCmsArticle({ status: 0, deleted: 0, page: 1, limit: 5 }).catch(() => undefined),
+ ])
+ if (!mounted) return
+ if (siteRes) setSite(siteRes)
+ setBanners(Array.isArray(adRes) ? adRes : ((adRes as any)?.list || []))
+ const topNavs =
+ siteRes?.topNavs && siteRes.topNavs.length
+ ? siteRes.topNavs
+ : (navRes || [])
+ setNavs(topNavs)
+ setArticles(artRes?.list || [])
+ } catch (e) {
+ console.error('官网首页加载失败', e)
+ } finally {
+ if (mounted) setLoading(false)
+ }
+ })()
+ return () => {
+ mounted = false
+ }
+ }, [])
+
+ const bannerSlides = banners.flatMap((b) =>
+ b.imageList && b.imageList.length
+ ? b.imageList.map((img, i) => ({ key: `${b.adId}-${i}`, src: (img as any).url || '' }))
+ : b.image
+ ? [{ key: `${b.adId}-0`, src: b.image }]
+ : []
+ )
+
+ const onNavClick = (n: CmsNavigation) => {
+ if (n.path) {
+ Taro.navigateTo({ url: n.path.startsWith('/') ? n.path : `/${n.path}` })
+ } else if (n.children && n.children.length) {
+ Taro.navigateTo({ url: `/official/article?categoryId=${n.navigationId}` })
+ }
+ }
+
+ return (
+
+ {/* 顶部品牌栏 */}
+
+ {site?.websiteLogo ? (
+
+ ) : null}
+
+ {site?.websiteName || '企业官网'}
+
+
+
+
+ {/* Banner 轮播 */}
+ {bannerSlides.length > 0 && (
+
+ {bannerSlides.map((s) => (
+
+
+
+ ))}
+
+ )}
+
+ {/* 栏目导航宫格 */}
+ {navs.length > 0 && (
+
+
+ {navs.map((n) => (
+ onNavClick(n)}
+ >
+
+ {(n.icon as any) || '•'}
+
+ {n.title}
+
+ ))}
+
+
+ )}
+
+ {/* 资讯动态 */}
+
+
+
+ {articles.length > 0 ? (
+ articles.map((a) => )
+ ) : (
+
+
+ {loading ? '加载中...' : '暂无资讯'}
+
+
+ )}
+
+
+
+ {/* 留言咨询 CTA */}
+
+ Taro.navigateTo({ url: '/official/message' })}
+ >
+ 📩 留言咨询
+
+
+
+
+
+
+ )
+}
+
+export default OfficialIndex
diff --git a/src/official/message/index.tsx b/src/official/message/index.tsx
new file mode 100644
index 0000000..e978a86
--- /dev/null
+++ b/src/official/message/index.tsx
@@ -0,0 +1,111 @@
+import React, { useState } from 'react'
+import { View, Text, Input, Textarea } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { submitCmsContactLead } from '@/api/official'
+import NavBar from '@/components/NavBar'
+
+definePageConfig({
+ navigationBarTitleText: '留言咨询',
+})
+
+interface FormState {
+ name: string
+ phone: string
+ company: string
+ need: string
+}
+
+const Message: React.FC = () => {
+ const [form, setForm] = useState({ name: '', phone: '', company: '', need: '' })
+ const [submitting, setSubmitting] = useState(false)
+
+ const set = (k: keyof FormState, v: string) =>
+ setForm((prev) => ({ ...prev, [k]: v }))
+
+ const submit = async () => {
+ if (!form.name.trim()) {
+ Taro.showToast({ title: '请填写称呼', icon: 'none' })
+ return
+ }
+ if (!/^1\d{10}$/.test(form.phone.trim())) {
+ Taro.showToast({ title: '请填写正确的手机号', icon: 'none' })
+ return
+ }
+ setSubmitting(true)
+ try {
+ await submitCmsContactLead({ ...form, source: 'miniapp' })
+ Taro.showToast({ title: '提交成功,我们会尽快联系您', icon: 'success' })
+ setTimeout(() => Taro.navigateBack(), 1200)
+ } catch (e: any) {
+ Taro.showToast({ title: e?.message || '提交失败', icon: 'none' })
+ } finally {
+ setSubmitting(false)
+ }
+ }
+
+ return (
+
+
+
+
+ set('name', v)} />
+ set('phone', v)}
+ />
+ set('company', v)} />
+
+ 需求描述
+
+
+
+
+ {submitting ? '提交中...' : '提交留言'}
+
+
+
+
+ )
+}
+
+function Field({
+ label,
+ placeholder,
+ value,
+ onInput,
+ type,
+}: {
+ label: string
+ placeholder?: string
+ value: string
+ onInput: (v: string) => void
+ type?: 'text' | 'number'
+}) {
+ return (
+
+ {label}
+ onInput((e.detail as any).value)}
+ />
+
+ )
+}
+
+export default Message
diff --git a/src/official/mine/index.tsx b/src/official/mine/index.tsx
new file mode 100644
index 0000000..fd14d8c
--- /dev/null
+++ b/src/official/mine/index.tsx
@@ -0,0 +1,66 @@
+import React, { useState, useEffect } from 'react'
+import { View, Text, ScrollView } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { getCmsWebsiteSiteInfo, pageCmsContactLead } from '@/api/official'
+import type { CmsWebsite } from '@/api/official'
+import OfficialTabBar from '../components/OfficialTabBar'
+import NavBar from '@/components/NavBar'
+
+definePageConfig({
+ navigationBarTitleText: '我的',
+})
+
+const Mine: React.FC = () => {
+ const [site, setSite] = useState()
+ const [leadCount, setLeadCount] = useState(0)
+
+ useEffect(() => {
+ getCmsWebsiteSiteInfo()
+ .then((s) => setSite(s))
+ .catch(() => {})
+ pageCmsContactLead({ page: 1, limit: 1 })
+ .then((r) => setLeadCount(r?.count || 0))
+ .catch(() => {})
+ }, [])
+
+ const menus = [
+ { label: '我的留言', value: leadCount ? `${leadCount} 条` : '暂无', url: '/official/message' },
+ { label: '关于我们', url: '/official/about' },
+ { label: '留言咨询', url: '/official/message' },
+ ]
+
+ return (
+
+
+
+
+
+ {(site?.websiteName || '官').slice(0, 1)}
+
+
+
+ {site?.websiteName || '企业官网'}
+
+ 企业账号
+
+
+
+
+ {menus.map((m) => (
+ Taro.navigateTo({ url: m.url })}
+ >
+ {m.label}
+ {m.value || '›'}
+
+ ))}
+
+
+
+
+ )
+}
+
+export default Mine
diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx
index 23d3769..0d57a25 100644
--- a/src/pages/index/index.tsx
+++ b/src/pages/index/index.tsx
@@ -280,6 +280,18 @@ const IndexPage: React.FC = () => {
)}
)}
+ {/* 企业官网入口 */}
+ Taro.navigateTo({ url: '/official/index' })}
+ >
+
+ 企业官网
+ 了解我们 · 资讯动态 · 留言咨询
+
+ 进入 ›
+
+
{/* 轮播图:有数据才显示,为空则不渲染 */}
{bannerSlides.length > 0 && (
diff --git a/tailwind.config.js b/tailwind.config.js
index 45d1a1d..80f534a 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -15,7 +15,20 @@ module.exports = {
700: '#0369a1',
800: '#075985',
900: '#0c4a6e',
- }
+ },
+ // 官网(企业官网展示端)品牌色,统一设计 token
+ brand: {
+ 50: '#EAF2FB',
+ 100: '#CFE2F6',
+ 200: '#A6C8EC',
+ 300: '#6FA8DE',
+ 400: '#3D86CE',
+ 500: '#1E6BB8',
+ 600: '#185FA5',
+ 700: '#12518C',
+ 800: '#0E4070',
+ 900: '#0A2E50',
+ },
}
},
},