Regression / regression (push) Canceled after 0s
## 品牌标识(本次会话) 起因:品牌此前没有任何图形标识 —— 唯一 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 未做部分)
246 lines
8.6 KiB
JSON
246 lines
8.6 KiB
JSON
{
|
||
"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"
|
||
}
|
||
]
|
||
}
|