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

541 lines
16 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>会员列表 - 移动端</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>