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 未做部分)
232 lines
7.6 KiB
JSON
232 lines
7.6 KiB
JSON
{
|
||
"schemaVersion": 1,
|
||
"sourceKind": "authored-spec",
|
||
"provenance": "authored-in-repo",
|
||
"specFile": "spec/移动端规格.md",
|
||
"specSection": "22 · 加载 Loading",
|
||
"confidence": "high",
|
||
"slug": "mobile-loading",
|
||
"name": "加载 Loading",
|
||
"semanticTypeCandidates": [
|
||
"loading",
|
||
"spinner"
|
||
],
|
||
"variantDimensions": [
|
||
{
|
||
"name": "size",
|
||
"values": [
|
||
"small",
|
||
"default",
|
||
"large"
|
||
]
|
||
},
|
||
{
|
||
"name": "vertical",
|
||
"values": [
|
||
"false",
|
||
"true"
|
||
]
|
||
},
|
||
{
|
||
"name": "fullscreen",
|
||
"values": [
|
||
"false",
|
||
"true"
|
||
]
|
||
}
|
||
],
|
||
"representativeVariants": [
|
||
{
|
||
"size": "default",
|
||
"vertical": "false",
|
||
"label": "区块内加载(转圈 + 文案同行)"
|
||
},
|
||
{
|
||
"size": "small",
|
||
"vertical": "false",
|
||
"label": "列表内联加载"
|
||
},
|
||
{
|
||
"size": "large",
|
||
"vertical": "true",
|
||
"label": "空态 / 页面级加载(上下排布)"
|
||
},
|
||
{
|
||
"size": "default",
|
||
"fullscreen": "true",
|
||
"label": "全屏遮罩(不可中断的提交)"
|
||
}
|
||
],
|
||
"anatomy": {
|
||
"loading": "根元素,内联形态(转圈 + 文案同行或上下排);fullscreen=true 时它本身即遮罩层",
|
||
"spinner": "转圈,由 CSS 动画驱动(三端一致,不依赖图片或字体)",
|
||
"text": "可选文案,说明「在等什么」;为空时只有转圈",
|
||
"panel": "全屏形态下的卡片面板,承载指示器与文案,保证遮罩上的对比度可控",
|
||
"mask": "全屏形态的遮罩底色(取令牌,语义等同弹窗遮罩)"
|
||
},
|
||
"structurePatterns": {
|
||
"size": "small 16px / default 20px / large 28px",
|
||
"vertical": "false 横行(默认)/ true 上下排布",
|
||
"fullscreen": "false 区块内 / true 遮罩全屏(open 控制显隐)"
|
||
},
|
||
"usageHints": [
|
||
"告诉用户「系统正在处理,请等」并占住当前位置",
|
||
"加载组件本身不可点,也不抢焦点(不打断读屏正在读的内容)",
|
||
"fullscreen=true 且 open 时遮罩截获手势,下方内容不可点;未展开时不截获",
|
||
"转圈动画 800ms/圈(--kole-m-loading-duration 可覆盖),时长恒定不随尺寸变化",
|
||
"prefers-reduced-motion: reduce 下停止旋转(改为静态环),避免前庭不适"
|
||
],
|
||
"doNotInvent": [
|
||
"加载耗时的进度百分比(本组件不假装知道进度)",
|
||
"超时后的自动提示 / 自动重试",
|
||
"多条加载的排队与合并"
|
||
],
|
||
"unknowns": [
|
||
"全屏加载持续多久后应提示「可能需要更长时间」",
|
||
"文案的最大长度与换行策略"
|
||
],
|
||
"interaction": [
|
||
"加载组件本身不可点,也不抢焦点(不打断读屏正在读的内容)",
|
||
"fullscreen=true 且 open 时遮罩截获手势,下方内容不可点;未展开时不截获",
|
||
"转圈动画 800ms/圈(--kole-m-loading-duration 可覆盖),时长恒定不随尺寸变化",
|
||
"prefers-reduced-motion: reduce 下停止旋转(改为静态环),避免前庭不适",
|
||
"加载超过一次会话的合理时长时应由宿主提供取消入口,本组件不自己造取消按钮"
|
||
],
|
||
"accessibility": [
|
||
"容器 role=\"status\" + aria-live=\"polite\"(状态变化被播报,且不打断当前朗读)",
|
||
"加载中置 aria-busy=\"true\";全屏遮罩未展开时置 \"false\"",
|
||
"转圈是装饰(aria-hidden=\"true\"),语义全部由文案与 role=\"status\" 承担",
|
||
"文案要具体(「正在提交订单…」而不是「加载中」),读屏用户与视力用户获得同样的信息量"
|
||
],
|
||
"api": {
|
||
"source": "implementation",
|
||
"note": "props / events / slots 为 6 端实现的公共接口(说明文字取自规格对应小节)。字段名与各端源码逐名核对:node tools/verify-mobile-docs.mjs",
|
||
"requiredNote": "「必传」按严格定义:实现里**没有默认值**时才为 Y(本门禁逐条核对 props 与各端源码的默认值,防止契约与实现脱节)。",
|
||
"props": [
|
||
{
|
||
"name": "size",
|
||
"type": "'small' | 'default' | 'large'",
|
||
"default": "'default'",
|
||
"desc": "变体 size:三档指示器尺寸(16 / 20 / 28),文案字号随档位(规格 §22.3)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "text",
|
||
"type": "string",
|
||
"default": "''",
|
||
"desc": "文案,说明「在等什么」;为空时只有转圈(规格 §22.2)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "vertical",
|
||
"type": "boolean",
|
||
"default": "false",
|
||
"desc": "变体 vertical:true 时指示器在上、文案在下(规格 §22.3)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "fullscreen",
|
||
"type": "boolean",
|
||
"default": "false",
|
||
"desc": "变体 fullscreen:true 时铺一层遮罩并截获手势(规格 §22.3/§22.5)",
|
||
"required": false
|
||
},
|
||
{
|
||
"name": "open",
|
||
"type": "boolean",
|
||
"default": "false",
|
||
"desc": "全屏遮罩的显隐;仅 fullscreen=true 时有意义(规格 §22.4)",
|
||
"required": false
|
||
}
|
||
],
|
||
"events": [],
|
||
"slots": [
|
||
{
|
||
"name": "default",
|
||
"desc": "自定义文案(与 text 二选一)(规格 §22.2 text)"
|
||
}
|
||
]
|
||
},
|
||
"variantClasses": {
|
||
"size": {
|
||
"small": [
|
||
".kole-m-loading--small"
|
||
],
|
||
"default": [
|
||
"--kole-m-loading-size"
|
||
],
|
||
"large": [
|
||
".kole-m-loading--large"
|
||
]
|
||
},
|
||
"vertical": {
|
||
"false": [],
|
||
"true": [
|
||
".kole-m-loading--vertical"
|
||
]
|
||
},
|
||
"fullscreen": {
|
||
"false": [],
|
||
"true": [
|
||
".is-fullscreen",
|
||
".kole-m-loading__panel"
|
||
]
|
||
}
|
||
},
|
||
"demos": [
|
||
{
|
||
"id": "basic",
|
||
"group": "01 组件类型",
|
||
"title": "基础用法",
|
||
"desc": "转圈 + 文案同行;文案要说明「在等什么」,只写「加载中」等于没说。",
|
||
"variant": "size=default / vertical=false"
|
||
},
|
||
{
|
||
"id": "size",
|
||
"group": "01 组件类型",
|
||
"title": "三档尺寸",
|
||
"desc": "small 用于列表内联,default 用于区块,large 用于页面级或空态。",
|
||
"variant": "size=small | default | large"
|
||
},
|
||
{
|
||
"id": "vertical",
|
||
"group": "01 组件类型",
|
||
"title": "上下排布",
|
||
"desc": "vertical=true 让文案不挤压指示器,空态与全屏面板里更稳。",
|
||
"variant": "vertical=true"
|
||
},
|
||
{
|
||
"id": "text-only",
|
||
"group": "02 组件状态",
|
||
"title": "无文案",
|
||
"desc": "只有转圈时,上下文说明必须由宿主在别处给出,否则用户不知道在等什么。",
|
||
"variant": "text=''"
|
||
},
|
||
{
|
||
"id": "fullscreen",
|
||
"group": "02 组件状态",
|
||
"title": "全屏遮罩",
|
||
"desc": "遮罩期间下方不可操作,用来挡住提交 / 支付这类动作的重复点击(点按钮切换)。",
|
||
"variant": "fullscreen=true / open"
|
||
}
|
||
],
|
||
"related": [
|
||
{
|
||
"slug": "mobile-toast",
|
||
"why": "只提示结果(成功 / 失败)且不要求等待时用轻提示;需要用户等待才用加载"
|
||
},
|
||
{
|
||
"slug": "mobile-dialog",
|
||
"why": "需要用户先确认才能继续时用对话框;加载不征求用户意见"
|
||
},
|
||
{
|
||
"slug": "pullrefresh",
|
||
"why": "列表顶部下拉触发的刷新用它(自带手势与指示区);区块内的等待才用加载"
|
||
},
|
||
{
|
||
"slug": "mobile-icon",
|
||
"why": "只需要一个静态字形(不是等待语义)时用图标,不要拿图标假装加载"
|
||
}
|
||
]
|
||
}
|