LoginBar.vue 28 KB

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