/**
* Scert 首次初始化向导 - 全 4 步骤 UI 设计方案选型核心脚本
* 支持 3 套视觉体系(Deck、Ops、Minimal)无缝切换与全 4 步无损联动
*/
let currentTheme = 'deck'; // 'deck' | 'ops' | 'minimal'
let currentStep = 1; // 1 | 2 | 3 | 4
// 页面步骤元数据定义
const stepMetadata = {
1: { num: '01', title: '超级管理员与基础配置', sub: '初始化向导 • 第 1 步 / 共 4 步 (账户与持久化存储)' },
2: { num: '02', title: '服务与通知配置', sub: '初始化向导 • 第 2 步 / 共 4 步 (出站 SMTP 告警通道)' },
3: { num: '03', title: 'DNS 授权与验证', sub: '初始化向导 • 第 3 步 / 共 4 步 (DNS-01 自动化凭据)' },
4: { num: '04', title: '管理页面证书与部署生效', sub: '初始化向导 • 第 4 步 / 共 4 步 (证书目录与核心服务)' }
};
// 步骤切换处理
function goStep(step) {
if (step < 1 || step > 4) return;
currentStep = step;
render();
}
function nextStep() {
if (currentStep < 4) {
currentStep++;
render();
} else {
alert('恭喜!初始化向导全部 4 个步骤已演练完成,点击确认后可向后端发起完整生效请求。');
}
}
function prevStep() {
if (currentStep > 1) {
currentStep--;
render();
}
}
// 方案切换处理
function switchTheme(theme) {
currentTheme = theme;
document.querySelectorAll('.nav-btn').forEach(btn => {
if (btn.getAttribute('data-theme') === theme) {
btn.classList.add('active');
} else {
btn.classList.remove('active');
}
});
render();
}
// 渲染通用步骤进度条
function renderStepper() {
const steps = [
{ num: 1, name: '超级管理员', desc: '账号 / 网络 / 存储' },
{ num: 2, name: '服务与通知', desc: 'SMTP 告警出站通道' },
{ num: 3, name: 'DNS 验证', desc: 'DNS-01 API 授权' },
{ num: 4, name: '证书与生效', desc: '证书目录 / 签发环境' }
];
return `
`;
}
// =========================================================================
// 方案 A:卡片式分体与状态联运流 (Card-Deck Flow) 全 4 步表单
// =========================================================================
function renderDeckStep(step) {
if (step === 1) {
return `
高安全受保护体系说明:
生产环境已彻底移除公网 /reset HTTP 入口。若遗忘超级管理员密码,请在物理宿主机通过系统管理员终端运行 scert.exe admin localreset,在受保护的本地 IPC 域内安全重置。
`;
} else if (step === 2) {
return `
`;
} else if (step === 3) {
return `
API 权限三阶段检验状态:
探针通过 • 有效期 15 分钟
① TXT 临时记录创建
✔ 注入成功 (Status 200)
`;
} else if (step === 4) {
return `
初始化已就绪:
点击下方“完成初始化并启动服务”后,Scert 将在后台安全签发管理证书、固化数据库配置并直接进入主控制台。
`;
}
}
// =========================================================================
// 方案 B:沉浸式专业运维仪表板 (Ops-Console Split) 全 4 步表单与实时链路拓扑
// =========================================================================
function renderOpsStep(step) {
let formContent = '';
let topoContent = '';
if (step === 1) {
formContent = `
`;
topoContent = `
实时系统链路 (TOPOLOGY)
● READY
INBOUND TRAFFIC
HTTP/HTTPS :5200 (127.0.0.1)
▼ 协议隔离与拦截
SCERT CORE ENGINE
Strict-Same-Origin Check
▼ 本地事务锁
STORAGE BACKEND
scert.db (WAL 模式)
Same-Origin HeaderPASS
Database TokenVERIFIED
DNS API ProbeSTEP 3 PENDING
Admin Reset ModeLOCAL IPC ONLY
`;
} else if (step === 2) {
formContent = `
`;
topoContent = `
出站通知拓扑 (OUTBOUND MAIL)
● CONFIGURED
ALERT TRIGGER SOURCE
Certificate Expiry / Renew Hook
▼ STARTTLS 587
GATEWAY HOST
smtp.solit.cn
▼ 直达运维邮箱
RECIPIENTS
ops@solit.cn (2 targets)
SMTP Host DNSRESOLVED
STARTTLS HandshakeSTANDBY
`;
} else if (step === 3) {
formContent = `
`;
topoContent = `
DNS-01 挑战拓扑 (CHALLENGE)
● READY
ACME SERVER REQUEST
_acme-challenge.solit.cn
▼ API 注入 TXT 记录
ALIYUN DNS CLOUD
AliyunDNSFullAccess API
▼ 全球 DNS 权威解析节点
PROPAGATION STATUS
300s SLA Max (Avg: 2.1s)
API CredentialsVALID
Live ProbePASSED (1.3s)
`;
} else if (step === 4) {
formContent = `
`;
topoContent = `
生产证书生效链路 (CERT OPS)
● READY TO ISSUE
MANAGED ROOT DIR
D:/Desktop/Scert/.../ssl
▼ 自动下发受信任证书
PRODUCTION CA
Let's Encrypt Production
▼ 绑定核心端口并启动
HTTPS LISTENER
Direct TLS :5200 (Active)
Directory AccessWRITABLE
Bootstrap LockFINAL READY
`;
}
return `
${formContent}
${topoContent}
`;
}
// =========================================================================
// 方案 C:极简轻奢分步引导台 (Minimalist Focus) 全 4 步表单
// =========================================================================
function renderMinimalStep(step) {
if (step === 1) {
return `
01 / ADMIN IDENTITY (超级管理员账户)
02 / ACCESS & PERSISTENCE (访问入口与存储)
✔ SQLite 存储文件读写状态验证正常
`;
} else if (step === 2) {
return `
01 / NOTIFICATION ROUTE (告警通知路由)
`;
} else if (step === 3) {
return `
01 / DNS-01 API INTEGRATION (DNS-01 自动化接口)
`;
} else if (step === 4) {
return `
01 / CERTIFICATE & ENGINE FINALIZE (证书与最终部署)
`;
}
}
// =========================================================================
// 统一渲染调度主函数 render()
// =========================================================================
function render() {
const frame = document.getElementById('preview-frame');
if (!frame) return;
const meta = stepMetadata[currentStep];
// 1. 侧边栏
const brandSidebar = `
`;
// 2. 右侧主体
let stepBody = '';
if (currentTheme === 'deck') {
stepBody = renderDeckStep(currentStep);
} else if (currentTheme === 'ops') {
stepBody = renderOpsStep(currentStep);
} else if (currentTheme === 'minimal') {
stepBody = renderMinimalStep(currentStep);
}
// 3. 底部操作栏
const isLast = currentStep === 4;
const isFirst = currentStep === 1;
const footer = `
`;
// 4. 组装整个容器
frame.innerHTML = `
${brandSidebar}
${renderStepper()}
${stepBody}
${footer}
`;
}
// 页面加载完成后自动触发初始渲染
window.addEventListener('DOMContentLoaded', () => {
render();
});
render();