/** * 版本管理相关功能 */ 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; }