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 = `
+
+
+
+
+
+
+
+ 发现新版本!以下是最新版本的更新内容。
+
+
+
+
最新版本
+
${updateInfo.version}
+
+
+
发布日期
+
${updateInfo.releaseDate || '未知'}
+
+
+
+
更新内容
+ ${updateList ? `
` : '
暂无更新内容
'}
+
+
+
+
+
+ `;
+
+ // 移除已存在的模态框
+ 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