Browse Source

更新二维码合集页面的筛选功能,将他人二维码改为数据库中实际存在的人的名字

master
Default User 1 month ago
parent
commit
7049ce6a17
  1. 96
      qr-collection.html
  2. 12
      server.js

96
qr-collection.html

@ -296,7 +296,13 @@
const response = await fetch(apiUrl); const response = await fetch(apiUrl);
const data = await response.json(); const data = await response.json();
if (data.success && data.qrCodes && data.qrCodes.length > 0) { if (data.success) {
// 动态生成筛选按钮
if (data.isAdmin && data.invitees && data.invitees.length > 0) {
generateFilterButtons(data.invitees, user);
}
if (data.qrCodes && data.qrCodes.length > 0) {
// 渲染二维码合集 // 渲染二维码合集
renderQrCollection(data.qrCodes, user, data.isAdmin); renderQrCollection(data.qrCodes, user, data.isAdmin);
} else { } else {
@ -309,6 +315,16 @@
</div> </div>
`; `;
} }
} else {
// 显示错误状态
qrCollectionElement.innerHTML = `
<div class="empty-state">
<img src="https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=error" alt="错误状态">
<p>加载失败</p>
<p style="font-size: 14px; margin-top: 5px;">请稍后重试</p>
</div>
`;
}
} catch (error) { } catch (error) {
console.error('获取二维码合集失败:', error); console.error('获取二维码合集失败:', error);
qrCollectionElement.innerHTML = ` qrCollectionElement.innerHTML = `
@ -321,6 +337,43 @@
} }
} }
// 动态生成筛选按钮
function generateFilterButtons(invitees, currentUser) {
const filterButtonsContainer = document.querySelector('.filter-buttons');
if (!filterButtonsContainer) return;
// 清空现有按钮,保留"全部"和"我的二维码"
filterButtonsContainer.innerHTML = `
<button class="filter-btn" data-filter="all">全部</button>
<button class="filter-btn" data-filter="me">我的二维码</button>
`;
// 添加每个邀请者的筛选按钮
invitees.forEach(invitee => {
// 跳过当前用户自己
if (invitee.inviter && invitee.inviter !== (currentUser.name || currentUser.userName)) {
const button = document.createElement('button');
button.className = 'filter-btn';
button.dataset.filter = `invitee_${encodeURIComponent(invitee.inviter)}`;
button.dataset.inviter = invitee.inviter;
button.textContent = invitee.inviter;
filterButtonsContainer.appendChild(button);
}
});
// 默认选中"全部"
document.querySelector('.filter-btn[data-filter="all"]').classList.add('active');
// 绑定筛选按钮事件
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', function() {
if (!this.disabled) {
filterQrCodes(this.dataset.filter, this.dataset.inviter);
}
});
});
}
// 渲染二维码合集 // 渲染二维码合集
function renderQrCollection(qrCodes, currentUser, isAdmin) { function renderQrCollection(qrCodes, currentUser, isAdmin) {
const qrCollectionElement = document.getElementById('qrCollection'); const qrCollectionElement = document.getElementById('qrCollection');
@ -372,7 +425,7 @@
} }
// 筛选二维码 // 筛选二维码
function filterQrCodes(filter) { function filterQrCodes(filter, inviterName) {
const user = loadUserInfo(); const user = loadUserInfo();
const qrCollectionElement = document.getElementById('qrCollection'); const qrCollectionElement = document.getElementById('qrCollection');
@ -398,13 +451,14 @@
let filteredQrCodes = data.qrCodes; let filteredQrCodes = data.qrCodes;
if (filter === 'me' && user) { if (filter === 'me' && user) {
// 筛选当前用户自己的二维码
filteredQrCodes = data.qrCodes.filter(qrCode => filteredQrCodes = data.qrCodes.filter(qrCode =>
qrCode.inviter === (user.name || user.userName) qrCode.inviter === (user.name || user.userName)
); );
} else if (filter === 'others' && user && data.isAdmin) { } else if (filter.startsWith('invitee_') && inviterName) {
// 只有管理员可以查看他人二维码 // 筛选特定邀请者的二维码
filteredQrCodes = data.qrCodes.filter(qrCode => filteredQrCodes = data.qrCodes.filter(qrCode =>
qrCode.inviter !== (user.name || user.userName) qrCode.inviter === inviterName
); );
} }
@ -427,39 +481,7 @@
// 页面加载时加载二维码合集 // 页面加载时加载二维码合集
window.onload = function() { window.onload = function() {
const user = loadUserInfo();
// 根据用户角色调整筛选按钮
if (user) {
// 判断用户角色
const isAdmin = user.projectName && (user.projectName.includes('管理员') || user.projectName.includes('Admin'));
if (!isAdmin) {
// 非管理员用户,只保留"我的二维码"按钮
document.querySelectorAll('.filter-btn').forEach(btn => {
if (btn.dataset.filter !== 'me') {
btn.disabled = true;
btn.style.opacity = '0.5';
btn.style.cursor = 'not-allowed';
}
});
// 默认选中"我的二维码"
document.querySelector('.filter-btn[data-filter="me"]').classList.add('active');
document.querySelector('.filter-btn[data-filter="all"]').classList.remove('active');
}
}
loadQrCollection(); loadQrCollection();
// 绑定筛选按钮事件
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', function() {
if (!this.disabled) {
filterQrCodes(this.dataset.filter);
}
});
});
}; };
</script> </script>
</body> </body>

12
server.js

@ -269,6 +269,15 @@ const server = http.createServer(async (req, res) => {
console.log('获取二维码合集成功,数量:', qrCodes.length); console.log('获取二维码合集成功,数量:', qrCodes.length);
// 获取所有邀请者列表(仅管理员)
let invitees = [];
if (isAdmin) {
const [inviteeRows] = await pool.execute(
'SELECT DISTINCT inviter, inviter_phone as inviterPhone, projectName as inviterProjectName FROM certificate WHERE inviter IS NOT NULL AND qrCodeUrl IS NOT NULL'
);
invitees = inviteeRows;
}
res.writeHead(200, { res.writeHead(200, {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Origin': '*',
@ -278,7 +287,8 @@ const server = http.createServer(async (req, res) => {
res.end(JSON.stringify({ res.end(JSON.stringify({
success: true, success: true,
qrCodes: qrCodes, qrCodes: qrCodes,
isAdmin: isAdmin isAdmin: isAdmin,
invitees: invitees
})); }));
} catch (error) { } catch (error) {
console.error('获取二维码合集失败:', error.message); console.error('获取二维码合集失败:', error.message);

Loading…
Cancel
Save