252 lines
9.2 KiB
HTML
252 lines
9.2 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}版本详情 - 软件授权管理系统{% endblock %}
|
|
|
|
{% block page_title %}版本详情{% endblock %}
|
|
|
|
{% block page_actions %}
|
|
<a href="{{ url_for('web.versions') }}" class="btn btn-outline-secondary">
|
|
<i class="fas fa-arrow-left me-2"></i>
|
|
返回列表
|
|
</a>
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
<div class="col-lg-8">
|
|
<div class="card shadow">
|
|
<div class="card-body">
|
|
<h5 class="card-title">版本信息</h5>
|
|
<table class="table table-borderless">
|
|
<tr>
|
|
<td class="fw-bold">版本ID:</td>
|
|
<td>{{ version.version_id }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">产品:</td>
|
|
<td>{{ version.product.product_name if version.product else '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">版本号:</td>
|
|
<td>{{ version.version_num }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">平台:</td>
|
|
<td>{{ version.platform or '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">版本描述:</td>
|
|
<td>{{ version.description or '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">更新日志:</td>
|
|
<td>{{ version.update_log or '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">下载URL:</td>
|
|
<td>
|
|
{% if version.download_url %}
|
|
<a href="{{ version.download_url }}" target="_blank">{{ version.download_url }}</a>
|
|
{% else %}
|
|
-
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">文件哈希:</td>
|
|
<td>{{ version.file_hash or '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">最低卡密版本:</td>
|
|
<td>{{ version.min_license_version or '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">强制更新:</td>
|
|
<td>{{ '是' if version.force_update == 1 else '否' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">下载状态:</td>
|
|
<td>
|
|
<span class="badge {{ 'bg-success' if version.download_status == 1 else 'bg-secondary' }}">
|
|
{{ '启用' if version.download_status == 1 else '禁用' }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">发布状态:</td>
|
|
<td>
|
|
<span class="badge {{ 'bg-success' if version.publish_status == 1 else 'bg-secondary' }}">
|
|
{{ version.publish_status_name }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">创建时间:</td>
|
|
<td>{{ version.create_time.strftime('%Y-%m-%d %H:%M:%S') if version.create_time else '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="fw-bold">更新时间:</td>
|
|
<td>{{ version.update_time.strftime('%Y-%m-%d %H:%M:%S') if version.update_time else '-' }}</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-4">
|
|
<div class="card shadow">
|
|
<div class="card-header">
|
|
<h6 class="mb-0">统计信息</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<ul class="list-group list-group-flush">
|
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
下载次数
|
|
<span class="badge bg-primary rounded-pill">{{ version.get_download_count() }}</span>
|
|
</li>
|
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
活跃设备数
|
|
<a href="{{ url_for('web.devices') }}?product_id={{ version.product_id }}&software_version={{ version.version_num }}&status=1" class="badge bg-success rounded-pill text-decoration-none">{{ version.get_active_device_count() }}</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card shadow mt-4">
|
|
<div class="card-header">
|
|
<h6 class="mb-0">操作</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<a href="{{ url_for('web.edit_version', version_id=version.version_id) }}" class="btn btn-primary w-100 mb-2">
|
|
<i class="fas fa-edit me-2"></i>编辑版本
|
|
</a>
|
|
|
|
{% if version.publish_status == 0 or version.publish_status == 2 %}
|
|
<button type="button" class="btn btn-success w-100 mb-2" id="publish-btn">
|
|
<i class="fas fa-paper-plane me-2"></i>发布版本
|
|
</button>
|
|
{% elif version.publish_status == 1 %}
|
|
<button type="button" class="btn btn-warning w-100 mb-2" id="unpublish-btn">
|
|
<i class="fas fa-undo me-2"></i>取消发布
|
|
</button>
|
|
{% endif %}
|
|
|
|
{% if version.publish_status == 0 or version.publish_status == 2 %}
|
|
<button type="button" class="btn btn-danger w-100" id="delete-btn">
|
|
<i class="fas fa-trash me-2"></i>删除版本
|
|
</button>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block extra_js %}
|
|
<script>
|
|
// 页面加载完成后初始化
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
initEventListeners();
|
|
});
|
|
|
|
// 初始化事件监听器
|
|
function initEventListeners() {
|
|
// 发布按钮点击事件
|
|
document.getElementById('publish-btn')?.addEventListener('click', function() {
|
|
updateVersionStatus(1);
|
|
});
|
|
|
|
// 取消发布按钮点击事件
|
|
document.getElementById('unpublish-btn')?.addEventListener('click', function() {
|
|
updateVersionStatus(0);
|
|
});
|
|
|
|
// 删除按钮点击事件
|
|
document.getElementById('delete-btn')?.addEventListener('click', function() {
|
|
deleteVersion();
|
|
});
|
|
}
|
|
|
|
// 更新版本状态
|
|
function updateVersionStatus(status) {
|
|
const action = status === 1 ? '发布' : '取消发布';
|
|
|
|
if (!confirm(`确定要${action}该版本吗?`)) {
|
|
return;
|
|
}
|
|
|
|
showLoading();
|
|
fetch(`/api/v1/versions/{{ version.version_id }}/status`, {
|
|
method: 'PUT',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({ status: status }),
|
|
credentials: 'same-origin'
|
|
})
|
|
.then(response => {
|
|
hideLoading();
|
|
if (response.ok) {
|
|
return response.json();
|
|
} else {
|
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
}
|
|
})
|
|
.then(data => {
|
|
if (data.success) {
|
|
showNotification(`${action}成功`, 'success');
|
|
// 延迟刷新页面
|
|
setTimeout(() => {
|
|
location.reload();
|
|
}, 1500);
|
|
} else {
|
|
showNotification(data.message || `${action}失败`, 'error');
|
|
}
|
|
})
|
|
.catch(error => {
|
|
hideLoading();
|
|
console.error('Failed to update version status:', error);
|
|
showNotification(`${action}失败`, 'error');
|
|
});
|
|
}
|
|
|
|
// 删除版本
|
|
function deleteVersion() {
|
|
if (!confirm('确定要删除该版本吗?此操作不可恢复!')) {
|
|
return;
|
|
}
|
|
|
|
showLoading();
|
|
fetch(`/api/v1/versions/{{ version.version_id }}`, {
|
|
method: 'DELETE',
|
|
credentials: 'same-origin'
|
|
})
|
|
.then(response => {
|
|
hideLoading();
|
|
if (response.ok) {
|
|
return response.json();
|
|
} else {
|
|
return response.json().then(data => {
|
|
throw new Error(data.message || `HTTP error! status: ${response.status}`);
|
|
});
|
|
}
|
|
})
|
|
.then(data => {
|
|
if (data.success) {
|
|
showNotification('删除成功', 'success');
|
|
// 延迟跳转到版本列表
|
|
setTimeout(() => {
|
|
window.location.href = '/versions';
|
|
}, 1500);
|
|
} else {
|
|
showNotification(data.message || '删除失败', 'error');
|
|
}
|
|
})
|
|
.catch(error => {
|
|
hideLoading();
|
|
console.error('Failed to delete version:', error);
|
|
showNotification('删除失败:' + error.message, 'error');
|
|
});
|
|
}
|
|
</script>
|
|
{% endblock %} |