refactor: 拆分 config.php 为 lib/ 模块,消除页面层重复代码

纯结构性重构,不改变任何功能。

- config.php 由 739 行缩减为 42 行,改为纯引导入口;新增 ROOT_DIR 常量
  统一拼接绝对路径(lib/ 内模块的 __DIR__ 会指向 lib/,必须替换)
- 新增 lib/ 五个模块 db.php / helpers.php / auth.php / movies.php / stats.php,
  由 config.php 按 db → helpers → auth → movies → stats 顺序加载
- add.php、edit.php 各自约 80 行重复的 POST 处理改为调用
  resolveCinemaId / resolvePersonIds / linkViewers / uploadImageFile /
  saveBase64Image / uploadMultiplePhotos / deleteStoredFile
- cinemas.php、persons.php 中重复 4 次的颜色校验改用 normalizeHexColor()
- toggleNewViewer / removeViewerRow / toggleNewCinema 下沉至 js/main.js,
  add.php 中的 removeViewer 统一更名为 removeViewerRow
- 删除死代码:imageUrl()(全项目无调用);cinemas.php 配色数组中本就会被
  array_slice 丢弃的 extra 颜色逻辑,简化为单条扁平 50 元素数组
- README 目录结构补充 lib/ 说明

验证方式:以便携 PHP 8.4 搭建 A/B 回归环境,播种固定数据后遍历 47 个
GET/POST 端点录制「状态码 + 响应体」。重构前后 42 个逐字节相同、2 个仅
上传文件名时间戳不同、3 个差异均为内联脚本下沉(已单独校验函数体逐字符
等价,剥离脚本后 HTML 标记完全一致)。24 个 PHP 文件语法检查全部通过。
This commit is contained in:
2026-09-21 12:56:30 +08:00
parent 40e1bc5e56
commit dd957d45bd
13 changed files with 1002 additions and 1022 deletions
+40 -1
View File
@@ -1,3 +1,9 @@
// ============================================
// 文件: js/main.js
// 说明: 全站公共脚本。add.php 与 edit.php 的「一起看的人 / 电影院」
// 表单联动逻辑集中在此,避免两个页面各写一份。
// ============================================
document.addEventListener('DOMContentLoaded', function() {
console.log('🎬 电影日志系统已加载');
});
@@ -8,4 +14,37 @@ function formatDate(dateStr) {
return d.getFullYear() + '年' +
String(d.getMonth() + 1).padStart(2, '0') + '月' +
String(d.getDate()).padStart(2, '0') + '日';
}
}
// ---------- 一起看的人 ----------
// 下拉框切到「新增」时显示姓名输入框
function toggleNewViewer(select) {
var parent = select.parentElement;
var input = parent.querySelector('input[name="viewers_new[]"]');
if (select.value === 'new') {
input.style.display = 'block';
input.required = true;
} else {
input.style.display = 'none';
input.required = false;
input.value = '';
}
}
// 删除一行观影人(至少保留一行)
function removeViewerRow(btn) {
var container = document.getElementById('viewerContainer');
if (container.children.length > 1) {
btn.parentElement.remove();
}
}
// ---------- 电影院 ----------
// 下拉框切到「新建电影院」时显示新建表单
function toggleNewCinema() {
var select = document.getElementById('cinemaSelect');
var group = document.getElementById('newCinemaGroup');
group.style.display = select.value === 'new' ? 'block' : 'none';
}