Files
zkxw/docs/demos/2026-10-14-freight-card-sample-collapse-demo.html
T
2026-10-15 14:27:42 +08:00

492 lines
15 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, maximum-scale=1" />
<title>运费信息 · 列表卡片样本折叠 Demo</title>
<style>
:root {
--primary: #0a9f6d;
--primary-dark: #087f57;
--primary-soft: #e9f9f2;
--text: #18332a;
--muted: #6b7c74;
--border: #dce8e2;
--surface: #fff;
--page: #f3f6f5;
--money: #c98312;
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
font-size: 14px;
line-height: 1.5;
color: var(--text);
background: var(--page);
}
.page {
max-width: 420px;
margin: 0 auto;
padding: 20px 14px 48px;
}
.hero {
margin-bottom: 18px;
}
.hero h1 {
margin: 0 0 6px;
font-size: 20px;
font-weight: 700;
}
.hero p {
margin: 0;
color: var(--muted);
font-size: 13px;
}
.section-label {
display: flex;
align-items: center;
justify-content: space-between;
margin: 18px 0 8px;
color: var(--muted);
font-size: 12px;
font-weight: 600;
}
.section-label em {
font-style: normal;
color: var(--primary-dark);
background: var(--primary-soft);
padding: 2px 8px;
border-radius: 999px;
}
.card {
padding: 14px;
border: 1px solid var(--border);
border-radius: 16px;
background: var(--surface);
box-shadow: 0 6px 20px rgb(8 127 87 / 7%);
}
.card + .card { margin-top: 12px; }
.head {
display: flex;
align-items: center;
gap: 10px;
padding-bottom: 12px;
border-bottom: 1px solid #eef4f1;
}
.index {
display: grid;
width: 30px;
height: 30px;
flex: 0 0 30px;
place-items: center;
border-radius: 50%;
background: var(--primary-soft);
color: var(--primary-dark);
font-size: 13px;
font-weight: 700;
}
.identity {
min-width: 0;
flex: 1;
display: flex;
flex-direction: column;
gap: 3px;
}
.title {
overflow: hidden;
font-size: 16px;
font-weight: 700;
text-overflow: ellipsis;
white-space: nowrap;
}
.subtitle {
overflow: hidden;
color: var(--muted);
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
}
.tag {
display: inline-flex;
max-width: 128px;
align-self: center;
padding: 5px 12px;
overflow: hidden;
border-radius: 999px;
background: var(--primary-soft);
color: var(--primary-dark);
font-size: 12px;
line-height: 1.3;
text-overflow: ellipsis;
white-space: nowrap;
}
.tag.warn {
background: #fff7e8;
color: #b45309;
}
.fields {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px 16px;
padding: 14px 0;
}
.field {
display: flex;
min-width: 0;
flex-direction: column;
gap: 4px;
color: var(--muted);
font-size: 12px;
}
.field.wide { grid-column: 1 / -1; }
.field b {
color: var(--text);
font-weight: 500;
overflow-wrap: anywhere;
}
.field b.money {
color: var(--money);
font-size: 15px;
font-weight: 700;
}
/* —— 样本折叠区 —— */
.samples {
margin: 0 0 12px;
border: 1px solid #eef4f1;
border-radius: 12px;
background: #fafcfb;
overflow: hidden;
}
.samples__toggle {
display: flex;
width: 100%;
min-height: 44px;
align-items: center;
gap: 8px;
padding: 10px 12px;
border: 0;
background: transparent;
color: var(--text);
font: inherit;
text-align: left;
cursor: pointer;
}
.samples__toggle:active { background: #f0f7f3; }
.samples__toggle-icon {
display: grid;
width: 22px;
height: 22px;
flex: 0 0 22px;
place-items: center;
border-radius: 6px;
background: var(--primary-soft);
color: var(--primary-dark);
font-size: 12px;
transition: transform 0.2s ease;
}
.samples.is-open .samples__toggle-icon {
transform: rotate(90deg);
}
.samples__toggle-title {
flex: 1;
font-size: 13px;
font-weight: 600;
}
.samples__toggle-meta {
color: var(--muted);
font-size: 12px;
}
.samples__chevron {
color: var(--muted);
font-size: 12px;
transition: transform 0.2s ease;
}
.samples.is-open .samples__chevron {
transform: rotate(180deg);
}
.samples__body {
display: none;
padding: 0 10px 10px;
border-top: 1px solid #eef4f1;
}
.samples.is-open .samples__body { display: block; }
.sample-block {
margin-top: 10px;
padding: 10px;
border-radius: 10px;
background: #fff;
border: 1px solid #eef4f1;
}
.sample-block__head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin-bottom: 8px;
}
.sample-block__title {
font-size: 13px;
font-weight: 600;
}
.sample-block .fields {
padding: 0;
gap: 10px 12px;
}
.privacy {
display: flex;
min-height: 36px;
align-items: center;
gap: 6px;
margin: 0 0 12px;
padding: 0 10px;
border-radius: 9px;
background: #f6f7f7;
color: var(--muted);
font-size: 12px;
}
.actions {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 8px;
padding-top: 12px;
border-top: 1px solid #eef4f1;
}
.btn {
min-width: 76px;
min-height: 44px;
padding: 0 14px;
border-radius: 9px;
border: 1px solid var(--border);
background: #fff;
color: var(--text);
font-size: 13px;
cursor: pointer;
}
.btn.primary {
border-color: var(--primary);
background: var(--primary);
color: #fff;
}
.btn.danger {
border-color: #f3c4c4;
color: #c0392b;
}
.hint {
margin-top: 16px;
padding: 12px 14px;
border-radius: 12px;
background: #fff;
border: 1px dashed var(--border);
color: var(--muted);
font-size: 12px;
}
.hint strong { color: var(--text); }
</style>
</head>
<body>
<div class="page">
<header class="hero">
<h1>运费卡片 · 样本折叠</h1>
<p>默认折叠样本区,点击可展开/收起。对齐市场 H5 卡片视觉。</p>
</header>
<div class="section-label">
<span>改后(默认折叠)</span>
<em>推荐</em>
</div>
<!-- 卡片 1:折叠态 -->
<article class="card" data-demo-card>
<header class="head">
<span class="index">1</span>
<span class="identity">
<strong class="title">YF20261014001</strong>
<small class="subtitle">专线车 · ¥1,280.00</small>
</span>
<span class="tag">细胞存储</span>
</header>
<div class="fields">
<div class="field wide"><span>批次号</span><b>YF20261014001</b></div>
<div class="field"><span>运输方式</span><span class="tag">专线车</span></div>
<div class="field"><span>运费金额</span><b class="money">¥1,280.00</b></div>
<div class="field"><span>关联数</span><b>5</b></div>
<div class="field"><span>创建人</span><b>张专员</b></div>
<div class="field"><span>创建时间</span><b>2026-10-14 09:20</b></div>
<div class="field wide"><span>备注</span><b>冷链同批次出库</b></div>
</div>
<div class="samples" data-samples>
<button type="button" class="samples__toggle" aria-expanded="false">
<span class="samples__toggle-icon">样</span>
<span class="samples__toggle-title">关联样本(5)</span>
<span class="samples__toggle-meta">点击展开</span>
<span class="samples__chevron">▾</span>
</button>
<div class="samples__body">
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 1 · S-10021</span>
<span class="tag">细胞存储</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261008012</b></div>
<div class="field"><span>母亲姓名</span><b>王晓敏</b></div>
<div class="field"><span>子女姓名</span><b>宝宝甲</b></div>
<div class="field wide"><span>样本类型</span><b>脐带血</b></div>
</div>
</div>
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 2 · S-10022</span>
<span class="tag">细胞存储</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261008018</b></div>
<div class="field"><span>母亲姓名</span><b>李婷</b></div>
<div class="field"><span>子女姓名</span><b>宝宝乙</b></div>
<div class="field wide"><span>样本类型</span><b>脐带</b></div>
</div>
</div>
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 3 · S-10023</span>
<span class="tag warn">科研捐赠</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261009003</b></div>
<div class="field"><span>母亲姓名</span><b>周雨桐</b></div>
<div class="field"><span>子女姓名</span><b>宝宝丙</b></div>
<div class="field wide"><span>样本类型</span><b>胎盘</b></div>
</div>
</div>
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 4 · S-10024</span>
<span class="tag">细胞存储</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261010007</b></div>
<div class="field"><span>母亲姓名</span><b>陈思琪</b></div>
<div class="field"><span>子女姓名</span><b>宝宝丁</b></div>
<div class="field wide"><span>样本类型</span><b>脐带血</b></div>
</div>
</div>
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 5 · S-10025</span>
<span class="tag">细胞存储</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261011002</b></div>
<div class="field"><span>母亲姓名</span><b>赵倩</b></div>
<div class="field"><span>子女姓名</span><b>宝宝戊</b></div>
<div class="field wide"><span>样本类型</span><b>脐带</b></div>
</div>
</div>
</div>
</div>
<p class="privacy">仅展示当前权限范围内的关联样本</p>
<footer class="actions">
<button type="button" class="btn">编辑</button>
<button type="button" class="btn">关联样本</button>
<button type="button" class="btn danger">取消关联</button>
</footer>
</article>
<!-- 卡片 2:默认已展开,方便对比 -->
<div class="section-label">
<span>展开态示意</span>
<em>点击上方卡片可切换</em>
</div>
<article class="card">
<header class="head">
<span class="index">2</span>
<span class="identity">
<strong class="title">YF20261014008</strong>
<small class="subtitle">冷链 · ¥360.00</small>
</span>
<span class="tag">细胞存储</span>
</header>
<div class="fields">
<div class="field wide"><span>批次号</span><b>YF20261014008</b></div>
<div class="field"><span>运输方式</span><span class="tag">冷链</span></div>
<div class="field"><span>运费金额</span><b class="money">¥360.00</b></div>
<div class="field"><span>关联数</span><b>2</b></div>
</div>
<div class="samples is-open" data-samples>
<button type="button" class="samples__toggle" aria-expanded="true">
<span class="samples__toggle-icon">样</span>
<span class="samples__toggle-title">关联样本(2)</span>
<span class="samples__toggle-meta">点击收起</span>
<span class="samples__chevron">▾</span>
</button>
<div class="samples__body">
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 1 · S-20001</span>
<span class="tag">细胞存储</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261012001</b></div>
<div class="field"><span>母亲姓名</span><b>孙悦</b></div>
<div class="field"><span>子女姓名</span><b>宝宝己</b></div>
<div class="field wide"><span>样本类型</span><b>脐带血</b></div>
</div>
</div>
<div class="sample-block">
<div class="sample-block__head">
<span class="sample-block__title">样本 2 · S-20002</span>
<span class="tag">细胞存储</span>
</div>
<div class="fields">
<div class="field wide"><span>协议号</span><b>XY20261012005</b></div>
<div class="field"><span>母亲姓名</span><b>吴芳</b></div>
<div class="field"><span>子女姓名</span><b>宝宝庚</b></div>
<div class="field wide"><span>样本类型</span><b>脐带</b></div>
</div>
</div>
</div>
</div>
<footer class="actions">
<button type="button" class="btn primary">查看</button>
<button type="button" class="btn">编辑</button>
</footer>
</article>
<div class="hint">
<strong>交互说明:</strong>默认折叠,只占一行摘要;展开后按样本分块展示。无样本时不显示该区域。
文件路径:<code>docs/demos/2026-10-14-freight-card-sample-collapse-demo.html</code>
</div>
</div>
<script>
document.querySelectorAll('[data-samples]').forEach((panel) => {
const btn = panel.querySelector('.samples__toggle')
const meta = panel.querySelector('.samples__toggle-meta')
btn.addEventListener('click', () => {
const open = panel.classList.toggle('is-open')
btn.setAttribute('aria-expanded', open ? 'true' : 'false')
if (meta) meta.textContent = open ? '点击收起' : '点击展开'
})
})
</script>
</body>
</html>