diff --git a/README.md b/README.md index d82b9a5..feebeda 100644 --- a/README.md +++ b/README.md @@ -276,8 +276,9 @@ classmanager/ | v2.2 | 2026.5.27 | 安全修复:管理员操作越权漏洞修复、新增宿舍集体加分功能、学生导入支持宿舍号、导入预览显示宿舍号列 | | v2.3 | 2026.5.28 | 升级系统全面重构:修复前后端通信错误处理、SQL DELIMITER解析修复、XSS防护、升级验证+自动重试+失败回滚机制、补全v1.0-v1.6增量升级脚本 | | v2.5 | 2026.5.28 | 历史记录页优化(文字宽度/换行/合并按钮样式)、新增状态筛选项、合并记录批量撤销/反撤销、操作菜单底部遮挡修复、删除科目报错修复、学期自动关联+当前周数计算 | -| v2.5.1 | 2026.5.28 | 筛选学生时自动取消合并记录、合并记录选项样式修复(竖排显示)、历史记录筛选改为折叠式、科目管理调用修复、全局escapeHtml XSS转义修复 | -| v2.6 | 2026.5.28 | 历史记录筛选面板重构(学生筛选移入面板、合并按钮始终可见)、新增科目下拉筛选、新增原因关键词搜索、科目删除后默认仅显示启用科目、筛选面板展开修复、版本号同步至2.6 | +| v2.5.1 | 2026.5.29 | 筛选学生时自动取消合并记录、合并记录选项样式修复(竖排显示)、历史记录筛选改为折叠式、科目管理调用修复、全局escapeHtml XSS转义修复 | +| v2.6 | 2026.5.29 | 历史记录筛选面板重构(学生筛选移入面板、合并按钮始终可见)、新增科目下拉筛选、新增原因关键词搜索、科目删除后默认仅显示启用科目、筛选面板展开修复、版本号同步至2.6 | +| v2.7 | 2026.5.29 | 操作菜单定位修复、历史记录显示修复、筛选面板修复、科目删除修复、学期周数列修复、escapeHtml 转义修复 | ## 许可证 diff --git a/VERSION b/VERSION index 5154b3f..1effb00 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6 +2.7 diff --git a/backend/routes/upgrade.py b/backend/routes/upgrade.py index bb76e34..c9e6aac 100644 --- a/backend/routes/upgrade.py +++ b/backend/routes/upgrade.py @@ -39,6 +39,7 @@ ALL_VERSIONS = { '2.5': 'v2.5.sql', '2.5.1': 'v2.5.1.sql', '2.6': 'v2.6.sql', + '2.7': 'v2.7.sql', } # 版本特征标记(按优先级从高到低) VERSION_MARKERS = [ diff --git a/frontend/assets/css/admin.css b/frontend/assets/css/admin.css index 09f8671..41258a6 100644 --- a/frontend/assets/css/admin.css +++ b/frontend/assets/css/admin.css @@ -234,6 +234,6 @@ } .preserve-newlines { - white-space: pre-wrap; + white-space: normal; word-break: break-word; } diff --git a/frontend/assets/js/common.js b/frontend/assets/js/common.js index 22321dd..7c693a7 100644 --- a/frontend/assets/js/common.js +++ b/frontend/assets/js/common.js @@ -342,13 +342,20 @@ function toggleActionDropdown(el) { if (!isOpen) { // 使用 fixed 定位,避免被 overflow 容器裁剪 var rect = el.getBoundingClientRect(); + // 先显示以便测量高度 + menu.classList.add('show'); menu.style.position = 'fixed'; menu.style.bottom = 'auto'; menu.style.right = 'auto'; - menu.style.left = rect.right - 120 + 'px'; // 120px = min-width - menu.style.top = (rect.top - 4) + 'px'; - menu.style.transform = 'translateY(-100%)'; - menu.classList.add('show'); + menu.style.transform = 'none'; + var menuHeight = menu.offsetHeight; + // 智能判断:按钮在上半部分则菜单显示在下方,否则显示在上方 + if (rect.top < window.innerHeight / 2) { + menu.style.top = rect.bottom + 'px'; + } else { + menu.style.top = (rect.top - menuHeight) + 'px'; + } + menu.style.left = Math.min(rect.left, window.innerWidth - 130) + 'px'; el.classList.add('open'); } } diff --git a/sql/init.sql b/sql/init.sql index 542ef77..12c3a6f 100644 --- a/sql/init.sql +++ b/sql/init.sql @@ -233,7 +233,7 @@ INSERT IGNORE INTO `subjects` (`subject_name`, `subject_code`, `sort_order`) VAL -- 初始化系统版本号 -- 初始化系统版本号 INSERT INTO `system_settings` (`setting_key`, `setting_value`) -VALUES ('db_version', '2.6') -ON DUPLICATE KEY UPDATE `setting_value` = '2.6'; +VALUES ('db_version', '2.7') +ON DUPLICATE KEY UPDATE `setting_value` = '2.7'; -- 控制台输出初始化结果(含版本号) SELECT CONCAT('数据库初始化完成!版本: v', (SELECT setting_value FROM system_settings WHERE setting_key = 'db_version')) AS message; diff --git a/sql/upgrades/v2.7.sql b/sql/upgrades/v2.7.sql new file mode 100644 index 0000000..ee20d61 --- /dev/null +++ b/sql/upgrades/v2.7.sql @@ -0,0 +1,2 @@ +-- v2.7 无 schema 变更 +-- 操作菜单定位修复、历史记录显示修复、筛选面板修复、科目删除修复、学期周数列修复、escapeHtml 转义修复 diff --git a/upgrade.php b/upgrade.php index ccb55b8..84243d6 100644 --- a/upgrade.php +++ b/upgrade.php @@ -30,6 +30,7 @@ $UPGRADE_VERSIONS = [ '2.5' => __DIR__ . '/sql/upgrades/v2.5.sql', '2.5.1' => __DIR__ . '/sql/upgrades/v2.5.1.sql', '2.6' => __DIR__ . '/sql/upgrades/v2.6.sql', + '2.7' => __DIR__ . '/sql/upgrades/v2.7.sql', ]; /**