// ============================================ // 通用列表管理 - 一次性加载 // ============================================ // 当前活动的列表状态 let currentListId = null; // 通用列表配置 const listConfig = { orderList: { endpoint: '/api/records/orders', emptyMsg: '暂无接单记录', renderItem: renderOrderItem }, otherIncomeList: { endpoint: '/api/records/other-income', emptyMsg: '暂无红包及其他收入记录', renderItem: renderOtherIncomeItem }, dispatchList: { endpoint: '/api/records/dispatches', emptyMsg: '暂无派单记录', renderItem: renderDispatchItem }, redEnvelopeList: { endpoint: '/api/records/red-envelope', emptyMsg: '暂无红包收入记录', renderItem: renderRedEnvelopeItem }, milkTeaList: { endpoint: '/api/records/milk-tea', emptyMsg: '暂无奶茶收入记录', renderItem: renderMilkTeaItem } }; // 通用列表加载状态(按 listId 存储) const listState = { orderList: { loading: false, records: [] }, otherIncomeList: { loading: false, records: [] }, dispatchList: { loading: false, records: [] }, redEnvelopeList: { loading: false, records: [] }, milkTeaList: { loading: false, records: [] } }; // 初始化列表 - 清空状态 function initList(listId) { const state = listState[listId]; if (!state) return; state.loading = false; state.records = []; const container = document.getElementById(listId); if (container) { container.innerHTML = ''; } } // 加载列表数据 async function loadListData(listId) { const config = listConfig[listId]; const state = listState[listId]; if (!config || !state) return; // 防止重复加载 if (state.loading) { console.log('[loadListData] already loading, skip'); return; } state.loading = true; showLoading(listId, true); try { console.log(`[loadListData] fetching ${listId}`); // 一次性加载全部数据,不做分页 const res = await fetch(API + config.endpoint + '?page=1&limit=1000&year=' + currentYear + '&month=' + currentMonth, { headers: headers() }); if (!res.ok) { console.error(`[loadListData] fetch failed: ${res.status}`); state.loading = false; showLoading(listId, false); return; } const data = await res.json(); console.log(`[loadListData] got ${data.records?.length || 0} records`); state.records = data.records || []; // 渲染 renderList(listId); console.log(`[loadListData] ${listId} done, total records=${state.records.length}`); } catch (e) { console.error(`[loadListData] error:`, e); } finally { state.loading = false; showLoading(listId, false); } } // 显示/隐藏加载指示器 function showLoading(listId, show) { const loadingId = listId.replace('List', 'Loading'); const loadingEl = document.getElementById(loadingId); if (loadingEl) { loadingEl.style.display = show ? 'block' : 'none'; } } // 渲染列表 function renderList(listId) { const config = listConfig[listId]; const state = listState[listId]; if (!config || !state) return; const container = document.getElementById(listId); if (!container) return; if (state.records.length === 0) { container.innerHTML = '