index.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942
  1. <template>
  2. <div class="reg">
  3. <header class="header">
  4. <div class="container">
  5. <div @click="go('/')" class="hasLogo" v-if="header.companyLogo">
  6. <img
  7. style="margin: 24px 0; width: 162px; height: 33px"
  8. :src="$tools.splitImgHost(header.companyLogo)"
  9. alt=""
  10. />
  11. </div>
  12. <div @click="go('/')" v-else class="logo"></div>
  13. </div>
  14. </header>
  15. <section class="section">
  16. <div class="container">
  17. <div class="container-in">
  18. <div class="left-box"></div>
  19. <div class="right-box">
  20. <div class="login" v-if="state == 1">
  21. <div class="login__header">
  22. <div class="tabs">
  23. <div
  24. class="tab"
  25. :class="{ active: tabIndex == 0 }"
  26. @click="tabIndex = 0"
  27. >
  28. 普通登录
  29. </div>
  30. <div
  31. class="tab"
  32. :class="{ active: tabIndex == 1 }"
  33. @click="tabIndex = 1"
  34. >
  35. 手机快速登录
  36. </div>
  37. </div>
  38. </div>
  39. <div class="login__body">
  40. <div class="normal" v-if="tabIndex == 0">
  41. <el-form
  42. ref="loginForm"
  43. :rules="loginRules"
  44. :model="loginForm"
  45. >
  46. <div class="input">
  47. <el-form-item prop="account">
  48. <el-input
  49. autocomplete="off"
  50. placeholder="手机号/身份证号"
  51. v-model="loginForm.account"
  52. ></el-input>
  53. </el-form-item>
  54. </div>
  55. <div class="input">
  56. <el-form-item prop="pwd"
  57. ><el-input
  58. autocomplete="off"
  59. placeholder="密码"
  60. :type="loginPwdShow ? 'text' : 'password'"
  61. v-model="loginForm.pwd"
  62. >
  63. <i
  64. @click="loginPwdShow = !loginPwdShow"
  65. slot="suffix"
  66. :class="{ btn: loginPwdShow ? true : false }"
  67. class="el-icon-view"
  68. ></i> </el-input
  69. ></el-form-item>
  70. </div>
  71. <div class="text">
  72. <a @click="state = 2">立即注册</a>
  73. <a @click="state = 3">找回密码</a>
  74. </div>
  75. <el-button
  76. class="submit"
  77. @click="login"
  78. type="primary"
  79. round
  80. :loading="islogin"
  81. >登录</el-button
  82. >
  83. </el-form>
  84. </div>
  85. <div class="phone" v-if="tabIndex == 1">
  86. <el-form
  87. ref="loginSmsForm"
  88. :rules="loginSmsRules"
  89. :model="loginSmsForm"
  90. >
  91. <div class="input">
  92. <el-form-item prop="tel"
  93. ><el-input
  94. autocomplete="off"
  95. placeholder="手机号"
  96. v-model="loginSmsForm.tel"
  97. ></el-input
  98. ></el-form-item>
  99. </div>
  100. <div class="input">
  101. <el-form-item prop="code"
  102. ><el-input
  103. autocomplete="off"
  104. placeholder="短信验证码"
  105. v-model="loginSmsForm.code"
  106. >
  107. <span
  108. slot="suffix"
  109. @click="getLoginSms"
  110. class="btn"
  111. >{{
  112. countDown == 0
  113. ? "获取验证码"
  114. : `${countDown}秒重新获取`
  115. }}</span
  116. >
  117. </el-input></el-form-item
  118. >
  119. </div>
  120. <div class="text">
  121. <a @click="state = 2">立即注册</a>
  122. <a @click="state = 3">找回密码</a>
  123. </div>
  124. <el-button
  125. class="submit"
  126. @click="loginSms"
  127. :loading="isloginSms"
  128. type="primary"
  129. round
  130. >登录</el-button
  131. >
  132. </el-form>
  133. </div>
  134. </div>
  135. </div>
  136. <div class="register" v-if="state == 2">
  137. <el-form
  138. :model="registerForm"
  139. ref="registerForm"
  140. :rules="registerRules"
  141. >
  142. <div class="register__header">
  143. <div class="title">账号注册</div>
  144. </div>
  145. <div class="register__body">
  146. <div class="input">
  147. <el-form-item prop="tel"
  148. ><el-input
  149. autocomplete="off"
  150. placeholder="手机号"
  151. v-model="registerForm.tel"
  152. ></el-input
  153. ></el-form-item>
  154. </div>
  155. <div class="input">
  156. <el-form-item prop="code">
  157. <el-input
  158. autocomplete="off"
  159. placeholder="获取验证码"
  160. v-model="registerForm.code"
  161. >
  162. <span class="btn" slot="suffix" @click="getRegisterSms">
  163. {{
  164. registerCountDown == 0
  165. ? "获取验证码"
  166. : `${registerCountDown}秒重新获取`
  167. }}
  168. </span>
  169. </el-input>
  170. </el-form-item>
  171. </div>
  172. <div class="input">
  173. <el-form-item prop="pwd"
  174. ><el-input
  175. autocomplete="off"
  176. placeholder="密码"
  177. :type="registerPwdShow ? 'text' : 'password'"
  178. v-model="registerForm.pwd"
  179. >
  180. <i
  181. class="el-icon-view"
  182. @click="registerPwdShow = !registerPwdShow"
  183. slot="suffix"
  184. :class="{ btn: registerPwdShow ? true : false }"
  185. ></i> </el-input
  186. ></el-form-item>
  187. </div>
  188. <div class="text">
  189. 已有账号?
  190. <a @click="state = 1">去登录</a>
  191. </div>
  192. <div class="checkbox">
  193. <el-form-item prop="read">
  194. <div>
  195. <input type="checkbox" v-model="registerForm.read" />
  196. 我已认真阅读并同意
  197. </div>
  198. <div>
  199. <a>《用户使用协议》</a>
  200. <a>《个人信息保护政策》</a>
  201. </div>
  202. </el-form-item>
  203. </div>
  204. <el-button
  205. class="submit"
  206. @click="register"
  207. type="primary"
  208. round
  209. :loading="isRegister"
  210. >注册</el-button
  211. >
  212. </div>
  213. </el-form>
  214. </div>
  215. <div class="findpwd" v-if="state == 3">
  216. <el-form
  217. :model="forgetForm"
  218. :rules="forgetRules"
  219. ref="forgetForm"
  220. >
  221. <div class="findpwd__header">
  222. <div class="title">找回密码</div>
  223. </div>
  224. <div class="findpwd__body">
  225. <div class="input">
  226. <el-form-item prop="tel"
  227. ><el-input
  228. placeholder="手机号"
  229. autocomplete="off"
  230. v-model="forgetForm.tel"
  231. >
  232. </el-input
  233. ></el-form-item>
  234. </div>
  235. <div class="input">
  236. <el-form-item prop="code">
  237. <el-input
  238. placeholder="短信验证码"
  239. autocomplete="off"
  240. v-model="forgetForm.code"
  241. >
  242. <span class="btn" slot="suffix">获取验证码</span>
  243. </el-input></el-form-item
  244. >
  245. </div>
  246. <div class="input">
  247. <el-form-item prop="pwd">
  248. <el-input
  249. placeholder="密码"
  250. autocomplete="off"
  251. :type="forgetPwdShow ? 'text' : 'password'"
  252. v-model="forgetForm.pwd"
  253. >
  254. <i
  255. class="el-icon-view"
  256. @click="forgetPwdShow = !forgetPwdShow"
  257. :class="{ btn: forgetPwdShow ? true : false }"
  258. slot="suffix"
  259. ></i>
  260. </el-input>
  261. </el-form-item>
  262. </div>
  263. <div class="input">
  264. <el-form-item prop="pwdAgain"
  265. ><el-input
  266. placeholder="再次输入密码"
  267. autocomplete="off"
  268. :type="forgetPwdShow ? 'text' : 'password'"
  269. v-model="forgetForm.pwdAgain"
  270. >
  271. <i
  272. class="el-icon-view"
  273. @click="forgetPwdShow = !forgetPwdShow"
  274. :class="{ btn: forgetPwdShow ? true : false }"
  275. slot="suffix"
  276. ></i> </el-input
  277. ></el-form-item>
  278. </div>
  279. <div class="text">
  280. <a @click="state = 1">登录</a>
  281. <a @click="state = 2">注册</a>
  282. </div>
  283. <el-button
  284. class="submit"
  285. type="primary"
  286. :loading="isForget"
  287. round
  288. @click="forget"
  289. >确定</el-button
  290. >
  291. </div>
  292. </el-form>
  293. </div>
  294. <div class="findpwd" v-if="state == 4">
  295. <el-form :model="bindForm" :rules="bindRules" ref="bindForm">
  296. <div class="findpwd__header">
  297. <div class="title">关联学员身份</div>
  298. </div>
  299. <div class="findpwd__body">
  300. <div class="input">
  301. <el-form-item prop="realname"
  302. ><el-input
  303. placeholder="真实姓名"
  304. v-model="bindForm.realname"
  305. >
  306. </el-input
  307. ></el-form-item>
  308. </div>
  309. <div class="input">
  310. <el-form-item prop="idCard">
  311. <el-input
  312. placeholder="身份证号码"
  313. v-model="bindForm.idCard"
  314. >
  315. </el-input
  316. ></el-form-item>
  317. </div>
  318. <el-button
  319. class="submit"
  320. type="primary"
  321. :loading="isBind"
  322. round
  323. @click="bind"
  324. >确定</el-button
  325. >
  326. <div class="bind-next" @click="nextBind">下次再关联</div>
  327. </div>
  328. </el-form>
  329. </div>
  330. </div>
  331. </div>
  332. </div>
  333. </section>
  334. <Footer></Footer>
  335. </div>
  336. </template>
  337. <script>
  338. import Footer from "@/components/footer/index";
  339. import { mapGetters } from "vuex";
  340. import { mapMutations } from "vuex";
  341. export default {
  342. name: "login",
  343. components: {
  344. Footer,
  345. },
  346. data() {
  347. const pwdAgainCheck = async (rule, value, callback) => {
  348. if (!value) {
  349. return callback(new Error("请再次输入新密码"));
  350. } else if (this.forgetForm.pwd != this.forgetForm.pwdAgain) {
  351. return callback(new Error("两次输入密码不一致!"));
  352. } else {
  353. callback();
  354. }
  355. };
  356. return {
  357. state: 1, //1登录 2注册 3找回密码 4绑定学员身份
  358. tabIndex: 0,
  359. loginForm: {},
  360. loginSmsForm: {},
  361. registerForm: {},
  362. forgetForm: {},
  363. bindForm: {},
  364. countDown: 0,
  365. countDownTimer: null,
  366. registerCountDown: 0,
  367. registerCountDownTimer: null,
  368. forgetCountDown: 0,
  369. forgetCountDownTimer: null,
  370. getLoginCodeLock: false,
  371. getRegisterCodeLock: false,
  372. getForgetCodeLock: false,
  373. getBindCodeLock: false,
  374. loginRules: {
  375. account: [
  376. { required: true, trigger: "blur", message: "请输入手机号/身份证号" },
  377. ],
  378. pwd: [{ required: true, trigger: "blur", message: "请输入密码" }],
  379. },
  380. loginSmsRules: {
  381. code: [{ required: true, trigger: "blur", message: "请输入验证码" }],
  382. tel: [{ required: true, trigger: "blur", message: "请输入手机号" }],
  383. },
  384. forgetRules: {
  385. code: [{ required: true, trigger: "blur", message: "请输入验证码" }],
  386. tel: [{ required: true, trigger: "blur", message: "请输入手机号" }],
  387. pwd: [{ required: true, trigger: "blur", message: "请输入新密码" }],
  388. pwdAgain: [
  389. {
  390. required: true,
  391. validator: pwdAgainCheck,
  392. trigger: "blur",
  393. },
  394. ],
  395. },
  396. registerRules: {
  397. code: [{ required: true, trigger: "blur", message: "请输入验证码" }],
  398. tel: [{ required: true, trigger: "blur", message: "请输入手机号" }],
  399. pwd: [{ required: true, trigger: "blur", message: "请输入密码" }],
  400. read: [{ required: true, trigger: "blur", message: "请勾选服务协议" }],
  401. },
  402. bindRules: {
  403. realname: [
  404. { required: true, trigger: "blur", message: "请输入真实姓名" },
  405. ],
  406. idCard: [
  407. { required: true, trigger: "blur", message: "请输入身份证号" },
  408. ],
  409. },
  410. islogin: false,
  411. isloginSms: false,
  412. isRegister: false,
  413. isForget: false,
  414. isBind: false,
  415. user_account: "",
  416. token: "",
  417. loginPwdShow: false,
  418. registerPwdShow: false,
  419. forgetPwdShow: false,
  420. };
  421. },
  422. computed: {
  423. ...mapGetters(["header", "currentRouter"]),
  424. },
  425. mounted() {
  426. this.state = this.$route.query.state || 1;
  427. },
  428. methods: {
  429. ...mapMutations(["setUserInfo", "setCurrentRouter"]),
  430. /**
  431. * 账号密码登录
  432. */
  433. go(path) {
  434. this.$router.push(path);
  435. },
  436. login() {
  437. this.$refs.loginForm.validate((valid) => {
  438. if (valid) {
  439. this.islogin = true;
  440. this.$request
  441. .login(this.loginForm)
  442. .then((res) => {
  443. if (res.data.full_info) {
  444. localStorage.setItem("user_account", res.data.user_account);
  445. localStorage.setItem("token", res.data.token);
  446. this.getInfo();
  447. } else {
  448. this.user_account = res.data.user_account;
  449. this.token = res.data.token;
  450. this.islogin = false;
  451. this.state = 4;
  452. }
  453. })
  454. .catch((err) => {
  455. this.islogin = false;
  456. this.$message({
  457. message: err.msg,
  458. type: "error",
  459. });
  460. });
  461. }
  462. });
  463. },
  464. /**
  465. * 获取登录短信
  466. */
  467. getLoginSms() {
  468. this.$refs.loginSmsForm.validateField("tel", (valid) => {
  469. if (!valid) {
  470. if (this.countDown == 0) {
  471. if (this.getLoginCodeLock) {
  472. return;
  473. }
  474. this.getLoginCodeLock = true;
  475. this.$request
  476. .getLoginSms({ tel: this.loginSmsForm.tel })
  477. .then((res) => {
  478. this.getLoginCodeLock = false;
  479. this.$message({
  480. message: `验证码已发送`,
  481. type: "success",
  482. });
  483. this.countDown = 60;
  484. this.countDownTimer = setInterval(() => {
  485. if (this.countDown == 0) {
  486. clearInterval(this.countDownTimer);
  487. } else {
  488. this.countDown--;
  489. }
  490. }, 1000);
  491. })
  492. .catch((err) => {
  493. this.getLoginCodeLock = false;
  494. });
  495. }
  496. }
  497. });
  498. },
  499. /**
  500. * 手机号登录
  501. */
  502. loginSms() {
  503. this.$refs.loginSmsForm.validate((valid) => {
  504. if (valid) {
  505. this.isloginSms = true;
  506. this.$request
  507. .loginSms(this.loginSmsForm)
  508. .then((res) => {
  509. if (res.data.full_info) {
  510. localStorage.setItem("user_account", res.data.user_account);
  511. localStorage.setItem("token", res.data.token);
  512. this.getInfo();
  513. } else {
  514. this.user_account = res.data.user_account;
  515. this.token = res.data.token;
  516. this.isloginSms = false;
  517. this.state = 4;
  518. }
  519. })
  520. .catch((err) => {
  521. this.isloginSms = false;
  522. this.$message({
  523. message: err.msg,
  524. type: "error",
  525. });
  526. });
  527. }
  528. });
  529. },
  530. /**
  531. * 获取用户登录信息
  532. */
  533. getInfo() {
  534. this.$request
  535. .getInfo()
  536. .then((res) => {
  537. this.isRegister = false;
  538. this.islogin = false;
  539. this.isloginSms = false;
  540. this.setUserInfo(res.data);
  541. if (JSON.stringify(this.currentRouter) != "{}") {
  542. this.$router.push(this.currentRouter);
  543. this.setCurrentRouter({});
  544. } else {
  545. this.$router.replace("/");
  546. }
  547. })
  548. .catch((err) => {
  549. this.isRegister = false;
  550. this.islogin = false;
  551. this.isloginSms = false;
  552. this.$message({
  553. message: err.msg,
  554. type: "error",
  555. });
  556. });
  557. },
  558. /**
  559. * 注册
  560. */
  561. register() {
  562. this.$refs.registerForm.validate((valid) => {
  563. if (valid) {
  564. this.isRegister = true;
  565. this.$request
  566. .registerUser(this.registerForm)
  567. .then((res) => {
  568. //自动登录
  569. this.autoLogin();
  570. })
  571. .catch((err) => (this.isRegister = false));
  572. }
  573. });
  574. },
  575. /**
  576. * 获取注册验证码
  577. */
  578. getRegisterSms() {
  579. this.$refs.registerForm.validateField("tel", (valid) => {
  580. if (!valid) {
  581. if (this.registerCountDown == 0) {
  582. if (this.getRegisterCodeLock) {
  583. return;
  584. }
  585. this.getRegisterCodeLock = true;
  586. this.$request
  587. .getLoginSms({ tel: this.loginSmsForm.tel })
  588. .then((res) => {
  589. this.getRegisterCodeLock = false;
  590. this.$message({
  591. message: `验证码已发送`,
  592. type: "success",
  593. });
  594. this.registerCountDown = 60;
  595. this.registerCountDownTimer = setInterval(() => {
  596. if (this.registercountDown == 0) {
  597. clearInterval(this.registerCountDownTimer);
  598. } else {
  599. this.registerCountDown--;
  600. }
  601. }, 1000);
  602. })
  603. .catch((err) => {
  604. this.$message({
  605. message: err.msg,
  606. type: "error",
  607. });
  608. this.getRegisterCodeLock = false;
  609. });
  610. }
  611. }
  612. });
  613. },
  614. /**
  615. * 注册后自动登录并跳转绑定身份信息
  616. */
  617. autoLogin() {
  618. let loginForm = JSON.parse(JSON.stringify(this.registerForm));
  619. loginForm.account = loginForm.tel;
  620. this.$request
  621. .login(loginForm)
  622. .then((res) => {
  623. if (res.data.full_info) {
  624. //信息完善,获取用户信息
  625. localStorage.setItem("user_account", res.data.user_account);
  626. localStorage.setItem("token", res.data.token);
  627. this.getInfo();
  628. } else {
  629. //不完善,跳转完善信息页面
  630. this.user_account = res.data.user_account;
  631. this.token = res.data.token;
  632. this.isRegister = false;
  633. this.state = 4;
  634. }
  635. })
  636. .catch((err) => {
  637. this.isRegister = false;
  638. this.$message({
  639. message: err.msg,
  640. type: "error",
  641. });
  642. });
  643. },
  644. forget() {
  645. this.$refs.forgetForm.validate((valid) => {
  646. if (valid) {
  647. this.isForget = true;
  648. this.$request
  649. .forgetUser(this.forgetForm)
  650. .then((res) => {
  651. this.isForget = false;
  652. this.$message({
  653. message: "修改成功",
  654. type: "success",
  655. });
  656. this.$refs.forgetForm.resetFields();
  657. })
  658. .catch((err) => (this.isForget = false));
  659. }
  660. });
  661. },
  662. nextBind() {
  663. this.state = 1;
  664. this.user_account = "";
  665. this.token = "";
  666. },
  667. bind() {
  668. this.$refs.bindForm.validate((valid) => {
  669. if (valid) {
  670. this.isBind = true;
  671. let bindForm = JSON.parse(JSON.stringify(this.bindForm));
  672. bindForm.token = this.token;
  673. this.$request
  674. .bindIdCard(this.bindForm)
  675. .then((res) => {
  676. this.isBind = false;
  677. this.$message({
  678. message: "关联成功",
  679. type: "success",
  680. });
  681. localStorage.setItem("user_account", this.user_account);
  682. localStorage.setItem("token", this.token);
  683. this.getInfo();
  684. if (JSON.stringify(this.currentRouter) != {}) {
  685. this.$router.push(this.currentRouter);
  686. this.setCurrentRouter({});
  687. } else {
  688. this.$router.replace("/");
  689. }
  690. })
  691. .catch((err) => {
  692. this.isBind = false;
  693. this.$message({
  694. message: err.msg,
  695. type: "error",
  696. });
  697. });
  698. }
  699. });
  700. },
  701. },
  702. };
  703. </script>
  704. <!-- Add "scoped" attribute to limit CSS to this component only -->
  705. <style scoped lang="scss">
  706. .reg {
  707. .header {
  708. box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.04);
  709. overflow: hidden;
  710. .hasLogo {
  711. img {
  712. cursor: pointer;
  713. }
  714. }
  715. .logo {
  716. cursor: pointer;
  717. margin: 24px 0;
  718. width: 162px;
  719. height: 33px;
  720. background: url("~@/assets/logo.png") no-repeat center;
  721. }
  722. }
  723. .section {
  724. background: #f2f7ff;
  725. .container-in {
  726. width: 100%;
  727. height: 507px;
  728. }
  729. .left-box {
  730. float: left;
  731. width: 496px;
  732. height: 318px;
  733. background: url("~@/assets/pic.png") no-repeat center;
  734. background-size: cover;
  735. margin-top: 95px;
  736. margin-left: 152px;
  737. }
  738. .right-box {
  739. float: right;
  740. width: 348px;
  741. height: 427px;
  742. background: #ffffff;
  743. box-shadow: 0px 0px 13px 3px rgba(63, 141, 253, 0.1);
  744. border-radius: 8px;
  745. margin-top: 40px;
  746. margin-right: 140px;
  747. .el-icon-view {
  748. cursor: pointer;
  749. }
  750. .el-form-item {
  751. margin: 0;
  752. }
  753. .login {
  754. &__header {
  755. border-bottom: 2px solid #eee;
  756. .tabs {
  757. display: flex;
  758. width: 100%;
  759. .tab {
  760. cursor: pointer;
  761. text-align: center;
  762. color: #999;
  763. flex: 1;
  764. height: 42px;
  765. line-height: 42px;
  766. position: relative;
  767. &.active {
  768. &::after {
  769. content: "";
  770. display: block;
  771. position: absolute;
  772. width: 138px;
  773. height: 2px;
  774. background: #3f8dfd;
  775. border-radius: 0px;
  776. bottom: -2px;
  777. left: 50%;
  778. margin-left: -69px;
  779. }
  780. }
  781. }
  782. }
  783. }
  784. &__body {
  785. padding: 16px 24px 0;
  786. overflow: hidden;
  787. .input {
  788. margin-top: 24px;
  789. .btn {
  790. font-size: 14px;
  791. font-family: Microsoft YaHei;
  792. font-weight: 400;
  793. color: #3f8dfd;
  794. white-space: nowrap;
  795. cursor: pointer;
  796. }
  797. }
  798. .text {
  799. margin-top: 24px;
  800. display: flex;
  801. justify-content: space-between;
  802. }
  803. .submit {
  804. margin-top: 40px;
  805. width: 300px;
  806. }
  807. }
  808. }
  809. .register {
  810. &__header {
  811. border-bottom: 2px solid #eee;
  812. .title {
  813. height: 42px;
  814. line-height: 42px;
  815. text-align: center;
  816. color: #999;
  817. }
  818. }
  819. &__body {
  820. padding: 0 24px;
  821. overflow: hidden;
  822. .input {
  823. margin-top: 24px;
  824. .btn {
  825. font-size: 14px;
  826. font-family: Microsoft YaHei;
  827. font-weight: 400;
  828. color: #3f8dfd;
  829. white-space: nowrap;
  830. cursor: pointer;
  831. }
  832. }
  833. .text {
  834. margin-top: 10px;
  835. text-align: right;
  836. a {
  837. color: #3f8dfd;
  838. }
  839. }
  840. .checkbox {
  841. margin-top: 10px;
  842. a {
  843. color: #3f8dfd;
  844. }
  845. /deep/ .el-form-item__content {
  846. line-height: 20px;
  847. }
  848. }
  849. .submit {
  850. margin-top: 20px;
  851. width: 300px;
  852. }
  853. }
  854. }
  855. }
  856. .findpwd {
  857. &__header {
  858. border-bottom: 2px solid #eee;
  859. .title {
  860. height: 42px;
  861. line-height: 42px;
  862. text-align: center;
  863. color: #999;
  864. }
  865. }
  866. &__body {
  867. padding: 0 24px;
  868. overflow: hidden;
  869. .input {
  870. margin-top: 24px;
  871. .btn {
  872. font-size: 14px;
  873. font-family: Microsoft YaHei;
  874. font-weight: 400;
  875. color: #3f8dfd;
  876. white-space: nowrap;
  877. cursor: pointer;
  878. }
  879. }
  880. .text {
  881. margin-top: 14px;
  882. display: flex;
  883. justify-content: space-between;
  884. }
  885. .submit {
  886. margin-top: 30px;
  887. width: 300px;
  888. }
  889. .bind-next {
  890. font-size: 14px;
  891. text-align: center;
  892. color: #999;
  893. margin-top: 10px;
  894. cursor: pointer;
  895. }
  896. }
  897. }
  898. }
  899. }
  900. </style>