124 lines
3.7 KiB
JavaScript
124 lines
3.7 KiB
JavaScript
/**
|
||
* channel-settings-ui.js
|
||
* 设置面板UI控制器·环节9
|
||
*/
|
||
var SettingsUI = (function() {
|
||
// 渲染主题卡片
|
||
function renderThemeCards() {
|
||
var container = document.getElementById('themeCards');
|
||
if (!container) return;
|
||
var current = ChannelSettings.get('theme');
|
||
var themes = ChannelSettings.THEMES;
|
||
var html = '';
|
||
Object.keys(themes).forEach(function(id) {
|
||
var t = themes[id];
|
||
var active = (id === current) ? 'active' : '';
|
||
html += '<div class="theme-card ' + active + '" ' +
|
||
'style="background:' + t.cardBg + '; color:' + t.text + ';" ' +
|
||
'onclick="SettingsUI.selectTheme(\'' + id + '\')">' +
|
||
'<div class="theme-preview" style="background:' + t.bg + ';"></div>' +
|
||
t.name + '</div>';
|
||
});
|
||
container.innerHTML = html;
|
||
}
|
||
|
||
// 同步UI状态
|
||
function syncUI() {
|
||
var s = ChannelSettings.get();
|
||
|
||
// 下拉框
|
||
var fontSize = document.getElementById('settingFontSize');
|
||
if (fontSize) fontSize.value = s.fontSize;
|
||
|
||
var interval = document.getElementById('settingRefreshInterval');
|
||
if (interval) interval.value = s.refreshInterval;
|
||
|
||
// 开关
|
||
var toggleMap = {
|
||
settingAnimation: 'animationEnabled',
|
||
settingSidebar: 'sidebarCollapsed',
|
||
settingNotifyModule: 'notifyModuleUpdate',
|
||
settingNotifySystem: 'notifySystem',
|
||
settingNotifySound: 'notifySound',
|
||
settingAnalytics: 'analyticsEnabled',
|
||
settingAutoRefresh: 'autoRefresh'
|
||
};
|
||
Object.keys(toggleMap).forEach(function(elId) {
|
||
var el = document.getElementById(elId);
|
||
if (el) el.checked = !!s[toggleMap[elId]];
|
||
});
|
||
|
||
renderThemeCards();
|
||
}
|
||
|
||
return {
|
||
// 初始化面板
|
||
init: function() {
|
||
syncUI();
|
||
console.log('⚙️ 设置面板已加载');
|
||
},
|
||
// 选择主题
|
||
selectTheme: function(themeId) {
|
||
ChannelSettings.set('theme', themeId);
|
||
renderThemeCards();
|
||
},
|
||
// 开关变更
|
||
onToggle: function(key, value) {
|
||
ChannelSettings.set(key, value);
|
||
console.log('⚙️ ' + key + ' = ' + value);
|
||
},
|
||
// 下拉变更
|
||
onChange: function(key, value) {
|
||
ChannelSettings.set(key, value);
|
||
console.log('⚙️ ' + key + ' = ' + value);
|
||
},
|
||
// 导出
|
||
exportSettings: function() {
|
||
var json = ChannelSettings.exportJSON();
|
||
if (navigator.clipboard) {
|
||
navigator.clipboard.writeText(json).then(function() {
|
||
alert('✅ 设置已复制到剪贴板!\n\n可以保存为文件或发给其他设备。');
|
||
});
|
||
} else {
|
||
// 降级:显示在弹窗
|
||
prompt('复制下面的内容:', json);
|
||
}
|
||
console.log('⚙️ 设置已导出');
|
||
},
|
||
// 显示导入弹窗
|
||
showImport: function() {
|
||
var modal = document.getElementById('importModal');
|
||
if (modal) modal.classList.add('show');
|
||
},
|
||
// 隐藏导入弹窗
|
||
hideImport: function() {
|
||
var modal = document.getElementById('importModal');
|
||
if (modal) modal.classList.remove('show');
|
||
},
|
||
// 执行导入
|
||
doImport: function() {
|
||
var textarea = document.getElementById('importTextarea');
|
||
if (!textarea || !textarea.value.trim()) {
|
||
alert('请粘贴JSON内容');
|
||
return;
|
||
}
|
||
var ok = ChannelSettings.importJSON(textarea.value.trim());
|
||
if (ok) {
|
||
alert('✅ 设置导入成功!');
|
||
this.hideImport();
|
||
syncUI();
|
||
} else {
|
||
alert('❌ JSON格式错误,请检查内容');
|
||
}
|
||
},
|
||
// 恢复默认
|
||
resetAll: function() {
|
||
if (confirm('确定恢复所有设置为默认值吗?')) {
|
||
ChannelSettings.reset();
|
||
syncUI();
|
||
alert('✅ 已恢复默认设置');
|
||
}
|
||
}
|
||
};
|
||
})();
|