Files
zkxw/mobile-ui/zkxw-mobile-home-menu-regions-demo.html
T
2026-10-13 15:18:01 +08:00

460 lines
14 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>小程序首页 · 分区菜单 Demo</title>
<style>
:root {
--brand-green: #0a9f6d;
--brand-green-dark: #087f57;
--brand-green-soft: #e9f9f2;
--bg-page: #f5f8f7;
--surface: #ffffff;
--text-primary: #1f2a26;
--text-muted: #6b7b74;
--border: #dcebe4;
--region-market: #ea9518;
--region-oa: #10aa1a;
--shadow-soft: 0 4px 16px rgba(15, 41, 30, 0.08);
}
* { box-sizing: border-box; }
body {
margin: 0;
min-height: 100vh;
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
color: var(--text-primary);
background:
radial-gradient(900px 420px at 10% -10%, rgba(10, 159, 109, 0.14), transparent 55%),
radial-gradient(700px 380px at 90% 0%, rgba(234, 149, 24, 0.12), transparent 50%),
linear-gradient(180deg, #eef6f2 0%, #f7faf9 40%, #f3f6f5 100%);
display: flex;
justify-content: center;
align-items: flex-start;
gap: 28px;
padding: 28px 16px 48px;
flex-wrap: wrap;
}
.doc {
width: min(320px, 100%);
background: rgba(255, 255, 255, 0.92);
border: 1px solid var(--border);
border-radius: 16px;
padding: 18px 16px;
box-shadow: var(--shadow-soft);
}
.doc h1 {
margin: 0 0 8px;
font-size: 18px;
color: var(--brand-green-dark);
}
.doc p {
margin: 0 0 10px;
font-size: 13px;
line-height: 1.55;
color: var(--text-muted);
}
.doc ul {
margin: 0;
padding-left: 18px;
font-size: 13px;
line-height: 1.6;
color: var(--text-primary);
}
.swatch {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 3px;
vertical-align: -1px;
margin-right: 4px;
}
.phone {
width: 375px;
max-width: 100%;
background: #111;
border-radius: 36px;
padding: 12px;
box-shadow: 0 18px 50px rgba(15, 41, 30, 0.18);
}
.phone-screen {
background: var(--bg-page);
border-radius: 28px;
overflow: hidden;
min-height: 720px;
display: flex;
flex-direction: column;
}
.status-bar {
height: 28px;
padding: 8px 20px 0;
display: flex;
justify-content: space-between;
font-size: 12px;
font-weight: 600;
color: #fff;
background: linear-gradient(135deg, #0a9f6d 0%, #087f57 100%);
}
.home-header {
background: linear-gradient(160deg, #0a9f6d 0%, #087f57 72%, #066648 100%);
color: #fff;
padding: 8px 20px 28px;
border-radius: 0 0 22px 22px;
}
.brand {
font-size: 13px;
opacity: 0.9;
letter-spacing: 0.02em;
}
.hello {
margin-top: 10px;
font-size: 22px;
font-weight: 700;
}
.meta {
margin-top: 8px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 12px;
opacity: 0.92;
}
.logout {
padding: 4px 10px;
border: 1px solid rgba(255, 255, 255, 0.45);
border-radius: 999px;
font-size: 12px;
}
.home-body {
flex: 1;
padding: 12px 14px 24px;
margin-top: -14px;
}
.banner {
height: 120px;
border-radius: 14px;
background:
linear-gradient(120deg, rgba(10, 159, 109, 0.35), rgba(234, 149, 24, 0.28)),
#d7ebe2;
display: flex;
align-items: flex-end;
padding: 12px 14px;
color: #fff;
font-size: 13px;
font-weight: 600;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
margin-bottom: 12px;
}
.region {
background: var(--surface);
border-radius: 14px;
overflow: hidden;
box-shadow: var(--shadow-soft);
border: 1px solid rgba(220, 235, 228, 0.9);
margin-bottom: 12px;
}
.region-hd {
display: flex;
align-items: center;
justify-content: space-between;
padding: 11px 14px;
color: #fff;
}
.region-hd__left {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.region-hd__mark {
width: 4px;
height: 16px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.85);
}
.region-hd__title {
font-size: 15px;
font-weight: 700;
letter-spacing: 0.02em;
}
.region-hd__hint {
font-size: 11px;
opacity: 0.9;
}
.region--market .region-hd { background: var(--region-market); }
.region--oa .region-hd { background: var(--region-oa); }
.region-bd {
padding: 14px 10px 12px;
}
.menu-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px 6px;
}
.menu-card {
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
min-height: 72px;
padding: 8px 4px 6px;
border-radius: 12px;
cursor: default;
user-select: none;
}
.menu-card:hover {
background: #f3faf6;
}
.menu-icon {
position: relative;
width: 44px;
height: 44px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
background: #eef2f1;
color: #3d524a;
box-shadow: inset 0 0 0 1px rgba(15, 41, 30, 0.06);
}
.menu-icon--plain {
background: transparent;
box-shadow: none;
font-size: 22px;
}
.menu-icon--amber { background: #fff4e5; color: #c27803; }
.menu-icon--green { background: #e9f9f2; color: #0a9f6d; }
.menu-icon--rose { background: #ffe4e6; color: #e11d48; }
.menu-icon--slate { background: #eef2f1; color: #3d524a; }
.badge {
position: absolute;
top: -4px;
right: -6px;
min-width: 16px;
height: 16px;
padding: 0 4px;
border-radius: 8px;
background: #fa5151;
color: #fff;
font-size: 10px;
font-weight: 700;
line-height: 16px;
text-align: center;
box-shadow: 0 0 0 1.5px #fff;
}
.menu-title {
font-size: 11px;
line-height: 1.25;
text-align: center;
color: var(--text-primary);
max-width: 72px;
word-break: break-all;
}
.role-tag {
display: inline-block;
margin-top: -2px;
padding: 1px 5px;
border-radius: 999px;
font-size: 9px;
line-height: 1.3;
background: rgba(234, 149, 24, 0.12);
color: #c27803;
border: 1px solid rgba(234, 149, 24, 0.28);
}
.role-tag--manager {
background: rgba(16, 170, 26, 0.1);
color: #0d8a16;
border-color: rgba(16, 170, 26, 0.28);
}
.alt-note {
margin-top: 8px;
font-size: 11px;
color: var(--text-muted);
text-align: center;
}
.phone-label {
text-align: center;
margin-bottom: 10px;
font-size: 12px;
color: var(--text-muted);
}
</style>
</head>
<body>
<aside class="doc">
<h1>分区菜单 Demo</h1>
<p>小程序首页菜单按业务区域分组:同一区域共享标题栏色带,区域内为 4 列宫格。</p>
<ul>
<li><span class="swatch" style="background:#ea9518"></span>市场部 <code>#ea9518</code></li>
<li><span class="swatch" style="background:#10aa1a"></span>OA工作流 <code>#10aa1a</code></li>
<li>标题栏白字 + 左侧短竖条</li>
<li>叶子名称保留「(专员)/(经理)」区分</li>
<li>无权限区域整块不展示(本 Demo 两区均展示)</li>
</ul>
</aside>
<div>
<div class="phone-label">375px · 首页菜单区域</div>
<div class="phone">
<div class="phone-screen">
<div class="status-bar">
<span>9:41</span>
<span>▮▮▮ ▉</span>
</div>
<header class="home-header">
<div class="brand">中科兴皖 · 移动工作台</div>
<div class="hello">您好,张三</div>
<div class="meta">
<span>市场专员 · 华东一区</span>
<span class="logout">退出登录</span>
</div>
</header>
<main class="home-body">
<div class="banner">品牌宣传位 · 4:3 / 视频轮播</div>
<!-- 市场部区域 -->
<section class="region region--market">
<div class="region-hd">
<div class="region-hd__left">
<span class="region-hd__mark" aria-hidden="true"></span>
<span class="region-hd__title">市场部</span>
</div>
<span class="region-hd__hint">存储现场</span>
</div>
<div class="region-bd">
<div class="menu-grid">
<div class="menu-card">
<div class="menu-icon menu-icon--amber">预</div>
<div class="menu-title">预签约订单(专员)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">协</div>
<div class="menu-title">协议单(专员)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">催</div>
<div class="menu-title">催缴信息(专员)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">缴</div>
<div class="menu-title">缴费信息(专员)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">样</div>
<div class="menu-title">样本信息(专员)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">运</div>
<div class="menu-title">运费信息(专员)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">预</div>
<div class="menu-title">预签约订单(经理)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">协</div>
<div class="menu-title">协议单(经理)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">催</div>
<div class="menu-title">催缴信息(经理)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">缴</div>
<div class="menu-title">缴费信息(经理)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">样</div>
<div class="menu-title">样本信息(经理)</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">运</div>
<div class="menu-title">运费信息(经理)</div>
</div>
</div>
</div>
</section>
<!-- OA工作流区域 -->
<section class="region region--oa">
<div class="region-hd">
<div class="region-hd__left">
<span class="region-hd__mark" aria-hidden="true"></span>
<span class="region-hd__title">OA工作流</span>
</div>
<span class="region-hd__hint">审批协同</span>
</div>
<div class="region-bd">
<div class="menu-grid">
<div class="menu-card">
<div class="menu-icon menu-icon--plain">✈️</div>
<div class="menu-title">发起审批</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--slate">📝</div>
<div class="menu-title">草稿箱</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--rose">
⏳
<span class="badge">3</span>
</div>
<div class="menu-title">待办中心</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">✅</div>
<div class="menu-title">已办中心</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--slate">📤</div>
<div class="menu-title">我发起的</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">📨</div>
<div class="menu-title">抄送我的</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--amber">
@
<span class="badge">1</span>
</div>
<div class="menu-title">提到我的</div>
</div>
<div class="menu-card">
<div class="menu-icon menu-icon--green">🔔</div>
<div class="menu-title">开启微信通知</div>
</div>
</div>
</div>
</section>
<p class="alt-note">图标为占位;落地时沿用现有 path→icon 映射与空置策略</p>
</main>
</div>
</div>
</div>
</body>
</html>