dm-design/商家端APP/工作台/会员管理/1.1.2 会员列表/会员列表.html

541 lines
16 KiB
HTML
Raw Normal View History

2025-08-06 07:46:58 +00:00
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会员列表 - 移动端</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background-color: #f5f5f5;
color: #333;
line-height: 1.4;
}
.header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px 16px;
text-align: center;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.header h1 {
font-size: 20px;
font-weight: 600;
}
.search-section {
background: white;
padding: 16px;
margin-bottom: 12px;
border-radius: 12px;
margin: 12px 16px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}
.search-row {
display: flex;
gap: 8px;
margin-bottom: 12px;
}
.search-row:last-child {
margin-bottom: 0;
}
.form-group {
flex: 1;
}
.form-group label {
display: block;
font-size: 12px;
color: #666;
margin-bottom: 4px;
}
.form-control {
width: 100%;
padding: 10px 12px;
border: 1px solid #e0e0e0;
border-radius: 8px;
font-size: 14px;
background: #fafafa;
}
.form-control:focus {
outline: none;
border-color: #667eea;
background: white;
}
.search-btn {
background: linear-gradient(135deg, #4CAF50, #45a049);
color: white;
border: none;
padding: 12px 24px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
width: 100%;
margin-top: 12px;
box-shadow: 0 2px 8px rgba(76, 175, 80, 0.3);
}
.search-btn:active {
transform: translateY(1px);
}
.stats-section {
display: flex;
gap: 12px;
padding: 0 16px;
margin-bottom: 16px;
}
.stat-card {
flex: 1;
background: white;
padding: 16px;
border-radius: 12px;
text-align: center;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
}
.stat-number {
font-size: 24px;
font-weight: bold;
color: #333;
margin-bottom: 4px;
}
.stat-label {
font-size: 12px;
color: #666;
}
.stat-card:first-child .stat-number {
color: #2196F3;
}
.stat-card:last-child .stat-number {
color: #FF9800;
}
.member-list {
padding: 0 16px;
}
.member-card {
background: white;
border-radius: 12px;
padding: 16px;
margin-bottom: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
position: relative;
}
.member-header {
display: flex;
align-items: center;
margin-bottom: 12px;
}
.avatar {
width: 48px;
height: 48px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: bold;
font-size: 16px;
margin-right: 12px;
}
.member-info {
flex: 1;
}
.member-name {
font-size: 16px;
font-weight: 600;
color: #333;
margin-bottom: 2px;
}
.member-id {
font-size: 12px;
color: #999;
}
.level-badge {
padding: 4px 8px;
border-radius: 12px;
font-size: 10px;
font-weight: bold;
color: white;
}
.level-lv1 { background: #4CAF50; }
.level-lv2 { background: #2196F3; }
.level-lv3 { background: #FF9800; }
.level-lv4 { background: #F44336; }
.member-details {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin-bottom: 12px;
}
.detail-item {
font-size: 12px;
}
.detail-label {
color: #666;
margin-bottom: 2px;
}
.detail-value {
color: #333;
font-weight: 500;
}
.member-actions {
text-align: right;
}
.detail-btn {
background: #667eea;
color: white;
border: none;
padding: 8px 16px;
border-radius: 6px;
font-size: 12px;
cursor: pointer;
}
.detail-btn:active {
background: #5a6fd8;
}
.pagination {
display: flex;
justify-content: center;
align-items: center;
padding: 20px 16px;
gap: 8px;
}
.page-btn {
padding: 8px 12px;
border: 1px solid #e0e0e0;
background: white;
border-radius: 6px;
font-size: 12px;
cursor: pointer;
}
.page-btn.active {
background: #667eea;
color: white;
border-color: #667eea;
}
.page-info {
font-size: 12px;
color: #666;
margin: 0 8px;
}
.store-tag {
display: inline-block;
background: #f0f0f0;
color: #666;
padding: 2px 6px;
border-radius: 4px;
font-size: 10px;
margin-bottom: 4px;
}
/* Avatar colors */
.avatar-blue { background: #2196F3; }
.avatar-green { background: #4CAF50; }
.avatar-red { background: #F44336; }
.avatar-orange { background: #FF9800; }
.avatar-purple { background: #9C27B0; }
@media (max-width: 480px) {
.search-row {
flex-direction: column;
}
.member-details {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="header">
<h1>会员列表</h1>
</div>
<div class="search-section">
<div class="search-row">
<div class="form-group">
<label>所属店铺</label>
<select class="form-control">
<option>全部店铺</option>
<option>总店</option>
<option>分店1</option>
<option>分店2</option>
</select>
</div>
<div class="form-group">
<label>会员等级</label>
<select class="form-control">
<option>全部等级</option>
<option>LV1</option>
<option>LV2</option>
<option>LV3</option>
<option>LV4</option>
</select>
</div>
</div>
<div class="search-row">
<div class="form-group">
<label>用户昵称</label>
<input type="text" class="form-control" placeholder="请输入用户昵称">
</div>
<div class="form-group">
<label>手机号</label>
<input type="text" class="form-control" placeholder="请输入手机号">
</div>
</div>
<div class="search-row">
<div class="form-group">
<label>注册时间</label>
<input type="date" class="form-control">
</div>
</div>
<button class="search-btn" onclick="searchMembers()">筛选查询</button>
</div>
<div class="stats-section">
<div class="stat-card">
<div class="stat-number">1,247</div>
<div class="stat-label">会员总数</div>
</div>
<div class="stat-card">
<div class="stat-number">23</div>
<div class="stat-label">今日新增</div>
</div>
</div>
<div class="member-list">
<div class="member-card">
<div class="member-header">
<div class="avatar avatar-blue"></div>
<div class="member-info">
<div class="member-name">张小明</div>
<div class="member-id">ID: 001234</div>
</div>
<span class="level-badge level-lv2">LV2</span>
</div>
<div class="store-tag">总店</div>
<div class="member-details">
<div class="detail-item">
<div class="detail-label">手机号</div>
<div class="detail-value">138****1234</div>
</div>
<div class="detail-item">
<div class="detail-label">生日</div>
<div class="detail-value">1990-01-15</div>
</div>
<div class="detail-item">
<div class="detail-label">注册时间</div>
<div class="detail-value">2024-01-15 10:30:25</div>
</div>
</div>
<div class="member-actions">
<button class="detail-btn" onclick="viewDetails('001234')">详情</button>
</div>
</div>
<div class="member-card">
<div class="member-header">
<div class="avatar avatar-green"></div>
<div class="member-info">
<div class="member-name">李美丽</div>
<div class="member-id">ID: 001235</div>
</div>
<span class="level-badge level-lv1">LV1</span>
</div>
<div class="store-tag">分店1</div>
<div class="member-details">
<div class="detail-item">
<div class="detail-label">手机号</div>
<div class="detail-value">139****5678</div>
</div>
<div class="detail-item">
<div class="detail-label">生日</div>
<div class="detail-value">1985-03-22</div>
</div>
<div class="detail-item">
<div class="detail-label">注册时间</div>
<div class="detail-value">2024-01-14 14:20:18</div>
</div>
</div>
<div class="member-actions">
<button class="detail-btn" onclick="viewDetails('001235')">详情</button>
</div>
</div>
<div class="member-card">
<div class="member-header">
<div class="avatar avatar-red"></div>
<div class="member-info">
<div class="member-name">王大力</div>
<div class="member-id">ID: 001236</div>
</div>
<span class="level-badge level-lv3">LV3</span>
</div>
<div class="store-tag">总店</div>
<div class="member-details">
<div class="detail-item">
<div class="detail-label">手机号</div>
<div class="detail-value">136****9876</div>
</div>
<div class="detail-item">
<div class="detail-label">生日</div>
<div class="detail-value">1992-07-08</div>
</div>
<div class="detail-item">
<div class="detail-label">注册时间</div>
<div class="detail-value">2024-01-13 09:15:42</div>
</div>
</div>
<div class="member-actions">
<button class="detail-btn" onclick="viewDetails('001236')">详情</button>
</div>
</div>
<div class="member-card">
<div class="member-header">
<div class="avatar avatar-orange"></div>
<div class="member-info">
<div class="member-name">陈小芳</div>
<div class="member-id">ID: 001237</div>
</div>
<span class="level-badge level-lv4">LV4</span>
</div>
<div class="store-tag">分店2</div>
<div class="member-details">
<div class="detail-item">
<div class="detail-label">手机号</div>
<div class="detail-value">135****4321</div>
</div>
<div class="detail-item">
<div class="detail-label">生日</div>
<div class="detail-value">1988-11-30</div>
</div>
<div class="detail-item">
<div class="detail-label">注册时间</div>
<div class="detail-value">2024-01-12 16:45:33</div>
</div>
</div>
<div class="member-actions">
<button class="detail-btn" onclick="viewDetails('001237')">详情</button>
</div>
</div>
<div class="member-card">
<div class="member-header">
<div class="avatar avatar-purple"></div>
<div class="member-info">
<div class="member-name">刘强东</div>
<div class="member-id">ID: 001238</div>
</div>
<span class="level-badge level-lv2">LV2</span>
</div>
<div class="store-tag">分店1</div>
<div class="member-details">
<div class="detail-item">
<div class="detail-label">手机号</div>
<div class="detail-value">137****8765</div>
</div>
<div class="detail-item">
<div class="detail-label">生日</div>
<div class="detail-value">1995-05-12</div>
</div>
<div class="detail-item">
<div class="detail-label">注册时间</div>
<div class="detail-value">2024-01-11 11:30:15</div>
</div>
</div>
<div class="member-actions">
<button class="detail-btn" onclick="viewDetails('001238')">详情</button>
</div>
</div>
</div>
<div class="pagination">
<button class="page-btn">首页</button>
<button class="page-btn">上一页</button>
<span class="page-info">第1页共63页</span>
<button class="page-btn">下一页</button>
<button class="page-btn">尾页</button>
</div>
<script>
function searchMembers() {
// 模拟搜索功能
alert('搜索功能已触发!');
// 这里可以添加实际的搜索逻辑
}
function viewDetails(memberId) {
// 模拟查看详情功能
alert(`查看会员 ${memberId} 的详细信息`);
// 这里可以添加跳转到详情页面的逻辑
}
// 添加触摸反馈
document.addEventListener('touchstart', function(e) {
if (e.target.classList.contains('member-card')) {
e.target.style.transform = 'scale(0.98)';
}
});
document.addEventListener('touchend', function(e) {
if (e.target.classList.contains('member-card')) {
e.target.style.transform = 'scale(1)';
}
});
// 模拟加载更多数据
let isLoading = false;
window.addEventListener('scroll', function() {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 1000 && !isLoading) {
isLoading = true;
// 这里可以添加加载更多数据的逻辑
setTimeout(() => {
isLoading = false;
}, 1000);
}
});
</script>
</body>
</html>