| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- <!doctype html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>BindVault MVP</title>
- <link rel="stylesheet" href="styles.css" />
- </head>
- <body>
- <section id="license-gate" class="license-gate" hidden>
- <div class="license-card">
- <button class="license-close" type="button" data-close-license aria-label="关闭">×</button>
- <div class="license-brand">
- <div class="brand-mark">BV</div>
- <div>
- <h1>BindVault</h1>
- <p>个人数字资产台账</p>
- </div>
- </div>
- <div class="license-tabs">
- <button class="license-tab active" data-tab="register">获取激活码</button>
- <button class="license-tab" data-tab="activate">已有激活码</button>
- </div>
- <div id="license-panel-register" class="license-panel">
- <p class="license-desc">输入邮箱,系统会自动发送一个 <strong>7 天免费激活码</strong>。</p>
- <form id="license-register-form" class="license-form">
- <input id="license-email" type="email" placeholder="[email protected]" autocomplete="email" required />
- <button class="primary-button" type="submit" id="license-register-btn">发送激活码</button>
- </form>
- <p id="license-register-msg" class="license-msg" hidden></p>
- </div>
- <div id="license-panel-activate" class="license-panel" hidden>
- <p class="license-desc">输入邮件中收到的激活码以继续使用。</p>
- <form id="license-activate-form" class="license-form">
- <input id="license-key" type="text" placeholder="BV-XXXXXXXX-XXXXXXXX-XXXXXXXX" autocomplete="off" spellcheck="false" required />
- <button class="primary-button" type="submit" id="license-activate-btn">激活</button>
- </form>
- <p id="license-activate-msg" class="license-msg" hidden></p>
- </div>
- </div>
- </section>
- <div class="app-shell" hidden>
- <aside class="sidebar">
- <div class="brand">
- <div class="brand-mark">BV</div>
- <div>
- <h1>BindVault</h1>
- <p>个人数字资产台账</p>
- </div>
- </div>
- <nav id="nav" class="nav"></nav>
- <div class="account-menu-wrap sidebar-account">
- <div id="account-menu" class="account-menu account-menu-up" hidden>
- <div class="account-menu-license">
- <span id="account-menu-tier-label">Free 套餐</span>
- <strong id="account-menu-license-key">未激活</strong>
- <small id="account-menu-license-status">-</small>
- </div>
- <button type="button" data-account-action="upgrade">升级套餐</button>
- <button type="button" data-account-action="profile">个人中心</button>
- <button type="button" data-account-action="guide">新手指引</button>
- <button type="button" data-account-action="signout">退出登录</button>
- </div>
- <button class="sidebar-user" type="button" id="topbar-avatar" aria-label="个人中心" aria-expanded="false">
- <span class="sidebar-user-avatar" id="sidebar-user-avatar">B</span>
- <span class="sidebar-user-info">
- <strong id="sidebar-user-email">未激活</strong>
- <small id="sidebar-user-tier">Free</small>
- </span>
- <svg class="sidebar-user-caret" viewBox="0 0 24 24" aria-hidden="true"><path d="M8 9l4-4 4 4M16 15l-4 4-4-4"/></svg>
- </button>
- </div>
- </aside>
- <main class="main">
- <header class="topbar">
- <div class="topbar-heading">
- <p class="eyebrow">MVP workspace</p>
- <h2 id="page-title">Dashboard</h2>
- </div>
- <div class="topbar-actions">
- <label class="global-search">
- <svg class="search-icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="6.5"/><path d="M16 16l4 4"/></svg>
- <input id="global-search" type="search" placeholder="搜索资源、账号或关系..." />
- </label>
- <label class="language-select-wrap" aria-label="Language">
- <select id="language-select">
- <option value="zh">中文</option>
- <option value="en">English</option>
- </select>
- </label>
- <button id="topbar-refresh" class="icon-pill" type="button" title="刷新" aria-label="刷新">
- <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12a8 8 0 0 1 13.7-5.6L20 4M20 4v6h-6"/><path d="M20 12a8 8 0 0 1-13.7 5.6L4 20M4 20v-6h6"/></svg>
- </button>
- <button id="topbar-new" class="primary-button topbar-primary" type="button">
- <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5v14M5 12h14"/></svg>
- <span>新建绑定</span>
- </button>
- <button id="topbar-bell" class="icon-pill" type="button" title="通知" aria-label="通知">
- <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 16V11a6 6 0 0 1 12 0v5l1.5 2H4.5L6 16Z"/><path d="M10 20a2 2 0 0 0 4 0"/></svg>
- <span class="bell-dot" aria-hidden="true"></span>
- </button>
- <button id="seed-demo" class="ghost-button utility-action" type="button">示例数据</button>
- <button id="export-json" class="ghost-button utility-action" type="button">导出 JSON</button>
- <label class="file-button utility-action">
- 导入 JSON
- <input id="import-json" type="file" accept="application/json" />
- </label>
- </div>
- </header>
- <section id="content" class="content"></section>
- </main>
- </div>
- <div id="toast" class="toast" role="status" aria-live="polite" popover="manual">
- <span id="toast-icon" class="toast-icon">OK</span>
- <span id="toast-message">已保存</span>
- </div>
- <dialog id="record-dialog" class="dialog">
- <form id="record-form" method="dialog">
- <div class="dialog-head">
- <div>
- <p class="eyebrow" id="dialog-kicker">Record</p>
- <h3 id="dialog-title">新增</h3>
- </div>
- <button class="icon-button" value="cancel" type="button" data-close-dialog aria-label="关闭">×</button>
- </div>
- <div id="form-fields" class="form-grid"></div>
- <div class="dialog-actions">
- <button class="ghost-button" value="cancel" type="button" data-close-dialog>取消</button>
- <button class="primary-button" id="save-record" value="default" type="submit">保存</button>
- </div>
- </form>
- </dialog>
- <dialog id="onboarding-dialog" class="onboarding-dialog">
- <div class="onboarding-panel">
- <div class="onboarding-head">
- <div>
- <p class="eyebrow">Getting Started</p>
- <h3>快速建立第一条账号链路</h3>
- </div>
- <button class="icon-button" type="button" data-close-onboarding aria-label="关闭">×</button>
- </div>
- <div class="onboarding-steps">
- <article class="onboarding-step">
- <span class="onboarding-step-index">1</span>
- <div>
- <h4>先填写邮箱</h4>
- <p>先录入一个可收信邮箱,马上用它作为账号登录邮箱。</p>
- <button class="primary-button" type="button" data-guide-action="email">新增邮箱</button>
- </div>
- </article>
- <article class="onboarding-step">
- <span class="onboarding-step-index">2</span>
- <div>
- <h4>新建账号并选择登录邮箱</h4>
- <p>平台可以填 BindVault,登录邮箱选择刚才录入的邮箱。</p>
- <button class="ghost-button" type="button" data-guide-action="account">新增账号</button>
- </div>
- </article>
- <article class="onboarding-step">
- <span class="onboarding-step-index">3</span>
- <div>
- <h4>自动生成登录绑定</h4>
- <p>保存账号后,系统会自动创建邮箱到账号的登录绑定关系。</p>
- <button class="ghost-button" type="button" data-guide-action="account">继续账号</button>
- </div>
- </article>
- <article class="onboarding-step">
- <span class="onboarding-step-index">4</span>
- <div>
- <h4>查看绑定拓扑</h4>
- <p>进入绑定关系页,查看邮箱和账号之间的第一条资产链路。</p>
- <button class="ghost-button" type="button" data-guide-action="binding">查看拓扑</button>
- </div>
- </article>
- </div>
- <div class="onboarding-actions">
- <button class="ghost-button" type="button" data-close-onboarding>稍后再说</button>
- <button class="primary-button" type="button" data-guide-action="email">开始录入</button>
- </div>
- </div>
- </dialog>
- <dialog id="pricing-dialog" class="dialog pricing-dialog">
- <div class="pricing-head">
- <div>
- <p class="eyebrow">Upgrade</p>
- <h3>选择适合你的套餐</h3>
- <p class="pricing-sub">从基础台账到全功能解锁,按需升级。</p>
- </div>
- <button class="icon-button" type="button" data-close-pricing aria-label="关闭">×</button>
- </div>
- <div class="pricing-grid">
- <article class="pricing-card" data-tier-card="free">
- <header>
- <h4>Free</h4>
- <div class="pricing-price"><span class="pricing-currency">¥</span><span class="pricing-amount">0</span><span class="pricing-period">/ 月</span></div>
- <p class="pricing-desc">本地管理你的数字资产</p>
- </header>
- <button class="pricing-cta pricing-cta-current" type="button" data-pricing-action="free">当前套餐</button>
- <ul class="pricing-features">
- <li>基础资产管理(手机 / 邮箱 / 域名)</li>
- <li>账号与绑定关系图</li>
- <li>风险事件追踪</li>
- <li>本地 SQLite 存储</li>
- <li>JSON 导入 / 导出</li>
- <li>最多 3 台设备使用</li>
- </ul>
- </article>
- <article class="pricing-card pricing-card-pro" data-tier-card="pro">
- <div class="pricing-badge">推荐</div>
- <header>
- <h4>Pro</h4>
- <div class="pricing-price"><span class="pricing-currency">¥</span><span class="pricing-amount">29</span><span class="pricing-period">/ 月</span></div>
- <p class="pricing-desc">解锁全部高级能力</p>
- </header>
- <button class="pricing-cta pricing-cta-upgrade" type="button" data-pricing-action="pro">升级至 Pro</button>
- <p class="pricing-includes">包含 Free 所有功能,并解锁:</p>
- <ul class="pricing-features pricing-features-pro">
- <li>多设备云端同步</li>
- <li>每日自动备份</li>
- <li>数据端到端加密</li>
- <li>高级风险检测(恢复链路异常 / 单点故障预警)</li>
- <li>批量 CSV 导入与导出</li>
- <li>无限制账号与绑定数量</li>
- <li>优先邮件支持</li>
- </ul>
- </article>
- </div>
- </dialog>
- <dialog id="profile-dialog" class="dialog profile-dialog">
- <div class="dialog-head">
- <div>
- <p class="eyebrow">Account</p>
- <h3>个人中心</h3>
- </div>
- <button class="icon-button" type="button" data-close-profile aria-label="关闭">×</button>
- </div>
- <div class="profile-body">
- <section class="profile-section">
- <h4>账号信息</h4>
- <div class="profile-grid">
- <div class="profile-item">
- <span>邮箱</span>
- <strong id="profile-email">-</strong>
- </div>
- <div class="profile-item">
- <span>设备 ID</span>
- <strong id="profile-device-id" class="mono">-</strong>
- </div>
- </div>
- </section>
- <section class="profile-section">
- <h4>授权状态</h4>
- <div class="profile-grid">
- <div class="profile-item">
- <span>激活码</span>
- <strong id="profile-key" class="mono">-</strong>
- </div>
- <div class="profile-item">
- <span>套餐</span>
- <strong id="profile-plan">-</strong>
- </div>
- <div class="profile-item">
- <span>授权状态</span>
- <strong id="profile-license-status">-</strong>
- </div>
- </div>
- </section>
- <section class="profile-section">
- <h4>本地数据</h4>
- <div class="profile-grid">
- <div class="profile-item">
- <span>资产总数</span>
- <strong id="profile-asset-count">-</strong>
- </div>
- <div class="profile-item">
- <span>账号总数</span>
- <strong id="profile-account-count">-</strong>
- </div>
- <div class="profile-item">
- <span>绑定关系</span>
- <strong id="profile-binding-count">-</strong>
- </div>
- </div>
- </section>
- </div>
- <div class="dialog-actions">
- <button class="ghost-button" type="button" data-close-profile>关闭</button>
- </div>
- </dialog>
- <script src="locales.js"></script>
- <script src="data/Regin.js"></script>
- <script src="platformCatalog.js"></script>
- <script src="platformAssets.js"></script>
- <script src="app.js"></script>
- </body>
- </html>
|