更新带货视频工作流接口和页面
This commit is contained in:
@@ -1478,6 +1478,26 @@ def get_latest_digital_human_version():
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
@admin_api.route('/digital-human-versions/<version>/download-url')
|
||||
@admin_required
|
||||
def get_digital_human_version_download_url(version):
|
||||
"""代理:获取数字人版本下载链接"""
|
||||
_, _, denied = _ensure_admin_menu_access('digital-human-version')
|
||||
if denied:
|
||||
return denied
|
||||
safe_version = quote((version or '').strip(), safe='')
|
||||
if not safe_version:
|
||||
return jsonify({'success': False, 'message': '请指定版本号'}), 400
|
||||
result, error_response, status_code = _proxy_backend_java(
|
||||
'GET',
|
||||
f'/api/digital-human/versions/{safe_version}/download-url',
|
||||
timeout=10
|
||||
)
|
||||
if error_response:
|
||||
return error_response, status_code
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
@admin_api.route('/digital-human-versions/upload', methods=['POST'])
|
||||
@admin_required
|
||||
def upload_digital_human_version():
|
||||
@@ -1508,7 +1528,7 @@ def upload_digital_human_version():
|
||||
'/api/digital-human/versions/upload',
|
||||
files=files,
|
||||
data=data,
|
||||
timeout=300
|
||||
timeout=1800
|
||||
)
|
||||
if error_response:
|
||||
return error_response, status_code
|
||||
|
||||
@@ -3583,8 +3583,6 @@
|
||||
var changelog = (v.changelog || '-').substring(0, 50);
|
||||
if ((v.changelog || '').length > 50) changelog += '...';
|
||||
var releasedAt = v.releasedAt || '-';
|
||||
var downloadUrl = v.downloadUrl || '';
|
||||
|
||||
var actions = '';
|
||||
if (v.status === 'DRAFT') {
|
||||
actions += '<button class="btn btn-sm" onclick="releaseVersion(\'' + v.version + '\')">发布</button> ';
|
||||
@@ -3592,8 +3590,8 @@
|
||||
if (v.status === 'RELEASED' && !v.isLatest) {
|
||||
actions += '<button class="btn btn-sm" onclick="setLatestVersion(\'' + v.version + '\')">设为最新</button> ';
|
||||
}
|
||||
if (downloadUrl) {
|
||||
actions += '<a href="' + downloadUrl + '" class="btn btn-sm" download>下载</a> ';
|
||||
if (v.status === 'RELEASED') {
|
||||
actions += '<button class="btn btn-sm" onclick="downloadDigitalHumanVersion(\'' + encodeURIComponent(v.version || '') + '\')">下载</button> ';
|
||||
}
|
||||
if (!v.isLatest) {
|
||||
actions += '<button class="btn btn-sm btn-danger" onclick="deleteVersion(\'' + v.version + '\')">删除</button>';
|
||||
@@ -3629,7 +3627,39 @@
|
||||
document.getElementById('digitalHumanVersionListBody').innerHTML = '<tr><td colspan="8" class="empty-tip">请求失败: ' + (err.message || '') + '</td></tr>';
|
||||
});
|
||||
}
|
||||
function downloadDigitalHumanVersion(encodedVersion) {
|
||||
var version = decodeURIComponent(encodedVersion || '');
|
||||
if (!version) {
|
||||
alert('版本号为空');
|
||||
return;
|
||||
}
|
||||
fetch('/api/admin/digital-human-versions/' + encodeURIComponent(version) + '/download-url')
|
||||
.then(function (r) { return r.json(); })
|
||||
.then(function (res) {
|
||||
if (!res.success) {
|
||||
throw new Error(res.message || res.error || '获取下载链接失败');
|
||||
}
|
||||
var data = res.data || {};
|
||||
var downloadUrl = typeof data === 'string' ? data : (data.downloadUrl || data.url || '');
|
||||
if (!downloadUrl) {
|
||||
throw new Error('Java 后端未返回下载链接');
|
||||
}
|
||||
var a = document.createElement('a');
|
||||
a.href = downloadUrl;
|
||||
a.download = 'ShuFuDigitalHuman-' + version + '.zip';
|
||||
a.target = '_blank';
|
||||
a.rel = 'noopener';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
})
|
||||
.catch(function (err) {
|
||||
alert(err.message || '下载失败');
|
||||
});
|
||||
}
|
||||
|
||||
window.loadDigitalHumanVersions = loadDigitalHumanVersions;
|
||||
window.downloadDigitalHumanVersion = downloadDigitalHumanVersion;
|
||||
|
||||
document.getElementById('btnUploadVersion').onclick = function () {
|
||||
var version = (document.getElementById('versionNumber').value || '').trim();
|
||||
@@ -3720,29 +3750,54 @@
|
||||
msgEl.textContent = '上传中,请稍候...';
|
||||
msgEl.classList.remove('err', 'ok');
|
||||
|
||||
fetch('/api/admin/digital-human-versions/upload', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
})
|
||||
.then(function (r) { return r.json(); })
|
||||
.then(function (res) {
|
||||
if (res.success && res.data) {
|
||||
msgEl.textContent = '上传成功!版本:' + res.data.version + '(状态:草稿,请在列表中点击"发布"按钮)';
|
||||
msgEl.classList.add('ok');
|
||||
document.getElementById('digitalHumanVersionNumber').value = '';
|
||||
document.getElementById('digitalHumanMinClientVersion').value = '';
|
||||
document.getElementById('digitalHumanVersionChangelog').value = '';
|
||||
fileInput.value = '';
|
||||
loadDigitalHumanVersions();
|
||||
} else {
|
||||
msgEl.textContent = res.message || res.error || '上传失败';
|
||||
msgEl.classList.add('err');
|
||||
}
|
||||
})
|
||||
.catch(function (err) {
|
||||
msgEl.textContent = '请求失败: ' + (err.message || '');
|
||||
var uploadUrl = window.DIGITAL_HUMAN_JAVA_UPLOAD_URL;
|
||||
if (!uploadUrl) {
|
||||
uploadUrl = '/api/admin/digital-human-versions/upload';
|
||||
}
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', uploadUrl, true);
|
||||
xhr.timeout = 1800000;
|
||||
xhr.upload.onprogress = function (event) {
|
||||
if (event.lengthComputable) {
|
||||
var percent = Math.floor((event.loaded / event.total) * 100);
|
||||
msgEl.textContent = '正在上传:' + percent + '%';
|
||||
} else {
|
||||
msgEl.textContent = '正在上传,请稍候...';
|
||||
}
|
||||
};
|
||||
xhr.onload = function () {
|
||||
var res = null;
|
||||
try {
|
||||
res = JSON.parse(xhr.responseText || '{}');
|
||||
} catch (e) {
|
||||
msgEl.textContent = '上传失败:Java 返回不是 JSON';
|
||||
msgEl.classList.add('err');
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (xhr.status >= 200 && xhr.status < 300 && res.success && res.data) {
|
||||
msgEl.textContent = '上传成功!版本:' + res.data.version + '(状态:草稿,请在列表中点击"发布"按钮)';
|
||||
msgEl.classList.add('ok');
|
||||
document.getElementById('digitalHumanVersionNumber').value = '';
|
||||
document.getElementById('digitalHumanMinClientVersion').value = '';
|
||||
document.getElementById('digitalHumanVersionChangelog').value = '';
|
||||
fileInput.value = '';
|
||||
loadDigitalHumanVersions();
|
||||
} else {
|
||||
msgEl.textContent = (res && (res.message || res.error)) || ('上传失败:HTTP ' + xhr.status);
|
||||
msgEl.classList.add('err');
|
||||
}
|
||||
};
|
||||
xhr.onerror = function () {
|
||||
msgEl.textContent = '请求失败:无法连接上传服务 ' + uploadUrl;
|
||||
msgEl.classList.add('err');
|
||||
};
|
||||
xhr.ontimeout = function () {
|
||||
msgEl.textContent = '上传超时,请检查 Java 服务或网关超时配置';
|
||||
msgEl.classList.add('err');
|
||||
};
|
||||
xhr.send(formData);
|
||||
};
|
||||
|
||||
window.releaseVersion = function(version) {
|
||||
|
||||
Reference in New Issue
Block a user