Files
aurora-admin/frameworks-mobile/Dialog.html
T
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

169 lines
8.4 KiB
HTML
Raw 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.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<title>Kole UI Mobile · Dialog(H5)</title>
<link rel="stylesheet" href="../.design_library/kole-ui-mobile/colors_and_type.css">
<link rel="stylesheet" href="Dialog.css">
<style>
body { margin: 0; background: var(--kole-color-page-bg); font-family: var(--kole-font-family); color: var(--kole-color-text-body); }
.demo { max-width: 375px; margin: 0 auto; padding: var(--kole-m-gutter) 0; }
.demo-label { margin: 0; padding: var(--kole-space-12) var(--kole-m-gutter) var(--kole-space-8);
font-size: var(--kole-m-font-size-label); color: var(--kole-color-text-secondary); }
.demo-frame { position: relative; max-width: 375px; margin: 0 auto; height: 240px;
overflow: hidden; transform: translateZ(0); background: var(--kole-color-page-bg);
border-block: 1px solid var(--kole-color-border); }
.demo-frame__body { padding: var(--kole-m-gutter); font-size: var(--kole-m-font-size-label);
color: var(--kole-color-text-secondary); line-height: 1.7; }
.demo-trigger { min-height: var(--kole-m-touch-target); padding: 0 var(--kole-m-gutter);
border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-base);
background: var(--kole-color-card-bg); color: var(--kole-color-text-body);
font-family: inherit; font-size: var(--kole-m-font-size-label); cursor: pointer; touch-action: manipulation; }
.demo-trigger:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: 2px; }
.demo-block[hidden] { display: none; }
</style>
</head>
<body>
<div class="demo">
<section class="demo-block" data-demo="confirm">
<p class="demo-label">确认框(variant=confirm:取消 + 确认两个按钮等宽,点按钮打开)</p>
<div class="demo-frame" data-assert="dialog-confirm">
<div class="demo-frame__body">
<button class="demo-trigger" type="button"
data-behavior="click-toggles-class:#dialog-confirm-box|is-open">打开确认框</button>
</div>
<div class="kole-m-dialog__mask" aria-hidden="true"></div>
<div class="kole-m-dialog" id="dialog-confirm-box" role="dialog" aria-modal="true" aria-labelledby="dialog-confirm-title">
<div class="kole-m-dialog__header" id="dialog-confirm-title">确认提交订单?</div>
<div class="kole-m-dialog__body">
<p>提交后进入审核流程,期间不可修改收货信息。</p>
</div>
<div class="kole-m-dialog__footer">
<button class="kole-m-dialog__btn" type="button">取消</button>
<button class="kole-m-dialog__btn kole-m-dialog__btn--primary" type="button">确认提交</button>
</div>
</div>
</div>
</section>
<section class="demo-block" data-demo="danger">
<p class="demo-label">危险确认(tone=danger:确认按钮用错误色,默认展开对照)</p>
<div class="demo-frame" data-assert="dialog-danger">
<div class="kole-m-dialog__mask is-open" aria-hidden="true"></div>
<div class="kole-m-dialog is-open" role="dialog" aria-modal="true" aria-labelledby="dialog-danger-title">
<div class="kole-m-dialog__header" id="dialog-danger-title">删除这条记录?</div>
<div class="kole-m-dialog__body">
<p>删除后不可恢复,关联的附件也会一并移除。</p>
</div>
<div class="kole-m-dialog__footer">
<button class="kole-m-dialog__btn" type="button">取消</button>
<button class="kole-m-dialog__btn kole-m-dialog__btn--danger" type="button">删除</button>
</div>
</div>
</div>
</section>
<section class="demo-block" data-demo="alert">
<p class="demo-label">提示框(variant=alert:只有一个按钮,铺满整行;默认展开)</p>
<div class="demo-frame" data-assert="dialog-alert">
<div class="kole-m-dialog__mask is-open" aria-hidden="true"></div>
<div class="kole-m-dialog is-open" role="dialog" aria-modal="true" aria-labelledby="dialog-alert-title">
<div class="kole-m-dialog__header" id="dialog-alert-title">提交成功</div>
<div class="kole-m-dialog__body">
<p>订单号 20260920-001,可在「我的订单」里查看进度。</p>
</div>
<div class="kole-m-dialog__footer">
<button class="kole-m-dialog__btn kole-m-dialog__btn--primary" type="button">知道了</button>
</div>
</div>
</div>
</section>
<section class="demo-block" data-demo="loading">
<p class="demo-label">提交中(状态 loading:确认按钮禁用并显示加载文案;默认展开)</p>
<div class="demo-frame" data-assert="dialog-loading">
<div class="kole-m-dialog__mask is-open" aria-hidden="true"></div>
<div class="kole-m-dialog is-open" role="dialog" aria-modal="true" aria-labelledby="dialog-loading-title">
<div class="kole-m-dialog__header" id="dialog-loading-title">正在提交</div>
<div class="kole-m-dialog__body">
<p>请勿关闭页面,提交完成后会自动跳转。</p>
</div>
<div class="kole-m-dialog__footer">
<button class="kole-m-dialog__btn" type="button" disabled>取消</button>
<button class="kole-m-dialog__btn kole-m-dialog__btn--primary is-loading" type="button" disabled aria-busy="true">提交中…</button>
</div>
</div>
</div>
</section>
<section class="demo-block" data-demo="keep-open">
<p class="demo-label">遮罩不关闭(closeOnMask=false:表单类内容不该因误触丢弃;默认展开)</p>
<div class="demo-frame" data-assert="dialog-keep-open">
<div class="kole-m-dialog__mask is-open" aria-hidden="true"></div>
<div class="kole-m-dialog is-open" data-close-on-mask="false" role="dialog" aria-modal="true" aria-labelledby="dialog-keep-title">
<div class="kole-m-dialog__header" id="dialog-keep-title">填写收货信息</div>
<div class="kole-m-dialog__body">
<p>已填写的内容会在误触遮罩时保留,只能用取消或确认离开。</p>
</div>
<div class="kole-m-dialog__footer">
<button class="kole-m-dialog__btn" type="button">取消</button>
<button class="kole-m-dialog__btn kole-m-dialog__btn--primary" type="button">保存</button>
</div>
</div>
</div>
</section>
</div>
<script>
/* 演示页交互:触发器切换对话框开合;遮罩点击关闭(closeOnMask=false 的示例不关)。
is-open 类驱动视觉,同时同步遮罩。 */
(function () {
function setOpen(dialog, open) {
dialog.classList.toggle('is-open', open);
var mask = dialog.parentElement ? dialog.parentElement.querySelector('.kole-m-dialog__mask') : null;
if (mask) mask.classList.toggle('is-open', open);
}
document.querySelectorAll('.demo-trigger').forEach(function (trig) {
trig.addEventListener('click', function () {
var box = trig.parentElement.parentElement.querySelector('.kole-m-dialog');
if (box) setOpen(box, !box.classList.contains('is-open'));
});
});
document.querySelectorAll('.kole-m-dialog__mask').forEach(function (mask) {
mask.addEventListener('click', function () {
var box = mask.parentElement.querySelector('.kole-m-dialog');
if (box && box.getAttribute('data-close-on-mask') !== 'false') setOpen(box, false);
});
});
document.querySelectorAll('.kole-m-dialog__btn').forEach(function (btn) {
btn.addEventListener('click', function () {
if (btn.disabled) return;
var box = btn.closest('.kole-m-dialog');
if (box) setOpen(box, false);
});
});
})();
</script>
<script>
/* ?demo=<id> → 只显示该演示块(文档站按块预览用;无参数时全部显示,测试与回归走无参数路径) */
(function () {
var id = new URLSearchParams(location.search).get('demo');
if (!id) return;
var blocks = Array.prototype.slice.call(document.querySelectorAll('.demo-block'));
var hit = false;
blocks.forEach(function (b) {
var on = b.getAttribute('data-demo') === id;
if (on) hit = true;
b.hidden = !on;
});
if (!hit) { blocks.forEach(function (b) { b.hidden = false; }); return; }
document.body.classList.add('demo-single');
blocks.forEach(function (b) {
var label = b.querySelector('.demo-label');
if (label && !b.hidden) label.hidden = true;
});
})();
</script>
</body>
</html>