Files
MovieLog_Server/js/main.js
T

72 lines
2.7 KiB
JavaScript
Raw Normal View History

// ============================================
// 文件: js/main.js
// 说明: 全站公共脚本。add.php 与 edit.php 的「一起看的人 / 电影院」
// 表单联动逻辑集中在此,避免两个页面各写一份。
// ============================================
document.addEventListener('DOMContentLoaded', function() {
console.log('🎬 电影日志系统已加载');
});
function formatDate(dateStr) {
if (!dateStr) return '';
const d = new Date(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';
}
// ---------- 图片破图回退 ----------
// 服务端代理模式下,图片需要登录才能读取(media.php 未登录返回 403)。
// 会话过期后页面上的图片会加载失败——统一替换为内联占位图,避免满屏破图。
// 注意:error 事件不冒泡,必须用捕获阶段监听;占位图用 data URI,不依赖任何文件。
(function () {
var PLACEHOLDER = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(
'<svg xmlns="http://www.w3.org/2000/svg" width="160" height="200">' +
'<rect width="100%" height="100%" fill="#eceef2"/>' +
'<text x="50%" y="50%" font-size="13" fill="#9aa0a6" text-anchor="middle" ' +
'dominant-baseline="middle">图片不可用</text></svg>');
document.addEventListener('error', function (e) {
var el = e.target;
if (!el || el.tagName !== 'IMG') return;
if (el.dataset.fallbackApplied === '1') return; // 防死循环
el.dataset.fallbackApplied = '1';
el.src = PLACEHOLDER;
}, true);
})();