Files
aurora-admin/tests/card.html
T

127 lines
7.8 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">
<title>card — 测试页</title>
<link rel="stylesheet" href="../.design_library/aurora-admin/colors_and_type.css">
<link rel="stylesheet" href="../site/style.css">
<style>
/* 测试页独立样式 */
body { margin: 0; font-family: var(--au-font-family); color: var(--au-color-text-body); background: var(--au-color-page-bg); }
.t-shell { max-width: 1200px; margin: 0 auto; padding: 24px; }
.t-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; flex-wrap: wrap; gap: 12px; }
.t-head h1 { margin: 0; font-size: 22px; color: var(--au-color-text-title); }
.t-head h1 .en { font-family: var(--au-font-family-num); font-size: 14px; color: var(--au-color-text-secondary); margin-left: 8px; }
.t-nav { display: flex; gap: 8px; }
.t-btn { height: 30px; padding: 0 12px; border-radius: var(--au-radius-base); border: 1px solid var(--au-color-border); background: var(--au-color-card-bg); color: var(--au-color-text-body); font-size: 13px; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 4px; }
.t-btn:hover { border-color: var(--au-color-brand); color: var(--au-color-brand); }
.t-btn.primary { background: var(--au-color-brand); border-color: var(--au-color-brand); color: var(--au-color-text-inverse); }
.t-btn.primary:hover { background: var(--au-color-brand-hover); color: var(--au-color-text-inverse); }
.t-section { background: var(--au-color-card-bg); border: 1px solid var(--au-color-border); border-radius: var(--au-radius-large); padding: 20px; margin-bottom: 20px; }
.t-section h2 { font-size: 16px; margin: 0 0 12px; color: var(--au-color-text-title); }
.t-section .desc { color: var(--au-color-text-secondary); font-size: 13px; margin: 0 0 12px; }
.t-summary { display: flex; gap: 12px; align-items: center; }
.t-pill { display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 10px; border-radius: var(--au-radius-small); font-size: 12px; background: var(--au-color-table-header-bg); color: var(--au-color-text-secondary); font-family: var(--au-font-family-num); }
.t-pill.pass { background: rgba(82,196,26,.12); color: var(--au-color-success); }
.t-pill.fail { background: rgba(245,34,45,.12); color: var(--au-color-error); }
.t-pill.skip { background: var(--au-color-table-header-bg); color: var(--au-color-text-placeholder); }
.t-list { display: flex; flex-direction: column; gap: 6px; }
.t-row { display: flex; align-items: center; gap: 10px; padding: 6px 10px; border: 1px solid var(--au-color-border); border-radius: var(--au-radius-base); font-size: 13px; }
.t-row .id { font-family: var(--au-font-family-num); color: var(--au-color-text-secondary); flex: 1; word-break: break-all; }
.t-row .ms { font-family: var(--au-font-family-num); color: var(--au-color-text-placeholder); font-size: 12px; }
.t-row .err { color: var(--au-color-error); font-size: 12px; margin-left: 8px; }
[data-assert] { outline: 2px dashed transparent; transition: outline-color .15s; }
[data-assert][data-status="pass"] { outline-color: rgba(82,196,26,.45); }
[data-assert][data-status="fail"] { outline-color: rgba(245,34,45,.55); }
[data-assert][data-status="skip"] { outline-color: rgba(140,140,140,.4); }
.t-fab { position: fixed; right: 24px; bottom: 24px; display: flex; flex-direction: column; gap: 8px; z-index: 100; }
.t-fab .t-btn { box-shadow: var(--au-shadow-medium); }
.t-toast { position: fixed; top: 24px; right: 24px; z-index: 200; padding: 8px 14px; background: var(--au-color-text-title); color: var(--au-color-text-inverse); border-radius: var(--au-radius-base); font-size: 13px; opacity: 0; transition: opacity .2s; pointer-events: none; }
.t-toast.show { opacity: 1; }
</style>
</head>
<body>
<div class="t-shell">
<div class="t-head">
<h1>卡片<span class="en">card</span></h1>
<div class="t-nav">
<a class="t-btn" href="../site/index.html#/component/card" target="_blank">← 文档站</a>
<button id="run-asserts" class="t-btn primary" type="button">运行断言</button>
<button id="export-log" class="t-btn" type="button">导出日志</button>
<button id="clear-log" class="t-btn" type="button">清空日志</button>
</div>
</div>
<div class="t-section">
<h2>渲染快照</h2>
<p class="desc">以下 DOM 是组件主用例的静态快照,每个用例标注 <code>data-assert="&lt;id&gt;"</code>,点击「运行断言」后会写入 <code>data-status</code>。</p>
<div id="snapshot">
<!-- 渲染快照由生成器写入 -->
<div class="demo">
<h1>Aurora Admin · Card 组件(纯 H5)</h1>
<p class="sub">对齐 card.json 契约:圆角8px、边框1px / 低阴影、内边距16/24px、结构含标题区/内容区/操作区</p>
<div class="row">
<div class="aa-card aa-card--bordered" style="padding:16px">
<div class="aa-card__header"><div class="aa-card__title">边框卡片</div></div>
<div class="aa-card__body" style="margin-top:12px">用于轻量内容承载,1px 边框区分卡片边界。</div>
</div>
<div class="aa-card aa-card--shadowed" style="padding:24px">
<div class="aa-card__header"><div class="aa-card__title">阴影卡片</div></div>
<div class="aa-card__body" style="margin-top:12px">通过低阴影表现层级浮起,适合突出展示类内容。</div>
</div>
<div class="aa-card aa-card--bordered" style="padding:24px">
<div class="aa-card__header">
<div class="aa-card__title">客户详情</div>
<div class="aa-card__extra">查看全部</div>
</div>
<div class="aa-card__body" style="margin-top:12px">含标题区与右侧操作区,内容区展示客户关键信息。</div>
<div class="aa-card__actions" style="margin-top:16px">
<button style="border:1px solid #E8ECF1;background:#fff;border-radius:4px;padding:4px 12px;cursor:pointer;color:#262626">取消</button>
<button style="background:#2F54EB;border:none;b...
</div>
</div>
<div class="t-section">
<h2>断言结果</h2>
<div class="t-summary">
<span class="t-pill" id="sum-total">总数 0</span>
<span class="t-pill pass" id="sum-pass">通过 0</span>
<span class="t-pill fail" id="sum-fail">失败 0</span>
<span class="t-pill skip" id="sum-skip">跳过 0</span>
<span class="t-pill" id="sum-ms">耗时 0 ms</span>
</div>
<ul class="t-list" id="result-list" style="margin-top: 12px; list-style: none; padding: 0;"></ul>
</div>
<div class="t-section">
<h2>通用测试矩阵(自动断言)</h2>
<p class="desc">以下 8 项检查在「运行断言」时同时跑:默认态、变体覆盖、状态可达、键盘可达、焦点环、ARIA 属性、对比度、token 一致性。</p>
<ol style="margin: 0; padding-left: 18px; color: var(--au-color-text-body); font-size: 13px; line-height: 22px;">
<li>默认态渲染:核心节点齐全</li>
<li>尺寸/类型变体:≥2 尺寸 或 ≥2 类型</li>
<li>状态覆盖:default / hover / focus / disabled / loading 至少出现 3 个</li>
<li>键盘可达:可聚焦元素具备 tabindex 或原生 button/a</li>
<li>焦点环可视:focus-visible 描边不被覆盖(脚本检查 stylesheet)</li>
<li>ARIA 属性:交互节点具备 role 或 aria-*</li>
<li>对比度:主要文本颜色与背景对比度 ≥ 4.5:1</li>
<li>token 一致性:未出现硬编码 hex 颜色 / 像素值</li>
</ol>
</div>
</div>
<div class="t-fab">
<button id="export-log-2" class="t-btn" type="button" title="下载 JSON">导出</button>
</div>
<div id="toast" class="t-toast">已导出 ✓</div>
<script src="../site/logger.js"></script>
<script>window.__SLUG__ = "card";</script>
<script src="../tests/_runtime.js"></script>
</body>
</html>