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

@@ -636,10 +636,11 @@ function coverGradient(name){
}
// 生成封面艺术 HTML(无外部图片时的占位)
function coverArt(game){
function coverArt(game, hidden){
const grad = coverGradient(game.name);
const ch = (game.name||"?").replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g,"").charAt(0) || "?";
return `<div class="cv-art gcover" style="background:${grad}">
const disp = hidden ? 'display:none;' : '';
return `<div class="cv-art gcover" style="${disp}background:${grad}">
<span class="gc-orb1"></span><span class="gc-orb2"></span>
<span class="gc-watermark">${ch}</span>
<span class="gc-cat">${game.category_name||""}</span>
@@ -650,8 +651,8 @@ function coverArt(game){
function coverHTML(game, opts){
opts = opts||{};
let inner;
if(game.cover && /^https?:\/\//.test(game.cover)){
inner = `<img class="cv-art" src="${game.cover}" alt="${game.name}" style="width:100%;height:100%;object-fit:cover">`;
if(game.cover){
inner = `<img class="cv-art" src="${game.cover}" alt="${game.name}" style="width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.nextElementSibling.style.display=''">` + coverArt(game, true);
} else {
inner = coverArt(game);
}
@@ -1051,8 +1052,8 @@ function renderModal(g){
const modal = $("#modal");
const tags = parseJSON(g.tags);
const features = parseJSON(g.features);
const headerArt = (g.cover && /^https?:\/\//.test(g.cover))
? `<img src="${g.cover}" alt="${g.name}" style="width:100%;height:100%;object-fit:cover">`
const headerArt = g.cover
? `<img src="${g.cover}" alt="${g.name}" style="width:100%;height:100%;object-fit:cover" onerror="this.style.display='none';this.parentNode.querySelectorAll('[data-fb]').forEach(function(e){e.style.display=''})"><div data-fb style="position:absolute;inset:0;background:${coverGradient(g.name)};display:none"></div><span data-fb style="position:absolute;font-size:200px;font-weight:900;opacity:.14;top:-30px;right:10px;color:#fff;display:none">${(g.name||"?").charAt(0)}</span>`
: `<div style="position:absolute;inset:0;background:${coverGradient(g.name)}"></div>
<span style="position:absolute;font-size:200px;font-weight:900;opacity:.14;top:-30px;right:10px;color:#fff">${(g.name||"?").charAt(0)}</span>`;