运营中心 · 小改版设计规范

基于 master 分支,新增「商品」和「计价」两个原型模块(共 9 个页面), 主题色由橙 #FF921C 切换为蓝 #4362FF(与其他蓝色产品对齐), 统一侧栏图标风格(codesign → 恐龙图标库 duotone), 对齐公司设计规范的色彩 Token 体系。本页用于前端交接,记录所有改动点。

9
新增页面
24
恐龙图标
14
侧栏图标替换
5
已有文件改动
Design Token

色彩规范

全局色彩通过 config/theme.ts 注入 AntD ConfigProvider, 以 CSS 变量形式输出(前缀 --alaya-*),全项目共享。

主题色 · Primary

品牌主色 #4362FF,按钮、链接、选中态、菜单激活态。本次改版从橙 #FF921C 切换到蓝色,与其他蓝色产品对齐。

blue-1#F0F5FF
blue-2#E6EDFF
blue-3#BDCEFF
blue-4#94ADFF
blue-5#6B89FF
primary#4362FF
blue-7#2E44D9
blue-8#1D2CB3
blue-9#0F188C
blue-10#0A0D66

中性色 · Gray

10 阶灰色,全部文字色、边框色、填充色、背景色都从此推导。

gray-1#F8FAFC
gray-2#F1F5F9
gray-3#E1E7EF
gray-4#C8D5E5
gray-5#9EACBF
gray-6#65758B
gray-7#48566A
gray-8#344256
gray-9#0F1728
gray-10#090E1A

辅助色 · Orange 原主色 · 保留供 warning 状态色使用

原主色橙色降级为辅助色。状态色(待审核、待支付等)若需暖色调从此选取,不要新增其他色族。

orange-1#FFF7E6
orange-2#FFDFA3
orange-3#FFCC7A
orange-4#FFB752
orange-5#FF9F29
orange-old#FF921C
orange-6#FF8400
orange-7#D96900
orange-8#B35000
orange-9#8C3A00
Design Token

文字层级

文字色严格使用 语义层变量(如 colorTextcolorTextSecondary), 而不是直接引用 gray-10gray-8 等调色板层级。

colorText · gray-10
Alaya 运营中心 · 主标题文本
colorTextSecondary · gray-8
次级标题、卡片副标题
colorTextTertiary · gray-6
辅助说明、表单 placeholder、图标默认色
colorTextQuaternary · gray-5
禁用文本、菜单下拉箭头
colorPrimary · #4362FF
链接、选中态、强调文本
规范要点: 全局文字色使用语义变量,不要直接用 gray-X。当设计要调整时只改语义变量映射,全局生效,避免硬编码导致改色困难。
Design Token

语义变量

边框、填充、背景的语义层级映射,确保改版时能从单一来源调整。

边框 · Border

colorBorder
默认边框(输入框、卡片)
gray-4
colorBorderSecondary
次级边框(表格、分割)
gray-3
colorSplit
分割线、Divider
gray-2

填充 · Fill

colorFill
深填充(强调背景)
gray-4
colorFillSecondary
次级填充
gray-3
colorFillTertiary
三级填充(hover 浅底)
gray-2
colorFillQuaternary
四级填充(最浅底色)
gray-1

背景 · Background

colorBgLayout
页面外层背景
gray-2
colorBgContainer
卡片、Drawer、Modal 容器
#FFFFFF
Design Token

间距 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-*

sizeXXS
4px
--alaya-size-xxs
sizeXS
8px
--alaya-size-xs
sizeSM
12px
--alaya-size-sm
size / sizeMS
16px
--alaya-size
sizeMD
20px
--alaya-size-md
sizeLG
24px
--alaya-size-lg
sizeXL
32px
--alaya-size-xl
sizeXXL
40px
--alaya-size-xxl
sizeXXXL
48px
--alaya-size-xxxl
sizeXXXXL
80px
--alaya-size-xxxxl
sizeXXXXXL
120px
--alaya-size-xxxxxl

Padding / Margin(Base 别名)

Token引用用途
paddingXXS / marginXXS4sizeXXS极小间距
paddingXS / marginXS8sizeXS按钮 icon-文字、Space size 默认
paddingSM / marginSM12sizeSM表格单元格垂直、小尺寸 padding
padding / margin16size卡片内边距、表单项间距、模块之间
paddingMD / marginMD20sizeMD
paddingLG / marginLG24sizeLG大尺寸内边距
paddingXL / marginXL32sizeXL
paddingXL2 / marginXXL40sizeXXL大块内容间距
paddingXL3 / marginXXXL80sizeXXXXL章节级间距
paddingXL4120sizeXXXXXL

Content Padding(内容专用)

内容区域专用 padding,页面水平内边距用 paddingContentHorizontalLG,标题区垂直用 paddingContentVertical

Token用途
paddingContentHorizontal16内容水平 padding
paddingContentHorizontalLG24页面水平内边距
paddingContentHorizontalSM16内容水平 SM
paddingContentVertical12标题区垂直 padding
paddingContentVerticalLG16内容垂直 LG
paddingContentVerticalSM8内容垂直 SM

Control Padding(控件专用)

Token用途
controlPaddingHorizontal12输入框/按钮内水平 padding
controlPaddingHorizontalSM8小尺寸控件水平

使用示例

// 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
原则: ① 与 Figma 一致 = 用 AntD 标准 token,不要自造命名 ② 页面水平内边距 → paddingContentHorizontalLG(24) ③ 标题区垂直 → paddingContentVertical(12) ④ 模块之间垂直间距 → margin(16) ⑤ 永远不要硬编码像素
Component

DinoIcons · 恐龙图标库

24 个 duotone(双色)风格 SVG 图标,统一替换原 codesign iconfont 实现侧栏图标风格。 通过 { ReactComponent } inline SVG 方式渲染,颜色跟随 currentColor, 默认 colorTextTertiary,菜单选中/hover 跟随 colorPrimary

默认状态 · gray-6

钱包
dino-wallet
收支
dino-invoice-dollar
订单
dino-receipt
合同
dino-file-check
账单
dino-bank-statement
算力包
dino-box
导出记录
dino-file-download
监控
dino-clipboard-list
客户
dino-users
企业
dino-office
合作
dino-handshake
商品
dino-bag-shopping
商品管理
dino-box-check
计价
dino-coins
营销
dino-marketing-target
充值
dino-circle-dollar
优惠券
dino-coupon
礼品
dino-gift
兑换码
dino-discount-code
权限
dino-shield-check
消息
dino-notification
系统设置
dino-gear
标签
dino-hashtag
证照
dino-license

使用方式

// 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);
}
Specification · 产品 × 前端

Alert 应用规约

列表页标题下「那一行字」到底该不该写、写什么,不只是前端样式问题,更是产品文案规约。 现状是同一种"页面级文案"被两个 API(alertPropsheader.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/AidcListalertProps状态流转:内测 → 公测 → 运营 → 已下线
业务规则,标题不能传达
保留
综合中心 → 商品 → 套餐包管理commodity/BundleListalertPropsDEDUCTION 抵扣包 vs DCU_PACK 算力包…
枚举类型区别
保留
综合中心 → 计价 → 计量项管理pricing/MeterListalertProps分层定价:基准单价 + DCU + 系数
计费逻辑
保留
费用中心 → 账单管理 → 账单明细bill/BillListalertProps账单明细数据相对于实际费用消耗会有延迟
数据延迟提示
保留
综合中心 → 营销管理 → 算力兑换voucher/VoucherListsubTitle新建和管理兑换码…兑换后转为算力包
业务流程
转 alertProps
费用中心 → 账单管理 → 手工账单
(hideInMenu,仅 bsmAdmin)
bill/HandmadeBillalertProps请下载《手工计量》模板…
含交互按钮
保留
B. 待 PM 复核 — 文案语义未审
费用中心 → 账单管理 → 月度账单bill/BillMonthalertProps多段条件渲染(含 i18n)PM 复核
费用中心 → 账单管理 → 月结算单bill/BillSettlementalertPropsi18n 短句PM 复核
费用中心 → 导出记录bill/ExportalertPropsi18n 短句PM 复核
综合中心 → 营销管理 → 算力透支overdraftalertPropsi18n 短句PM 复核
C. 模块描述 — CRUD 同义反复,建议删除
综合中心 → 客户管理 → 企业管理org/OrgListsubTitle本平台支持多客户管理。可以创建多个客户…(60+ 字 CRUD 废话)删除
综合中心 → 系统设置 → 操作日志log/LogListsubTitle记录用户在系统中的所有操作过程和结果删除
费用中心 → 收支管理 → 现金收支account/CashTranssubTitle查看和管理客户账户现金收支明细删除
费用中心 → 收支管理 → 算力收支account/DcuTransListsubTitle查看和管理客户账户DCU收支明细删除
费用中心 → 算力包管理package/ListsubTitle查看和管理客户账户算力包删除

文案标点:句末统一不带句号

不论文案是完整陈述句、祈使句,还是图示型规则——所有 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

Q: 那"操作成功"、"操作失败"提示用什么?
都不用 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 右侧能放"查看明细"按钮吗?
可以,传 actionalertProps
alertProps={{ type: 'warning', description: '...', action: <a>查看影响明细</a> }}
AntD Alert 的 action 槽位会渲染在右侧。
Component

Tag 标签

统一使用 AntD Tag 组件的 color 预设值(success/error/warning/processing), 不要直接用 color="green"color="red" 等颜色名,避免与主题脱节。

语义预设

通用语义池,业务方按"成功/失败/警告/进行中/默认/品牌"语义选择,文案自填。

color效果语义场景常见文案示例
success Success 成功 / 启用 / 正常 销售中、已启用、运行中、已通过、健康、在线…
error Error 失败 / 异常 / 终止 已停售、失败、已下线、异常、已拒绝、离线…
warning Warning 警告 / 待处理 / 提醒 待审核、待支付、即将到期、风险、待确认…
processing Processing 进行中 / 加载 / 同步 处理中、同步中、构建中、上传中、计算中…
default Default 中性 / 草稿 / 已结束 草稿、已结束、未开始、归档、—
品牌强调 Brand 品牌强调 / 推荐 / 重要 VIP、推荐、新品、官方、Pro

使用示例

// DO:用语义 color 预设,文案随业务自填
<Tag color="success">销售中</Tag>
<Tag color="success">运行中</Tag>
<Tag color="warning">待审核</Tag>
<Tag color="processing">同步中</Tag>

// DON'T:硬编码颜色名 / 色值
<Tag color="green">销售中</Tag>
<Tag color="#52c41a">销售中</Tag>
选用原则: 新增状态时优先映射到现有语义池(success/error/warning/processing/default)。 不要为每个新业务状态新增专属色,避免色彩失控。
Delivery

新增路由

所有页面均使用 mock 数据,前端接入时需替换为真实 API。

商品模块 · /ops/misc/commodity

路由页面组件说明
/ops/misc/commodity一级菜单,icon: dino-bag-shopping
/ops/misc/commodity/productcommodity/ProductList产品管理列表(Drawer 600px 新建/编辑)
/ops/misc/commodity/listcommodity/CommodityList商品管理列表(卡片+表格双视图)
/ops/misc/commodity/list/createcommodity/CommodityCreate新建商品(4 步 Steps 独立页面)
/ops/misc/commodity/list/:action/:idcommodity/CommodityCreate编辑商品
/ops/misc/commodity/bundlecommodity/BundleList套餐包管理(Drawer 640px 新建/编辑)

计价模块 · /ops/misc/pricing

路由页面组件说明
/ops/misc/pricing一级菜单,icon: dino-coins
/ops/misc/pricing/aidcpricing/AidcListAIDC 定价(Drawer 520px)
/ops/misc/pricing/meterpricing/MeterList计量项管理(Drawer 640px 编辑 + 定价)
/ops/misc/pricing/billingpricing/BillingMode计费模式(Drawer 560px + 绑定商品 Modal)

侧栏图标替换 · 14 项

菜单旧 icon (codesign)新 icon (恐龙)
账户管理icon-yy-zhanghuguanlidino-wallet
收支管理icon-yy-DCUshouzhimingxidino-invoice-dollar
订单管理icon-yy-dingdanguanlidino-receipt
合同管理icon-yy-hetongguanlidino-file-check
账单管理icon-yy-zhangdanguanlidino-bank-statement
算力包管理icon-yy-suanlibaoguanlidino-box
导出记录icon-yy-daochujiludino-file-download
会话监控icon-yy-mingchengziyuanjianqiangdino-clipboard-list
客户管理icon-yy-yonghuguanlidino-users
商品管理icon-yy-shangpinguanlidino-box-check
营销管理icon-yy-duihuanmaguanlidino-marketing-target
权限管理icon-yy-renyuanquanxianguanlidino-shield-check
消息管理icon-yy-gonggaotongzhidino-notification
系统设置icon-yy-biaoqiandino-gear
后续规划: 恐龙图标后期需上传 CoDesign 生成 iconfont,届时改回 icon-yy-xxx 格式并删除 DinoIcons 组件 + SVG 文件。
Delivery

改动文件清单

合并前请重点 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.tsxAIDC 定价
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 × 24duotone 风格 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 蓝(与其他蓝色产品对齐);菜单选中背景 secondaryOrange1blue1;对齐公司设计规范:gray/blue/orange 色板、文本色、边框色、填充色、背景色
src/components/DinoIcons/index.global.less图标默认色 colorTextTertiary;选中/hover 跟随主色;下拉箭头 colorTextQuaternary;菜单去过渡 + 子菜单展开动画 0.15s
对接提醒: 所有列表页使用 mock 数据,前端接入时需:① 替换 mock 为真实 API ② 对接 CRUD 接口 ③ 确认字段名与后端一致。

已知遗留问题(不在本次改版范围)

主题色已通过 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,不在本次小改版范围。
Changelog · design-guo-minor 分支

改动记录

本节按日期顺序记录 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.jsenvName: '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
标题颜色#333var(--alaya-color-text-heading)
logo 与标题间距10px(非 AntD scale)var(--alaya-margin-xs) = 8
标题 font-weight450(非标准)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导入 dinoIconMapmenuDataRender 中递归把 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/productcommodity/ProductList产品管理列表
/ops/misc/commodity/listcommodity/CommodityList商品管理(卡片+表格双视图)
/ops/misc/commodity/list/createcommodity/CommodityCreate新建(4 步 Steps 独立页)
/ops/misc/commodity/list/:action/:idcommodity/CommodityCreate编辑商品
/ops/misc/commodity/bundlecommodity/BundleList套餐包管理
计价(icon: dino-coins)
/ops/misc/pricing/aidcpricing/AidcListAIDC 定价列表
/ops/misc/pricing/meterpricing/MeterList计量项管理
/ops/misc/pricing/billingpricing/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 绑定商品
数据状态: 所有列表页全部 mock 数据,未对接真实 API。前端接入时需 ① 替换 mock 数据为真实 API 请求;② 对接实际增删改查接口;③ 确认字段名与后端接口一致。

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 模式(Figma-like):
· 右侧浮层「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),位置统一进白底块。

详细规约请见上方《Alert 应用规约》整章。本节只列产出物:
· 新增 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 产品的横向参考
Inspect OFF