运营中心 · 小改版设计规范
基于 master 分支,新增「商品」和「计价」两个原型模块(共 9 个页面), 主题色由橙 #FF921C 切换为蓝 #4362FF(与其他蓝色产品对齐), 统一侧栏图标风格(codesign → 恐龙图标库 duotone), 对齐公司设计规范的色彩 Token 体系。本页用于前端交接,记录所有改动点。
色彩规范
全局色彩通过 config/theme.ts 注入 AntD ConfigProvider,
以 CSS 变量形式输出(前缀 --alaya-*),全项目共享。
主题色 · Primary
品牌主色 #4362FF,按钮、链接、选中态、菜单激活态。本次改版从橙 #FF921C 切换到蓝色,与其他蓝色产品对齐。
中性色 · Gray
10 阶灰色,全部文字色、边框色、填充色、背景色都从此推导。
辅助色 · Orange 原主色 · 保留供 warning 状态色使用
原主色橙色降级为辅助色。状态色(待审核、待支付等)若需暖色调从此选取,不要新增其他色族。
文字层级
文字色严格使用 语义层变量(如 colorText、colorTextSecondary),
而不是直接引用 gray-10、gray-8 等调色板层级。
语义变量
边框、填充、背景的语义层级映射,确保改版时能从单一来源调整。
边框 · Border
填充 · Fill
背景 · Background
间距 Spacing
全部使用 AntD 标准 token(与 Figma 设计稿一致)。
基础尺寸 sizeUnit: 4 + sizeStep: 4,输出 11 档 Size.Base 阶梯。
Padding / Margin 都是 Base 的别名引用,外加 Content Padding / Control Padding 两组语义专用。
不要自己造 spacing* 自定义 token,组件直接消费 AntD CSS 变量。
Size.Base · 基础阶梯(11 档)
所有 Padding/Margin 都引用此层数值。CSS 变量 --alaya-size-*。
--alaya-size-xxs--alaya-size-xs--alaya-size-sm--alaya-size--alaya-size-md--alaya-size-lg--alaya-size-xl--alaya-size-xxl--alaya-size-xxxl--alaya-size-xxxxl--alaya-size-xxxxxlPadding / Margin(Base 别名)
| Token | 值 | 引用 | 用途 |
|---|---|---|---|
paddingXXS / marginXXS | 4 | sizeXXS | 极小间距 |
paddingXS / marginXS | 8 | sizeXS | 按钮 icon-文字、Space size 默认 |
paddingSM / marginSM | 12 | sizeSM | 表格单元格垂直、小尺寸 padding |
padding / margin | 16 | size | 卡片内边距、表单项间距、模块之间 |
paddingMD / marginMD | 20 | sizeMD | — |
paddingLG / marginLG | 24 | sizeLG | 大尺寸内边距 |
paddingXL / marginXL | 32 | sizeXL | — |
paddingXL2 / marginXXL | 40 | sizeXXL | 大块内容间距 |
paddingXL3 / marginXXXL | 80 | sizeXXXXL | 章节级间距 |
paddingXL4 | 120 | sizeXXXXXL | — |
Content Padding(内容专用)
内容区域专用 padding,页面水平内边距用 paddingContentHorizontalLG,标题区垂直用 paddingContentVertical。
| Token | 值 | 用途 |
|---|---|---|
paddingContentHorizontal | 16 | 内容水平 padding |
paddingContentHorizontalLG | 24 | 页面水平内边距 |
paddingContentHorizontalSM | 16 | 内容水平 SM |
paddingContentVertical | 12 | 标题区垂直 padding |
paddingContentVerticalLG | 16 | 内容垂直 LG |
paddingContentVerticalSM | 8 | 内容垂直 SM |
Control Padding(控件专用)
| Token | 值 | 用途 |
|---|---|---|
controlPaddingHorizontal | 12 | 输入框/按钮内水平 padding |
controlPaddingHorizontalSM | 8 | 小尺寸控件水平 |
使用示例
// DO:直接用 AntD 标准 CSS 变量(与 Figma 一致) .my-page { padding: 0 var(--alaya-padding-content-horizontal-lg); /* 24 */ } .my-section + .my-section { margin-top: var(--alaya-margin); /* 16 */ } .my-table-cell { padding: var(--alaya-padding-sm) var(--alaya-padding); /* 12 16 */ } // ❌ 禁止:硬编码像素 .my-page { padding: 0 24px; } // ❌ 禁止:自造 spacing* 语义 token // 不要在 theme.ts 里加 spacingPagePaddingX 之类的,AntD 标准命名已经有对应 token
paddingContentHorizontalLG(24)
③ 标题区垂直 → paddingContentVertical(12)
④ 模块之间垂直间距 → margin(16)
⑤ 永远不要硬编码像素
DinoIcons · 恐龙图标库
24 个 duotone(双色)风格 SVG 图标,统一替换原 codesign iconfont 实现侧栏图标风格。
通过 { ReactComponent } inline SVG 方式渲染,颜色跟随 currentColor,
默认 colorTextTertiary,菜单选中/hover 跟随 colorPrimary。
默认状态 · gray-6
使用方式
// 1. 在 route config 中使用 dino-* 字符串 { name: '商品', icon: 'dino-bag-shopping', path: '/ops/misc/commodity', } // 2. app.tsx 的 menuDataRender 自动转换为 React 组件 menuDataRender(menuData) { const patchDinoIcons = (items) => items.map((item) => { if (typeof item.icon === 'string' && item.icon.startsWith('dino-')) { item.icon = React.createElement(dinoIconMap[item.icon]); } return item; }); return patchDinoIcons(menuData); }
顶部导航栏
基于 ProLayout 顶部 Header,layout: 'mix' + splitMenus: true 模式:
一级菜单在 header(横向)、子菜单在 sidebar(纵向)。
左侧 Logo + 平台名,中部一级菜单,右侧操作区(Locale / Avatar)。
本次改版按 Figma 把所有硬编码值改成 AntD token 引用。
完整效果
开启右侧「Inspect」浮层按钮后 hover 任意元素查看具体 token / 尺寸。
规格(全部走 AntD token,禁止硬编码)
controlHeightLG = 40 · 原 48pxcolorBgHeader · #FFFFFFfontSizeLG = 16colorTextHeading · 原 #333 硬编码display: flex + alignItems: centermarginXS = 8 · 原 10 非 AntD scalepadding = 16 · 每个菜单项左右colorPrimary + 底部 2px 主色横线colorPrimary,无背景变化margin = 16 · 操作项之间config/defaultSettings.ts 设置 layout: 'mix' + splitMenus: true →
路由配置中第一层菜单(如「费用中心」「综合中心」)渲染在 header 顶部,
点击后该模块的子菜单(如「账户管理」「订单管理」)才出现在左侧 sidebar。
实际代码(src/app.tsx)
logo: ( <div style={{ display: 'flex', alignItems: 'center' }}> <img src={AlayaNewLogo} style={{ height: 'var(--alaya-control-height-lg)', /* 40 */ }} /> <p style={{ fontSize: 'var(--alaya-font-size-lg)', /* 16 */ marginLeft: 'var(--alaya-margin-xs)', /* 8 */ color: 'var(--alaya-color-text-heading)', marginBottom: 0, fontWeight: 500, }}> 运营平台 </p> </div> )
fontSize: 16 / marginLeft: 10 / color: '#333' / fontWeight: 450 都是硬编码或非 AntD 标准值,本次全部改为 token 引用。
内容区标题 + Alert
基于自定义 PageContainer(包裹 ProLayout PageContainer),
提供主标题(来自路由 name)、副标题、右侧操作区、可选 Alert 警告。
本次改版去除所有内联硬编码像素,全部走 AntD CSS 变量,样式抽到 pageContainer/index.less。
一级页面(列表/概览)
backIcon={false},无返回按钮。标题区是独立白底块,Alert / 内容容器在下方灰底区。
一级页面标题
二级页面(详情/编辑)
默认带返回按钮(不传 backIcon 即生效),点击返回上一级路由。
二级页面标题
可选元素
在一级或二级形态上叠加,按业务需要选用。
页面标题
副标题描述文字页面标题
规格
paddingContentHorizontalLG = 24paddingContentVertical = 12margin = 16fontSizeLG = 16 / 500 / colorTextcontrolHeightSM = 24×24paddingXS paddingSM = 8 12marginXXS = 4margin = 16Alert 4 种类型(设计规范定义)
底色 / 边框 / 图标走 设计规范(公司网站设计规范.txt)里 colorXxxBg / colorXxxBorder / colorXxx 三层 token。Info 跟随我们自定义的主色蓝;Success/Warning/Error 复用规范里的 Green/Gold/Red 色板。
Alert 用法
// 直接用 AntD 官方 Alert,不要包装 import { Alert } from 'antd'; <Alert type="info" showIcon message="提示信息" /> <Alert type="success" showIcon message="操作成功" /> <Alert type="warning" showIcon message="请注意" /> <Alert type="error" showIcon message="操作失败" /> // PageContainer.alertProps 仅承载页面级注意事项,type 在组件层硬编码 info(不可改) <PageContainer alertProps={{ description: '状态流转:内测 → 公测 → 运营 → 已下线' }} />
使用方式
// PageContainer 自定义封装:src/components/pageContainer/index.tsx import PageContainer from '@/components/pageContainer'; <PageContainer subTitle="管理客户透支额度规则" extra={[ <Button>导出</Button>, <Button type="primary">新建规则</Button>, ]} alertProps={{ /* type 在 pageContainer 层固定 info,不暴露;这里只给文案 */ description: '设置了透支规则的客户...', }} > <AlayaProTable ... /> </PageContainer>
· 外层白底块兜底:
:global(.ant-pro-page-container-warp-page-header) 强制 background: var(--alaya-color-bg-container),避免云端 mfCloud 主题没设白底导致与下方 layout 灰底糊一起。· 白底块下方 16px 间距:同选择器加
margin-block-end: var(--alaya-margin)(必须放外层 wrapper 上,内层 .ant-page-header 撑不开)。· 主标题字号 16/24/500:覆盖 AntD PageHeader 默认 24,对齐 Figma。
· 返回按钮 size 走 token:
var(--alaya-control-height-sm) = 24。· ⏸ Alert 渲染逻辑保持 master 不变:图标 14、padding 8 12、margin-bottom 16 全部内联 style(必须 inline 才能压过 AntD
.ant-alert-with-description 默认值),type="info" 硬编码。Alert 应用层规则见下一节《Alert 应用规约》。
Alert 应用规约
列表页标题下「那一行字」到底该不该写、写什么,不只是前端样式问题,更是产品文案规约。
现状是同一种"页面级文案"被两个 API(alertProps 和 header.subTitle)混用,
且 PM 写文案时**没有区分模块描述和 Alert 提示的语义**。本节给 PM 一套判定规则,给前端一份待清洗清单。
统一规则:所有页面级 Alert(不论是规则说明 info 还是动态告警 warning)一律走 PageContainer.alertProps,渲染到标题白底块内。type 由业务传值,颜色和图标自动跟随。
核心判定:模块描述 vs Alert 提示
| 维度 | 模块描述 | Alert 提示 |
|---|---|---|
| 回答的问题 | 这个页面是什么 | 用这个页面要知道什么 |
| 内容性质 | 介绍功能(CRUD 同义反复) | 注意事项 / 业务规则 / 数据特性 / 警告 / 操作前提 |
| 与标题关系 | 同义反复(标题已说明) | 标题不能传达 |
| 用户价值 | 看完 = 没看 | 影响判断 / 决策 |
| 例子 | "查看和管理客户账户算力包" "记录用户在系统中的所有操作过程和结果" |
"账单明细数据相对于实际费用消耗会有延迟" "状态流转:内测 → 公测 → 运营 → 已下线" |
| 处理建议 | 不写(标题已经够了) | 用 PageContainer.alertProps |
type · 颜色 · 场景
Alert 不论何种类型,位置统一(标题白底块内)。颜色 / 图标按 type 自动匹配(图标在 pageContainer 里按 type 映射)。
| type | 颜色 token | 使用场景 / 例子 |
|---|---|---|
| info(默认) | colorInfo(蓝) | 静态规则说明、数据特性、操作前提 例:「状态流转:内测 → 公测 → 运营 → 已下线」「分层定价规则」 |
| warning | colorWarning(Gold) | 动态业务告警 / 风险提醒 / 仅异常时显示 例:「底层资源告警:1 个算力中心已下线」「3 张账单超期未支付」 |
| success | colorSuccess(Green) | 不在 Alert 范畴;操作成功用 message.success() |
| error | colorError(Red) | 不在 Alert 范畴;操作失败用 message.error() 或 Result |
代码实现
// 静态 info 规则说明(默认 type) <PageContainer alertProps={{ description: '状态流转:内测 → 公测 → 运营 → 已下线' }} /> // 动态 warning 业务告警(条件渲染:异常时才有 description) <PageContainer alertProps={hasResourceAlert ? { type: 'warning', description: `底层资源告警:${...}`, action: <a>查看影响明细</a>, {/* 右侧操作(可选) */} } : undefined} />
全项目盘点(15 处)
截至 2026-05-08,所有列表页头部含文案的 15 处实例分类如下(不含商品管理 warning 告警 1 处)。全部走统一 alertProps。
留 /
删 /
待 PM 复核
。每条都标注了菜单位置,方便对照页面查看。
| 菜单位置 | 组件 | 当前 API | 文案 / 性质 | 动作 |
|---|---|---|---|---|
| A. ALERT — 含信息量,应保留 | ||||
| 综合中心 → 计价 → AIDC 定价 | pricing/AidcList | alertProps | 状态流转:内测 → 公测 → 运营 → 已下线 业务规则,标题不能传达 | 保留 |
| 综合中心 → 商品 → 套餐包管理 | commodity/BundleList | alertProps | DEDUCTION 抵扣包 vs DCU_PACK 算力包… 枚举类型区别 | 保留 |
| 综合中心 → 计价 → 计量项管理 | pricing/MeterList | alertProps | 分层定价:基准单价 + DCU + 系数 计费逻辑 | 保留 |
| 费用中心 → 账单管理 → 账单明细 | bill/BillList | alertProps | 账单明细数据相对于实际费用消耗会有延迟 数据延迟提示 | 保留 |
| 综合中心 → 营销管理 → 算力兑换 | voucher/VoucherList | subTitle | 新建和管理兑换码…兑换后转为算力包 业务流程 | 转 alertProps |
| 费用中心 → 账单管理 → 手工账单 (hideInMenu,仅 bsmAdmin) | bill/HandmadeBill | alertProps | 请下载《手工计量》模板… 含交互按钮 | 保留 |
| B. 待 PM 复核 — 文案语义未审 | ||||
| 费用中心 → 账单管理 → 月度账单 | bill/BillMonth | alertProps | 多段条件渲染(含 i18n) | PM 复核 |
| 费用中心 → 账单管理 → 月结算单 | bill/BillSettlement | alertProps | i18n 短句 | PM 复核 |
| 费用中心 → 导出记录 | bill/Export | alertProps | i18n 短句 | PM 复核 |
| 综合中心 → 营销管理 → 算力透支 | overdraft | alertProps | i18n 短句 | PM 复核 |
| C. 模块描述 — CRUD 同义反复,建议删除 | ||||
| 综合中心 → 客户管理 → 企业管理 | org/OrgList | subTitle | 本平台支持多客户管理。可以创建多个客户…(60+ 字 CRUD 废话) | 删除 |
| 综合中心 → 系统设置 → 操作日志 | log/LogList | subTitle | 记录用户在系统中的所有操作过程和结果 | 删除 |
| 费用中心 → 收支管理 → 现金收支 | account/CashTrans | subTitle | 查看和管理客户账户现金收支明细 | 删除 |
| 费用中心 → 收支管理 → 算力收支 | account/DcuTransList | subTitle | 查看和管理客户账户DCU收支明细 | 删除 |
| 费用中心 → 算力包管理 | package/List | subTitle | 查看和管理客户账户算力包 | 删除 |
文案标点:句末统一不带句号
不论文案是完整陈述句、祈使句,还是图示型规则——所有 alert 末尾一律不加句号。
1. 一致性优先:图示型规则(如 AidcList "状态流转:内测 → 公测 → 运营 → 已下线")末尾加 "。" 视觉别扭。 若用"完整句加 / 图示型不加"的条件规则,相当于让 PM 每写一条都要做一次判断,**规则成本高且容易破例**。 统一不加 → 规则只有一条,机械执行不出错。
2. 业界惯例:Material Design / Apple HIG / AntD 官方文档示例中,UI 提示类(alert / tooltip / hint / 表单帮助文字)普遍不带终结标点。 Alert 不是正文段落,本身就是一个有边界的视觉块(icon + 蓝底),不需要标点收口。
3. 视觉重量:Alert 高度只有 30 px,单行短句加句号会让句尾"压"住一个小黑点,与轻量提示气质不符。
4. i18n 友好:英文环境下 "..." 和 "...." 句末标点逻辑与中文不一致。统一不加,多语言切换时不需要为标点再做适配。
下一步动作
· 视觉方案确定 —— Alert 移入 PageHeader.footer(与标题同处白底块)+ 去除描边。本节展示的就是新视觉。
· 组件层规则收口 ——
type 硬编码 info,不暴露给业务(避免 PM 滥用 warning/error)。后续小迭代待办(需 PM 协同):
1. PM 侧 —— 拿上面【全项目盘点】这张表逐条 review,确认每条是删除、保留、还是补新的。
2. 前端侧 —— 删除 5 条「模块描述」性质的
subTitle;把 1 条 subTitle(VoucherList)转成 alertProps。3. 文案标点统一 —— 把 9 条现存 alert 末尾的"。"全部去掉(PM 可以一次性提 issue 给翻译/i18n 团队)。
4. 组件侧(可选) —— 评估是否在
pageContainer 里彻底**移除 subTitle API 入口**,让 PM 想填废话也没地方填,靠组件强制收口语义。
FAQ
都不用
PageContainer.alertProps。· 成功 →
message.success() toast· 失败 →
message.error() 或 Result 组件· 风险确认(删除不可恢复等)→
Modal.confirm· 表单字段校验 → Form 自带 errorMessage
PageContainer.alertProps 只承载页面级、静态、规则性的提示。Q: 我的 alert 文案超过 2 行了能写吗?
说明这条提示已经超出"一句话注意事项"的范畴,应该:
· 拆分成多条短句的列表
· 或改成「使用说明」按钮,点开 Drawer/Modal 看详细规则
不要在 alert 里堆长文。
Q: PageContainer.alertProps 的 type 可以传哪些值?
'info'(默认)/ 'warning'。· info → 静态规则说明(蓝)
· warning → 动态业务告警(黄),通常配合条件渲染(仅异常时传 description)
success / error 不在 Alert 范畴 —— 用
message.success() / Modal.error() / Result。Q: 业务告警(如"3 张账单超期")也走 alertProps 吗?
是。统一规则:所有页面级 Alert 都走
alertProps,传 type: 'warning' 即可。条件渲染 `description` 即可控制"仅异常时显示"。Q: 告警 Alert 右侧能放"查看明细"按钮吗?
可以,传
action 给 alertProps:alertProps={{ type: 'warning', description: '...', action: <a>查看影响明细</a> }}AntD Alert 的
action 槽位会渲染在右侧。
新增路由
所有页面均使用 mock 数据,前端接入时需替换为真实 API。
商品模块 · /ops/misc/commodity
| 路由 | 页面组件 | 说明 |
|---|---|---|
/ops/misc/commodity | — | 一级菜单,icon: dino-bag-shopping |
/ops/misc/commodity/product | commodity/ProductList | 产品管理列表(Drawer 600px 新建/编辑) |
/ops/misc/commodity/list | commodity/CommodityList | 商品管理列表(卡片+表格双视图) |
/ops/misc/commodity/list/create | commodity/CommodityCreate | 新建商品(4 步 Steps 独立页面) |
/ops/misc/commodity/list/:action/:id | commodity/CommodityCreate | 编辑商品 |
/ops/misc/commodity/bundle | commodity/BundleList | 套餐包管理(Drawer 640px 新建/编辑) |
计价模块 · /ops/misc/pricing
| 路由 | 页面组件 | 说明 |
|---|---|---|
/ops/misc/pricing | — | 一级菜单,icon: dino-coins |
/ops/misc/pricing/aidc | pricing/AidcList | AIDC 定价(Drawer 520px) |
/ops/misc/pricing/meter | pricing/MeterList | 计量项管理(Drawer 640px 编辑 + 定价) |
/ops/misc/pricing/billing | pricing/BillingMode | 计费模式(Drawer 560px + 绑定商品 Modal) |
侧栏图标替换 · 14 项
| 菜单 | 旧 icon (codesign) | 新 icon (恐龙) | |
|---|---|---|---|
| 账户管理 | icon-yy-zhanghuguanli | → | dino-wallet |
| 收支管理 | icon-yy-DCUshouzhimingxi | → | dino-invoice-dollar |
| 订单管理 | icon-yy-dingdanguanli | → | dino-receipt |
| 合同管理 | icon-yy-hetongguanli | → | dino-file-check |
| 账单管理 | icon-yy-zhangdanguanli | → | dino-bank-statement |
| 算力包管理 | icon-yy-suanlibaoguanli | → | dino-box |
| 导出记录 | icon-yy-daochujilu | → | dino-file-download |
| 会话监控 | icon-yy-mingchengziyuanjianqiang | → | dino-clipboard-list |
| 客户管理 | icon-yy-yonghuguanli | → | dino-users |
| 商品管理 | icon-yy-shangpinguanli | → | dino-box-check |
| 营销管理 | icon-yy-duihuanmaguanli | → | dino-marketing-target |
| 权限管理 | icon-yy-renyuanquanxianguanli | → | dino-shield-check |
| 消息管理 | icon-yy-gonggaotongzhi | → | dino-notification |
| 系统设置 | icon-yy-biaoqian | → | dino-gear |
icon-yy-xxx 格式并删除 DinoIcons 组件 + SVG 文件。
改动文件清单
合并前请重点 review 以下文件。
新增文件
| 文件路径 | 说明 |
|---|---|
src/pages/commodity/ProductList/index.tsx | 产品管理列表 |
src/pages/commodity/CommodityList/index.tsx | 商品管理列表(双视图) |
src/pages/commodity/CommodityCreate/index.tsx | 新建/编辑商品 |
src/pages/commodity/CommodityCreate/index.less | 商品创建页样式 |
src/pages/commodity/BundleList/index.tsx | 套餐包管理 |
src/pages/pricing/AidcList/index.tsx | AIDC 定价 |
src/pages/pricing/MeterList/index.tsx | 计量项管理 |
src/pages/pricing/BillingMode/index.tsx | 计费模式 |
src/components/DinoIcons/index.tsx | 恐龙图标组件(24 个) |
src/components/DinoIcons/index.global.less | 图标颜色 + 菜单状态样式 |
src/assets/icons/icon*.svg × 24 | duotone 风格 SVG 资源 |
已有文件修改
| 文件 | 改动说明 |
|---|---|
config/route/platformRoutes/misc.ts | 新增商品、计价模块路由 + 14 项图标替换 |
config/route/platformRoutes/cost.ts | 费用中心 8 项图标替换 |
src/app.tsx | 导入 dinoIconMap 并在 menuDataRender 递归替换;底部折叠按钮(menuFooterRender);隐藏默认折叠按钮;顶部 logo 高度 48px → 40px(对齐 Figma),logo 容器加 alignItems: 'center' 让图片和文字水平居中 |
config/theme.ts | 主题色切换:colorPrimary #FF921C 橙 → #4362FF 蓝(与其他蓝色产品对齐);菜单选中背景 secondaryOrange1 → blue1;对齐公司设计规范:gray/blue/orange 色板、文本色、边框色、填充色、背景色 |
src/components/DinoIcons/index.global.less | 图标默认色 colorTextTertiary;选中/hover 跟随主色;下拉箭头 colorTextQuaternary;菜单去过渡 + 子菜单展开动画 0.15s |
已知遗留问题(不在本次改版范围)
主题色已通过 config/theme.ts 切换到蓝色,AntD 内置组件 + 用 var(--alaya-*) 的自定义样式都自动跟随。
但项目中仍有 十几处硬编码 #FF921C 橙色,未走主题系统:
| 文件 | 用途 | 建议 |
|---|---|---|
public/scripts/loading.js | 加载页背景色 | 改为 --alaya-color-primary |
src/constants/order.ts | 订单状态文字色 | 改用 colorWarning 语义 token |
src/constants/notice.ts | "待发布" 状态文字色 | 改用 colorWarning |
src/constants/payOrder.ts | 支付状态文字色 | 改用 colorWarning |
src/components/ChangeLan/index.less | 语言切换器 hover 色 | 改为 --alaya-color-primary |
src/components/CustomPayModal/index.tsx | 弹窗强调色 | 改为 --alaya-color-primary |
var(--alaya-color-primary) 或对应语义 token,不在本次小改版范围。
改动记录
本节按日期顺序记录 design-guo-minor 分支所有改动,**给前端同事 / PM 接手时快速对照"改了哪、为什么改、有什么风险"**。 每条改动包含:背景 / 涉及文件 / 风险点。
2026-05-01 ~ 02 · 接入 mfCloud 云端共享主题
前端架构师告知:Alaya 系产品(bp + ops + 其他)的主题切换标准做法是接入云端共享 ThemeProvider,CDN 加载,多产品同源。本地 config/theme.ts 改为 fallback。
| 文件 | 改动 |
|---|---|
src/app.tsx | 引入 ThemeProvider, { themeConfig } from 'mfCloud/ThemeProvider';memo.theme = themeConfig(远程加载);rootContainer 用 <ThemeProvider> 包裹;本地保留 colorBgMenuItemSelected: blue1 一项 override 兜底 |
config/theme.ts | 改为构建期 fallback:gray 色板 / 文本色 / 边框色 / 填充色 / 背景色全部对齐公司设计规范;主色 #FF921C 橙 → #4362FF 蓝;间距 spacing 统一走 AntD 标准 token,不自造 spacing* |
config/env.js | envName: 'dev02' → 'unite'(dev02 环境无法连接,统一走 unite 测试环境 https://catalog.unite.zetyun.cn) |
mfCloud/ThemeProvider 是远程模块,TS 类型缺失,需 @ts-ignore。云端 mfCloud 暂未配置 colorBgMenuItemSelected,本地 override 兜底;云端补齐后删。
2026-05-02 · 顶部导航栏全部走 AntD token
src/app.tsx 顶部导航栏原有大量硬编码(logo 高度 48 / 标题色 #333 / marginLeft 10 / fontWeight 450 等非 AntD scale),全部 token 化。
| 字段 | 改前 | 改后 |
|---|---|---|
| logo 高度 | 48 硬编码 | var(--alaya-control-height-lg) = 40 |
| 标题字号 | 字面量 | var(--alaya-font-size-lg) = 16 |
| 标题颜色 | #333 | var(--alaya-color-text-heading) |
| logo 与标题间距 | 10px(非 AntD scale) | var(--alaya-margin-xs) = 8 |
| 标题 font-weight | 450(非标准) | 500 |
| logo 容器对齐 | 默认 | display: flex; alignItems: center 让图片与文字水平居中 |
2026-05-02 ~ 03 · 侧栏图标全局替换(codesign iconfont → 恐龙图标库)
原侧栏菜单用 codesign 上传的 iconfont(icon-yy-xxx)。前端要求改用恐龙图标库(duotone 风格),通过本地 SVG + DinoIcons 组件承载。后期再统一上传 codesign 生成 iconfont 替换回。
| 文件 | 改动 |
|---|---|
新建 src/components/DinoIcons/index.tsx | 组件本体:根据 name prop 渲染对应 SVG(用 <use href="#i-xxx"/> 引用 sprite) |
新建 src/components/DinoIcons/index.global.less | 默认色 colorTextTertiary(gray6);选中/hover 跟随菜单文字色;下拉箭头色 colorTextQuaternary(gray5) |
新建 src/assets/icons/ 30+ SVG 切图 | 恐龙库 duotone 风格本地 SVG(iconWallet / iconBox / iconCoins / iconBagShopping 等),全部用 currentColor,受组件层主题色控制 |
替换 src/assets/icons/iconNotification.svg | 用恐龙库 communication/duotone/envelope-notification.svg 替换原图,并把 #fff 全替换为 currentColor |
config/route/platformRoutes/cost.ts | 费用中心 8 个菜单 icon 字段全替(账户/收支/订单/合同/账单/算力包/导出记录/会话监控) |
config/route/platformRoutes/misc.ts | 综合中心 8 个菜单 icon 字段全替(客户/商品/营销/权限/消息/系统设置 + 新增商品/计价) |
src/app.tsx | 导入 dinoIconMap,menuDataRender 中递归把 dino-* 字符串替换为 <DinoIcon /> 组件 |
src/assets/icons/ 下 SVG 上传 CoDesign 生成新 iconfont,届时改回 icon-yy-xxx 格式并删除 DinoIcons 组件 + 本地 SVG。
2026-05-03 ~ 05 · 商品 / 计价模块原型页面(4 步 Steps + 路由改造)
综合中心新增「商品」「计价」两个一级菜单,需要原型页面给业务方走查。商品管理是 4 步向导(15+ 字段 + 条件联动),Drawer 承载不下,改为独立页面 + Steps。
新增路由
| 路由 | 组件 | 说明 |
|---|---|---|
| 商品(icon: dino-bag-shopping) | ||
/ops/misc/commodity/product | commodity/ProductList | 产品管理列表 |
/ops/misc/commodity/list | commodity/CommodityList | 商品管理(卡片+表格双视图) |
/ops/misc/commodity/list/create | commodity/CommodityCreate | 新建(4 步 Steps 独立页) |
/ops/misc/commodity/list/:action/:id | commodity/CommodityCreate | 编辑商品 |
/ops/misc/commodity/bundle | commodity/BundleList | 套餐包管理 |
| 计价(icon: dino-coins) | ||
/ops/misc/pricing/aidc | pricing/AidcList | AIDC 定价列表 |
/ops/misc/pricing/meter | pricing/MeterList | 计量项管理 |
/ops/misc/pricing/billing | pricing/BillingMode | 计费模式 |
CRUD 模式
- ProductList · Drawer(600px) 新建/编辑 + Modal 下线
- CommodityList · 卡片/表格双视图 + 跳转独立页新建/编辑 + Modal 停售;含 Tier 2 资源告警 banner(详见下文 Alert 应用规约)
- CommodityCreate · 4 步 Steps 独立页面(ProForm + ProCard 水平布局)
- BundleList · Drawer(640px) 新建/编辑 + Modal 下线
- AidcList · Drawer(520px) 新建/编辑
- MeterList · Drawer(640px) 编辑 + 定价 Drawer + Modal 下线
- BillingMode · Drawer(560px) 新建/编辑 + Modal 绑定商品
2026-05-06 ~ 08 · PageContainer 多次迭代(核心改动)
PageContainer 是全局列表页容器,原有 3 处内联常量 + 硬编码像素,且 mfCloud 主题接入后外层白底块没了背景色(标题与下方 layout 灰底糊一起),需要重构 + 修复。
最终状态(建议前端只看这部分)
| 改动点 | 具体内容 |
|---|---|
| 新增文件 | src/components/pageContainer/index.less 承载非内联样式 |
| Alert 渲染位置 | renderAlert() 改到 header.footer(与标题同处白底块内);与标题间距 16px 走 token |
| Alert 样式 | 去掉 marginBottom(白底块自身 padding 已撑开下方)+ 去 border(白底块本身已与下方灰底有视觉边界) |
| Alert 其他 | 保持 master:图标 14/22/mr4 内联,padding 8 12 内联,type="info" 硬编码(业务侧不暴露 type 写口) |
| 主标题字号 | var(--alaya-font-size-lg) = 16,行高 24,weight 500(覆盖 AntD PageHeader 默认 fontSizeHeading4=24 偏大) |
| 外层白底兜底 | :global(.ant-pro-page-container-warp-page-header) 强制 background: var(--alaya-color-bg-container) + margin-block-end: var(--alaya-margin) (16) |
| 返回按钮 | var(--alaya-control-height-sm) = 24×24;font-size 12 字面量保留(AntD 没暴露 fontSizeSM=12 token) |
兼容性(9 个使用 alertProps 的页面)
BillMonth / HandmadeBill / BillSettlement / BillList / Export / overdraft / BundleList / AidcList / MeterList —— 业务渲染逻辑零变化,只是渲染位置从 children 区移入白底块 footer。
- HandmadeBill 内含
<DownloadBlobBtn>—— 测试通过,按钮在白底块内可正常点击下载 - BillMonth 多段条件渲染 —— 实际只渲染一行短句,无溢出风险
2026-05-07 ~ 08 · 设计规范页 design-system.html(本页)
前端 + 设计 + PM 缺一份共同对齐的"组件视觉规范 + Token 字典"。把所有 token、颜色、间距、组件状态、视觉规约整合成一个独立 HTML 页面,部署 CF Pages 给团队访问。
| 条目 | 位置 / 链接 |
|---|---|
| 源码(单文件) | /Users/dang/ops-center-web/design-system.html |
| 部署地址 | https://alaya-design-spec.pages.dev/ |
| CF Pages 项目 | alaya-design-spec |
| 部署命令 | npx wrangler pages deploy .deploy-spec --project-name alaya-design-spec --branch main --commit-dirty=true(先把 design-system.html 复制到 .deploy-spec/index.html) |
· 右侧浮层「Inspect 模式 ON/OFF」按钮
· 开启后 hover 任意
[data-spec] 元素 → 显示 spec tooltip(黑底)· 点击锚定(蓝色 outline)→ 按住 Alt + hover 另一个元素 → 画虚线测距(支持相邻和包含两种关系)
· 无锚定时 Alt + hover → 跟随光标显示
width × height
2026-05-08 · Alert 应用规约(产品 × 前端共同对齐)
Alert 在项目里有多种语义被混用:① PM 写文案时不区分"模块描述"和"alert 提示";② 同一个文案位(PageContainer)被两个 API 混用;③ 商品管理的业务告警一开始我用了独立 <Alert type="warning">,跟其他页面不统一。统一收口:所有页面级 Alert 都走 PageContainer.alertProps,type 由业务传值(info / warning),位置统一进白底块。
· 新增 section "Alert 应用规约"(核心判定 + type/颜色/场景 + 全项目盘点 + 文案标点 + FAQ)
· 盘点 15 处 info 现有文案,分 A 留 / B 待 PM 复核 / C 删 三类,含菜单位置
· 统一规则:所有 alert 走
alertProps,type 可传 info | warning,组件内按 type 自动选图标和颜色· 商品管理 warning 告警迁移:从独立
<Alert banner> → alertProps={{ type: 'warning', description: ... }},渲染到白底块内,支持右侧 action 链接("查看影响明细")· 文案标点统一不带句号,含 4 条 WHY
本节配套产出
| 文档 | 受众 / 用途 |
|---|---|
| 本设计规范页(design-system.html) | 全团队(前端 / 设计 / PM)—— 视觉规范 + 组件状态 + Token 字典 |
CHANGELOG-design-guo-minor.md(项目根) | 前端 —— 开发视角详细记录,git 提交时会跟代码一起留底 |
| Obsidian 笔记(个人) | 个人 —— 跨产品对比 / 决策回溯 / 跟其他 Alaya 产品的横向参考 |