文件还在测试中

This commit is contained in:
2026-08-08 15:53:53 +08:00
parent 5f1e7adb64
commit 8101177cb5
241 changed files with 18074 additions and 22 deletions
+65
View File
@@ -0,0 +1,65 @@
/* 后台交互 */
(function () {
var mt = document.querySelector('.menu-toggle');
if (mt) mt.addEventListener('click', function () {
var s = document.querySelector('.admin-side'); if (s) s.classList.toggle('open');
});
// 分系统(CRM/PSI)侧栏抽屉
var mt2 = document.querySelector('.subsys .menu-toggle');
if (mt2) mt2.addEventListener('click', function () {
document.body.classList.toggle('nav-open');
});
function val(k) { var el = document.getElementById('f_' + k); return el ? el.value : ''; }
function updatePreview() {
var pb = document.getElementById('themePreview'); if (!pb) return;
pb.style.background = 'linear-gradient(135deg,' + val('primary') + ',' + val('secondary') + ')';
pb.style.color = '#fff';
pb.querySelector('.pv-title').textContent = '降温服 · 风格预览';
pb.querySelector('.pv-sub').textContent = '主色 ' + val('primary') + ' / 辅色 ' + val('secondary');
}
var presetSel = document.getElementById('preset');
var presets = window.__presets__ || null;
if (presetSel && presets) {
presetSel.addEventListener('change', function () {
var p = presets[this.value]; if (!p) return;
['primary', 'primary_600', 'secondary', 'accent', 'bg', 'surface', 'text', 'muted', 'border', 'nav_bg']
.forEach(function (k) {
var el = document.getElementById('f_' + k);
if (el && p.vars[k] != null) el.value = p.vars[k];
});
updatePreview();
});
}
['primary', 'secondary', 'accent', 'bg', 'surface', 'text', 'muted', 'border', 'nav_bg']
.forEach(function (k) {
var el = document.getElementById('f_' + k);
if (el) el.addEventListener('input', updatePreview);
});
updatePreview();
// 确认删除
document.querySelectorAll('form.del-form').forEach(function (f) {
f.addEventListener('submit', function (e) {
if (!confirm('确定要删除吗?此操作不可恢复。')) e.preventDefault();
});
});
})();
// 通用删除/操作确认:用 data-confirm 属性替代内联 onclick/onsubmit 确认,
// 以配合严格 CSPscript-src 已移除 'unsafe-inline')。
document.addEventListener('submit', function (e) {
var el = e.target;
if (el && el.hasAttribute('data-confirm') && !window.confirm(el.getAttribute('data-confirm'))) {
e.preventDefault();
}
});
document.addEventListener('click', function (e) {
var el = e.target && e.target.closest ? e.target.closest('[data-confirm]') : null;
if (el && !window.confirm(el.getAttribute('data-confirm'))) {
e.preventDefault();
e.stopPropagation();
}
});