Files
zhangmenu/static/js/app.js
T

132 lines
3.8 KiB
JavaScript
Raw Normal View History

2026-03-12 11:27:23 +08:00
// 应用入口
const App = {
// 初始化应用
async init() {
console.log('应用初始化...');
// 初始化事件监听
this.initEventListeners();
// 加载初始数据
await this.loadInitialData();
// 显示默认页面
this.switchPage('menu');
console.log('应用初始化完成');
},
// 初始化事件监听
initEventListeners() {
// 底部导航点击
document.querySelectorAll('.nav-item').forEach(item => {
item.addEventListener('click', () => {
const page = item.dataset.page;
if (page) {
App.switchPage(page);
}
});
});
// FAB按钮 - 根据当前页面决定行为
const fab = document.getElementById('fab-add');
if (fab) {
fab.addEventListener('click', () => {
if (AppState.currentPage === 'menu') {
// 菜单页:创建新菜品
showDishModal();
} else if (AppState.currentPage === 'orders') {
// 订单页:创建新订单
showOrderModal();
}
});
}
// 搜索按钮
const searchBtn = document.getElementById('search-btn');
if (searchBtn) {
searchBtn.addEventListener('click', () => {
const keyword = document.getElementById('search-input').value;
AppState.setPage('search');
document.getElementById('search-panel').classList.add('active');
MenuPage.searchDishes(keyword);
});
}
// 搜索面板关闭
const searchBackBtn = document.getElementById('search-panel-back');
if (searchBackBtn) {
searchBackBtn.addEventListener('click', () => {
document.getElementById('search-panel').classList.remove('active');
App.switchPage(AppState.currentPage || 'menu');
});
}
},
// 加载初始数据
async loadInitialData() {
try {
// 并行加载所有数据
const [categoriesRes, dishesRes, ordersRes] = await Promise.all([
fetch(`${API_BASE}/categories/`),
fetch(`${API_BASE}/dishes/`),
fetch(`${API_BASE}/orders/`)
]);
const categories = await categoriesRes.json();
const dishes = await dishesRes.json();
const orders = await ordersRes.json();
AppState.setCategories(categories);
AppState.setDishes(dishes);
AppState.setOrders(orders);
} catch (e) {
console.error('加载初始数据失败:', e);
}
},
// 切换页面
switchPage(page) {
// 更新状态
AppState.setPage(page);
// 更新导航
document.querySelectorAll('.nav-item').forEach(item => {
item.classList.toggle('active', item.dataset.page === page);
});
// 更新页面显示
document.querySelectorAll('.page').forEach(p => {
p.classList.remove('active');
});
const pageEl = document.getElementById(`${page}-page`);
if (pageEl) {
pageEl.classList.add('active');
}
// 根据页面执行对应初始化
if (page === 'menu') {
MenuPage.init();
} else if (page === 'orders') {
OrdersPage.init();
} else if (page === 'stats') {
StatsPage.init();
}
}
};
// DOM 加载完成后初始化
document.addEventListener('DOMContentLoaded', () => {
// 初始化全局变量(保持向后兼容)
window.API_BASE = '/api';
// 初始化应用
App.init();
});
// 导出
window.App = App;