/**
* 版本管理相关功能
*/
let versions = []; // 所有版本
let versionCurrentPage = 1;
let versionPageSize = 10;
let versionTotalPages = 0;
let versionTotalCount = 0;
document.addEventListener('DOMContentLoaded', function () {
// 保存版本按钮点击事件
document.getElementById('btn-save-version').addEventListener('click', saveVersion);
});
/**
* 加载版本列表
*/
async function loadVersions() {
try {
const params = {
"token": localStorage.getItem('token'),
page: versionCurrentPage,
pageSize: versionPageSize
};
const response = await Api.get('/api/versions', params);
versions = Array.isArray(response.items) ? response.items : (Array.isArray(response) ? response : []);
versionTotalCount = response.total || versions.length;
versionTotalPages = Math.ceil(versionTotalCount / versionPageSize);
renderVersionList(versions);
renderVersionPagination();
} catch (error) {
showToast(error.message, 'danger');
}
}
/**
* 渲染版本列表
* @param {Array} versions - 版本列表
*/
function renderVersionList(versions) {
const versionList = document.getElementById('version-list');
versionList.innerHTML = '';
if (!versions || versions.length === 0) {
versionList.innerHTML = '
| 暂无数据 |
';
return;
}
// 渲染版本列表
versions.forEach(version => {
const tr = document.createElement('tr');
tr.innerHTML = `
${version.id} |
${version.name} |
${version.content || '-'} |
${formatDateTime(version.createTime)} |
|
`;
versionList.appendChild(tr);
});
// 更新总数
const totalCountEl = document.getElementById('version-total-count');
if (totalCountEl) totalCountEl.textContent = versionTotalCount;
}
function renderVersionPagination() {
const pagination = document.getElementById('version-pagination');
if (!pagination) return;
pagination.innerHTML = '';
if (versionTotalPages <= 1) return;
// 上一页
const prevLi = document.createElement('li');
prevLi.className = `page-item ${versionCurrentPage === 1 ? 'disabled' : ''}`;
const prevLink = document.createElement('a');
prevLink.className = 'page-link';
prevLink.href = '#';
prevLink.setAttribute('aria-label', '上一页');
prevLink.innerHTML = '«';
if (versionCurrentPage > 1) {
prevLink.addEventListener('click', function (event) {
event.preventDefault();
versionCurrentPage--;
loadVersions();
});
}
prevLi.appendChild(prevLink);
pagination.appendChild(prevLi);
// 页码
const startPage = Math.max(1, versionCurrentPage - 2);
const endPage = Math.min(versionTotalPages, startPage + 4);
for (let i = startPage; i <= endPage; i++) {
const pageLi = document.createElement('li');
pageLi.className = `page-item ${i === versionCurrentPage ? 'active' : ''}`;
const pageLink = document.createElement('a');
pageLink.className = 'page-link';
pageLink.href = '#';
pageLink.textContent = i;
if (i !== versionCurrentPage) {
pageLink.addEventListener('click', function (event) {
event.preventDefault();
versionCurrentPage = i;
loadVersions();
});
}
pageLi.appendChild(pageLink);
pagination.appendChild(pageLi);
}
// 下一页
const nextLi = document.createElement('li');
nextLi.className = `page-item ${versionCurrentPage === versionTotalPages ? 'disabled' : ''}`;
const nextLink = document.createElement('a');
nextLink.className = 'page-link';
nextLink.href = '#';
nextLink.setAttribute('aria-label', '下一页');
nextLink.innerHTML = '»';
if (versionCurrentPage < versionTotalPages) {
nextLink.addEventListener('click', function (event) {
event.preventDefault();
versionCurrentPage++;
loadVersions();
});
}
nextLi.appendChild(nextLink);
pagination.appendChild(nextLi);
}
/**
* 打开新增版本模态框
*/
function openAddVersionModal() {
// 重置表单
document.getElementById('version-form').reset();
document.getElementById('version-id').value = '';
// 设置模态框标题
document.getElementById('versionModalLabel').textContent = '新增版本';
// 显示模态框
const versionModal = new bootstrap.Modal(document.getElementById('versionModal'));
versionModal.show();
}
/**
* 编辑版本
* @param {number} id - 版本ID
*/
async function editVersion(id) {
try {
const params = {
"token": localStorage.getItem('token')
};
// 获取版本详情
const version = await Api.get(`/api/versions/${id}`, params);
// 填充表单
document.getElementById('version-id').value = version.id;
document.getElementById('version-name').value = version.name;
document.getElementById('version-content').value = version.content || '';
// 设置模态框标题
document.getElementById('versionModalLabel').textContent = '编辑版本';
// 显示模态框
const versionModal = new bootstrap.Modal(document.getElementById('versionModal'));
versionModal.show();
} catch (error) {
showToast(error.message, 'danger');
}
}
/**
* 保存版本
*/
async function saveVersion() {
try {
// 获取表单数据
const id = document.getElementById('version-id').value;
const name = document.getElementById('version-name').value;
const content = document.getElementById('version-content').value;
// 验证表单
if (!name) {
showToast('请输入版本名称', 'danger');
return;
}
// 检查版本号是否重复
const existingVersion = versions.find(v => v.name === name);
if (existingVersion && existingVersion.id !== parseInt(id)) {
showToast('版本名称已存在', 'danger');
return;
}
// 构建请求数据
const data = {
name, content: content || null
};
// 发送请求
if (id) {
// 更新版本
const response = await Api.put(`/api/versions/${id}`, data);
showToast('版本更新成功', 'success');
} else {
// 新增版本
const response = await Api.post('/api/versions', data);
showToast('版本创建成功', 'success');
}
// 关闭模态框
const versionModal = bootstrap.Modal.getInstance(document.getElementById('versionModal'));
versionModal.hide();
// 重新加载版本列表
loadVersions();
} catch (error) {
showToast(error.message, 'danger');
}
}
/**
* 删除版本
* @param {number} id - 版本ID
* @param {string} name - 版本名称
*/
function deleteVersion(id, name) {
// 设置确认删除模态框内容
document.getElementById('delete-type').textContent = `版本"${name}"`;
// 设置确认删除按钮点击事件
document.getElementById('btn-confirm-delete').onclick = async function () {
try {
// 发送删除请求
await Api.delete(`/api/versions/${id}`);
// 关闭确认删除模态框
const confirmDeleteModal = bootstrap.Modal.getInstance(document.getElementById('confirmDeleteModal'));
confirmDeleteModal.hide();
// 显示成功消息
showToast('版本删除成功', 'success');
// 重新加载版本列表
loadVersions();
} catch (error) {
showToast(error.message, 'danger');
}
};
// 显示确认删除模态框
const confirmDeleteModal = new bootstrap.Modal(document.getElementById('confirmDeleteModal'));
confirmDeleteModal.show();
}
/**
* 获取所有版本列表
* @returns {Array} - 版本列表
*/
function getAllVersions() {
return versions;
}