Files
aurora-admin f1fbfc2ddb
Regression / regression (push) Canceled after 0s
feat(品牌标识): 几何 K 图标(favicon/顶栏标记/theme-color) + 并行会话成果入库
## 品牌标识(本次会话)

起因:品牌此前没有任何图形标识 —— 唯一 favicon 是内联 data-URI 里的字母「A」,
那是 v2.0.0「Aurora Admin → Kole UI」改名漏掉的一处(PC 顶栏也是「A」,
移动端站已是「K」;移动端文档站则完全没有 favicon)。

- 几何:24 网格三个互不接触的笔画(竖 + 两斜),圆头描边;
  描边 2.25 → 16px 标签页尺寸下正好 1.5px = 规范原文「描边1.5px」
- 取色分两套(刻意):favicon 硬编码品牌蓝/白(渲染在浏览器标签栏,不继承 kole-dark);
  顶栏标记走 currentColor(实测暗色下自动转 rgb(20,22,28))
- 新增 theme-color 双条(light #FFFFFF / dark #1C1F26,取 --kole-color-card-bg)
- 修 site/app.js hero 标语 KOLE ADMIN → KOLE UI(改名变形残留)
- 移动端 7 个模板补 favicon(此前计数 0)

验收:门禁 9 条全 OK(site-routing/site-routes/mobile-docs/mobile-site/isolation/
theme/nav/i18n/icons);PC 回归 1464/1464 · 移动端 807/807,各连跑 8 次一致;
两端 favicon 405 字节逐字节一致;PC 站控制台错误 1→0。

## 并行会话成果(本次一并入库)

- 图标系统:2576 图标(TDesign/Element Plus,MIT)+ 11 端注入 + 5 个构建门禁工具
  + IconPreview 预览页 + ICON-SPEC.md 冻结规格
- 移动端平台:47 组件 × 6 端 + 文档站 53 页 + 隔离门禁
- PC 组件:103 个大后台组件 / 组件11 批次
- uni-app:PC 端试点 + 移动端端实现 + 真实编译验证

## 工程

- .gitignore 补 .scratch/ 与 .zcode-preexisting-*.txt(会话中间产物,实测 9.1MB,不入库)
- CHANGELOG 补品牌标识条目
- ROADMAP 登 S8-P4(品牌标识任务包 + og:image/apple-touch-icon 未做部分)
2026-09-21 10:05:48 +08:00

246 lines
8.6 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schemaVersion": 1,
"sourceKind": "authored-spec",
"provenance": "authored-in-repo",
"specFile": "spec/移动端规格.md",
"specSection": "36 · 评分 Rate",
"confidence": "high",
"slug": "mobile-rate",
"name": "评分 Rate",
"semanticTypeCandidates": [
"rate",
"star-rating",
"score-input"
],
"variantDimensions": [
{
"name": "size",
"values": [
"default",
"small"
]
},
{
"name": "allowHalf",
"values": [
"false",
"true"
]
},
{
"name": "readonly",
"values": [
"false",
"true"
]
}
],
"representativeVariants": [
{
"size": "default",
"allowHalf": "false",
"readonly": "false",
"label": "默认(整星可评分,星形 24px)"
},
{
"size": "default",
"allowHalf": "true",
"readonly": "false",
"label": "支持半星(点左半取 N-0.5 分)"
},
{
"size": "small",
"allowHalf": "false",
"readonly": "true",
"label": "行内只读展示(星形 18px,不占键盘序列)"
}
],
"anatomy": {
"rate": "根元素,一行里放进「星组 + 数值文案」",
"stars": "星组,横向排列,只负责布局",
"star": "单颗星,可点区域(原生 button),自身撑满 44px 高",
"glyph": "星形本体(视觉 24px),由灰底星 + 品牌色覆盖层叠成",
"fill": "覆盖层,宽度即该颗星的填充比例(100% 整星 / 50% 半星 / 0% 未选)",
"text": "数值文案,默认「N 分」,可由默认插槽替换"
},
"structurePatterns": {
"size": "default(星形 24px)/ small(星形 18px,行内展示用)",
"allowHalf": "false(只能取整星)/ true(允许半星)",
"readonly": "false(可评分)/ true(只读展示已有评分)"
},
"usageHints": [
"让用户对一次体验给出星级评价(商品、物流、服务),或只读展示已有的平均分",
"触屏上没有悬停预览:桌面上鼠标划过就能预告「点下去会是几分」,触屏上这个预告不存在",
"填充比例(含半星)必须直接可读,且星形本体只有 24px、热区要补到 44px 高",
"点第 N 颗星取 N 分;allowHalf=true 时点第 N 颗星的左半取 N-0.5 分、右半取 N 分",
"取值后立即触发 change 事件(回传 3.5 这类半星值也是合法输入)"
],
"doNotInvent": [
"评分的业务含义映射(如「4 分以上算好评」)与统计口径",
"拖动选分与悬停预览(触屏没有悬停,拖动容易滑错)",
"评分理由 / 标签的联动采集(由宿主另行组合)",
"异步提交与失败回滚(宿主负责)"
],
"unknowns": [
"分值是否允许与文案一一对应(如 1 分「很差」、5 分「很好」)",
"星形换用图标字体或 SVG 后填充比例的表达是否仍然一致",
"只读形态是否要显示评价条数(当前由宿主用插槽补)"
],
"interaction": [
"**取值规则**:点第 N 颗星取 N 分;allowHalf=true 时点第 N 颗星的**左半**取 N-0.5 分、**右半**取 N 分(半星只在开启该项时存在,默认整星)",
"星形本体视觉 24px(size=small 时 18px),但每颗星的可点区域高度是 44px;横向不做死区,相邻星的边界就是两半分界",
"一次触摸即取值,不需要二次确认;不响应长按与拖动(拖动选分在触屏上容易滑错,规格未纳入)",
"已选中的部分用**填充比例**表达(半星就是左半填充),不能只靠颜色深浅区分",
"取值后立即触发 change 事件(回传 3.5 这类半星值也是合法输入)",
"readonly=true 时不渲染任何可点区域(只读展示不抢键盘序列)"
],
"accessibility": [
"可评分形态:根是 role=\"radiogroup\" + aria-label,每颗星是原生 button + role=\"radio\" + aria-checked",
"星形的名称是「N 星」(aria-label),读屏播报的是分值而不是符号",
"只读形态:整组是一个 role=\"img\" + aria-label(「评分 4.5 分(满分 5 分)」),组内星形 aria-hidden",
"禁用态用原生 disabled 并补 aria-disabled=\"true\"",
"键盘:聚焦后左右方向键步进(整星模式步长 1,半星模式步长 0.5)"
],
"api": {
"source": "implementation",
"note": "props / events / slots 为 6 端实现的公共接口(说明文字取自规格对应小节)。字段名与各端源码逐名核对:node tools/verify-mobile-docs.mjs",
"requiredNote": "「必传」按严格定义:实现里**没有默认值**时才为 Y(本门禁逐条核对 props 与各端源码的默认值,防止契约与实现脱节)。",
"props": [
{
"name": "value",
"type": "number",
"default": "0",
"desc": "受控分值,允许半星(3.5)与 0(未评分)(规格 §36.5)",
"required": false
},
{
"name": "max",
"type": "number",
"default": "5",
"desc": "满分星数,决定渲染几颗星(规格 §36.2 stars)",
"required": false
},
{
"name": "allowHalf",
"type": "boolean",
"default": "false",
"desc": "变体 allowHalf:是否允许半星(点左半取 N-0.5 分)(规格 §36.3)",
"required": false
},
{
"name": "size",
"type": "'default' | 'small'",
"default": "'default'",
"desc": "变体 size:星形 24px 还是 18px(行内展示用)(规格 §36.3)",
"required": false
},
{
"name": "readonly",
"type": "boolean",
"default": "false",
"desc": "变体 readonly:只读展示(不渲染可点区域,整组用 role=\"img\" 播报)(规格 §36.3)",
"required": false
},
{
"name": "disabled",
"type": "boolean",
"default": "false",
"desc": "状态 disabled:置灰且不可聚焦,点击不改值(规格 §36.4)",
"required": false
},
{
"name": "label",
"type": "string",
"default": "'评分'",
"desc": "无障碍名称,落到 radiogroup / img 的 aria-label(规格 §36.6)",
"required": false
}
],
"events": [
{
"name": "change",
"params": "(value)",
"desc": "点星或键盘步进改值时触发,回传新分值(可含 0.5)(规格 §36.5)"
}
],
"slots": [
{
"name": "default",
"desc": "数值文案位置的自定义内容(如「4.5 分 · 共 128 条评价」),替换默认的「N 分」(规格 §36.2 text)"
}
]
},
"variantClasses": {
"size": {
"default": [],
"small": [
".kole-m-rate--small"
]
},
"allowHalf": {
"false": [],
"true": [
".kole-m-rate--half",
".kole-m-rate__half"
]
},
"readonly": {
"false": [],
"true": [
".kole-m-rate--readonly"
]
}
},
"demos": [
{
"id": "basic",
"group": "01 组件类型",
"title": "基础用法",
"desc": "点第 N 颗即取 N 分;整行 44px 高,星形本体只有 24px。",
"variant": "allowHalf=false"
},
{
"id": "half",
"group": "01 组件类型",
"title": "半星",
"desc": "allowHalf=true:点某颗星的左半取 N-0.5 分、右半取 N 分。",
"variant": "allowHalf=true"
},
{
"id": "size",
"group": "01 组件类型",
"title": "尺寸两档",
"desc": "size=small 星形 18px 用于行内展示;default 24px 用于可评分场景。",
"variant": "size=default|small"
},
{
"id": "readonly",
"group": "02 组件状态",
"title": "只读展示",
"desc": "readonly=true:星形不再是按钮、点击不改值,整组用 role=\"img\" 播报分值。",
"variant": "readonly=true"
},
{
"id": "disabled",
"group": "02 组件状态",
"title": "禁用",
"desc": "整条置灰且不可聚焦:读屏会播报不可用,点击不改值。",
"variant": "disabled=true"
}
],
"related": [
{
"slug": "mobile-slider",
"why": "连续区间的粗选用 Slider;离散档位(1~5 星)且带语义的用 Rate"
},
{
"slug": "mobile-form",
"why": "评分作为表单里的一个字段时,标签、必填星号与错误提示由 Form 的 item 提供"
},
{
"slug": "mobile-tag",
"why": "只是标注一个既有结论(如「好评」「差评」)用 Tag;需要用户给出分值时用 Rate"
}
]
}