Files
shanxia2.0/docs/fresh-mint-pl-feedback-kv-polish-demo.html
T
2026-08-03 21:20:00 +08:00

603 lines
19 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>Fresh Mint · 回传卡片 KV 重设计 Demo</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
<style>
:root {
--primary: #10b981;
--primary-dark: #059669;
--primary-bg: #ecfdf5;
--text: #1e293b;
--text-muted: #64748b;
--border: #d9e8e2;
--border-soft: #e2e8f0;
--surface: #fff;
--table-head: #f8fafc;
--danger: #dc2626;
--warn: #d97706;
--radius: 10px;
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: Inter, -apple-system, sans-serif;
font-size: 14px;
line-height: 1.5;
color: var(--text);
background: #eef2f6;
}
.page { max-width: 1200px; margin: 0 auto; padding: 32px 20px 72px; }
.head { margin-bottom: 28px; }
.head h1 { margin: 0 0 8px; font-size: 24px; font-weight: 700; }
.head h1 span { color: var(--primary-dark); }
.head p { margin: 0; color: var(--text-muted); max-width: 760px; }
.block { margin-bottom: 36px; }
.block > h2 {
margin: 0 0 6px;
font-size: 16px;
font-weight: 700;
}
.block > .desc {
margin: 0 0 14px;
font-size: 13px;
color: var(--text-muted);
}
.pick {
display: inline-block;
margin-left: 8px;
padding: 1px 8px;
border-radius: 999px;
font-size: 11px;
font-weight: 600;
vertical-align: middle;
}
.pick-1 { background: #ecfdf5; color: var(--primary-dark); }
.pick-2 { background: #eff6ff; color: #1d4ed8; }
.pick-3 { background: #fff7ed; color: #c2410c; }
.row3 {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 14px;
}
@media (max-width: 980px) {
.row3 { grid-template-columns: 1fr; }
}
.panel {
background: var(--surface);
border: 1px solid var(--border-soft);
border-radius: var(--radius);
padding: 14px;
min-height: 300px;
display: flex;
flex-direction: column;
}
.panel-hd {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin-bottom: 12px;
}
.panel-hd h3 {
margin: 0;
padding-left: 10px;
border-left: 3px solid var(--primary);
color: var(--primary-dark);
font-size: 14px;
font-weight: 600;
line-height: 1.2;
}
.ops { display: flex; gap: 6px; }
.btn {
height: 28px;
padding: 0 10px;
border-radius: 6px;
border: 1px solid var(--border-soft);
background: #fff;
font-size: 12px;
font-weight: 500;
color: var(--text);
}
.btn-p { background: var(--primary); border-color: var(--primary); color: #fff; }
/* ========== 方案 1:单据表(系统原生 ViewKv 表格式) ========== */
.kv-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
background: #fff;
}
.kv-table th,
.kv-table td {
padding: 9px 12px;
border-bottom: 1px solid #eef2f6;
border-right: 1px solid #eef2f6;
vertical-align: top;
text-align: left;
line-height: 1.4;
}
.kv-table tr:last-child th,
.kv-table tr:last-child td { border-bottom: none; }
.kv-table th {
width: 78px;
background: var(--table-head);
color: var(--text-muted);
font-size: 12px;
font-weight: 500;
white-space: nowrap;
}
.kv-table td {
font-size: 13px;
font-weight: 600;
color: var(--text);
word-break: break-word;
}
.kv-table td.red { color: var(--danger); font-size: 15px; }
.kv-table .tag {
display: inline-block;
padding: 1px 8px;
border-radius: 4px;
background: #059669;
color: #fff;
font-size: 12px;
font-weight: 600;
}
.kv-table .thumbs {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
.kv-table .thumb {
width: 40px;
height: 40px;
border-radius: 6px;
background: #ecfdf5;
border: 1px solid #a7f3d0;
display: grid;
place-items: center;
font-size: 11px;
color: var(--primary-dark);
font-weight: 600;
}
/* ========== 方案 2:一句摘要 + 次要元信息 ========== */
.summary-card { display: flex; flex-direction: column; gap: 12px; }
.summary-hero {
padding: 14px 14px 12px;
border-radius: 8px;
background: #0f172a;
color: #f8fafc;
}
.summary-hero .kicker {
font-size: 11px;
font-weight: 500;
color: #94a3b8;
margin-bottom: 6px;
}
.summary-hero .main {
font-size: 20px;
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.25;
}
.summary-hero .main strong { color: #fca5a5; font-weight: 700; }
.summary-hero .sub {
margin-top: 8px;
font-size: 12px;
color: #cbd5e1;
line-height: 1.45;
}
.chip-row { display: flex; flex-wrap: wrap; gap: 8px; }
.chip {
display: inline-flex;
align-items: center;
gap: 6px;
max-width: 100%;
padding: 6px 10px;
border-radius: 999px;
background: #f8fafc;
border: 1px solid var(--border-soft);
font-size: 12px;
color: var(--text);
}
.chip b { color: var(--text-muted); font-weight: 500; }
.chip .t { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 180px; }
.media-row {
display: flex;
align-items: center;
gap: 8px;
padding-top: 2px;
}
.media-row .lab { font-size: 12px; color: var(--text-muted); white-space: nowrap; }
.media-row .thumb {
width: 44px;
height: 44px;
border-radius: 8px;
object-fit: cover;
background: linear-gradient(135deg, #d1fae5, #a7f3d0);
border: 1px solid #a7f3d0;
}
/* ========== 方案 3:回执 / 小票式 ========== */
.ticket {
border: 1px solid var(--border-soft);
border-radius: 8px;
overflow: hidden;
background: #fff;
}
.ticket-band {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 10px 12px;
background: linear-gradient(90deg, #ecfdf5 0%, #f0fdf4 60%, #fff 100%);
border-bottom: 1px solid #d1fae5;
}
.ticket-band .who {
font-size: 12px;
font-weight: 600;
color: var(--primary-dark);
}
.ticket-band .when {
font-size: 12px;
color: var(--text-muted);
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.ticket-qty {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0;
border-bottom: 1px dashed #e2e8f0;
}
.ticket-qty > div {
padding: 12px;
text-align: center;
}
.ticket-qty > div + div { border-left: 1px dashed #e2e8f0; }
.ticket-qty .lab {
font-size: 11px;
color: var(--text-muted);
margin-bottom: 4px;
}
.ticket-qty .val {
font-size: 22px;
font-weight: 700;
color: var(--danger);
font-variant-numeric: tabular-nums;
letter-spacing: -0.02em;
line-height: 1.1;
}
.ticket-qty .val.sm { font-size: 14px; line-height: 1.35; }
.ticket-lines { padding: 4px 0; }
.ticket-line {
display: grid;
grid-template-columns: 72px 1fr;
gap: 8px;
padding: 7px 12px;
font-size: 13px;
}
.ticket-line .lab { color: var(--text-muted); }
.ticket-line .val { font-weight: 600; color: var(--text); word-break: break-word; }
.ticket-foot {
padding: 10px 12px;
border-top: 1px dashed #e2e8f0;
background: #f8fafc;
display: flex;
align-items: center;
gap: 8px;
}
.ticket-foot .lab { font-size: 12px; color: var(--text-muted); }
.ticket-foot .thumb {
width: 36px;
height: 36px;
border-radius: 6px;
background: #ecfdf5;
border: 1px solid #a7f3d0;
}
.footer-note {
margin-top: 8px;
padding: 14px 16px;
background: #fff;
border: 1px solid var(--border-soft);
border-radius: 8px;
font-size: 13px;
color: var(--text-muted);
}
.footer-note strong { color: var(--text); }
</style>
</head>
<body>
<div class="page">
<header class="head">
<h1>回传卡片 · <span>重新设计</span></h1>
<p>
上一版三种「上下 KV / 指标卡 / 左右行」都不合适。本页换成三种完全不同的语言:
<b>单据表</b>、<b>摘要优先</b>、<b>回执小票</b>。请直接点名要哪一种(或混搭)。
</p>
</header>
<!-- 1 -->
<section class="block">
<h2>方案 1 · 单据表 <span class="pick pick-1">贴近现有 ViewKvTable</span></h2>
<p class="desc">放弃「漂浮的上下摆」,改成管理端熟悉的「左标签右值」表格。数量单元格加大、红色。信息密度高、和系统其它查看弹窗一致。</p>
<div class="row3">
<article class="panel">
<div class="panel-hd">
<h3>司机回传信息</h3>
<div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
</div>
<table class="kv-table">
<tr>
<th>实际数量</th>
<td class="red">28.5 吨</td>
<th>品牌数量</th>
<td class="red">云化 18.5 / 华谊 10</td>
</tr>
<tr>
<th>回传时间</th>
<td>2026-07-31 14:22</td>
<th>回传备注</th>
<td>货已装完,现场确认无误</td>
</tr>
<tr>
<th>回传附件</th>
<td colspan="3">
<div class="thumbs"><span class="thumb">图1</span><span class="thumb">图2</span></div>
</td>
</tr>
</table>
</article>
<article class="panel">
<div class="panel-hd">
<h3>出库单回传</h3>
<div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
</div>
<table class="kv-table">
<tr>
<th>单号</th>
<td>CK20260731001</td>
<th>状态</th>
<td><span class="tag">已完成</span></td>
</tr>
<tr>
<th>计划号</th>
<td>PL-202607-088</td>
<th>车牌</th>
<td>皖H·D1234</td>
</tr>
<tr>
<th>往来单位</th>
<td colspan="3">安庆某某化工有限公司</td>
</tr>
<tr>
<th>实际数量</th>
<td class="red">28.5 吨</td>
<th>品牌数量</th>
<td class="red">云化 18.5 / 华谊 10</td>
</tr>
<tr>
<th>现场备注</th>
<td>过磅完成,单据已签</td>
<th>现场附件</th>
<td><div class="thumbs"><span class="thumb">图1</span></div></td>
</tr>
</table>
</article>
<article class="panel">
<div class="panel-hd"><h3>地磅单信息(示意)</h3></div>
<table class="kv-table">
<tr>
<th>出入库单号</th>
<td>RK20260731008</td>
<th>业务类型</th>
<td><span class="tag">出库</span></td>
</tr>
<tr>
<th>毛重</th>
<td>42580 kg</td>
<th>皮重</th>
<td>14200 kg</td>
</tr>
<tr>
<th>净重</th>
<td class="red">28380 kg</td>
<th>车牌</th>
<td>皖H·D1234</td>
</tr>
</table>
</article>
</div>
</section>
<!-- 2 -->
<section class="block">
<h2>方案 2 · 摘要优先 <span class="pick pick-2">先看结论</span></h2>
<p class="desc">卡片顶部用一句「结论句」把数量讲清楚,其余降级成胶囊标签。适合一眼扫量,弱化字段罗列感。</p>
<div class="row3">
<article class="panel">
<div class="panel-hd">
<h3>司机回传信息</h3>
<div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
</div>
<div class="summary-card">
<div class="summary-hero">
<div class="kicker">司机已回传</div>
<div class="main">实际 <strong>28.5</strong> 吨</div>
<div class="sub">品牌构成:云化 18.5 · 华谊 10</div>
</div>
<div class="chip-row">
<span class="chip"><b>时间</b><span class="t">2026-07-31 14:22</span></span>
<span class="chip"><b>备注</b><span class="t">货已装完,现场确认无误</span></span>
</div>
<div class="media-row">
<span class="lab">附件</span>
<span class="thumb"></span>
<span class="thumb"></span>
</div>
</div>
</article>
<article class="panel">
<div class="panel-hd">
<h3>出库单回传</h3>
<div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
</div>
<div class="summary-card">
<div class="summary-hero">
<div class="kicker">出库单 · 已完成 · CK20260731001</div>
<div class="main">实际 <strong>28.5</strong> 吨</div>
<div class="sub">云化 18.5 · 华谊 10 | 皖H·D1234</div>
</div>
<div class="chip-row">
<span class="chip"><b>计划</b><span class="t">PL-202607-088</span></span>
<span class="chip"><b>往来</b><span class="t">安庆某某化工有限公司</span></span>
<span class="chip"><b>备注</b><span class="t">过磅完成,单据已签</span></span>
</div>
<div class="media-row">
<span class="lab">附件</span>
<span class="thumb"></span>
</div>
</div>
</article>
<article class="panel">
<div class="panel-hd"><h3>地磅单信息(示意)</h3></div>
<div class="summary-card">
<div class="summary-hero">
<div class="kicker">地磅 · 出库 · RK20260731008</div>
<div class="main">净重 <strong>28.38</strong> 吨</div>
<div class="sub">毛重 42.58 · 皮重 14.20 | 皖H·D1234</div>
</div>
<div class="chip-row">
<span class="chip"><b>往来</b><span class="t">安庆某某化工</span></span>
<span class="chip"><b>状态</b><span class="t">已过磅</span></span>
</div>
</div>
</article>
</div>
</section>
<!-- 3 -->
<section class="block">
<h2>方案 3 · 回执小票 <span class="pick pick-3">像一张回执</span></h2>
<p class="desc">顶部条带写时间/身份,中间居中放大数量,下方清单式字段。结构像「装车回执」,不是普通表单字段堆叠。</p>
<div class="row3">
<article class="panel">
<div class="panel-hd">
<h3>司机回传信息</h3>
<div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
</div>
<div class="ticket">
<div class="ticket-band">
<span class="who">司机回传回执</span>
<span class="when">2026-07-31 14:22</span>
</div>
<div class="ticket-qty">
<div>
<div class="lab">实际数量(吨)</div>
<div class="val">28.5</div>
</div>
<div>
<div class="lab">品牌数量</div>
<div class="val sm">云化 18.5<br />华谊 10</div>
</div>
</div>
<div class="ticket-lines">
<div class="ticket-line"><span class="lab">回传备注</span><span class="val">货已装完,现场确认无误</span></div>
</div>
<div class="ticket-foot">
<span class="lab">附件</span>
<span class="thumb"></span>
<span class="thumb"></span>
</div>
</div>
</article>
<article class="panel">
<div class="panel-hd">
<h3>出库单回传</h3>
<div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
</div>
<div class="ticket">
<div class="ticket-band">
<span class="who">出库单 CK20260731001 · 已完成</span>
<span class="when">PL-202607-088</span>
</div>
<div class="ticket-qty">
<div>
<div class="lab">实际数量(吨)</div>
<div class="val">28.5</div>
</div>
<div>
<div class="lab">品牌数量</div>
<div class="val sm">云化 18.5 / 华谊 10</div>
</div>
</div>
<div class="ticket-lines">
<div class="ticket-line"><span class="lab">车牌</span><span class="val">皖H·D1234</span></div>
<div class="ticket-line"><span class="lab">往来单位</span><span class="val">安庆某某化工有限公司</span></div>
<div class="ticket-line"><span class="lab">现场备注</span><span class="val">过磅完成,单据已签</span></div>
</div>
<div class="ticket-foot">
<span class="lab">附件</span>
<span class="thumb"></span>
</div>
</div>
</article>
<article class="panel">
<div class="panel-hd"><h3>地磅单信息(示意)</h3></div>
<div class="ticket">
<div class="ticket-band">
<span class="who">地磅回执 · 出库</span>
<span class="when">RK20260731008</span>
</div>
<div class="ticket-qty">
<div>
<div class="lab">净重(吨)</div>
<div class="val">28.38</div>
</div>
<div>
<div class="lab">毛重 / 皮重</div>
<div class="val sm">42.58 / 14.20</div>
</div>
</div>
<div class="ticket-lines">
<div class="ticket-line"><span class="lab">车牌</span><span class="val">皖H·D1234</span></div>
<div class="ticket-line"><span class="lab">往来单位</span><span class="val">安庆某某化工</span></div>
</div>
</div>
</article>
</div>
</section>
<div class="footer-note">
<strong>怎么选:</strong>
要和系统其它查看页统一 → 选 <strong>方案 1</strong>;
归档时最关心「装了多少」→ 选 <strong>方案 2</strong>;
想强调「这是一份回传凭证」→ 选 <strong>方案 3</strong>。
也可以说「1 的表格 + 2 的顶部结论」这类混搭。文件:
<code>docs/fresh-mint-pl-feedback-kv-polish-demo.html</code>
</div>
</div>
</body>
</html>