| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491 |
- <!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>
|