forget.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>Forget</title>
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  7. <meta name="full-screen" content="yes" />
  8. <meta name="x5-fullscreen" content="true" />
  9. <meta name="viewport"
  10. content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
  11. <link rel="stylesheet" href="css/element-ui.css" />
  12. <link rel="stylesheet" href="css/element@2.12.2.css" />
  13. <link rel="stylesheet" href="css/index.css" />
  14. <style>
  15. :root {
  16. --primary: #2563eb;
  17. --danger: #ef4444;
  18. --danger-dark: #dc2626;
  19. --primary-dark: #1d4ed8;
  20. --primary-soft: #eff6ff;
  21. --success: #16a34a;
  22. --success-soft: #ecfdf3;
  23. --text-main: #0f172a;
  24. --text-secondary: #475569;
  25. --text-muted: #94a3b8;
  26. --border: #e2e8f0;
  27. --border-strong: #cbd5e1;
  28. --bg-page: #f4f7fb;
  29. --bg-card: rgba(255, 255, 255, 0.94);
  30. --radius-lg: 28px;
  31. --radius-md: 20px;
  32. --radius-sm: 14px;
  33. --shadow-card: 0 24px 70px rgba(15, 23, 42, 0.08),
  34. 0 4px 18px rgba(15, 23, 42, 0.05);
  35. --shadow-hover: 0 16px 40px rgba(37, 99, 235, 0.16);
  36. }
  37. * {
  38. box-sizing: border-box;
  39. }
  40. html,
  41. body {
  42. min-height: 100%;
  43. }
  44. body {
  45. margin: 0;
  46. background:
  47. radial-gradient(circle at top left, rgba(37, 99, 235, 0.13), transparent 32%),
  48. radial-gradient(circle at top right, rgba(14, 165, 233, 0.13), transparent 34%),
  49. var(--bg-page);
  50. font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
  51. "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", sans-serif;
  52. color: var(--text-main);
  53. -webkit-font-smoothing: antialiased;
  54. }
  55. img {
  56. display: block;
  57. max-width: 100%;
  58. }
  59. .container {
  60. width: 100%;
  61. }
  62. .page-shell {
  63. width: 100%;
  64. min-height: 100vh;
  65. padding: 32px 20px;
  66. display: flex;
  67. align-items: center;
  68. justify-content: center;
  69. }
  70. .auth-card {
  71. width: min(960px, 100%);
  72. min-height: 620px;
  73. display: grid;
  74. grid-template-columns: 0.95fr 1.05fr;
  75. overflow: hidden;
  76. border-radius: var(--radius-lg);
  77. border: 1px solid rgba(255, 255, 255, 0.78);
  78. background: var(--bg-card);
  79. box-shadow: var(--shadow-card);
  80. backdrop-filter: blur(18px);
  81. }
  82. .auth-visual {
  83. position: relative;
  84. padding: 34px;
  85. color: #fff;
  86. overflow: hidden;
  87. background:
  88. linear-gradient(135deg, rgba(37, 99, 235, 0.96), rgba(14, 165, 233, 0.92)),
  89. #2563eb;
  90. }
  91. .auth-visual::before,
  92. .auth-visual::after {
  93. content: "";
  94. position: absolute;
  95. border-radius: 999px;
  96. background: rgba(255, 255, 255, 0.14);
  97. }
  98. .auth-visual::before {
  99. width: 260px;
  100. height: 260px;
  101. left: -90px;
  102. bottom: -90px;
  103. }
  104. .auth-visual::after {
  105. width: 180px;
  106. height: 180px;
  107. right: -58px;
  108. top: 72px;
  109. }
  110. .visual-content {
  111. position: relative;
  112. z-index: 1;
  113. height: 100%;
  114. display: flex;
  115. flex-direction: column;
  116. justify-content: space-between;
  117. }
  118. .brand-logo {
  119. width: 150px;
  120. max-height: 72px;
  121. object-fit: contain;
  122. border-radius: 18px;
  123. background: rgba(255, 255, 255, 1);
  124. padding: 12px;
  125. box-shadow: 0 16px 36px rgba(15, 23, 42, 0.14);
  126. }
  127. .visual-main {
  128. margin-top: 80px;
  129. }
  130. .visual-icon {
  131. width: 58px;
  132. height: 58px;
  133. display: inline-flex;
  134. align-items: center;
  135. justify-content: center;
  136. border-radius: 20px;
  137. font-size: 30px;
  138. background: rgba(255, 255, 255, 0.16);
  139. border: 1px solid rgba(255, 255, 255, 0.22);
  140. backdrop-filter: blur(12px);
  141. }
  142. .visual-title {
  143. margin: 24px 0 0;
  144. font-size: 32px;
  145. line-height: 1.16;
  146. font-weight: 850;
  147. letter-spacing: -0.04em;
  148. }
  149. .visual-desc {
  150. margin: 16px 0 0;
  151. max-width: 320px;
  152. color: rgba(255, 255, 255, 0.82);
  153. font-size: 15px;
  154. line-height: 1.75;
  155. }
  156. .security-note {
  157. margin-top: 34px;
  158. padding: 16px;
  159. border-radius: 18px;
  160. background: rgba(255, 255, 255, 0.14);
  161. border: 1px solid rgba(255, 255, 255, 0.18);
  162. backdrop-filter: blur(12px);
  163. font-size: 13px;
  164. line-height: 1.6;
  165. color: rgba(255, 255, 255, 0.84);
  166. }
  167. .auth-panel {
  168. position: relative;
  169. padding: 30px 42px 38px;
  170. background: linear-gradient(180deg, #fff 0%, #f8fafc 100%);
  171. }
  172. .top-action {
  173. display: flex;
  174. justify-content: flex-end;
  175. margin-bottom: 42px;
  176. }
  177. .lang-switch {
  178. display: inline-flex;
  179. align-items: center;
  180. gap: 8px;
  181. padding: 10px 12px;
  182. border: 1px solid var(--border);
  183. border-radius: 999px;
  184. background: #fff;
  185. box-shadow: 0 8px 20px rgba(15, 23, 42, 0.04);
  186. }
  187. .lang-switch img {
  188. width: 18px;
  189. height: 12px;
  190. object-fit: cover;
  191. border-radius: 2px;
  192. }
  193. .lang-switch .menu {
  194. color: var(--text-main);
  195. font-size: 14px;
  196. font-weight: 650;
  197. cursor: pointer;
  198. }
  199. .mobile-logo {
  200. display: none;
  201. width: 160px;
  202. border-radius: 16px;
  203. }
  204. .form-heading {
  205. margin-bottom: 26px;
  206. text-align: left;
  207. }
  208. .form-heading h1 {
  209. margin: 0;
  210. color: var(--text-main);
  211. font-size: 28px;
  212. line-height: 1.2;
  213. font-weight: 850;
  214. letter-spacing: -0.035em;
  215. }
  216. .form-heading p {
  217. margin: 10px 0 0;
  218. color: var(--text-secondary);
  219. font-size: 14px;
  220. line-height: 1.7;
  221. }
  222. .form {
  223. width: 100%;
  224. max-width: 450px;
  225. margin: 0 auto;
  226. }
  227. .form .el-form-item {
  228. margin-bottom: 18px;
  229. }
  230. .form .el-form-item:nth-child(2) {
  231. margin-bottom: 12px;
  232. }
  233. .m-input .el-input__inner {
  234. height: 52px;
  235. padding-left: 16px;
  236. padding-right: 44px;
  237. border-radius: 16px;
  238. border: 1px solid var(--border);
  239. color: var(--text-main);
  240. font-size: 15px;
  241. background: #fff;
  242. transition: border-color 0.22s ease, box-shadow 0.22s ease;
  243. }
  244. .m-input .el-input__inner:focus {
  245. border-color: var(--primary);
  246. box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.1);
  247. }
  248. .m-input .el-input__inner::placeholder {
  249. color: var(--text-muted);
  250. }
  251. .m-input .el-input__suffix {
  252. right: 12px;
  253. }
  254. .pwd {
  255. margin: 6px 0 4px;
  256. padding: 16px 18px 16px 38px;
  257. border-radius: 18px;
  258. border: 1px solid var(--border);
  259. background: #fff;
  260. text-align: left;
  261. }
  262. .pwd li {
  263. position: relative;
  264. list-style-type: disc;
  265. line-height: 1.7;
  266. color: var(--text-muted);
  267. font-size: 13px;
  268. transition: color 0.22s ease;
  269. }
  270. .pwd .fit {
  271. color: var(--success);
  272. font-weight: 650;
  273. }
  274. .pwd .fit::marker {
  275. color: var(--success);
  276. }
  277. .s-btn.el-button--primary {
  278. width: 100%;
  279. height: 52px;
  280. border: none;
  281. border-radius: 999px;
  282. font-size: 16px;
  283. font-weight: 800;
  284. background: linear-gradient(135deg, var(--danger), var(--danger-dark));
  285. box-shadow: 0 14px 30px rgba(239, 68, 68, 0.28);
  286. transition: transform 0.22s ease, box-shadow 0.22s ease;
  287. transition: transform 0.22s ease, box-shadow 0.22s ease;
  288. }
  289. .s-btn.el-button--primary:hover,
  290. .s-btn.el-button--primary:focus {
  291. transform: translateY(-2px);
  292. box-shadow: var(--shadow-hover);
  293. }
  294. .el-form-item__error {
  295. padding-top: 6px;
  296. font-size: 12px;
  297. }
  298. .el-dropdown-menu {
  299. border-radius: 14px;
  300. overflow: hidden;
  301. }
  302. .el-button,
  303. .el-input__inner,
  304. .el-textarea__inner {
  305. font-family: inherit;
  306. }
  307. @media (max-width: 900px) {
  308. .page-shell {
  309. align-items: flex-start;
  310. padding: 22px 14px;
  311. }
  312. .auth-card {
  313. grid-template-columns: 1fr;
  314. min-height: auto;
  315. }
  316. .auth-visual {
  317. display: none;
  318. }
  319. .auth-panel {
  320. padding: 24px 24px 32px;
  321. }
  322. .top-action {
  323. margin-bottom: 22px;
  324. }
  325. .mobile-logo {
  326. display: block;
  327. }
  328. .form-heading {
  329. text-align: center;
  330. }
  331. }
  332. @media (max-width: 540px) {
  333. .page-shell {
  334. padding: 12px;
  335. }
  336. .auth-card {
  337. border-radius: 22px;
  338. }
  339. .auth-panel {
  340. padding: 20px 16px 26px;
  341. }
  342. .top-action {
  343. justify-content: space-between;
  344. }
  345. .lang-switch {
  346. /* width: 100%; */
  347. justify-content: flex-end;
  348. }
  349. .form-heading h1 {
  350. font-size: 23px;
  351. }
  352. .form-heading p {
  353. font-size: 13px;
  354. }
  355. .m-input .el-input__inner,
  356. .s-btn.el-button--primary {
  357. height: 50px;
  358. }
  359. .pwd {
  360. padding: 14px 14px 14px 32px;
  361. border-radius: 16px;
  362. }
  363. }
  364. </style>
  365. </head>
  366. <body>
  367. <div class="container" id="forget">
  368. <div class="page-shell">
  369. <div class="auth-card">
  370. <aside class="auth-visual">
  371. <div class="visual-content">
  372. <img class="brand-logo" src="img/logo.jpg" alt="Logo" />
  373. <div class="visual-main">
  374. <div class="visual-icon">
  375. <i class="el-icon-lock"></i>
  376. </div>
  377. <h1 class="visual-title">{{lang.item1}}</h1>
  378. <p class="visual-desc">
  379. {{lang.item6}}
  380. </p>
  381. </div>
  382. <div class="security-note">
  383. {{lang.item7}}
  384. </div>
  385. </div>
  386. </aside>
  387. <main class="auth-panel">
  388. <div class="top-action">
  389. <img class="mobile-logo" src="img/logo.jpg" alt="Logo" />
  390. <div class="lang-switch chooseLang">
  391. <!-- <img v-if="langList[language] == 'ENGLISH'" src="img/EN.jpg" alt="English" />
  392. <img v-if="langList[language] == '中文简体'" src="img/CN.jpg" alt="中文简体" /> -->
  393. <el-dropdown trigger="click" @command="chooseLang">
  394. <span class="menu">
  395. {{langList[language]}}
  396. <i class="el-icon-arrow-down el-icon--right"></i>
  397. </span>
  398. <el-dropdown-menu slot="dropdown">
  399. <el-dropdown-item command="en">English</el-dropdown-item>
  400. <el-dropdown-item command="cn">中文简体</el-dropdown-item>
  401. </el-dropdown-menu>
  402. </el-dropdown>
  403. </div>
  404. </div>
  405. <div class="form-heading">
  406. <h1>{{lang.item1}}</h1>
  407. <p>{{lang.item8}}</p>
  408. </div>
  409. <el-form :model="params" :rules="rules" ref="params" label-width="0" class="form">
  410. <el-form-item prop="password">
  411. <el-input show-password class="m-input" v-model="params.password" :placeholder="lang.item3"></el-input>
  412. </el-form-item>
  413. <el-form-item prop="password1">
  414. <el-input show-password class="m-input" v-model="params.password1" :placeholder="lang.item4"></el-input>
  415. </el-form-item>
  416. <el-form-item>
  417. <ul class="pwd">
  418. <li :class="{ fit: rule1 }">{{lang.st1}}</li>
  419. <li :class="{ fit: rule2 }">{{lang.st2}}</li>
  420. <li :class="{ fit: rule3 }">{{lang.st3}}</li>
  421. </ul>
  422. </el-form-item>
  423. <el-form-item>
  424. <el-button type="primary" class="s-btn" @click="send">
  425. {{lang.btn}}
  426. </el-button>
  427. </el-form-item>
  428. </el-form>
  429. </main>
  430. </div>
  431. </div>
  432. </div>
  433. <script src="js/vue.min.js"></script>
  434. <script src="js/axios.min.js"></script>
  435. <script src="js/element-ui.js"></script>
  436. <script src="js/element@2.12.2.js"></script>
  437. <script src="js/forget.js"></script>
  438. </body>
  439. </html>