';
console.error(e);
}
}
function renderHome(data) {
const el = document.querySelector('#pageHome .page-content');
let html = '';
// Banner
if (data.banners && data.banners.length) {
html += '
';
data.banners.forEach((b, i) => {
html += `
`;
});
html += '
';
data.banners.forEach((_, i) => { html += ``; });
html += '
';
// Auto slide
let idx = 0;
setInterval(() => {
const slides = document.querySelectorAll('#homeBanner .swiper-slide');
const dots = document.querySelectorAll('#homeBanner .swiper-dots span');
if (!slides.length) return;
slides[idx].classList.remove('active');
dots[idx].classList.remove('active');
idx = (idx + 1) % slides.length;
slides[idx].classList.add('active');
dots[idx].classList.add('active');
}, 3000);
}
// Categories
if (data.categories && data.categories.length) {
html += '
';
}
// Service Detail
async function goService(id) {
document.getElementById('tabbar').style.display = 'none';
showPage('service');
showHeader('服务详情', true);
const el = document.querySelector('#pageService .page-content');
el.innerHTML = '
加载中...
';
const res = await get(`/services/${id}`);
if (res.status !== 'ok') { el.innerHTML = '
服务不存在
'; return; }
const s = res.data;
state.currentService = s;
renderServiceDetail(s);
}
function renderServiceDetail(s) {
const el = document.querySelector('#pageService .page-content');
let html = ``;
html += '
';
html += `
${s.title}
`;
html += `
${s.subtitle||''}
`;
html += `
¥${s.price}`;
if (s.original_price && s.original_price > s.price) html += `¥${s.original_price}`;
html += `已售${s.sales||0}
`;
html += '
';
html += '
服务介绍
' + (s.desc || s.detail || '暂无详细介绍') + '
';
html += '
';
html += `
合计 ¥${s.price}
`;
el.innerHTML = html;
}
// Submit Order
function goSubmit(serviceId) {
if (!serviceId && state.currentService) serviceId = state.currentService.id;
if (!serviceId) return;
document.getElementById('tabbar').style.display = 'none';
showPage('submit');
showHeader('填写预约信息', true);
const s = state.currentService;
const el = document.querySelector('#pageSubmit .page-content');
el.innerHTML = `
';
setTimeout(function(){var b=document.getElementById("goHomeBtn");if(b)b.onclick=function(){document.querySelector(".tabbar-item[data-tab=home]").click()}},0);
return;
}
const statusMap = {'pending':'待确认','confirmed':'已确认','in_progress':'服务中','completed':'已完成','cancelled':'已取消'};
let html = '
';
orders.forEach(o => {
html += '
';
html += `
${o.order_no}${statusMap[o.status]||o.status}
`;
html += '
';
html += ``;
html += '
';
html += `
${o.service_name}
`;
html += `
¥${o.total}
`;
html += '
';
html += ``;
html += '
';
});
html += '
';
el.innerHTML = html;
}
// My Page
function renderMy() {
const el = document.querySelector('#pageMy .page-content');
const user = state.user;
el.innerHTML = `
${user ? '👤' : '👤'}
${user ? user.nickname||'用户' : '未登录'}
${user ? user.phone||'' : '登录体验更多功能'}
📄我的订单›
📍收货地址›
⭐我的收藏›
💬联系客服›
`;
}
// Category shortcut from home
function goCategory(catId) {
document.querySelectorAll('.tabbar-item').forEach(b => b.classList.remove('active'));
document.querySelector('.tabbar-item[data-tab="category"]').classList.add('active');
state.currentTab = 'category';
showHeader('', false);
showPage('category');
loadCategoryPage().then(() => {
if (catId > 0) switchCat(catId);
});
}
// ─── Tab Click Handler ───
document.getElementById('tabbar').addEventListener('click', function(e) {
var btn = e.target.closest('.tabbar-item');
if (!btn) return;
var tab = btn.dataset.tab;
document.querySelectorAll('.tabbar-item').forEach(function(b) { b.classList.remove('active'); });
btn.classList.add('active');
state.currentTab = tab;
showHeader('', false);
showPage(tab);
if (tab === 'home' && !state.homeData) loadHome();
if (tab === 'category') loadCategoryPage();
if (tab === 'tech') loadTechPage();
if (tab === 'order') loadOrders();
if (tab === 'my') renderMy();
});
// ─── Technician Page ───
var currentTechType = '';
async function loadTechPage(type) {
currentTechType = type || '';
showHeader('选择技师', false);
document.getElementById('tabbar').style.display = 'flex';
var el = document.querySelector('#pageTech .page-content');
el.innerHTML = '
加载中...
';
var typesRes = await get('/tech_types');
var types = typesRes.status === 'ok' ? typesRes.data : [];
var techsRes = await get('/technicians?tech_type=' + encodeURIComponent(currentTechType));
var techs = techsRes.status === 'ok' ? techsRes.data : [];
var html = '
';
html += '全部';
types.forEach(function(t) {
html += '' + t + '';
});
html += '
';
if (!techs.length) {
html += '
👩⚕️
暂无技师
';
} else {
html += '
';
var colors = ['#E94560','#26A69A','#5C6BC0','#FF8A65','#AB47BC','#66BB6A','#FF7043','#42A5F5'];
techs.forEach(function(t, i) {
var c = colors[i % colors.length];
html += '