修复图片下载问题

This commit is contained in:
super
2026-06-16 22:19:55 +08:00
parent f44110fae5
commit 021b0c618b
11 changed files with 358 additions and 43 deletions

View File

@@ -108,7 +108,8 @@
'query-asin': 'panel-query-asin',
'product-categories': 'panel-product-categories',
'history': 'panel-history',
'version': 'panel-version'
'version': 'panel-version',
'digital-human-version': 'panel-digital-human-version'
};
function runTabLoader(tabName) {
if (tabName === 'users') { loadUsers(1); loadColumnsForPermission(); }
@@ -121,7 +122,8 @@
else if (tabName === 'query-asin') loadQueryAsin(1);
else if (tabName === 'product-categories') loadProductCategories();
else if (tabName === 'history') loadHistory(1);
else if (tabName === 'version') loadVersions();
else if (tabName === 'version') loadSoftwareVersions();
else if (tabName === 'digital-human-version') loadDigitalHumanVersions();
}
function hideAllAdminPanels() {
document.querySelectorAll('.tab-panel').forEach(function (panel) {
@@ -3519,12 +3521,38 @@
});
};
function loadVersions(page) {
function loadSoftwareVersions() {
fetch('/api/admin/versions')
.then(function (r) { return r.json(); })
.then(function (res) {
var tbody = document.getElementById('versionListBody');
var pagination = document.getElementById('versionPagination');
if (pagination) pagination.innerHTML = '';
if (!res.success) {
tbody.innerHTML = '<tr><td colspan="4" class="empty-tip">加载失败: ' + (res.error || '') + '</td></tr>';
return;
}
var items = res.items || [];
if (!items.length) {
tbody.innerHTML = '<tr><td colspan="4" class="empty-tip">暂无版本记录</td></tr>';
return;
}
tbody.innerHTML = items.map(function (v) {
var url = v.file_url || '';
return '<tr><td>' + (v.version || '') + '</td><td><a href="' + url + '" target="_blank" rel="noopener">' + url + '</a></td><td>' + (v.created_at || '') + '</td><td><a href="' + url + '" download class="btn btn-sm">下载</a></td></tr>';
}).join('');
})
.catch(function () {
document.getElementById('versionListBody').innerHTML = '<tr><td colspan="4" class="empty-tip">请求失败</td></tr>';
});
}
function loadDigitalHumanVersions(page) {
page = page || 1;
fetch('/api/admin/digital-human-versions?page=' + page + '&pageSize=20')
.then(function (r) { return r.json(); })
.then(function (res) {
var tbody = document.getElementById('versionListBody');
var tbody = document.getElementById('digitalHumanVersionListBody');
if (!res.success) {
tbody.innerHTML = '<tr><td colspan="8" class="empty-tip">加载失败: ' + (res.message || res.error || '') + '</td></tr>';
return;
@@ -3585,12 +3613,12 @@
}
// 分页
var pagination = document.getElementById('versionPagination');
var pagination = document.getElementById('digitalHumanVersionPagination');
if (pages > 1) {
var html = '';
for (var i = 1; i <= pages; i++) {
var active = i === current ? ' active' : '';
html += '<span class="page-item' + active + '" onclick="loadVersions(' + i + ')">' + i + '</span>';
html += '<span class="page-item' + active + '" onclick="loadDigitalHumanVersions(' + i + ')">' + i + '</span>';
}
pagination.innerHTML = html;
} else {
@@ -3598,14 +3626,13 @@
}
})
.catch(function (err) {
document.getElementById('versionListBody').innerHTML = '<tr><td colspan="8" class="empty-tip">请求失败: ' + (err.message || '') + '</td></tr>';
document.getElementById('digitalHumanVersionListBody').innerHTML = '<tr><td colspan="8" class="empty-tip">请求失败: ' + (err.message || '') + '</td></tr>';
});
}
window.loadDigitalHumanVersions = loadDigitalHumanVersions;
document.getElementById('btnUploadVersion').onclick = function () {
var version = (document.getElementById('versionNumber').value || '').trim();
var minClientVersion = (document.getElementById('versionMinClientVersion').value || '').trim();
var changelog = (document.getElementById('versionChangelog').value || '').trim();
var fileInput = document.getElementById('versionZip');
var msgEl = document.getElementById('msgVersion');
msgEl.textContent = '';
@@ -3628,6 +3655,62 @@
return;
}
var formData = new FormData();
formData.append('file', file);
formData.append('version', version);
msgEl.textContent = '上传中,请稍候...';
msgEl.classList.remove('err', 'ok');
fetch('/api/admin/version', {
method: 'POST',
body: formData
})
.then(function (r) { return r.json(); })
.then(function (res) {
if (res.success) {
msgEl.textContent = '发布成功。版本:' + res.version + ',链接:' + (res.file_url || '');
msgEl.classList.add('ok');
document.getElementById('versionNumber').value = '';
fileInput.value = '';
loadSoftwareVersions();
} else {
msgEl.textContent = res.error || res.message || '上传失败';
msgEl.classList.add('err');
}
})
.catch(function (err) {
msgEl.textContent = '请求失败: ' + (err.message || '');
msgEl.classList.add('err');
});
};
document.getElementById('btnUploadDigitalHumanVersion').onclick = function () {
var version = (document.getElementById('digitalHumanVersionNumber').value || '').trim();
var minClientVersion = (document.getElementById('digitalHumanMinClientVersion').value || '').trim();
var changelog = (document.getElementById('digitalHumanVersionChangelog').value || '').trim();
var fileInput = document.getElementById('digitalHumanVersionZip');
var msgEl = document.getElementById('msgDigitalHumanVersion');
msgEl.textContent = '';
msgEl.className = 'msg';
if (!version) {
msgEl.textContent = '请填写版本号';
msgEl.classList.add('err');
return;
}
if (!fileInput.files || fileInput.files.length === 0) {
msgEl.textContent = '请选择 zip 压缩包';
msgEl.classList.add('err');
return;
}
var file = fileInput.files[0];
if (!(file.name || '').toLowerCase().endsWith('.zip')) {
msgEl.textContent = '仅支持 .zip 格式';
msgEl.classList.add('err');
return;
}
var formData = new FormData();
formData.append('file', file);
formData.append('version', version);
@@ -3646,11 +3729,11 @@
if (res.success && res.data) {
msgEl.textContent = '上传成功!版本:' + res.data.version + '(状态:草稿,请在列表中点击"发布"按钮)';
msgEl.classList.add('ok');
document.getElementById('versionNumber').value = '';
document.getElementById('versionMinClientVersion').value = '';
document.getElementById('versionChangelog').value = '';
document.getElementById('digitalHumanVersionNumber').value = '';
document.getElementById('digitalHumanMinClientVersion').value = '';
document.getElementById('digitalHumanVersionChangelog').value = '';
fileInput.value = '';
loadVersions();
loadDigitalHumanVersions();
} else {
msgEl.textContent = res.message || res.error || '上传失败';
msgEl.classList.add('err');
@@ -3671,7 +3754,7 @@
.then(function (res) {
if (res.success) {
alert('发布成功!');
loadVersions();
loadDigitalHumanVersions();
} else {
alert('发布失败:' + (res.message || res.error || ''));
}
@@ -3690,7 +3773,7 @@
.then(function (res) {
if (res.success) {
alert('设置成功!版本 ' + version + ' 已标记为最新。');
loadVersions();
loadDigitalHumanVersions();
} else {
alert('设置失败:' + (res.message || res.error || ''));
}
@@ -3709,7 +3792,7 @@
.then(function (res) {
if (res.success) {
alert('删除成功!');
loadVersions();
loadDigitalHumanVersions();
} else {
alert('删除失败:' + (res.message || res.error || ''));
}