修复图片下载问题
This commit is contained in:
@@ -111,6 +111,11 @@ ADMIN_MENU_ACCESS_CONFIG.update({
|
||||
'route_path': 'version',
|
||||
'error': '无权访问版本管理模块',
|
||||
},
|
||||
'digital-human-version': {
|
||||
'column_key': 'digital_human_version',
|
||||
'route_path': 'digital-human-version',
|
||||
'error': '无权访问数字人版本管理模块',
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -1436,7 +1441,7 @@ def list_versions():
|
||||
@admin_required
|
||||
def list_digital_human_versions():
|
||||
"""代理:查询数字人版本列表"""
|
||||
_, _, denied = _ensure_admin_menu_access('version')
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
page = request.args.get('page', '1')
|
||||
@@ -1460,6 +1465,9 @@ def list_digital_human_versions():
|
||||
@admin_required
|
||||
def get_latest_digital_human_version():
|
||||
"""代理:获取最新数字人版本"""
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
result, error_response, status_code = _proxy_backend_java(
|
||||
'GET',
|
||||
'/api/digital-human/versions/latest',
|
||||
@@ -1474,7 +1482,7 @@ def get_latest_digital_human_version():
|
||||
@admin_required
|
||||
def upload_digital_human_version():
|
||||
"""代理:上传数字人版本"""
|
||||
_, _, denied = _ensure_admin_menu_access('version')
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
|
||||
@@ -1511,7 +1519,7 @@ def upload_digital_human_version():
|
||||
@admin_required
|
||||
def release_digital_human_version(version):
|
||||
"""代理:发布数字人版本"""
|
||||
_, _, denied = _ensure_admin_menu_access('version')
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
result, error_response, status_code = _proxy_backend_java(
|
||||
@@ -1528,7 +1536,7 @@ def release_digital_human_version(version):
|
||||
@admin_required
|
||||
def set_latest_digital_human_version(version):
|
||||
"""代理:设为最新数字人版本"""
|
||||
_, _, denied = _ensure_admin_menu_access('version')
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
result, error_response, status_code = _proxy_backend_java(
|
||||
@@ -1545,7 +1553,7 @@ def set_latest_digital_human_version(version):
|
||||
@admin_required
|
||||
def delete_digital_human_version(version):
|
||||
"""代理:删除数字人版本"""
|
||||
_, _, denied = _ensure_admin_menu_access('version')
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
result, error_response, status_code = _proxy_backend_java(
|
||||
|
||||
@@ -59,8 +59,8 @@ file_url_pre = f"https://{bucket}.oss-cn-hangzhou.aliyuncs.com/"
|
||||
backend_java_base_url, backend_java_base_url_source = _get_env(
|
||||
"java_api_base",
|
||||
"BACKEND_JAVA_BASE_URL",
|
||||
# default="http://api.aishufu.top:18080/",
|
||||
default="http://127.0.0.1:18080/",
|
||||
default="http://api.aishufu.top:18080/",
|
||||
# default="http://127.0.0.1:18080/",
|
||||
)
|
||||
backend_java_base_url = backend_java_base_url.rstrip("/")
|
||||
os.environ["OSS_ACCESS_KEY_ID"] = accessKeyId
|
||||
|
||||
@@ -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 || ''));
|
||||
}
|
||||
|
||||
@@ -793,7 +793,8 @@
|
||||
<div class="tab" data-tab="query-asin">查询 ASIN</div>
|
||||
<div class="tab" data-tab="product-categories">商品类目</div>
|
||||
<div class="tab" data-tab="history">查看生成记录</div>
|
||||
<div class="tab" data-tab="version">版本管理</div>
|
||||
<div class="tab" data-tab="version">软件版本管理</div>
|
||||
<div class="tab" data-tab="digital-human-version">数字人版本管理</div>
|
||||
</div>
|
||||
|
||||
<!-- 用户管理 -->
|
||||
@@ -916,8 +917,46 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数字人版本管理 -->
|
||||
<!-- 软件版本管理 -->
|
||||
<div id="panel-version" class="tab-panel">
|
||||
<div class="form-box">
|
||||
<h3 style="margin-bottom:16px;font-size:15px;">上传新版本</h3>
|
||||
<p style="margin-bottom:16px;font-size:13px;color:#666;">
|
||||
上传软件 ZIP 包,系统会自动计算 MD5 并存储到 OSS。
|
||||
</p>
|
||||
<div class="form-row">
|
||||
<div class="form-group" style="min-width:200px;">
|
||||
<label>版本号 *</label>
|
||||
<input type="text" id="versionNumber" placeholder="例如:1.0.0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>ZIP 压缩包 *</label>
|
||||
<input type="file" id="versionZip" accept=".zip">
|
||||
<p style="font-size:12px;color:#999;margin-top:4px;">仅支持 .zip 格式</p>
|
||||
</div>
|
||||
<button class="btn" id="btnUploadVersion">上传软件版本</button>
|
||||
<p class="msg" id="msgVersion"></p>
|
||||
</div>
|
||||
<div class="panel-box">
|
||||
<h3 style="margin-bottom:16px;font-size:15px;">版本列表</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:120px;">版本号</th>
|
||||
<th>下载链接</th>
|
||||
<th style="width:160px;">创建时间</th>
|
||||
<th style="width:120px;">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="versionListBody"></tbody>
|
||||
</table>
|
||||
<div class="pagination" id="versionPagination"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数字人版本管理 -->
|
||||
<div id="panel-digital-human-version" class="tab-panel">
|
||||
<div class="form-box">
|
||||
<h3 style="margin-bottom:16px;font-size:15px;">上传新版本</h3>
|
||||
<p style="margin-bottom:16px;font-size:13px;color:#666;">
|
||||
@@ -926,24 +965,23 @@
|
||||
<div class="form-row">
|
||||
<div class="form-group" style="min-width:200px;">
|
||||
<label>版本号 *</label>
|
||||
<input type="text" id="versionNumber" placeholder="例如:1.0.0">
|
||||
<input type="text" id="digitalHumanVersionNumber" placeholder="例如:1.0.0">
|
||||
</div>
|
||||
<div class="form-group" style="min-width:200px;">
|
||||
<label>最低客户端版本</label>
|
||||
<input type="text" id="versionMinClientVersion" placeholder="例如:2.0.0(可选)">
|
||||
<input type="text" id="digitalHumanMinClientVersion" placeholder="例如:2.0.0(可选)">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>更新日志</label>
|
||||
<textarea id="versionChangelog" rows="3" placeholder="例如:修复数字人口型同步问题,优化启动速度" style="width:100%;padding:10px;border:1px solid #ddd;border-radius:6px;resize:vertical;"></textarea>
|
||||
<textarea id="digitalHumanVersionChangelog" rows="3" placeholder="例如:修复数字人口型同步问题,优化启动速度" style="width:100%;padding:10px;border:1px solid #ddd;border-radius:6px;resize:vertical;"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>ZIP 压缩包 *</label>
|
||||
<input type="file" id="versionZip" accept=".zip">
|
||||
<p style="font-size:12px;color:#999;margin-top:4px;">仅支持 .zip 格式,文件名:ShuFuDigitalHuman.zip</p>
|
||||
<input type="file" id="digitalHumanVersionZip" accept=".zip">
|
||||
</div>
|
||||
<button class="btn" id="btnUploadVersion">上传(草稿状态)</button>
|
||||
<p class="msg" id="msgVersion"></p>
|
||||
<button class="btn" id="btnUploadDigitalHumanVersion">上传(草稿状态)</button>
|
||||
<p class="msg" id="msgDigitalHumanVersion"></p>
|
||||
</div>
|
||||
<div class="panel-box">
|
||||
<h3 style="margin-bottom:16px;font-size:15px;">版本列表</h3>
|
||||
@@ -960,9 +998,9 @@
|
||||
<th style="width:240px;">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="versionListBody"></tbody>
|
||||
<tbody id="digitalHumanVersionListBody"></tbody>
|
||||
</table>
|
||||
<div class="pagination" id="versionPagination"></div>
|
||||
<div class="pagination" id="digitalHumanVersionPagination"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user