88c6ce8ccc
- 迁移为 frontend-web、frontend-electron、backend-web 与 docker 部署结构 - 网页端:订阅门禁二次弹窗、套餐/支付组件化、顶栏分组对齐 - 首页:最近文件与模板库布局优化,缩略图对齐,下载与删除操作 - 新增管理后台、支付与云端文件 API,更新 README 与项目规范 Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.6 KiB
JavaScript
41 lines
1.6 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
var I = function () { return window.AdminI18n; };
|
|
|
|
function html(id, tabs, panels, activeId) {
|
|
activeId = activeId || (tabs[0] && tabs[0].id);
|
|
var nav = tabs.map(function (t) {
|
|
var cls = t.id === activeId ? ' soon-admin-tabs__tab is-active' : ' soon-admin-tabs__tab';
|
|
return '<button type="button" class="' + cls.trim() + '" data-tab="' + I().esc(t.id) + '">' +
|
|
I().esc(t.label) + '</button>';
|
|
}).join('');
|
|
var body = tabs.map(function (t) {
|
|
var vis = t.id === activeId ? ' is-active' : '';
|
|
return '<div class="soon-admin-tabs__panel' + vis + '" data-panel="' + I().esc(t.id) + '">' +
|
|
(panels[t.id] || '') + '</div>';
|
|
}).join('');
|
|
return '<div class="soon-admin-tabs" id="' + I().esc(id) + '">' +
|
|
'<nav class="soon-admin-tabs__nav" role="tablist">' + nav + '</nav>' +
|
|
'<div class="soon-admin-tabs__body">' + body + '</div></div>';
|
|
}
|
|
|
|
function bind(root, onChange) {
|
|
if (!root) return;
|
|
root.querySelectorAll('.soon-admin-tabs__tab').forEach(function (btn) {
|
|
btn.onclick = function () {
|
|
var tabId = btn.dataset.tab;
|
|
root.querySelectorAll('.soon-admin-tabs__tab').forEach(function (b) {
|
|
b.classList.toggle('is-active', b.dataset.tab === tabId);
|
|
});
|
|
root.querySelectorAll('.soon-admin-tabs__panel').forEach(function (p) {
|
|
p.classList.toggle('is-active', p.dataset.panel === tabId);
|
|
});
|
|
if (typeof onChange === 'function') onChange(tabId);
|
|
};
|
|
});
|
|
}
|
|
|
|
window.AdminTabs = { html: html, bind: bind };
|
|
})();
|