| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- <!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>mobile-oa-h5 · 详情头区去掉标题 + 打印印章 Demo</title>
- <style>
- :root {
- --brand: #0a9f6d;
- --brand-dark: #087f57;
- --brand-soft: #e9f9f2;
- --page-bg: #f5f6f8;
- --text: #1f2a26;
- --text-muted: #6b7b74;
- --nav-bg: #ecfdf5;
- }
- * { box-sizing: border-box; }
- body {
- margin: 0;
- font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans SC", -apple-system, system-ui, sans-serif;
- color: var(--text);
- background:
- radial-gradient(900px 420px at 8% -8%, rgba(10, 159, 109, 0.12), transparent 55%),
- radial-gradient(700px 380px at 92% 0%, rgba(214, 163, 67, 0.1), transparent 50%),
- linear-gradient(180deg, #f8fffc 0%, #f4f7fb 50%, #f7f8fa 100%);
- line-height: 1.45;
- }
- .stage { max-width: 1280px; margin: 0 auto; padding: 28px 16px 56px; }
- .hero h1 { margin: 0 0 8px; font-size: 22px; font-weight: 720; }
- .hero p { margin: 0; color: #64748b; font-size: 14px; max-width: 820px; }
- .hero .note {
- margin-top: 12px; display: inline-block; padding: 8px 12px;
- border-radius: 10px; background: #fff; border: 1px solid #e2e8f0;
- font-size: 12px; color: #64748b;
- }
- .hero .note strong { color: #0f766e; }
- .goals {
- margin-top: 14px; padding: 12px 14px; border-radius: 12px;
- background: #ecfdf5; border: 1px solid #a7f3d0;
- font-size: 13px; color: #065f46;
- }
- .goals ul { margin: 6px 0 0; padding-left: 18px; }
- .grid {
- margin-top: 22px;
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
- gap: 20px;
- align-items: start;
- }
- .card {
- background: rgba(255,255,255,.94);
- border: 1px solid #e2e8f0;
- border-radius: 16px;
- padding: 14px;
- box-shadow: 0 10px 28px rgba(15,23,42,.05);
- }
- .card h2 {
- margin: 0 0 4px;
- font-size: 15px;
- display: flex;
- align-items: center;
- gap: 8px;
- }
- .card .sub { margin: 0 0 12px; font-size: 12px; color: #64748b; }
- .pill {
- display: inline-block;
- padding: 2px 8px;
- border-radius: 999px;
- font-size: 10px;
- font-weight: 700;
- letter-spacing: 0.02em;
- }
- .pill.now { background: #fff1f2; color: #be123c; border: 1px solid #fecdd3; }
- .pill.rec { background: #ecfdf5; color: #047857; border: 1px solid #a7f3d0; }
- .pill.alt { background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
- /* phone frame */
- .phone {
- width: 100%;
- max-width: 360px;
- margin: 0 auto;
- border-radius: 28px;
- border: 1px solid #cbd5e1;
- background: #0f172a;
- padding: 10px;
- box-shadow: 0 18px 40px rgba(15, 23, 42, 0.12);
- }
- .phone__screen {
- border-radius: 20px;
- overflow: hidden;
- background: var(--page-bg);
- min-height: 520px;
- display: flex;
- flex-direction: column;
- }
- .nav {
- display: flex;
- align-items: center;
- gap: 8px;
- min-height: 48px;
- padding: 10px 12px;
- background: linear-gradient(180deg, #d1fae5 0%, var(--nav-bg) 100%);
- border-bottom: 1px solid #bbf7d0;
- }
- .nav__back {
- width: 28px; height: 28px; border-radius: 999px;
- display: grid; place-items: center;
- color: var(--brand-dark); font-weight: 700; font-size: 16px;
- background: rgba(255,255,255,.55);
- }
- .nav__title {
- flex: 1; min-width: 0;
- font-size: 15px; font-weight: 700;
- color: #064e3b;
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
- }
- .body {
- position: relative;
- flex: 1;
- padding: 12px 12px 20px;
- }
- .body--stamp-pad {
- padding-top: 8px;
- }
- /* current header: title + tag */
- .hd {
- display: flex;
- flex-wrap: wrap;
- gap: 8px;
- align-items: center;
- margin-bottom: 12px;
- padding: 4px 2px;
- }
- .hd__title {
- margin: 0;
- font-size: 17px;
- font-weight: 700;
- line-height: 1.35;
- color: #0f291e;
- }
- .tag {
- flex-shrink: 0;
- padding: 2px 8px;
- border-radius: 6px;
- font-size: 12px;
- font-weight: 600;
- color: #10b981;
- background: #ecfdf5;
- }
- .dup-hint {
- outline: 2px dashed #f43f5e;
- outline-offset: 2px;
- border-radius: 4px;
- background: rgba(244, 63, 94, 0.06);
- }
- /* form fake */
- .form {
- background: #fff;
- border: 1px solid #e8edf2;
- border-radius: 12px;
- overflow: hidden;
- }
- .form__row {
- display: grid;
- grid-template-columns: 88px 1fr;
- border-bottom: 1px solid #f1f5f9;
- min-height: 44px;
- }
- .form__row:last-child { border-bottom: 0; }
- .form__k {
- padding: 10px 12px;
- font-size: 12px;
- color: #64748b;
- background: #fafbfc;
- border-right: 1px solid #f1f5f9;
- display: flex; align-items: center;
- }
- .form__v {
- padding: 10px 12px;
- font-size: 13px;
- color: #0f172a;
- display: flex; align-items: center;
- }
- .tl {
- margin-top: 12px;
- background: #fff;
- border: 1px solid #e8edf2;
- border-radius: 12px;
- padding: 12px;
- }
- .tl h3 { margin: 0 0 8px; font-size: 13px; color: #334155; }
- .tl p { margin: 0; font-size: 12px; color: #64748b; }
- /* ===== 印章 v4(对齐 web-admin OaApprovalPrintSheet) ===== */
- .stamp-host {
- position: relative;
- min-height: 0;
- }
- .oa-stamp {
- --stamp: #3ec9a8;
- position: absolute;
- top: -2px;
- right: 4px;
- width: 96px;
- height: 96px;
- z-index: 5;
- pointer-events: none;
- transform: rotate(-18deg);
- opacity: 0.88;
- color: var(--stamp);
- }
- .oa-stamp.ok { --stamp: #3ec9a8; }
- .oa-stamp.run { --stamp: #f0a020; }
- .oa-stamp.rej { --stamp: #e85d5d; }
- .oa-stamp.ret { --stamp: #e07070; }
- .oa-stamp.can { --stamp: #9aa0a6; }
- .oa-stamp .outer {
- position: absolute;
- inset: 0;
- border-radius: 50%;
- border: 4px solid currentColor;
- box-sizing: border-box;
- }
- .oa-stamp .arc-top,
- .oa-stamp .arc-bottom {
- position: absolute;
- left: 12px;
- right: 12px;
- border: 2px solid currentColor;
- opacity: 0.95;
- pointer-events: none;
- }
- .oa-stamp .arc-top {
- top: 9px;
- height: 28px;
- border-bottom: none;
- border-left-color: transparent;
- border-right-color: transparent;
- border-radius: 50% 50% 0 0 / 100% 100% 0 0;
- }
- .oa-stamp .arc-bottom {
- bottom: 9px;
- height: 28px;
- border-top: none;
- border-left-color: transparent;
- border-right-color: transparent;
- border-radius: 0 0 50% 50% / 0 0 100% 100%;
- }
- .oa-stamp .label-top {
- position: absolute;
- top: 18px;
- left: 0; right: 0;
- text-align: center;
- font-size: 9px;
- font-weight: 500;
- letter-spacing: 1.5px;
- line-height: 1;
- color: currentColor;
- opacity: 0.95;
- }
- .oa-stamp .label-bottom {
- position: absolute;
- bottom: 16px;
- left: 0; right: 0;
- text-align: center;
- font-size: 8px;
- font-weight: 500;
- letter-spacing: 0.5px;
- line-height: 1;
- color: currentColor;
- opacity: 0.9;
- font-family: Arial, "Helvetica Neue", sans-serif;
- }
- .oa-stamp .main {
- position: absolute;
- inset: 0;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 24px;
- font-weight: 800;
- letter-spacing: 1px;
- line-height: 1;
- color: currentColor;
- font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
- -webkit-text-stroke: 0.3px currentColor;
- }
- .oa-stamp .main.chars-3 {
- font-size: 20px;
- letter-spacing: 0.5px;
- }
- /* A2: 略小印章浮在表单右上(已选 72px) */
- .oa-stamp.sm {
- width: 72px;
- height: 72px;
- top: 8px;
- right: 8px;
- }
- .oa-stamp.sm .outer { border-width: 3px; }
- .oa-stamp.sm .main { font-size: 17px; }
- .oa-stamp.sm .main.chars-3 { font-size: 14px; }
- .oa-stamp.sm .label-top { top: 13px; font-size: 7px; letter-spacing: 1px; }
- .oa-stamp.sm .label-bottom { bottom: 12px; font-size: 6px; }
- .oa-stamp.sm .arc-top { top: 7px; height: 20px; left: 8px; right: 8px; }
- .oa-stamp.sm .arc-bottom { bottom: 7px; height: 20px; left: 8px; right: 8px; }
- /* 对照:上一版 84px */
- .oa-stamp.md {
- width: 84px;
- height: 84px;
- top: 6px;
- right: 8px;
- }
- .oa-stamp.md .main { font-size: 20px; }
- .oa-stamp.md .main.chars-3 { font-size: 17px; }
- .oa-stamp.md .label-top { top: 15px; font-size: 8px; }
- .oa-stamp.md .label-bottom { bottom: 14px; font-size: 7px; }
- .oa-stamp.md .arc-top { top: 8px; height: 24px; left: 10px; right: 10px; }
- .oa-stamp.md .arc-bottom { bottom: 8px; height: 24px; left: 10px; right: 10px; }
- .stamp-row {
- margin-top: 18px;
- display: flex;
- flex-wrap: wrap;
- gap: 16px;
- justify-content: center;
- padding: 16px;
- background: #fff;
- border: 1px dashed #cbd5e1;
- border-radius: 14px;
- }
- .stamp-row .item {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 8px;
- min-width: 110px;
- }
- .stamp-row .item span {
- font-size: 11px;
- color: #64748b;
- }
- .stamp-static {
- position: relative;
- width: 96px;
- height: 96px;
- }
- .stamp-static .oa-stamp {
- position: absolute;
- top: 0; right: 0;
- transform: rotate(-18deg);
- }
- .legend {
- margin-top: 18px;
- padding: 14px 16px;
- border-radius: 14px;
- background: rgba(255,255,255,.94);
- border: 1px solid #e2e8f0;
- font-size: 13px;
- color: #475569;
- }
- .legend h2 { margin: 0 0 8px; font-size: 15px; color: var(--text); }
- .legend ol { margin: 0; padding-left: 18px; }
- .legend li { margin: 4px 0; }
- .legend code {
- font-size: 12px;
- background: #f1f5f9;
- padding: 1px 6px;
- border-radius: 4px;
- }
- </style>
- </head>
- <body>
- <div class="stage">
- <header class="hero">
- <h1>OA 详情 · 去掉内容区流程标题 + 右上角打印印章</h1>
- <p>
- 对比当前「标题 + 已完成 Tag」与目标态「顶栏已有标题,内容区不再重复标题;状态改为对齐 web 打印的钉钉风印章,叠在右上角」。
- 改动落点:<code>mobile-oa-h5/src/views/OaDetail.vue</code>(webview 内嵌页)。
- </p>
- <div class="note">本地打开本文件即可预览 · 文件:<strong>mobile-ui/zkxw-mobile-oa-detail-header-stamp-demo.html</strong></div>
- <div class="goals">
- <strong>目标</strong>
- <ul>
- <li>去掉内容区顶部流程名称(与顶栏标题重复)</li>
- <li>「已完成」等状态 Tag → web 打印同款圆形印章,放在界面右上角</li>
- <li>文案对齐打印:completed →「已通过」(非「已完成」)</li>
- </ul>
- </div>
- </header>
- <div class="grid">
- <!-- 现状 -->
- <section class="card">
- <h2><span class="pill now">现状</span> 标题 + Tag</h2>
- <p class="sub">顶栏与内容区标题重复(红框);状态为小胶囊 Tag。</p>
- <div class="phone">
- <div class="phone__screen">
- <div class="nav">
- <div class="nav__back">‹</div>
- <div class="nav__title">差旅报销申请</div>
- </div>
- <div class="body">
- <header class="hd">
- <h1 class="hd__title dup-hint">差旅报销申请</h1>
- <span class="tag">已完成</span>
- </header>
- <div class="form">
- <div class="form__row"><div class="form__k">申请人</div><div class="form__v">张三</div></div>
- <div class="form__row"><div class="form__k">金额</div><div class="form__v">¥ 1,280.00</div></div>
- <div class="form__row"><div class="form__k">事由</div><div class="form__v">客户拜访差旅</div></div>
- </div>
- <div class="tl">
- <h3>审批进度</h3>
- <p>发起 → 部门负责人(已同意)→ 结束</p>
- </div>
- </div>
- </div>
- </div>
- </section>
- <!-- 选定:A 布局 + 略小印章 -->
- <section class="card">
- <h2><span class="pill rec">已选</span> A 布局 · 印章 72px</h2>
- <p class="sub">去掉内容区标题;钉钉风印章叠在表单右上(相对 web 打印 118px / 上一版 84px 再小一档)。</p>
- <div class="phone">
- <div class="phone__screen">
- <div class="nav">
- <div class="nav__back">‹</div>
- <div class="nav__title">差旅报销申请</div>
- </div>
- <div class="body body--stamp-pad">
- <div class="stamp-host">
- <div class="oa-stamp ok sm" aria-label="已通过">
- <div class="outer"></div>
- <div class="arc-top"></div>
- <div class="arc-bottom"></div>
- <div class="label-top">OA审批</div>
- <div class="main">已通过</div>
- <div class="label-bottom">approval</div>
- </div>
- <div class="form">
- <div class="form__row"><div class="form__k">申请人</div><div class="form__v">张三</div></div>
- <div class="form__row"><div class="form__k">金额</div><div class="form__v">¥ 1,280.00</div></div>
- <div class="form__row"><div class="form__k">事由</div><div class="form__v">客户拜访差旅</div></div>
- <div class="form__row"><div class="form__k">备注</div><div class="form__v">含市内交通</div></div>
- </div>
- </div>
- <div class="tl">
- <h3>审批进度</h3>
- <p>发起 → 部门负责人(已同意)→ 结束</p>
- </div>
- </div>
- </div>
- </div>
- </section>
- <!-- 对照:大一号 -->
- <section class="card">
- <h2><span class="pill alt">对照</span> 若用 84px(未选)</h2>
- <p class="sub">仅尺寸对照;落地用左侧 72px。</p>
- <div class="phone">
- <div class="phone__screen">
- <div class="nav">
- <div class="nav__back">‹</div>
- <div class="nav__title">差旅报销申请</div>
- </div>
- <div class="body body--stamp-pad">
- <div class="stamp-host">
- <div class="oa-stamp ok md" aria-label="已通过">
- <div class="outer"></div>
- <div class="arc-top"></div>
- <div class="arc-bottom"></div>
- <div class="label-top">OA审批</div>
- <div class="main">已通过</div>
- <div class="label-bottom">approval</div>
- </div>
- <div class="form">
- <div class="form__row"><div class="form__k">申请人</div><div class="form__v">张三</div></div>
- <div class="form__row"><div class="form__k">金额</div><div class="form__v">¥ 1,280.00</div></div>
- <div class="form__row"><div class="form__k">事由</div><div class="form__v">客户拜访差旅</div></div>
- <div class="form__row"><div class="form__k">备注</div><div class="form__v">含市内交通</div></div>
- </div>
- </div>
- <div class="tl">
- <h3>审批进度</h3>
- <p>发起 → 部门负责人(已同意)→ 结束</p>
- </div>
- </div>
- </div>
- </div>
- </section>
- </div>
- <section class="legend">
- <h2>各状态印章色(与 web 打印一致)</h2>
- <div class="stamp-row">
- <div class="item">
- <div class="stamp-static">
- <div class="oa-stamp ok">
- <div class="outer"></div><div class="arc-top"></div><div class="arc-bottom"></div>
- <div class="label-top">OA审批</div><div class="main">已通过</div><div class="label-bottom">approval</div>
- </div>
- </div>
- <span>completed / approved → ok</span>
- </div>
- <div class="item">
- <div class="stamp-static">
- <div class="oa-stamp run">
- <div class="outer"></div><div class="arc-top"></div><div class="arc-bottom"></div>
- <div class="label-top">OA审批</div><div class="main">审批中</div><div class="label-bottom">approval</div>
- </div>
- </div>
- <span>running / pending → run</span>
- </div>
- <div class="item">
- <div class="stamp-static">
- <div class="oa-stamp rej">
- <div class="outer"></div><div class="arc-top"></div><div class="arc-bottom"></div>
- <div class="label-top">OA审批</div><div class="main">已拒绝</div><div class="label-bottom">approval</div>
- </div>
- </div>
- <span>rejected → rej</span>
- </div>
- <div class="item">
- <div class="stamp-static">
- <div class="oa-stamp ret">
- <div class="outer"></div><div class="arc-top"></div><div class="arc-bottom"></div>
- <div class="label-top">OA审批</div><div class="main">已打回</div><div class="label-bottom">approval</div>
- </div>
- </div>
- <span>returned → ret</span>
- </div>
- <div class="item">
- <div class="stamp-static">
- <div class="oa-stamp can">
- <div class="outer"></div><div class="arc-top"></div><div class="arc-bottom"></div>
- <div class="label-top">OA审批</div><div class="main">已撤销</div><div class="label-bottom">approval</div>
- </div>
- </div>
- <span>cancelled → can</span>
- </div>
- </div>
- </section>
- <section class="legend">
- <h2>当前共识</h2>
- <ol>
- <li>去掉内容区流程标题(顶栏已有)</li>
- <li>状态改为 web 打印同款印章,叠在表单区域右上角</li>
- <li>尺寸用 <strong>72px</strong>(A 布局 + 再小一档),文案用打印 <code>resolveStamp</code>(如 completed →「已通过」)</li>
- </ol>
- <p style="margin:10px 0 0">若 72px 仍偏大/偏小,直接说目标像素即可;否则回复「按此设计」我写 spec 并实现。</p>
- </section>
- </div>
- </body>
- </html>
|