feat: 统一文件上传接口 + 模板图片展示 + 导航页 + 侧边栏调整

This commit is contained in:
admin
2026-07-10 20:43:02 +08:00
parent cbd0430452
commit ce6823e282
25 changed files with 933 additions and 166 deletions

View File

@@ -1163,7 +1163,8 @@ a { color: inherit; text-decoration: none; }
return `<div class="feat-card" onclick="window._app.openRestaurant(${r.id})">
<div class="feat-cover">
<div class="grad" style="background:${g.css}"></div>
<div class="ic" style="color:${g.css.match(/#[0-9A-Fa-f]+/)[0]}">${catIcon(r.category_name ? '' : '', r.category_name)}</div>
${r.cover?`<img src="${escapeHtml(r.cover)}" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.parentNode.querySelector('.ic').style.display=''">`:''}
<div class="ic" style="color:${g.css.match(/#[0-9A-Fa-f]+/)[0]};${r.cover?'display:none':''}">${catIcon(r.category_name ? '' : '', r.category_name)}</div>
<div class="feat-rank">${i + 1}</div>
</div>
<div class="feat-body">
@@ -1187,7 +1188,8 @@ a { color: inherit; text-decoration: none; }
return `<div class="rest-card" onclick="window._app.openRestaurant(${r.id})">
<div class="rest-logo">
<div class="grad" style="background:${g.css}"></div>
${catIcon(r.category_name ? '' : '', r.category_name)}
${r.logo?`<img src="${escapeHtml(r.logo)}" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.parentNode.querySelector('span').style.display=''">`:''}
<span style="${r.logo?'display:none':''}">${catIcon(r.category_name ? '' : '', r.category_name)}</span>
</div>
<div class="rest-info">
<div class="rest-head">
@@ -1390,7 +1392,7 @@ a { color: inherit; text-decoration: none; }
$('#modalHero').innerHTML = `
<button class="modal-close" onclick="window._app.closeModal()">${ICONS.close}</button>
<div class="modal-rest">
<div class="modal-logo"><div class="grad" style="background:${g.css}"></div>${catIcon('', r.category_name)}</div>
<div class="modal-logo"><div class="grad" style="background:${g.css}"></div>${r.logo?`<img src="${escapeHtml(r.logo)}" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.parentNode.querySelector('span').style.display=''">`:''}<span style="${r.logo?'display:none':''}">${catIcon('', r.category_name)}</span></div>
<div class="modal-rest-info">
<div class="modal-rest-name">${escapeHtml(r.name)} <span class="rest-status ${r.status === 1 ? 'open' : 'closed'}">${r.status === 1 ? '营业中' : '休息中'}</span></div>
<div class="modal-rest-cat">${escapeHtml(r.category_name || '美食')} · ${escapeHtml(r.distance || '')}</div>
@@ -1454,7 +1456,7 @@ a { color: inherit; text-decoration: none; }
const tags = parseTags(it.tags).slice(0, 2);
const hasOld = it.original_price && Number(it.original_price) > Number(it.price);
return `<div class="dish-card" data-dish="${it.id}">
<div class="dish-img"><div class="grad" style="background:${g.css}"></div>${dishIcon(it)}</div>
<div class="dish-img"><div class="grad" style="background:${g.css}"></div>${it.image?`<img src="${escapeHtml(it.image)}" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.parentNode.querySelector('span').style.display=''">`:''}<span style="${it.image?'display:none':''}">${dishIcon(it)}</span></div>
<div class="dish-info">
<div class="dish-name">${escapeHtml(it.name)}</div>
${it.description ? `<div class="dish-desc">${escapeHtml(it.description)}</div>` : ''}
@@ -1642,8 +1644,14 @@ a { color: inherit; text-decoration: none; }
}
body.innerHTML = state.cart.map(c => {
const g = gradFor(c.id || c.restaurant_id);
const dish = findDish(c.id);
const dishImg = dish ? dish.image : '';
return `<div class="cart-item">
<div class="cart-item-img"><div class="grad" style="background:${g.css}"></div>${DISH_ICONS.default}</div>
<div class="cart-item-img">
<div class="grad" style="background:${g.css}"></div>
${dishImg?`<img src="${escapeHtml(dishImg)}" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.parentNode.querySelector('span').style.display=''">`:''}
<span style="${dishImg?'display:none':''}">${DISH_ICONS.default}</span>
</div>
<div class="cart-item-info">
<div class="cart-item-name">${escapeHtml(c.name)}</div>
<div class="cart-item-price">¥${money(c.price)} / 份</div>