From 79e04b6d161245681e6e428e20e48cb0e411c85d Mon Sep 17 00:00:00 2001 From: zhinianboke <115088296+zhinianboke@users.noreply.github.com> Date: Thu, 21 Aug 2025 22:02:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/index.html | 20 +++-- static/js/app.js | 189 ++++++++++++++++++++++++++++++++++++++++----- static/version.txt | 1 + 3 files changed, 187 insertions(+), 23 deletions(-) create mode 100644 static/version.txt diff --git a/static/index.html b/static/index.html index 0748fdb..494e5ed 100644 --- a/static/index.html +++ b/static/index.html @@ -147,11 +147,21 @@
-

- - 仪表盘 -

-

系统概览和统计信息

+
+
+

+ + 仪表盘 +

+

系统概览和统计信息

+
+
+ + + 版本: 加载中... + +
+
diff --git a/static/js/app.js b/static/js/app.js index fc228f7..9e38b55 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -1752,6 +1752,9 @@ document.addEventListener('DOMContentLoaded', async () => { // 首先检查认证状态 const isAuthenticated = await checkAuth(); if (!isAuthenticated) return; + + // 加载系统版本号 + loadSystemVersion(); // 添加Cookie表单提交 document.getElementById('addForm').addEventListener('submit', async (e) => { e.preventDefault(); @@ -5963,7 +5966,12 @@ function updateBatchDeleteButton() { // 格式化日期时间 function formatDateTime(dateString) { if (!dateString) return '未知'; - const date = new Date(dateString); + // 如果是ISO格式,直接new Date + if (dateString.includes('T') && dateString.endsWith('Z')) { + return new Date(dateString).toLocaleString('zh-CN'); + } + // 否则按原有逻辑(可选:补偿8小时) + const date = new Date(dateString.replace(' ', 'T') + 'Z'); return date.toLocaleString('zh-CN'); } @@ -8634,23 +8642,6 @@ function updateBatchDeleteOrdersButton() { } } -// 格式化日期时间 -function formatDateTime(dateString) { - if (!dateString) return '未知时间'; - - try { - const date = new Date(dateString); - return date.toLocaleString('zh-CN', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit' - }); - } catch (error) { - return dateString; - } -} // 页面加载完成后初始化订单搜索功能 document.addEventListener('DOMContentLoaded', function() { @@ -9756,3 +9747,165 @@ function exportSearchResults() { showToast('导出搜索结果失败', 'danger'); } } + +// ================================ +// 版本管理功能 +// ================================ + +/** + * 加载系统版本号并检查更新 + */ +async function loadSystemVersion() { + try { + // 从 version.txt 文件读取当前系统版本 + let currentSystemVersion = 'v1.0.0'; // 默认版本 + + try { + const versionResponse = await fetch('/static/version.txt'); + if (versionResponse.ok) { + currentSystemVersion = (await versionResponse.text()).trim(); + } + } catch (e) { + console.warn('无法读取本地版本文件,使用默认版本'); + } + + // 显示当前版本 + document.getElementById('versionNumber').textContent = currentSystemVersion; + + // 获取远程版本并检查更新 + const response = await fetch('http://xianyu.zhinianblog.cn/index.php?action=getVersion'); + const result = await response.json(); + + if (result.error) { + console.error('获取版本号失败:', result.message); + return; + } + + const remoteVersion = result.data; + + // 检查是否有更新 + if (remoteVersion !== currentSystemVersion) { + showUpdateAvailable(remoteVersion); + } + + } catch (error) { + console.error('获取版本号失败:', error); + document.getElementById('versionNumber').textContent = '未知'; + } +} + +/** + * 显示有更新标签 + */ +function showUpdateAvailable(newVersion) { + const versionContainer = document.querySelector('.version-info'); + + if (!versionContainer) { + return; + } + + // 检查是否已经有更新标签 + if (versionContainer.querySelector('.update-badge')) { + return; + } + + // 创建更新标签 + const updateBadge = document.createElement('span'); + updateBadge.className = 'badge bg-warning ms-2 update-badge'; + updateBadge.style.cursor = 'pointer'; + updateBadge.innerHTML = '有更新'; + updateBadge.title = `新版本 ${newVersion} 可用,点击查看更新内容`; + + // 点击事件 + updateBadge.onclick = () => showUpdateInfo(newVersion); + + // 添加到版本信息容器 + versionContainer.appendChild(updateBadge); +} + +/** + * 获取更新信息 + */ +async function getUpdateInfo() { + try { + const response = await fetch('http://xianyu.zhinianblog.cn/index.php?action=getUpdateInfo'); + const result = await response.json(); + + if (result.error) { + showToast('获取更新信息失败: ' + result.message, 'danger'); + return null; + } + + return result.data; + + } catch (error) { + console.error('获取更新信息失败:', error); + showToast('获取更新信息失败', 'danger'); + return null; + } +} + +/** + * 显示更新信息(点击"有更新"标签时调用) + */ +async function showUpdateInfo(newVersion) { + const updateInfo = await getUpdateInfo(); + if (!updateInfo) return; + + let updateList = ''; + if (updateInfo.updates && updateInfo.updates.length > 0) { + updateList = updateInfo.updates.map(item => `
  • ${item}
  • `).join(''); + } + + const modalHtml = ` + + `; + + // 移除已存在的模态框 + const existingModal = document.getElementById('updateModal'); + if (existingModal) { + existingModal.remove(); + } + + // 添加新的模态框 + document.body.insertAdjacentHTML('beforeend', modalHtml); + + // 显示模态框 + const modal = new bootstrap.Modal(document.getElementById('updateModal')); + modal.show(); +} + + diff --git a/static/version.txt b/static/version.txt new file mode 100644 index 0000000..b18d465 --- /dev/null +++ b/static/version.txt @@ -0,0 +1 @@ +v1.0.1