修改了更新记录中的版本号显示
This commit is contained in:
parent
b5f41c40b8
commit
7defc9be8d
Binary file not shown.
@ -40,10 +40,27 @@ class OverviewPage extends HTMLElement {
|
||||
formatVersionRecord(version) {
|
||||
const date = version.date;
|
||||
const time = version.time;
|
||||
const verNum = version.verNum;
|
||||
const verNum = this.formatVersionNumber(version);
|
||||
const title = version.title;
|
||||
|
||||
return `<span class="version-date">【${date} ${time}】</span><span class="version-number">v${verNum}</span><span class="version-title">${title}</span>`;
|
||||
return `<span class="version-date">【${date} ${time}】</span><span class="version-number">V${verNum}</span><span class="version-title">${title}</span>`;
|
||||
}
|
||||
|
||||
formatVersionNumber(version) {
|
||||
const dateParts = version.date.split('-');
|
||||
const shortDate = dateParts[0].slice(-2) + dateParts[1] + dateParts[2];
|
||||
|
||||
return `${version.verNum}.${shortDate}_${version.stage || 'alpha'}`;
|
||||
}
|
||||
|
||||
getStageLabel(stage) {
|
||||
const labels = {
|
||||
'alpha': '开发版',
|
||||
'beta': '测试版',
|
||||
'rc': '候选版',
|
||||
'stable': '正式版'
|
||||
};
|
||||
return labels[stage] || '开发版';
|
||||
}
|
||||
|
||||
startClock() {
|
||||
@ -562,7 +579,7 @@ class OverviewPage extends HTMLElement {
|
||||
<ul class="version-list">
|
||||
<li>
|
||||
<span class="label">当前版本</span>
|
||||
<span class="value">v${this.versions[0].verNum}</span>
|
||||
<span class="value">V${this.formatVersionNumber(this.versions[0])}</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label">发布日期</span>
|
||||
|
@ -55,10 +55,10 @@ class UpdateHistory extends HTMLElement {
|
||||
|
||||
// 按版本号降序排序,然后按日期降序
|
||||
this.versions = data.sort((a, b) => {
|
||||
const versionA = parseFloat(a.verNum);
|
||||
const versionB = parseFloat(b.verNum);
|
||||
if (versionA !== versionB) {
|
||||
return versionB - versionA;
|
||||
// 使用版本号比较函数
|
||||
const versionCompare = this.compareVersions(b.verNum, a.verNum);
|
||||
if (versionCompare !== 0) {
|
||||
return versionCompare;
|
||||
}
|
||||
const dateA = new Date(a.date + ' ' + a.time);
|
||||
const dateB = new Date(b.date + ' ' + b.time);
|
||||
@ -72,6 +72,22 @@ class UpdateHistory extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
// 比较版本号
|
||||
compareVersions(versionA, versionB) {
|
||||
const partsA = versionA.split('.').map(Number);
|
||||
const partsB = versionB.split('.').map(Number);
|
||||
|
||||
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
||||
const partA = partsA[i] || 0;
|
||||
const partB = partsB[i] || 0;
|
||||
|
||||
if (partA > partB) return 1;
|
||||
if (partA < partB) return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
renderVersions() {
|
||||
const contentContainer = this.shadowRoot.querySelector('#content');
|
||||
|
||||
@ -91,7 +107,8 @@ class UpdateHistory extends HTMLElement {
|
||||
<div class="version-item" data-version="${version.verNum}">
|
||||
<div class="version-header">
|
||||
<div class="version-info">
|
||||
<span class="version-number">v${version.verNum}</span>
|
||||
<span class="version-number">V${this.formatVersionNumber(version)}</span>
|
||||
<span class="version-stage ${version.stage || 'alpha'}">${this.getStageLabel(version.stage)}</span>
|
||||
<span class="version-title">${version.title}</span>
|
||||
<span class="version-date">${version.date} ${version.time}</span>
|
||||
<span class="version-author">作者: ${version.author || '未知用户'}</span>
|
||||
@ -297,6 +314,35 @@ class UpdateHistory extends HTMLElement {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.version-stage {
|
||||
font-size: 12px;
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
font-weight: 500;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.version-stage.alpha {
|
||||
background-color: #E3F2FD;
|
||||
color: #1976D2;
|
||||
}
|
||||
|
||||
.version-stage.beta {
|
||||
background-color: #FFF3E0;
|
||||
color: #F57C00;
|
||||
}
|
||||
|
||||
.version-stage.rc {
|
||||
background-color: #E8F5E9;
|
||||
color: #388E3C;
|
||||
}
|
||||
|
||||
.version-stage.stable {
|
||||
background-color: #F3E5F5;
|
||||
color: #7B1FA2;
|
||||
}
|
||||
|
||||
.version-title {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
@ -565,6 +611,15 @@ class UpdateHistory extends HTMLElement {
|
||||
<label for="verNum">版本号</label>
|
||||
<input type="text" class="form-control" id="verNum" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="stage">版本阶段</label>
|
||||
<select class="form-control" id="stage" required>
|
||||
<option value="alpha">开发版</option>
|
||||
<option value="beta">测试版</option>
|
||||
<option value="rc">候选版</option>
|
||||
<option value="stable">正式版</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="date">日期</label>
|
||||
<input type="text" class="form-control" id="date" required>
|
||||
@ -633,6 +688,16 @@ class UpdateHistory extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化版本号显示
|
||||
formatVersionNumber(version) {
|
||||
// 将日期转换为六位数字格式 (YYYY-MM-DD -> YYMMDD)
|
||||
const dateParts = version.date.split('-');
|
||||
const shortDate = dateParts[0].slice(-2) + dateParts[1] + dateParts[2];
|
||||
|
||||
// 组合版本号、日期和阶段
|
||||
return `${version.verNum}.${shortDate}_${version.stage || 'alpha'}`;
|
||||
}
|
||||
|
||||
// 准备模态框数据
|
||||
prepareModalData() {
|
||||
// 获取表单元素
|
||||
@ -681,6 +746,17 @@ class UpdateHistory extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取版本阶段显示标签
|
||||
getStageLabel(stage) {
|
||||
const stageLabels = {
|
||||
'alpha': '开发版',
|
||||
'beta': '测试版',
|
||||
'rc': '候选版',
|
||||
'stable': '正式版'
|
||||
};
|
||||
return stageLabels[stage] || '开发版';
|
||||
}
|
||||
|
||||
// 提交版本信息
|
||||
async submitVersion() {
|
||||
const modal = this.shadowRoot.getElementById('versionModal');
|
||||
@ -689,6 +765,7 @@ class UpdateHistory extends HTMLElement {
|
||||
const time = this.shadowRoot.getElementById('time').value;
|
||||
const title = this.shadowRoot.getElementById('title').value;
|
||||
const note = this.shadowRoot.getElementById('note').value;
|
||||
const stage = this.shadowRoot.getElementById('stage').value;
|
||||
|
||||
// 获取当前登录用户名
|
||||
let author = '未知用户';
|
||||
@ -716,7 +793,8 @@ class UpdateHistory extends HTMLElement {
|
||||
time,
|
||||
title,
|
||||
note,
|
||||
author
|
||||
author,
|
||||
stage
|
||||
})
|
||||
});
|
||||
|
||||
|
@ -1,22 +1,14 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const Database = require('better-sqlite3');
|
||||
const { getXNCorePath } = require('../utils/file-utils');
|
||||
const { getAllVersions, addVersion } = require('../utils/version-utils');
|
||||
|
||||
// 版本信息API
|
||||
router.get('/versions', (req, res) => {
|
||||
try {
|
||||
const xnCorePath = getXNCorePath();
|
||||
const dbPath = xnCorePath + '/database/XNSim.db';
|
||||
const db = new Database(dbPath, { readonly: true });
|
||||
|
||||
// 移除LIMIT 5限制,返回所有版本记录
|
||||
const versions = db.prepare('SELECT verNum, date, time, title, note, author FROM version ORDER BY date DESC, time DESC').all();
|
||||
|
||||
db.close();
|
||||
const versions = getAllVersions();
|
||||
res.json(versions);
|
||||
} catch (error) {
|
||||
console.error('数据库访问错误:', error);
|
||||
console.error('获取版本信息失败:', error);
|
||||
res.status(500).json({ error: '无法获取版本信息' });
|
||||
}
|
||||
});
|
||||
@ -24,60 +16,20 @@ router.get('/versions', (req, res) => {
|
||||
// 添加新版本记录API
|
||||
router.post('/versions', (req, res) => {
|
||||
try {
|
||||
// 检查用户权限 - 不再依赖session
|
||||
// 从localStorage获取的用户信息在前端,后端无法直接访问
|
||||
// 由于update-history.js中已经设置了accessLevel为4用于测试,这里直接允许所有请求
|
||||
// 实际生产环境应该实现正确的授权机制
|
||||
/*
|
||||
const user = req.session && req.session.user;
|
||||
if (!user || user.accessLevel < 4) {
|
||||
return res.status(403).json({ error: '权限不足,需要超级管理员权限' });
|
||||
}
|
||||
*/
|
||||
|
||||
// 获取请求数据
|
||||
const { verNum, date, time, title, note, author } = req.body;
|
||||
|
||||
// 数据验证
|
||||
if (!verNum || !date || !time || !title) {
|
||||
return res.status(400).json({ error: '版本号、日期、时间和标题不能为空' });
|
||||
}
|
||||
|
||||
// 打开数据库
|
||||
const xnCorePath = getXNCorePath();
|
||||
const dbPath = xnCorePath + '/database/XNSim.db';
|
||||
const db = new Database(dbPath);
|
||||
|
||||
try {
|
||||
// 检查版本号是否已存在
|
||||
const existingVersion = db.prepare('SELECT verNum FROM version WHERE verNum = ?').get(verNum);
|
||||
if (existingVersion) {
|
||||
return res.status(400).json({ error: '该版本号已存在' });
|
||||
}
|
||||
|
||||
// 插入新版本记录
|
||||
const stmt = db.prepare('INSERT INTO version (verNum, date, time, title, note, author) VALUES (?, ?, ?, ?, ?, ?)');
|
||||
const result = stmt.run(verNum, date, time, title, note || '', author || '未知用户');
|
||||
|
||||
db.close();
|
||||
|
||||
if (result.changes > 0) {
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
message: '版本记录添加成功',
|
||||
id: result.lastInsertRowid
|
||||
});
|
||||
} else {
|
||||
res.status(500).json({ error: '添加版本记录失败' });
|
||||
}
|
||||
} catch (dbError) {
|
||||
db.close();
|
||||
throw dbError;
|
||||
}
|
||||
const result = addVersion(req.body);
|
||||
res.status(201).json(result);
|
||||
} catch (error) {
|
||||
console.error('添加版本记录失败:', error);
|
||||
if (error.message === '该版本号已存在') {
|
||||
res.status(400).json({ error: error.message });
|
||||
} else if (error.message === '版本号、日期、时间和标题不能为空') {
|
||||
res.status(400).json({ error: error.message });
|
||||
} else if(error.message === '无效的版本阶段') {
|
||||
res.status(400).json({ error: error.message });
|
||||
} else {
|
||||
res.status(500).json({ error: '服务器内部错误' });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
101
XNSimHtml/utils/version-utils.js
Normal file
101
XNSimHtml/utils/version-utils.js
Normal file
@ -0,0 +1,101 @@
|
||||
const Database = require('better-sqlite3');
|
||||
const { getXNCorePath } = require('./file-utils');
|
||||
|
||||
// 版本阶段枚举
|
||||
const VERSION_STAGES = {
|
||||
ALPHA: 'alpha', // 开发版
|
||||
BETA: 'beta', // 测试版
|
||||
RELEASE_CANDIDATE: 'rc', // 候选版
|
||||
STABLE: 'stable' // 正式版
|
||||
};
|
||||
|
||||
// 获取所有版本记录
|
||||
function getAllVersions() {
|
||||
try {
|
||||
const xnCorePath = getXNCorePath();
|
||||
const dbPath = xnCorePath + '/database/XNSim.db';
|
||||
const db = new Database(dbPath, { readonly: true });
|
||||
|
||||
// 添加stage字段到查询中
|
||||
const versions = db.prepare(`
|
||||
SELECT verNum, date, time, title, note, author, stage
|
||||
FROM version
|
||||
ORDER BY date DESC, time DESC
|
||||
`).all();
|
||||
|
||||
db.close();
|
||||
return versions;
|
||||
} catch (error) {
|
||||
console.error('获取版本记录失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// 添加新版本记录
|
||||
function addVersion(versionData) {
|
||||
try {
|
||||
const { verNum, date, time, title, note, author, stage } = versionData;
|
||||
|
||||
// 数据验证
|
||||
if (!verNum || !date || !time || !title) {
|
||||
throw new Error('版本号、日期、时间和标题不能为空');
|
||||
}
|
||||
|
||||
// 验证版本阶段
|
||||
if (stage && !Object.values(VERSION_STAGES).includes(stage)) {
|
||||
throw new Error('无效的版本阶段');
|
||||
}
|
||||
|
||||
const xnCorePath = getXNCorePath();
|
||||
const dbPath = xnCorePath + '/database/XNSim.db';
|
||||
const db = new Database(dbPath);
|
||||
|
||||
try {
|
||||
// 检查版本号是否已存在
|
||||
const existingVersion = db.prepare('SELECT verNum FROM version WHERE verNum = ?').get(verNum);
|
||||
if (existingVersion) {
|
||||
throw new Error('该版本号已存在');
|
||||
}
|
||||
|
||||
// 插入新版本记录,包含stage字段
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO version (
|
||||
verNum, date, time, title, note, author, stage
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
const result = stmt.run(
|
||||
verNum,
|
||||
date,
|
||||
time,
|
||||
title,
|
||||
note || '',
|
||||
author || '未知用户',
|
||||
stage || VERSION_STAGES.ALPHA // 默认为开发版
|
||||
);
|
||||
|
||||
db.close();
|
||||
|
||||
if (result.changes > 0) {
|
||||
return {
|
||||
success: true,
|
||||
message: '版本记录添加成功',
|
||||
id: result.lastInsertRowid
|
||||
};
|
||||
} else {
|
||||
throw new Error('添加版本记录失败');
|
||||
}
|
||||
} catch (dbError) {
|
||||
db.close();
|
||||
throw dbError;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('添加版本记录失败:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getAllVersions,
|
||||
addVersion,
|
||||
VERSION_STAGES
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user