LoginBar.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844
  1. <script>
  2. import qs from 'qs'
  3. import { mapActions } from 'vuex'
  4. import { setToken } from '~/utils/cookie';
  5. export default {
  6. data() {
  7. const regPhone = /^1[3456789]\d{9}$/
  8. const regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
  9. return {
  10. form: {
  11. username:'',
  12. password:''
  13. },
  14. forgetForm: {
  15. account:'',
  16. code: '',
  17. key:''
  18. },
  19. resetForm: {
  20. newPassword: '',
  21. confirm_newPassword: '',
  22. verifyCode: '',
  23. type: '1'
  24. },
  25. receiver:'',
  26. checked:true,
  27. logging:false,
  28. interfaceStatus: 'login',
  29. forgetPswErrTip: '',
  30. codeImg:'',
  31. sending: false,
  32. clock: 60,
  33. resetPswTip:'',
  34. regEmail,
  35. regPhone,
  36. }
  37. },
  38. computed: {
  39. loginBtnDisabled() {
  40. return !(this.form.username && this.form.password && this.form.password.length >= 6)
  41. },
  42. forgetDisabled() {
  43. return !(this.forgetForm.account && this.forgetForm.code)
  44. }
  45. },
  46. mounted() {
  47. if(localStorage.getItem('username')) {
  48. this.form.username = localStorage.getItem('username')
  49. this.form.password = localStorage.getItem('password')
  50. }
  51. },
  52. methods: {
  53. ...mapActions(['login']),
  54. handlerLogin() {
  55. this.logging = true
  56. this.$axios.post('login',qs.stringify(this.form)).then((res)=> {
  57. if(res.code === 200) {
  58. this.$store.dispatch('login',res.result).then((token)=> {
  59. this.$axios.setToken(token, 'Bearer')
  60. localStorage.setItem('token',token)
  61. if(this.checked) {
  62. localStorage.setItem('username',this.form.username)
  63. localStorage.setItem('password',this.form.password)
  64. }else {
  65. localStorage.removeItem('username',this.form.username)
  66. localStorage.removeItem('password',this.form.password)
  67. this.form.username = ''
  68. this.form.password = ''
  69. }
  70. this.handlerClose()
  71. this.getUserInfo()
  72. })
  73. }
  74. })
  75. .finally(()=> {this.logging = false})
  76. },
  77. getUserInfo() {
  78. this.$axios.get('members/getMemberInfo').then((res)=> {
  79. if(res.code === 200) {
  80. this.$store.commit('setUser',res.result.memberInfo)
  81. setToken('vuex',JSON.stringify(res.result.memberInfo))
  82. this.logging = false
  83. this.$emit('loginSucess')
  84. }
  85. })
  86. },
  87. handlerForgetPsw() {
  88. this.interfaceStatus = 'forgetPsw'
  89. this.handleGetVcodeImage()
  90. },
  91. // 手机号码发送验证码
  92. handlePostCode() {
  93. if(this.sending) return
  94. const params = {
  95. action: '1', // 找回密码
  96. receiver: this.forgetForm.account
  97. }
  98. if(this.regPhone.test(this.forgetForm.account)) params.type = '1'
  99. if(this.regEmail.test(this.forgetForm.account)) params.type = '0'
  100. this.$axios.get('auth/getVerifyCode', {params}).then((res)=> {
  101. if(res.code === 200) {
  102. this.sending = true
  103. let interval = setInterval(() => {
  104. this.clock--
  105. if(this.clock === 0) {
  106. clearInterval(interval)
  107. interval = null
  108. this.clock = 60
  109. this.sending = false
  110. }
  111. }, 1000);
  112. }
  113. })
  114. },
  115. // 获取二维码图片
  116. handleGetVcodeImage() {
  117. const params = {
  118. width: '140',
  119. height: '46',
  120. codeCount: '6',
  121. lineCount: '1',
  122. type: 'forget_password'
  123. }
  124. this.$axios.get('/auth/getImageCode',{params,responseType: 'arraybuffer'}).then((res)=> {
  125. this.codeImg = 'data:image/png;base64,' + btoa(
  126. new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')
  127. )
  128. this.forgetForm.key = res.headers['x-auth-token']
  129. })
  130. },
  131. resetInterfaceStatus() {
  132. this.forgetForm.account = ''
  133. this.forgetForm.code = ''
  134. this.forgetPswErrTip = ''
  135. this.resetPswTip = ''
  136. this.resetForm.newPassword = ''
  137. this.resetForm.confirm_newPassword = ''
  138. this.resetForm.verifyCode = ''
  139. this.resetForm.forgetPswErrTip = ''
  140. setTimeout(() => {
  141. this.interfaceStatus = 'login'
  142. }, 500);
  143. },
  144. // 切换注册页面
  145. handlerRegister() {
  146. this.$emit('register','register')
  147. },
  148. // 重置密码验证
  149. handlerResetPsw() {
  150. if(!this.regPhone.test(this.forgetForm.account) && !this.regEmail.test(this.forgetForm.account)) {
  151. this.forgetPswErrTip = '请输入正确的邮箱或手机号码'
  152. return
  153. }
  154. this.logging = true
  155. this.$axios.post('auth/checkExist',qs.stringify(this.forgetForm)).then((res)=> {
  156. if(res.code === 200) {
  157. if(this.regPhone.test(this.forgetForm.account)) {
  158. this.interfaceStatus = 'resetPhonePsw'
  159. }
  160. if(this.regEmail.test(this.forgetForm.account)) {
  161. this.postEmail()
  162. }
  163. }else {
  164. this.forgetPswErrTip = res.msg
  165. this.handleGetVcodeImage()
  166. }
  167. }).finally(()=> {
  168. this.logging = false
  169. })
  170. },
  171. // 邮箱找回密码,发送邮箱
  172. postEmail() {
  173. const params = {
  174. action: '1',
  175. type: '0',
  176. receiver: this.forgetForm.account
  177. }
  178. this.$axios.get('auth/getVerifyCode', {params}).then((res) => {
  179. if(res.code === 200 ) {
  180. this.interfaceStatus = 'resetEmailPsw'
  181. }
  182. })
  183. },
  184. handlerConfirmReset() {
  185. if(this.resetForm.newPassword !== this.resetForm.confirm_newPassword) {
  186. this.resetPswTip = '两次输入的密码不一致'
  187. }else if(this.resetForm.newPassword.length < 6) {
  188. this.resetPswTip = '密码位数不能少于6位'
  189. }else if(this.resetForm.newPassword.charCodeAtlength> 16){
  190. this.resetPswTip = '密码位数不能大于16位'
  191. }else {
  192. this.resetPswTip = ''
  193. this.submitReset()
  194. }
  195. },
  196. submitReset() {
  197. this.resetForm.account = this.forgetForm.account
  198. this.$axios.post('members/resetPassword', this.resetForm).then((res)=> {
  199. if(res.code === 200) {
  200. this.$message.success('修改成功')
  201. this.handlerClose()
  202. }
  203. })
  204. },
  205. handlerClose() {
  206. this.$emit('close')
  207. }
  208. }
  209. }
  210. </script>
  211. <template>
  212. <div>
  213. <div v-if="interfaceStatus === 'login'" class="user-login">
  214. <div class="logo">
  215. <h4 class="logo_PDF"></h4>
  216. </div>
  217. <div class="login_content">
  218. <input id="account" v-model="form.username" class="login_input_user account" type="text" placeholder="邮箱/手机号">
  219. <br />
  220. <input id="pwd" v-model="form.password" class="login_input_password pwd" type="password" placeholder="密码">
  221. <br />
  222. <div class="forget-password">
  223. <span class="pwd-container">
  224. <input v-model="checked" type="checkbox" class="remember_pass align-text-bottom">
  225. <label for="rememberMe">记住密码</label>
  226. </span>
  227. <span class="right">
  228. <a class="forgotpwd cursor-pointer" @click="handlerForgetPsw">忘记密码?</a>
  229. </span>
  230. </div>
  231. <!-- <div class="error-mess" >
  232. <span id="error-message error-tip">账号或密码错误</span>
  233. </div> -->
  234. <div class="tips">
  235. <span>只有QQ/微信账号,如何进行网页登录</span>
  236. <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
  237. <path fill-rule="evenodd" clip-rule="evenodd" d="M0 7C0 10.866 3.13414 14 7 14C10.866 14 14 10.866 14 7C14 3.134 10.866 0 7 0C3.13414 0 0 3.13414 0 7ZM0.950469 7C0.950469 3.659 3.659 0.950469 7 0.950469C10.341 0.950469 13.0495 3.659 13.0495 7C13.0495 10.3411 10.3411 13.0495 7 13.0495C3.65887 13.0495 0.950469 10.3411 0.950469 7ZM5.42094 4.11538C5.82657 3.70192 6.38673 3.5 7.10141 3.5C7.71951 3.5 8.22172 3.66346 8.60803 4.00962C8.99434 4.34615 9.1875 4.80769 9.1875 5.38462C9.1875 5.85577 9.06195 6.25 8.8205 6.55769C8.73358 6.66346 8.46316 6.91346 8.00924 7.30769C7.82575 7.46154 7.69054 7.63462 7.60361 7.80769C7.49738 8 7.44909 8.21154 7.44909 8.44231V8.60577H6.4157V8.44231C6.4157 8.08654 6.47365 7.77885 6.60886 7.52885C6.73441 7.25962 7.10141 6.86538 7.70019 6.33654L7.86438 6.15385C8.03822 5.93269 8.1348 5.70192 8.1348 5.45192C8.1348 5.11539 8.03822 4.85577 7.85472 4.66346C7.66156 4.47115 7.38148 4.375 7.0338 4.375C6.5992 4.375 6.28049 4.50962 6.08733 4.78846C5.91349 5.01923 5.82657 5.34615 5.82657 5.76923H4.8125C4.8125 5.06731 5.01532 4.51923 5.42094 4.11538ZM6.42536 9.31731C6.56057 9.18269 6.73441 9.125 6.92757 9.125C7.13038 9.125 7.30422 9.18269 7.43943 9.31731C7.57464 9.44231 7.64225 9.60577 7.64225 9.80769C7.64225 10.0096 7.56498 10.1731 7.42977 10.3077C7.29456 10.4327 7.12072 10.5 6.92757 10.5C6.73441 10.5 6.56057 10.4327 6.42536 10.2981C6.29015 10.1635 6.22254 10 6.22254 9.80769C6.22254 9.60577 6.29015 9.44231 6.42536 9.31731Z" fill="currentColor"/>
  238. </svg>
  239. <div class="tips-content">
  240. <div><span>1.&nbsp;</span>APP端绑定手机号:我的 - 账户绑定</div>
  241. <div><span>2.&nbsp;</span>网页登录,输入手机号,点击忘记密码,进行账号密码设置,登录账号</div>
  242. </div>
  243. </div>
  244. <button id="btn-login" type="submit" class="logging" :class="{'btn-signin': loginBtnDisabled}" :disabled="loginBtnDisabled" @click="handlerLogin">登录</button>
  245. <div v-show="logging" class="loading"></div>
  246. <div class="register-now">
  247. <span>还没有帐号?</span>
  248. <span class="switch_signup">
  249. <a class="cursor-pointer" @click="handlerRegister">注册</a>
  250. </span>
  251. </div>
  252. </div>
  253. </div>
  254. <div v-if="interfaceStatus === 'forgetPsw'" class="user-forget">
  255. <div class="changepwd-tittle">
  256. <p>找回账号密码</p>
  257. </div>
  258. <div class="getbackpwd_content">
  259. <input v-model="forgetForm.account" class="getbackpwd_input_user account" type="text" placeholder="邮箱/手机号">
  260. <br />
  261. <input v-model="forgetForm.code" class="getbackpwd_input_vcode" type="text" placeholder="验证码">
  262. <img :src="codeImg" class="mt-10px cursor-pointer" @click="handleGetVcodeImage">
  263. <br />
  264. <div v-if="forgetPswErrTip !== ''" class="error-mess">
  265. <span id="error-message error-tip">{{forgetPswErrTip}}</span>
  266. </div>
  267. <button id="btn-validate" type="submit" class="validate" :class="{'now_validate': forgetDisabled}" @click="handlerResetPsw">立即验证
  268. </button>
  269. <div v-show="logging" class="loading"></div>
  270. </div>
  271. </div>
  272. <div v-if="interfaceStatus === 'resetPhonePsw'" class="phone-reset">
  273. <div class="changepwd-tittle">
  274. <p>手机验证</p>
  275. </div>
  276. <div class="getbackpwd_content setnewpwd">
  277. <p class="phone_num">{{forgetForm.account}}</p>
  278. <div class="mobilevali">
  279. <input v-model="resetForm.verifyCode" class="getbackpwd_input_vcode input_vcode_conform" placeholder="验证码">
  280. <span class="sent-vcode sent-vcode-getbackpwd" :class="{'sent-vcode-disabled': sending}" @click="handlePostCode"><a>{{sending ? clock+'秒' : '发送验证码'}}</a></span>
  281. </div>
  282. <br />
  283. <p>设置新密码</p>
  284. <input v-model="resetForm.newPassword" class="getbackpwd_input_pwd input_newpwd" type="password" value="" placeholder="新密码(6-16个字符,区分大小写)">
  285. <br />
  286. <input v-model="resetForm.confirm_newPassword" class="getbackpwd_input_pwd input_newpwd_conform" type="password" placeholder="确认新密码">
  287. <br />
  288. <div v-if="resetPswTip !== ''" class="error-mess">
  289. <span id="error-message error-tip">{{resetPswTip}}</span>
  290. </div>
  291. <button id="btn-validate-conform" type="submit" class="validate" @click="handlerConfirmReset">确认
  292. </button>
  293. <div class="loading"></div>
  294. </div>
  295. </div>
  296. <div v-if="interfaceStatus === 'resetEmailPsw'" class="user-reset">
  297. <div class="changepwd-tittle">
  298. <p>邮箱验证</p>
  299. </div>
  300. <div class="prompt-content">
  301. <p>重置密码的链接已被发送到您的邮箱,请在30分钟内前往你的邮箱查收邮件以重置密码。</p>
  302. </div>
  303. </div>
  304. </div>
  305. </template>
  306. <style lang="scss">
  307. .user-login {
  308. margin-top:35px;
  309. .logo {
  310. width: 96px;
  311. height: 96px;
  312. border-radius: 96px;
  313. text-align: center;
  314. background-color: rgb(255, 255, 255);
  315. position: absolute;
  316. top: -48px;
  317. left: 50%;
  318. margin-left: -48px;
  319. .logo_PDF {
  320. width: 80px;
  321. height: 80px;
  322. position: absolute;
  323. top: 8px;
  324. margin-left: 8px;
  325. background: url(http://cn-file.17pdf.com/website/index/logo_pdf.png) no-repeat 50%;
  326. background-size: 100%;
  327. }
  328. }
  329. .login_content {
  330. text-align: center;
  331. font-size: 14px;
  332. margin-top: -40px;
  333. .error-mess {
  334. position: relative;
  335. font-size: 14px;
  336. span{
  337. display: inline-block;
  338. background: #808080;
  339. color: rgb(255, 255, 255);
  340. padding: 5px 15px;
  341. border-radius: 4px;
  342. }
  343. }
  344. .error-mess-signup {
  345. position: initial;
  346. clear: both;
  347. margin-top: 15px;
  348. }
  349. // input:focus {
  350. // outline: none;
  351. // border-color: rgb(233, 54, 54);
  352. // }
  353. // input:checked{
  354. // background: url(http://cn-file.17pdf.com/website/index/ic_checkbox_selected.png) no-repeat 0px 0px;
  355. // }
  356. .login_input_user {
  357. height: 60px;
  358. width: 360px;
  359. border-width: 0 0 1px 0;
  360. border-color: rgb(238, 238, 238);
  361. padding-left: 42px;
  362. padding-top: 16px;
  363. line-height: 44px;
  364. outline:none;
  365. background: url(http://cn-file.17pdf.com/website/account/ic_login_inputuser.png) no-repeat 0px 28px;
  366. }
  367. .login_input_user:-webkit-autofill {
  368. box-shadow: 0 0 0px 1000px white inset;
  369. }
  370. .login_input_password {
  371. height: 60px;
  372. width: 360px;
  373. border-width: 0 0 1px 0;
  374. border-color: rgb(238, 238, 238);
  375. padding-left: 42px;
  376. padding-top: 16px;
  377. line-height: 44px;
  378. outline:none;
  379. background: url(http://cn-file.17pdf.com/website/account/ic_login_inputpassword.png) no-repeat 0px 28px;
  380. }
  381. .login_input_password:-webkit-autofill {
  382. box-shadow: 0 0 0px 1000px white inset;
  383. }
  384. .vcode_content {
  385. // display: none;
  386. padding: 0px 36px;
  387. height: 60px;
  388. .input_vcode_signup {
  389. height: 60px;
  390. width: 220px;
  391. border-width: 0 0 1px 0;
  392. border-color: rgb(238, 238, 238);
  393. padding-left: 42px;
  394. padding-top: 16px;
  395. line-height: 44px;
  396. float: left;
  397. background: url(http://cn-file.17pdf.com/website/account/ic_login_input_code.png) no-repeat 0px 28px;
  398. outline: none;
  399. }
  400. .sent-vcode-disabled {
  401. border: 1px solid rgb(153, 153, 153) !important;
  402. a {
  403. color: rgb(153, 153, 153) !important;
  404. }
  405. }
  406. .sent-vcode {
  407. border: 1px solid rgb(255, 79, 79);
  408. border-radius: 3px;
  409. padding: 10px 20px;
  410. margin-left: 10px;
  411. cursor:pointer;
  412. margin-top: 10px;
  413. float: right;
  414. width: 120px;
  415. a {
  416. color: rgb(255, 79, 79);
  417. }
  418. }
  419. }
  420. .new {
  421. background: url(http://cn-file.17pdf.com/website/account/ic_lock_new.png) no-repeat 0px 28px;
  422. }
  423. .confirm {
  424. background: url(http://cn-file.17pdf.com/website/account/ic_lock_sure.png) no-repeat 0px 28px;
  425. }
  426. .forget-password {
  427. display: flex;
  428. justify-content: space-between;
  429. align-items: center;
  430. margin-top: 21px;
  431. padding: 0px 60px;
  432. font-size: 12px;
  433. color: rgb(102, 102, 102);
  434. input {
  435. margin: 0;
  436. }
  437. .left {
  438. display: flex;
  439. align-items: center;
  440. label{
  441. margin: 0 0 0 5px;
  442. color: rgb(153, 153, 153);
  443. font-weight: normal;
  444. }
  445. }
  446. .right {
  447. a {
  448. color: rgb(153, 153, 153);
  449. &:hover {
  450. text-decoration: none;
  451. color: rgb(255, 79, 79);
  452. }
  453. }
  454. }
  455. }
  456. .tips {
  457. position: relative;
  458. display: flex;
  459. justify-content: center;
  460. align-items: center;
  461. font-size: 14px;
  462. line-height: 20px;
  463. text-align: center;
  464. color: #999999;
  465. margin-top: 30px;
  466. margin-bottom: 20px;
  467. cursor: default;
  468. svg {
  469. margin-left: 5px;
  470. }
  471. &:hover {
  472. .tips-content {
  473. display: block;
  474. }
  475. color: #FF4F4F;
  476. }
  477. .tips-content {
  478. display: none;
  479. position: absolute;
  480. left: 50%;
  481. bottom: 30px;
  482. transform: translateX(-50%);
  483. width: 250px;
  484. padding: 15px 4px 25px 13px;
  485. background: url('~/assets/images/common/tip_bg.svg') center bottom no-repeat;
  486. border-radius: 4px;
  487. text-align: left;
  488. div {
  489. display: flex;
  490. font-size: 12px;
  491. line-height: 14px;
  492. color: #FFFFFF;
  493. & + div {
  494. margin-top: 9px;
  495. }
  496. }
  497. }
  498. }
  499. .logging {
  500. width: 360px;
  501. height: 48px;
  502. font-size: 16px;
  503. color: rgb(255, 255, 255);
  504. border: none;
  505. background-color: rgb(255, 79, 79);
  506. margin-bottom: 20px;
  507. border-radius: 4px;
  508. outline:none;
  509. }
  510. .btn-signup{
  511. background-color: rgb(204,204,204);
  512. }
  513. .btn-signin{
  514. background-color: rgb(204,204,204);
  515. }
  516. .login {
  517. background-color: rgb(204, 204, 204);
  518. }
  519. .loading {
  520. border: 3px solid #fff;
  521. border-bottom: 3px solid rgb(204, 204, 204);;
  522. height: 28px;
  523. width: 28px;
  524. border-radius: 50%;
  525. position: absolute;
  526. bottom: 85px;
  527. left: 380px;
  528. -webkit-animation: loading 1s infinite linear;
  529. -moz-animation: loading 1s infinite linear;
  530. -o-animation: loading 1s infinite linear;
  531. animation: loading 1s infinite linear;
  532. @keyframes loading {
  533. 0% {
  534. transform: rotate(0deg);
  535. }
  536. 100% {
  537. transform: rotate(360deg);
  538. }
  539. }
  540. }
  541. .register-now {
  542. margin-bottom: 10px;
  543. font-size: 12px;
  544. span {
  545. color: rgb(184, 184, 184);
  546. }
  547. a {
  548. color: rgb(233, 54, 54);
  549. }
  550. }
  551. .login-now {
  552. margin: 20px 0 30px 0;
  553. font-size: 12px;
  554. .term {
  555. padding-bottom: 6px;
  556. }
  557. span {
  558. color: rgb(184, 184, 184);
  559. line-height: 16px;
  560. }
  561. a {
  562. color: rgb(233, 54, 54);
  563. }
  564. }
  565. }
  566. }
  567. .user-forget{
  568. .changepwd-tittle {
  569. color: rgb(255, 79, 79);
  570. text-align: center;
  571. p {
  572. font-size: 20px;
  573. }
  574. }
  575. .getbackpwd_content {
  576. text-align: center;
  577. padding: 0px 35px;
  578. font-size: 14px;
  579. margin-top: 40px;
  580. .mobilevali{
  581. height: 85px;
  582. }
  583. &.setnewpwd p{
  584. font-size: 18px;
  585. text-align: left;
  586. height: 20px;
  587. }
  588. p {
  589. color: rgb(102, 102, 102);
  590. font-size: 24px;
  591. }
  592. .getbackpwd_input_user {
  593. height: 60px;
  594. width: 360px;
  595. border-width: 0 0 1px 0;
  596. border-color: rgb(238, 238, 238);
  597. padding-left: 42px;
  598. padding-top: 16px;
  599. line-height: 44px;
  600. outline:none;
  601. background: url(http://cn-file.17pdf.com/website/account/ic_login_inputuser.png) no-repeat 0px 28px;
  602. }
  603. .getbackpwd_input_pwd {
  604. height: 60px;
  605. width: 360px;
  606. border-width: 0 0 1px 0;
  607. border-color: rgb(238, 238, 238);
  608. padding-left: 42px;
  609. padding-top: 16px;
  610. line-height: 44px;
  611. outline:none;
  612. background: url(http://cn-file.17pdf.com/website/account/ic_login_inputpassword.png) no-repeat 0px 28px;
  613. }
  614. .getbackpwd_input_vcode {
  615. height: 60px;
  616. width: 220px;
  617. border-width: 0 0 1px 0;
  618. border-color: rgb(238, 238, 238);
  619. padding-left: 42px;
  620. padding-top: 16px;
  621. line-height: 44px;
  622. float: left;
  623. outline:none;
  624. background: url(http://cn-file.17pdf.com/website/account/ic_login_input_code.png) no-repeat 0px 28px;
  625. }
  626. .sent-vcode {
  627. border: 1px solid rgb(255, 79, 79);
  628. border-radius: 3px;
  629. padding: 10px 20px;
  630. cursor:pointer;
  631. margin-left: 10px;
  632. margin-top: 10px;
  633. float: right;
  634. width: 120px;
  635. a {
  636. color: rgb(255, 79, 79);
  637. }
  638. }
  639. .sent-vcode-disabled {
  640. border: 1px solid rgb(153, 153, 153);
  641. a {
  642. color: rgb(153, 153, 153);
  643. }
  644. }
  645. .vcode-content {
  646. float: right;
  647. padding: 15px 30px 15px 0px;
  648. display: inline-block;
  649. background: url(http://cn-file.17pdf.com/website/account/path.png) no-repeat 0px 28px;
  650. a{
  651. width: 90px;
  652. color: rgb(148, 143, 141);
  653. font-size: 20px;
  654. transform: rotate(-6deg);
  655. letter-spacing: 1px;
  656. display: inline-block;
  657. &:hover, &:active {
  658. text-decoration: none;
  659. }
  660. }
  661. }
  662. .error-mess {
  663. position: relative;
  664. clear: both;
  665. top: 15px;
  666. span{
  667. background: #808080;
  668. color: rgb(255, 255, 255);
  669. padding: 5px 15px;
  670. border-radius: 4px;
  671. }
  672. }
  673. .validate {
  674. width: 360px;
  675. height: 48px;
  676. font-size: 16px;
  677. color: rgb(255, 255, 255);
  678. border: none;
  679. background-color: rgb(255,82,79);
  680. margin: 31px 0 10px 0;
  681. border-radius: 4px;
  682. outline:none;
  683. }
  684. .now_validate{
  685. background-color: rgb(204, 204, 204);
  686. }
  687. }
  688. }
  689. .phone-reset {
  690. .changepwd-tittle {
  691. color: rgb(255, 79, 79);
  692. text-align: center;
  693. p {
  694. font-size: 20px;
  695. }
  696. }
  697. .getbackpwd_content {
  698. text-align: center;
  699. font-size: 14px;
  700. .mobilevali{
  701. height: 85px;
  702. padding: 0 36px;
  703. }
  704. &.setnewpwd p{
  705. font-size: 18px;
  706. text-align: left;
  707. padding-left: 36px;
  708. height: 20px;
  709. }
  710. p {
  711. color: rgb(102, 102, 102);
  712. font-size: 24px;
  713. }
  714. .getbackpwd_input_user {
  715. height: 60px;
  716. width: 360px;
  717. border-width: 0 0 1px 0;
  718. border-color: rgb(238, 238, 238);
  719. padding-left: 42px;
  720. padding-top: 16px;
  721. line-height: 44px;
  722. outline:none;
  723. background: url(http://cn-file.17pdf.com/website/account/ic_login_inputuser.png) no-repeat 0px 28px;
  724. }
  725. .getbackpwd_input_pwd {
  726. height: 60px;
  727. width: 360px;
  728. border-width: 0 0 1px 0;
  729. border-color: rgb(238, 238, 238);
  730. padding-left: 42px;
  731. padding-top: 16px;
  732. line-height: 44px;
  733. outline:none;
  734. background: url(http://cn-file.17pdf.com/website/account/ic_login_inputpassword.png) no-repeat 0px 28px;
  735. }
  736. .getbackpwd_input_vcode {
  737. height: 60px;
  738. width: 220px;
  739. border-width: 0 0 1px 0;
  740. border-color: rgb(238, 238, 238);
  741. padding-left: 42px;
  742. padding-top: 16px;
  743. line-height: 44px;
  744. float: left;
  745. outline:none;
  746. background: url(http://cn-file.17pdf.com/website/account/ic_login_input_code.png) no-repeat 0px 28px;
  747. }
  748. .sent-vcode {
  749. border: 1px solid rgb(255, 79, 79);
  750. border-radius: 3px;
  751. padding: 10px 20px;
  752. margin-left: 10px;
  753. margin-top: 10px;
  754. cursor:pointer;
  755. float: right;
  756. width: 120px;
  757. a {
  758. color: rgb(255, 79, 79);
  759. }
  760. }
  761. .sent-vcode-disabled {
  762. border: 1px solid rgb(153, 153, 153);
  763. a {
  764. color: rgb(153, 153, 153);
  765. }
  766. }
  767. .vcode-content {
  768. float: right;
  769. padding: 15px 30px 15px 0px;
  770. display: inline-block;
  771. background: url(http://cn-file.17pdf.com/website/account/path.png) no-repeat 0px 28px;
  772. a{
  773. width: 90px;
  774. color: rgb(148, 143, 141);
  775. font-size: 20px;
  776. transform: rotate(-6deg);
  777. letter-spacing: 1px;
  778. display: inline-block;
  779. &:hover, &:active {
  780. text-decoration: none;
  781. }
  782. }
  783. }
  784. .error-mess {
  785. position: relative;
  786. clear: both;
  787. top: 15px;
  788. span{
  789. background: #808080;
  790. color: rgb(255, 255, 255);
  791. padding: 5px 15px;
  792. border-radius: 4px;
  793. }
  794. }
  795. .validate {
  796. width: 360px;
  797. height: 48px;
  798. font-size: 16px;
  799. color: rgb(255, 255, 255);
  800. border: none;
  801. background-color: rgb(255,82,79);
  802. margin: 31px 0 40px 0;
  803. border-radius: 4px;
  804. outline:none;
  805. }
  806. .now_validate{
  807. background-color: rgb(204, 204, 204);
  808. }
  809. }
  810. }
  811. .user-reset {
  812. .changepwd-tittle {
  813. color: rgb(255, 79, 79);
  814. text-align: center;
  815. p {
  816. font-size: 20px;
  817. }
  818. }
  819. .prompt-content {
  820. margin-top: 30px;
  821. text-align: center;
  822. padding: 0px 50px;
  823. margin-bottom: 20px;
  824. font-size: 16px;
  825. p {
  826. color: rgb(112, 112, 112);
  827. line-height: 28px;
  828. }
  829. a {
  830. color: rgb(255, 79, 79);
  831. cursor:pointer;
  832. }
  833. }
  834. }
  835. </style>