guanghulab/modules/m-channel/channel-settings-ui.js
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

124 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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('✅ 已恢复默认设置');
}
}
};
})();