let orderPage = 1; let orderHasMore = true; let orderLoading = false; async function loadOrders(append) { if (orderLoading || (!append && !orderHasMore)) return; orderLoading = true; document.getElementById('orderLoading').style.display = 'block'; try { const res = await fetch(API + '/api/records/orders?page=' + orderPage + '&limit=20&year=' + currentYear + '&month=' + currentMonth, { headers: headers() }); if (!res.ok) return; const data = await res.json(); const container = document.getElementById('orderList'); if (!append) container.innerHTML = ''; if (data.records.length === 0) { if (orderPage === 1) container.innerHTML = '
暂无接单记录
'; orderHasMore = false; } else { const grouped = {}; data.records.forEach(r => { const date = formatLocalDate(r.created_at); if (!grouped[date]) grouped[date] = []; grouped[date].push(r); }); let html = ''; for (const [date, records] of Object.entries(grouped)) { html += `
${date}
`; records.forEach(r => { const time = formatLocalTime(r.created_at); html += `
${r.boss || '-'} ${(r.amount || 0).toFixed(2)}
${r.quantity || 0}单 × ${(r.unit_price || 0).toFixed(2)} ${time}${r.partner ? ' · ' + r.partner : ''}
`; }); html += '
'; } container.insertAdjacentHTML('beforeend', html); orderHasMore = data.records.length >= 20; orderPage++; if (!append) { const today = formatLocalDate(new Date()); setTimeout(() => { const el = container.querySelector(`[data-date="${today}"]`); if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 100); } } } catch (e) { console.error(e); } orderLoading = false; document.getElementById('orderLoading').style.display = 'none'; } // 滚动加载 window.addEventListener('scroll', () => { if (document.getElementById('orderListPage').classList.contains('active')) { if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 100) { if (orderHasMore && !orderLoading) loadOrders(true); } } if (document.getElementById('dispatchListPage').classList.contains('active')) { if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 100) { if (dispatchHasMore && !dispatchLoading) loadDispatches(true); } } if (document.getElementById('otherIncomeListPage').classList.contains('active')) { if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 100) { if (otherIncomeHasMore && !otherIncomeLoading) loadOtherIncome(true); } } if (document.getElementById('redEnvelopeListPage').classList.contains('active')) { if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 100) { if (redEnvelopeHasMore && !redEnvelopeLoading) loadRedEnvelope(true); } } if (document.getElementById('milkTeaListPage').classList.contains('active')) { if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 100) { if (milkTeaHasMore && !milkTeaLoading) loadMilkTea(true); } } }); // 红包及其他收入列表 let otherIncomePage = 1; let otherIncomeHasMore = true; let otherIncomeLoading = false; async function loadOtherIncome(append) { if (otherIncomeLoading || (!append && !otherIncomeHasMore)) return; otherIncomeLoading = true; document.getElementById('otherIncomeLoading').style.display = 'block'; try { const res = await fetch(API + '/api/records/other-income?page=' + otherIncomePage + '&limit=20&year=' + currentYear + '&month=' + currentMonth, { headers: headers() }); if (!res.ok) return; const data = await res.json(); const container = document.getElementById('otherIncomeList'); if (!append) container.innerHTML = ''; if (data.records.length === 0) { if (otherIncomePage === 1) container.innerHTML = '
暂无红包及其他收入记录
'; otherIncomeHasMore = false; } else { const grouped = {}; data.records.forEach(r => { const date = formatLocalDate(r.created_at); if (!grouped[date]) grouped[date] = []; grouped[date].push(r); }); let html = ''; for (const [date, records] of Object.entries(grouped)) { html += `
${date}
`; records.forEach(r => { const time = formatLocalTime(r.created_at); const displayCategory = r.category === '红包收入' ? '红包' : (r.category || '-'); html += `
${displayCategory}${r.boss ? ' · ' + r.boss : ''} ${(r.amount || 0).toFixed(2)}
${r.source || ''} ${time}
`; }); html += '
'; } container.insertAdjacentHTML('beforeend', html); otherIncomeHasMore = data.records.length >= 20; otherIncomePage++; } } catch (e) { console.error(e); } otherIncomeLoading = false; document.getElementById('otherIncomeLoading').style.display = 'none'; } // 派单列表 let dispatchPage = 1; let dispatchHasMore = true; let dispatchLoading = false; async function loadDispatches(append) { if (dispatchLoading || (!append && !dispatchHasMore)) return; dispatchLoading = true; document.getElementById('dispatchLoading').style.display = 'block'; try { const res = await fetch(API + '/api/records/dispatches?page=' + dispatchPage + '&limit=20&year=' + currentYear + '&month=' + currentMonth, { headers: headers() }); if (!res.ok) return; const data = await res.json(); const container = document.getElementById('dispatchList'); if (!append) container.innerHTML = ''; if (data.records.length === 0) { if (dispatchPage === 1) container.innerHTML = '
暂无派单记录
'; dispatchHasMore = false; } else { const grouped = {}; data.records.forEach(r => { const date = formatLocalDate(r.created_at); if (!grouped[date]) grouped[date] = []; grouped[date].push(r); }); let html = ''; for (const [date, records] of Object.entries(grouped)) { html += `
${date}
`; records.forEach(r => { const time = formatLocalTime(r.created_at); html += `
${r.boss || '-'} ${(r.amount || 0).toFixed(2)}
${r.quantity || 0}单 × ${(r.rebate || r.amount / r.quantity).toFixed(2)}(单价${(r.unit_price || 0).toFixed(2)}) ${time}${r.partner ? ' · ' + r.partner : ''}
`; }); html += '
'; } container.insertAdjacentHTML('beforeend', html); dispatchHasMore = data.records.length >= 20; dispatchPage++; } } catch (e) { console.error(e); } dispatchLoading = false; document.getElementById('dispatchLoading').style.display = 'none'; } // 红包收入列表 let redEnvelopePage = 1; let redEnvelopeHasMore = true; let redEnvelopeLoading = false; async function loadRedEnvelope(append) { if (redEnvelopeLoading || (!append && !redEnvelopeHasMore)) return; redEnvelopeLoading = true; document.getElementById('redEnvelopeLoading').style.display = 'block'; try { const res = await fetch(API + '/api/records/red-envelope?page=' + redEnvelopePage + '&limit=20&year=' + currentYear + '&month=' + currentMonth, { headers: headers() }); if (!res.ok) return; const data = await res.json(); const container = document.getElementById('redEnvelopeList'); if (!append) container.innerHTML = ''; if (data.records.length === 0) { if (redEnvelopePage === 1) container.innerHTML = '
暂无红包收入记录
'; redEnvelopeHasMore = false; } else { const grouped = {}; data.records.forEach(r => { const date = formatLocalDate(r.created_at); if (!grouped[date]) grouped[date] = []; grouped[date].push(r); }); let html = ''; for (const [date, records] of Object.entries(grouped)) { html += `
${date}
`; records.forEach(r => { const time = formatLocalTime(r.created_at); html += `
红包 ${(r.amount || 0).toFixed(2)}
${r.source || ''} ${time}
`; }); html += '
'; } container.insertAdjacentHTML('beforeend', html); redEnvelopeHasMore = data.records.length >= 20; redEnvelopePage++; } } catch (e) { console.error(e); } redEnvelopeLoading = false; document.getElementById('redEnvelopeLoading').style.display = 'none'; } // 奶茶收入列表 let milkTeaPage = 1; let milkTeaHasMore = true; let milkTeaLoading = false; async function loadMilkTea(append) { if (milkTeaLoading || (!append && !milkTeaHasMore)) return; milkTeaLoading = true; document.getElementById('milkTeaLoading').style.display = 'block'; try { const res = await fetch(API + '/api/records/milk-tea?page=' + milkTeaPage + '&limit=20&year=' + currentYear + '&month=' + currentMonth, { headers: headers() }); if (!res.ok) return; const data = await res.json(); const container = document.getElementById('milkTeaList'); if (!append) container.innerHTML = ''; if (data.records.length === 0) { if (milkTeaPage === 1) container.innerHTML = '
暂无奶茶收入记录
'; milkTeaHasMore = false; } else { const grouped = {}; data.records.forEach(r => { const date = formatLocalDate(r.created_at); if (!grouped[date]) grouped[date] = []; grouped[date].push(r); }); let html = ''; for (const [date, records] of Object.entries(grouped)) { html += `
${date}
`; records.forEach(r => { const time = formatLocalTime(r.created_at); html += `
奶茶 ${(r.amount || 0).toFixed(2)}
${r.source || ''} ${time}
`; }); html += '
'; } container.insertAdjacentHTML('beforeend', html); milkTeaHasMore = data.records.length >= 20; milkTeaPage++; } } catch (e) { console.error(e); } milkTeaLoading = false; document.getElementById('milkTeaLoading').style.display = 'none'; }