index.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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.0">
  6. <title>ChatGPT-like Clone</title>
  7. <link rel="stylesheet" href="/static/styles.css">
  8. </head>
  9. <body>
  10. <div id="auth-view" class="auth-view">
  11. <div class="auth-card">
  12. <h1>欢迎使用聊天系统</h1>
  13. <p class="auth-hint">系统分为管理员与普通用户,默认管理员:admin / Admin@123</p>
  14. <form id="login-form" class="auth-form">
  15. <label>用户名
  16. <input type="text" name="username" required autocomplete="username">
  17. </label>
  18. <label>密码
  19. <input type="password" name="password" required autocomplete="current-password">
  20. </label>
  21. <button type="submit" class="primary-button">登录</button>
  22. </form>
  23. <form id="register-form" class="auth-form hidden">
  24. <label>用户名
  25. <input type="text" name="username" required autocomplete="username">
  26. </label>
  27. <label>密码
  28. <input type="password" name="password" required autocomplete="new-password">
  29. </label>
  30. <button type="submit" class="primary-button">注册并登录</button>
  31. </form>
  32. <div class="auth-switch">
  33. <button type="button" class="secondary-button" data-auth-mode="login">已有账号?去登录</button>
  34. <button type="button" class="secondary-button" data-auth-mode="register">没有账号?去注册</button>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="app-shell hidden" id="app-shell">
  39. <aside class="sidebar">
  40. <div class="sidebar-scroll">
  41. <section class="sidebar-section">
  42. <label for="model-select" class="sidebar-label">选择模型</label>
  43. <select id="model-select" class="sidebar-input"></select>
  44. </section>
  45. <section class="sidebar-section">
  46. <label for="output-mode" class="sidebar-label">选择输出模式</label>
  47. <select id="output-mode" class="sidebar-input"></select>
  48. </section>
  49. <section class="sidebar-section">
  50. <label for="search-input" class="sidebar-label">搜索当前对话内容</label>
  51. <input id="search-input" type="text" class="sidebar-input" placeholder="输入关键字...">
  52. <div id="search-feedback" class="sidebar-help">无匹配。</div>
  53. </section>
  54. <section class="sidebar-section">
  55. <label for="history-range" class="sidebar-label" id="history-range-label">选择使用的历史消息数量</label>
  56. <input id="history-range" type="range" min="0" max="0" value="0" class="sidebar-range">
  57. <div id="history-range-value" class="sidebar-help">您选择的历史消息数量是: 0</div>
  58. </section>
  59. <section class="sidebar-section sidebar-actions">
  60. <button id="new-chat-btn" class="primary-button">New Chat</button>
  61. </section>
  62. </div>
  63. <div class="sidebar-history" aria-label="历史聊天记录">
  64. <div class="sidebar-history-header">
  65. <h3 class="sidebar-heading">历史聊天记录</h3>
  66. <span id="history-count" class="history-count" aria-live="polite"></span>
  67. </div>
  68. <div id="history-list" class="history-list" role="list"></div>
  69. <div class="history-pagination">
  70. <button id="history-prev" class="secondary-button">上一页</button>
  71. <button id="history-next" class="secondary-button">下一页</button>
  72. </div>
  73. </div>
  74. </aside>
  75. <main class="main-panel">
  76. <header class="app-header">
  77. <h1>ChatGPT-like Clone</h1>
  78. <div class="header-actions">
  79. <span id="user-badge" class="user-badge"></span>
  80. <button id="export-btn" class="secondary-button" disabled>我的导出</button>
  81. <button id="admin-btn" class="secondary-button hidden">用户管理</button>
  82. <button id="logout-btn" class="secondary-button" disabled>退出登录</button>
  83. </div>
  84. </header>
  85. <section id="chat-messages" class="chat-messages"></section>
  86. <form id="chat-form" class="chat-form">
  87. <textarea id="chat-input" placeholder="What is up?" rows="3" class="chat-textarea"></textarea>
  88. <div class="chat-form-footer">
  89. <label for="file-input" class="file-input-label">选择文件</label>
  90. <input id="file-input" type="file" multiple accept=".jpg,.jpeg,.png,.txt,.pdf,.doc,.docx" class="file-input">
  91. <button type="submit" id="send-btn" class="primary-button">发送</button>
  92. </div>
  93. <div id="chat-status" class="chat-status" aria-live="polite"></div>
  94. </form>
  95. </main>
  96. </div>
  97. <div id="admin-panel" class="overlay hidden">
  98. <div class="overlay-content">
  99. <div class="overlay-header">
  100. <h2>用户管理</h2>
  101. <button id="admin-close" class="icon-button" type="button">×</button>
  102. </div>
  103. <form id="admin-create-form" class="admin-form">
  104. <h3>新增普通用户</h3>
  105. <div class="admin-form-grid">
  106. <input type="text" name="username" placeholder="用户名" required>
  107. <input type="password" name="password" placeholder="密码" required>
  108. <button type="submit" class="primary-button">创建</button>
  109. </div>
  110. </form>
  111. <div class="admin-section">
  112. <h3>用户列表</h3>
  113. <div id="admin-user-list" class="admin-list"></div>
  114. </div>
  115. <div class="admin-section">
  116. <div class="admin-section-header">
  117. <h3>导出记录</h3>
  118. <form class="admin-search">
  119. <input id="admin-export-search" type="text" placeholder="按用户名搜索">
  120. <button id="admin-export-refresh" class="secondary-button" type="button">查询</button>
  121. </form>
  122. </div>
  123. <div id="admin-export-list" class="admin-list"></div>
  124. </div>
  125. </div>
  126. </div>
  127. <div id="export-panel" class="overlay hidden">
  128. <div class="overlay-content">
  129. <div class="overlay-header">
  130. <h2>我的导出</h2>
  131. <button id="export-close" class="icon-button" type="button">×</button>
  132. </div>
  133. <div id="export-list" class="admin-list"></div>
  134. </div>
  135. </div>
  136. <div id="toast" class="toast hidden"></div>
  137. <script defer src="/static/app.js"></script>
  138. </body>
  139. </html>