fresh-mint-pl-feedback-kv-polish-demo.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Fresh Mint · 回传卡片 KV 重设计 Demo</title>
  7. <link rel="preconnect" href="https://fonts.googleapis.com" />
  8. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  9. <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
  10. <style>
  11. :root {
  12. --primary: #10b981;
  13. --primary-dark: #059669;
  14. --primary-bg: #ecfdf5;
  15. --text: #1e293b;
  16. --text-muted: #64748b;
  17. --border: #d9e8e2;
  18. --border-soft: #e2e8f0;
  19. --surface: #fff;
  20. --table-head: #f8fafc;
  21. --danger: #dc2626;
  22. --warn: #d97706;
  23. --radius: 10px;
  24. }
  25. * { box-sizing: border-box; }
  26. body {
  27. margin: 0;
  28. font-family: Inter, -apple-system, sans-serif;
  29. font-size: 14px;
  30. line-height: 1.5;
  31. color: var(--text);
  32. background: #eef2f6;
  33. }
  34. .page { max-width: 1200px; margin: 0 auto; padding: 32px 20px 72px; }
  35. .head { margin-bottom: 28px; }
  36. .head h1 { margin: 0 0 8px; font-size: 24px; font-weight: 700; }
  37. .head h1 span { color: var(--primary-dark); }
  38. .head p { margin: 0; color: var(--text-muted); max-width: 760px; }
  39. .block { margin-bottom: 36px; }
  40. .block > h2 {
  41. margin: 0 0 6px;
  42. font-size: 16px;
  43. font-weight: 700;
  44. }
  45. .block > .desc {
  46. margin: 0 0 14px;
  47. font-size: 13px;
  48. color: var(--text-muted);
  49. }
  50. .pick {
  51. display: inline-block;
  52. margin-left: 8px;
  53. padding: 1px 8px;
  54. border-radius: 999px;
  55. font-size: 11px;
  56. font-weight: 600;
  57. vertical-align: middle;
  58. }
  59. .pick-1 { background: #ecfdf5; color: var(--primary-dark); }
  60. .pick-2 { background: #eff6ff; color: #1d4ed8; }
  61. .pick-3 { background: #fff7ed; color: #c2410c; }
  62. .row3 {
  63. display: grid;
  64. grid-template-columns: repeat(3, minmax(0, 1fr));
  65. gap: 14px;
  66. }
  67. @media (max-width: 980px) {
  68. .row3 { grid-template-columns: 1fr; }
  69. }
  70. .panel {
  71. background: var(--surface);
  72. border: 1px solid var(--border-soft);
  73. border-radius: var(--radius);
  74. padding: 14px;
  75. min-height: 300px;
  76. display: flex;
  77. flex-direction: column;
  78. }
  79. .panel-hd {
  80. display: flex;
  81. align-items: center;
  82. justify-content: space-between;
  83. gap: 8px;
  84. margin-bottom: 12px;
  85. }
  86. .panel-hd h3 {
  87. margin: 0;
  88. padding-left: 10px;
  89. border-left: 3px solid var(--primary);
  90. color: var(--primary-dark);
  91. font-size: 14px;
  92. font-weight: 600;
  93. line-height: 1.2;
  94. }
  95. .ops { display: flex; gap: 6px; }
  96. .btn {
  97. height: 28px;
  98. padding: 0 10px;
  99. border-radius: 6px;
  100. border: 1px solid var(--border-soft);
  101. background: #fff;
  102. font-size: 12px;
  103. font-weight: 500;
  104. color: var(--text);
  105. }
  106. .btn-p { background: var(--primary); border-color: var(--primary); color: #fff; }
  107. /* ========== 方案 1:单据表(系统原生 ViewKv 表格式) ========== */
  108. .kv-table {
  109. width: 100%;
  110. border-collapse: collapse;
  111. table-layout: fixed;
  112. border: 1px solid var(--border);
  113. border-radius: 8px;
  114. overflow: hidden;
  115. background: #fff;
  116. }
  117. .kv-table th,
  118. .kv-table td {
  119. padding: 9px 12px;
  120. border-bottom: 1px solid #eef2f6;
  121. border-right: 1px solid #eef2f6;
  122. vertical-align: top;
  123. text-align: left;
  124. line-height: 1.4;
  125. }
  126. .kv-table tr:last-child th,
  127. .kv-table tr:last-child td { border-bottom: none; }
  128. .kv-table th {
  129. width: 78px;
  130. background: var(--table-head);
  131. color: var(--text-muted);
  132. font-size: 12px;
  133. font-weight: 500;
  134. white-space: nowrap;
  135. }
  136. .kv-table td {
  137. font-size: 13px;
  138. font-weight: 600;
  139. color: var(--text);
  140. word-break: break-word;
  141. }
  142. .kv-table td.red { color: var(--danger); font-size: 15px; }
  143. .kv-table .tag {
  144. display: inline-block;
  145. padding: 1px 8px;
  146. border-radius: 4px;
  147. background: #059669;
  148. color: #fff;
  149. font-size: 12px;
  150. font-weight: 600;
  151. }
  152. .kv-table .thumbs {
  153. display: flex;
  154. gap: 6px;
  155. flex-wrap: wrap;
  156. }
  157. .kv-table .thumb {
  158. width: 40px;
  159. height: 40px;
  160. border-radius: 6px;
  161. background: #ecfdf5;
  162. border: 1px solid #a7f3d0;
  163. display: grid;
  164. place-items: center;
  165. font-size: 11px;
  166. color: var(--primary-dark);
  167. font-weight: 600;
  168. }
  169. /* ========== 方案 2:一句摘要 + 次要元信息 ========== */
  170. .summary-card { display: flex; flex-direction: column; gap: 12px; }
  171. .summary-hero {
  172. padding: 14px 14px 12px;
  173. border-radius: 8px;
  174. background: #0f172a;
  175. color: #f8fafc;
  176. }
  177. .summary-hero .kicker {
  178. font-size: 11px;
  179. font-weight: 500;
  180. color: #94a3b8;
  181. margin-bottom: 6px;
  182. }
  183. .summary-hero .main {
  184. font-size: 20px;
  185. font-weight: 700;
  186. letter-spacing: -0.02em;
  187. line-height: 1.25;
  188. }
  189. .summary-hero .main strong { color: #fca5a5; font-weight: 700; }
  190. .summary-hero .sub {
  191. margin-top: 8px;
  192. font-size: 12px;
  193. color: #cbd5e1;
  194. line-height: 1.45;
  195. }
  196. .chip-row { display: flex; flex-wrap: wrap; gap: 8px; }
  197. .chip {
  198. display: inline-flex;
  199. align-items: center;
  200. gap: 6px;
  201. max-width: 100%;
  202. padding: 6px 10px;
  203. border-radius: 999px;
  204. background: #f8fafc;
  205. border: 1px solid var(--border-soft);
  206. font-size: 12px;
  207. color: var(--text);
  208. }
  209. .chip b { color: var(--text-muted); font-weight: 500; }
  210. .chip .t { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 180px; }
  211. .media-row {
  212. display: flex;
  213. align-items: center;
  214. gap: 8px;
  215. padding-top: 2px;
  216. }
  217. .media-row .lab { font-size: 12px; color: var(--text-muted); white-space: nowrap; }
  218. .media-row .thumb {
  219. width: 44px;
  220. height: 44px;
  221. border-radius: 8px;
  222. object-fit: cover;
  223. background: linear-gradient(135deg, #d1fae5, #a7f3d0);
  224. border: 1px solid #a7f3d0;
  225. }
  226. /* ========== 方案 3:回执 / 小票式 ========== */
  227. .ticket {
  228. border: 1px solid var(--border-soft);
  229. border-radius: 8px;
  230. overflow: hidden;
  231. background: #fff;
  232. }
  233. .ticket-band {
  234. display: flex;
  235. align-items: center;
  236. justify-content: space-between;
  237. gap: 8px;
  238. padding: 10px 12px;
  239. background: linear-gradient(90deg, #ecfdf5 0%, #f0fdf4 60%, #fff 100%);
  240. border-bottom: 1px solid #d1fae5;
  241. }
  242. .ticket-band .who {
  243. font-size: 12px;
  244. font-weight: 600;
  245. color: var(--primary-dark);
  246. }
  247. .ticket-band .when {
  248. font-size: 12px;
  249. color: var(--text-muted);
  250. font-variant-numeric: tabular-nums;
  251. white-space: nowrap;
  252. }
  253. .ticket-qty {
  254. display: grid;
  255. grid-template-columns: 1fr 1fr;
  256. gap: 0;
  257. border-bottom: 1px dashed #e2e8f0;
  258. }
  259. .ticket-qty > div {
  260. padding: 12px;
  261. text-align: center;
  262. }
  263. .ticket-qty > div + div { border-left: 1px dashed #e2e8f0; }
  264. .ticket-qty .lab {
  265. font-size: 11px;
  266. color: var(--text-muted);
  267. margin-bottom: 4px;
  268. }
  269. .ticket-qty .val {
  270. font-size: 22px;
  271. font-weight: 700;
  272. color: var(--danger);
  273. font-variant-numeric: tabular-nums;
  274. letter-spacing: -0.02em;
  275. line-height: 1.1;
  276. }
  277. .ticket-qty .val.sm { font-size: 14px; line-height: 1.35; }
  278. .ticket-lines { padding: 4px 0; }
  279. .ticket-line {
  280. display: grid;
  281. grid-template-columns: 72px 1fr;
  282. gap: 8px;
  283. padding: 7px 12px;
  284. font-size: 13px;
  285. }
  286. .ticket-line .lab { color: var(--text-muted); }
  287. .ticket-line .val { font-weight: 600; color: var(--text); word-break: break-word; }
  288. .ticket-foot {
  289. padding: 10px 12px;
  290. border-top: 1px dashed #e2e8f0;
  291. background: #f8fafc;
  292. display: flex;
  293. align-items: center;
  294. gap: 8px;
  295. }
  296. .ticket-foot .lab { font-size: 12px; color: var(--text-muted); }
  297. .ticket-foot .thumb {
  298. width: 36px;
  299. height: 36px;
  300. border-radius: 6px;
  301. background: #ecfdf5;
  302. border: 1px solid #a7f3d0;
  303. }
  304. .footer-note {
  305. margin-top: 8px;
  306. padding: 14px 16px;
  307. background: #fff;
  308. border: 1px solid var(--border-soft);
  309. border-radius: 8px;
  310. font-size: 13px;
  311. color: var(--text-muted);
  312. }
  313. .footer-note strong { color: var(--text); }
  314. </style>
  315. </head>
  316. <body>
  317. <div class="page">
  318. <header class="head">
  319. <h1>回传卡片 · <span>重新设计</span></h1>
  320. <p>
  321. 上一版三种「上下 KV / 指标卡 / 左右行」都不合适。本页换成三种完全不同的语言:
  322. <b>单据表</b>、<b>摘要优先</b>、<b>回执小票</b>。请直接点名要哪一种(或混搭)。
  323. </p>
  324. </header>
  325. <!-- 1 -->
  326. <section class="block">
  327. <h2>方案 1 · 单据表 <span class="pick pick-1">贴近现有 ViewKvTable</span></h2>
  328. <p class="desc">放弃「漂浮的上下摆」,改成管理端熟悉的「左标签右值」表格。数量单元格加大、红色。信息密度高、和系统其它查看弹窗一致。</p>
  329. <div class="row3">
  330. <article class="panel">
  331. <div class="panel-hd">
  332. <h3>司机回传信息</h3>
  333. <div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
  334. </div>
  335. <table class="kv-table">
  336. <tr>
  337. <th>实际数量</th>
  338. <td class="red">28.5 吨</td>
  339. <th>品牌数量</th>
  340. <td class="red">云化 18.5 / 华谊 10</td>
  341. </tr>
  342. <tr>
  343. <th>回传时间</th>
  344. <td>2026-07-31 14:22</td>
  345. <th>回传备注</th>
  346. <td>货已装完,现场确认无误</td>
  347. </tr>
  348. <tr>
  349. <th>回传附件</th>
  350. <td colspan="3">
  351. <div class="thumbs"><span class="thumb">图1</span><span class="thumb">图2</span></div>
  352. </td>
  353. </tr>
  354. </table>
  355. </article>
  356. <article class="panel">
  357. <div class="panel-hd">
  358. <h3>出库单回传</h3>
  359. <div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
  360. </div>
  361. <table class="kv-table">
  362. <tr>
  363. <th>单号</th>
  364. <td>CK20260731001</td>
  365. <th>状态</th>
  366. <td><span class="tag">已完成</span></td>
  367. </tr>
  368. <tr>
  369. <th>计划号</th>
  370. <td>PL-202607-088</td>
  371. <th>车牌</th>
  372. <td>皖H·D1234</td>
  373. </tr>
  374. <tr>
  375. <th>往来单位</th>
  376. <td colspan="3">安庆某某化工有限公司</td>
  377. </tr>
  378. <tr>
  379. <th>实际数量</th>
  380. <td class="red">28.5 吨</td>
  381. <th>品牌数量</th>
  382. <td class="red">云化 18.5 / 华谊 10</td>
  383. </tr>
  384. <tr>
  385. <th>现场备注</th>
  386. <td>过磅完成,单据已签</td>
  387. <th>现场附件</th>
  388. <td><div class="thumbs"><span class="thumb">图1</span></div></td>
  389. </tr>
  390. </table>
  391. </article>
  392. <article class="panel">
  393. <div class="panel-hd"><h3>地磅单信息(示意)</h3></div>
  394. <table class="kv-table">
  395. <tr>
  396. <th>出入库单号</th>
  397. <td>RK20260731008</td>
  398. <th>业务类型</th>
  399. <td><span class="tag">出库</span></td>
  400. </tr>
  401. <tr>
  402. <th>毛重</th>
  403. <td>42580 kg</td>
  404. <th>皮重</th>
  405. <td>14200 kg</td>
  406. </tr>
  407. <tr>
  408. <th>净重</th>
  409. <td class="red">28380 kg</td>
  410. <th>车牌</th>
  411. <td>皖H·D1234</td>
  412. </tr>
  413. </table>
  414. </article>
  415. </div>
  416. </section>
  417. <!-- 2 -->
  418. <section class="block">
  419. <h2>方案 2 · 摘要优先 <span class="pick pick-2">先看结论</span></h2>
  420. <p class="desc">卡片顶部用一句「结论句」把数量讲清楚,其余降级成胶囊标签。适合一眼扫量,弱化字段罗列感。</p>
  421. <div class="row3">
  422. <article class="panel">
  423. <div class="panel-hd">
  424. <h3>司机回传信息</h3>
  425. <div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
  426. </div>
  427. <div class="summary-card">
  428. <div class="summary-hero">
  429. <div class="kicker">司机已回传</div>
  430. <div class="main">实际 <strong>28.5</strong> 吨</div>
  431. <div class="sub">品牌构成:云化 18.5 · 华谊 10</div>
  432. </div>
  433. <div class="chip-row">
  434. <span class="chip"><b>时间</b><span class="t">2026-07-31 14:22</span></span>
  435. <span class="chip"><b>备注</b><span class="t">货已装完,现场确认无误</span></span>
  436. </div>
  437. <div class="media-row">
  438. <span class="lab">附件</span>
  439. <span class="thumb"></span>
  440. <span class="thumb"></span>
  441. </div>
  442. </div>
  443. </article>
  444. <article class="panel">
  445. <div class="panel-hd">
  446. <h3>出库单回传</h3>
  447. <div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
  448. </div>
  449. <div class="summary-card">
  450. <div class="summary-hero">
  451. <div class="kicker">出库单 · 已完成 · CK20260731001</div>
  452. <div class="main">实际 <strong>28.5</strong> 吨</div>
  453. <div class="sub">云化 18.5 · 华谊 10 | 皖H·D1234</div>
  454. </div>
  455. <div class="chip-row">
  456. <span class="chip"><b>计划</b><span class="t">PL-202607-088</span></span>
  457. <span class="chip"><b>往来</b><span class="t">安庆某某化工有限公司</span></span>
  458. <span class="chip"><b>备注</b><span class="t">过磅完成,单据已签</span></span>
  459. </div>
  460. <div class="media-row">
  461. <span class="lab">附件</span>
  462. <span class="thumb"></span>
  463. </div>
  464. </div>
  465. </article>
  466. <article class="panel">
  467. <div class="panel-hd"><h3>地磅单信息(示意)</h3></div>
  468. <div class="summary-card">
  469. <div class="summary-hero">
  470. <div class="kicker">地磅 · 出库 · RK20260731008</div>
  471. <div class="main">净重 <strong>28.38</strong> 吨</div>
  472. <div class="sub">毛重 42.58 · 皮重 14.20 | 皖H·D1234</div>
  473. </div>
  474. <div class="chip-row">
  475. <span class="chip"><b>往来</b><span class="t">安庆某某化工</span></span>
  476. <span class="chip"><b>状态</b><span class="t">已过磅</span></span>
  477. </div>
  478. </div>
  479. </article>
  480. </div>
  481. </section>
  482. <!-- 3 -->
  483. <section class="block">
  484. <h2>方案 3 · 回执小票 <span class="pick pick-3">像一张回执</span></h2>
  485. <p class="desc">顶部条带写时间/身份,中间居中放大数量,下方清单式字段。结构像「装车回执」,不是普通表单字段堆叠。</p>
  486. <div class="row3">
  487. <article class="panel">
  488. <div class="panel-hd">
  489. <h3>司机回传信息</h3>
  490. <div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
  491. </div>
  492. <div class="ticket">
  493. <div class="ticket-band">
  494. <span class="who">司机回传回执</span>
  495. <span class="when">2026-07-31 14:22</span>
  496. </div>
  497. <div class="ticket-qty">
  498. <div>
  499. <div class="lab">实际数量(吨)</div>
  500. <div class="val">28.5</div>
  501. </div>
  502. <div>
  503. <div class="lab">品牌数量</div>
  504. <div class="val sm">云化 18.5<br />华谊 10</div>
  505. </div>
  506. </div>
  507. <div class="ticket-lines">
  508. <div class="ticket-line"><span class="lab">回传备注</span><span class="val">货已装完,现场确认无误</span></div>
  509. </div>
  510. <div class="ticket-foot">
  511. <span class="lab">附件</span>
  512. <span class="thumb"></span>
  513. <span class="thumb"></span>
  514. </div>
  515. </div>
  516. </article>
  517. <article class="panel">
  518. <div class="panel-hd">
  519. <h3>出库单回传</h3>
  520. <div class="ops"><button class="btn btn-p" type="button">编辑</button></div>
  521. </div>
  522. <div class="ticket">
  523. <div class="ticket-band">
  524. <span class="who">出库单 CK20260731001 · 已完成</span>
  525. <span class="when">PL-202607-088</span>
  526. </div>
  527. <div class="ticket-qty">
  528. <div>
  529. <div class="lab">实际数量(吨)</div>
  530. <div class="val">28.5</div>
  531. </div>
  532. <div>
  533. <div class="lab">品牌数量</div>
  534. <div class="val sm">云化 18.5 / 华谊 10</div>
  535. </div>
  536. </div>
  537. <div class="ticket-lines">
  538. <div class="ticket-line"><span class="lab">车牌</span><span class="val">皖H·D1234</span></div>
  539. <div class="ticket-line"><span class="lab">往来单位</span><span class="val">安庆某某化工有限公司</span></div>
  540. <div class="ticket-line"><span class="lab">现场备注</span><span class="val">过磅完成,单据已签</span></div>
  541. </div>
  542. <div class="ticket-foot">
  543. <span class="lab">附件</span>
  544. <span class="thumb"></span>
  545. </div>
  546. </div>
  547. </article>
  548. <article class="panel">
  549. <div class="panel-hd"><h3>地磅单信息(示意)</h3></div>
  550. <div class="ticket">
  551. <div class="ticket-band">
  552. <span class="who">地磅回执 · 出库</span>
  553. <span class="when">RK20260731008</span>
  554. </div>
  555. <div class="ticket-qty">
  556. <div>
  557. <div class="lab">净重(吨)</div>
  558. <div class="val">28.38</div>
  559. </div>
  560. <div>
  561. <div class="lab">毛重 / 皮重</div>
  562. <div class="val sm">42.58 / 14.20</div>
  563. </div>
  564. </div>
  565. <div class="ticket-lines">
  566. <div class="ticket-line"><span class="lab">车牌</span><span class="val">皖H·D1234</span></div>
  567. <div class="ticket-line"><span class="lab">往来单位</span><span class="val">安庆某某化工</span></div>
  568. </div>
  569. </div>
  570. </article>
  571. </div>
  572. </section>
  573. <div class="footer-note">
  574. <strong>怎么选:</strong>
  575. 要和系统其它查看页统一 → 选 <strong>方案 1</strong>;
  576. 归档时最关心「装了多少」→ 选 <strong>方案 2</strong>;
  577. 想强调「这是一份回传凭证」→ 选 <strong>方案 3</strong>。
  578. 也可以说「1 的表格 + 2 的顶部结论」这类混搭。文件:
  579. <code>docs/fresh-mint-pl-feedback-kv-polish-demo.html</code>
  580. </div>
  581. </div>
  582. </body>
  583. </html>