index.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width,initial-scale=1" />
  6. <title>SSO CPA 控制台</title>
  7. <link rel="stylesheet" href="/static/styles.css" />
  8. </head>
  9. <body>
  10. <div class="app-shell">
  11. <aside class="sidebar">
  12. <div class="brand">
  13. <div class="brand-mark">AP</div>
  14. <div>
  15. <h1>SSO CPA</h1>
  16. <p>SSO 注册 · CPA OAuth</p>
  17. </div>
  18. </div>
  19. <nav class="side-nav" aria-label="主导航">
  20. <a href="#overview" class="active">总览</a>
  21. <a href="#sso">SSO 快捷注册</a>
  22. <a href="#accounts">账号库</a>
  23. <a href="#progress">任务进度</a>
  24. </nav>
  25. <div class="sidebar-note">
  26. <span id="state" class="chip neutral">空闲</span>
  27. <span class="muted">日志在右下角浮窗实时更新</span>
  28. </div>
  29. </aside>
  30. <main class="main">
  31. <section id="overview" class="hero-panel">
  32. <div>
  33. <p class="eyebrow">Automation Console</p>
  34. <h2>SSO 注册 + CPA Codex OAuth</h2>
  35. <p class="hero-copy">集中管理 SSO 注册、CPA OAuth 授权、账号库、API 访问与代理策略。界面按操作流拆分,减少误配置。</p>
  36. </div>
  37. </section>
  38. <section id="sso" class="hero-panel">
  39. <div>
  40. <p class="eyebrow">SSO Quick Registration</p>
  41. <h2>SSO 快捷注册 · 直接上传 CPA</h2>
  42. <p class="hero-copy">使用 aef.claudeai.life 域名通过 Keycloak SSO 批量注册 ChatGPT 账号,注册后直接上传 CPA,跳过付款流程。</p>
  43. </div>
  44. <div class="hero-actions">
  45. <button id="ssoSave" class="button secondary">保存配置</button>
  46. <button id="ssoGo" class="button primary">开始 SSO 注册</button>
  47. <button id="ssoStop" class="button ghost" disabled>停止</button>
  48. </div>
  49. </section>
  50. <section id="ssoConfig" class="panel">
  51. <div class="panel-head">
  52. <div>
  53. <p class="eyebrow">SSO Settings</p>
  54. <h2>SSO 注册参数</h2>
  55. </div>
  56. <p class="muted">所有参数独立保存,不影响主流程配置。</p>
  57. </div>
  58. <div class="field-grid">
  59. <label>模板账号数量<input id="sso_account_count" type="number" min="1" value="1" /></label>
  60. <label>SSO 邮箱域名<input id="sso_mail_domain" placeholder="aef.claudeai.life" /></label>
  61. <label class="wide">CPA 地址<input id="sso_cpa_url" placeholder="http://your-cpa-host:port" /></label>
  62. <label class="wide">CPA 管理密钥<input id="sso_cpa_management_key" placeholder="管理 token" /></label>
  63. <label>浏览器模式<select id="sso_headless"><option value="false" selected>有头(推荐)</option><option value="true">无头</option></select></label>
  64. <label class="wide">代理地址(留空 = 直连)<input id="sso_proxy_url" placeholder="http://user:pass@host:port" /></label>
  65. </div>
  66. </section>
  67. <section id="progress" class="panel">
  68. <div class="panel-head">
  69. <div>
  70. <p class="eyebrow">Runtime</p>
  71. <h2>当前阶段</h2>
  72. </div>
  73. <div id="stageBox" class="stage-pill">空闲</div>
  74. </div>
  75. <div class="table-wrap compact">
  76. <table id="accTable">
  77. <thead><tr><th>#</th><th>邮箱</th><th>阶段</th><th>planType</th><th>CPA 文件</th><th>错误</th></tr></thead>
  78. <tbody></tbody>
  79. </table>
  80. </div>
  81. </section>
  82. <section id="accounts" class="panel">
  83. <div class="panel-head">
  84. <div>
  85. <p class="eyebrow">Accounts</p>
  86. <h2>已注册账号库</h2>
  87. </div>
  88. <div class="toolbar">
  89. <button id="refreshAccounts" class="button secondary small">刷新</button>
  90. <select id="accFilter" class="filter">
  91. <option value="">全部状态</option>
  92. <option value="registered">已注册</option>
  93. <option value="paid">已付款</option>
  94. <option value="plus">已 Plus</option>
  95. <option value="cpa_uploaded">已上传 CPA</option>
  96. <option value="cpa_skipped">CPA 跳过</option>
  97. <option value="failed">失败</option>
  98. <option value="trial">试用 / 待付款</option>
  99. <option value="plus_check_failed">Plus 校验失败</option>
  100. <option value="cpa_failed">CPA 上传失败</option>
  101. </select>
  102. </div>
  103. </div>
  104. <div class="account-library-note">
  105. <strong>轻量运维视图</strong>
  106. <span>默认只展示判断和处理所需字段,完整原始数据可点“详情”查看。</span>
  107. </div>
  108. <div id="accountList" class="account-list" aria-live="polite"></div>
  109. <div id="dbPager" class="pager"></div>
  110. <details class="detail-box">
  111. <summary>查看选中账号详情</summary>
  112. <pre id="accDetail"></pre>
  113. </details>
  114. </section>
  115. </main>
  116. </div>
  117. <div id="errorPopover" class="error-popover" role="tooltip" hidden></div>
  118. <section id="logDock" class="log-dock collapsed" aria-label="实时日志浮窗">
  119. <header>
  120. <div>
  121. <strong>实时日志</strong>
  122. <span id="logLineCount">0 行</span>
  123. </div>
  124. <div class="log-actions">
  125. <button id="copyLog" type="button">复制</button>
  126. <button id="clearLog" type="button">清空</button>
  127. <button id="toggleLogDock" type="button">展开</button>
  128. </div>
  129. </header>
  130. <pre id="log"></pre>
  131. </section>
  132. <script src="/static/app.js"></script>
  133. </body>
  134. </html>