login.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. <template>
  2. <view>
  3. <view class="content x-c">
  4. <!-- <image class="backImg" @tap="goBack()" src="../../static/images/icon_close.png"></image> -->
  5. <view class="pageTop x-c">
  6. <view class="head x-c">
  7. 登录即可体验完整功能
  8. </view>
  9. <view class="loginBox">
  10. <view class="login-item">
  11. <view class="input-account">
  12. <input v-model="userName" placeholder="手机号登录" type="number" />
  13. </view>
  14. <view class="line"></view>
  15. </view>
  16. <view class="login-item">
  17. <view class="input-pwd">
  18. <input v-model="password" placeholder="请输入密码" type="password" />
  19. </view>
  20. <view class="line"></view>
  21. </view>
  22. <view class="btns">
  23. <view class="login-btn" @click="login">登录</view>
  24. </view>
  25. <!-- <view class="btns">
  26. <view class="login-btn" @click="verificationCode">验证码</view>
  27. </view> -->
  28. <view class="reg-box x-bc">
  29. <view class="reg-btn" @click="goToRegister()">注册账号</view>
  30. <!-- <view class="reg-btn" @click="goToFindPass()">忘记密码</view> -->
  31. </view>
  32. </view>
  33. </view>
  34. <view class="pageBottom" v-if="isApp && isAgreePrivacy">
  35. <view class="tips y-f"> — 快捷登录 — </view>
  36. <view class="menu x-ac">
  37. <!-- <view @tap="loginWeixin" ><image src="/static/image/login/weixin.png"></image></view> -->
  38. <view v-if="isIos" @tap="quickAppleLogin">
  39. <image src="/static/image/login/apple.png"></image>
  40. </view>
  41. <!-- <view><image src="/static/image/login/qq.png"></image></view>
  42. <view><image src="/static/image/login/weibo.png"></image></view> -->
  43. </view>
  44. </view>
  45. <view class="checkbox">
  46. <view class="checkbox-icon" @tap="handleAgree">
  47. <!-- <image src="../../static/image/login/radio_default.png" v-show="!agree"></image>
  48. <image src="../../static/image/login/radio_choose.png" v-show="agree"></image>
  49. -->
  50. </view>
  51. <view>我已阅读并同意<text @tap="goToWeb(0)">《用户协议》</text><text @tap="goToWeb(1)">《隐私政策》</text> 并使用本机号码登录</view>
  52. </view>
  53. </view>
  54. </view>
  55. </template>
  56. <script>
  57. import {
  58. loginByApp,
  59. captchaImage
  60. } from '@/api/login'
  61. // import { login,loginByWeChat,getUserInfo,loginByApple } from '@/api/user'
  62. export default {
  63. data() {
  64. return {
  65. userName: "",
  66. password: "",
  67. registrationID: "",
  68. unionid: "",
  69. userPhone: "",
  70. loginType: 0,
  71. isApp: false,
  72. agree: false,
  73. isAgreePrivacy: false,
  74. isIos: false,
  75. from: '',
  76. source: '',
  77. appleKey: "",
  78. code:{
  79. img:'',
  80. uuid:''
  81. }
  82. }
  83. },
  84. onLoad(option) {
  85. // #ifdef APP-PLUS
  86. this.isIos = plus.os.name == "iOS"
  87. // #endif
  88. this.from = option.from || ''
  89. let that = this;
  90. uni.$on('getRegistrationID', function(data) {
  91. //console.log("getRegistrationID " + JSON.stringify(data));
  92. that.registrationID = data;
  93. });
  94. // #ifdef APP-PLUS
  95. this.isApp = true;
  96. this.source = plus.runtime.channel || 'app'
  97. // #endif
  98. // if(!this.$isLogin()) {
  99. // this.$showLoginPage()
  100. // }
  101. },
  102. onShow() {
  103. // if(this.$isLogin()) {
  104. // this.goPage()
  105. // }
  106. // #ifdef APP-PLUS
  107. this.isAgreePrivacy = this.isIos ? true : plus.runtime.isAgreePrivacy();
  108. if (plus.runtime.isAgreePrivacy()) {
  109. this.getRegistrationID();
  110. }
  111. // #endif
  112. },
  113. onUnload() {
  114. uni.$off('getRegistrationID');
  115. },
  116. mounted() {
  117. },
  118. methods: {
  119. initUniverify() {
  120. const callback = (res) => {
  121. // 获取一键登录弹框协议勾选状态
  122. univerifyManager.getCheckBoxState({
  123. success(res) {
  124. // console.log("getCheckBoxState res: ", res);
  125. if (res.state) {
  126. // 关闭一键登录弹框
  127. univerifyManager.close()
  128. }
  129. }
  130. })
  131. }
  132. // 订阅自定义按钮点击事件
  133. univerifyManager.onButtonsClick(callback);
  134. // 取消订阅自定义按钮点击事件
  135. univerifyManager.offButtonsClick(callback);
  136. },
  137. verificationCode() {
  138. // var data = {
  139. // uuid: 123,
  140. // img: 123
  141. // };
  142. captchaImage().then(res => {
  143. if (res.code == 200) {
  144. this.code.img=res.img
  145. this.code.uuid=res.uuid
  146. console.log("qqq",res)
  147. // this.livedata = res.data
  148. } else {
  149. // uni.showToast({
  150. // title: res.msg,
  151. // icon: 'none',
  152. // duration: 2000
  153. // });
  154. }
  155. })
  156. // captchaImage().then(res => {
  157. // console.log(res, '444')
  158. // if (res.code == 200) {
  159. // } else {
  160. // uni.showToast({
  161. // title: res.msg,
  162. // icon: 'none'
  163. // });
  164. // }
  165. // },
  166. // rej => {
  167. // console.log("qxj rej:" + JSON.stringify(rej));
  168. // }
  169. // );
  170. },
  171. login() {
  172. // if (this.$isEmpty(this.userName)) {
  173. // uni.showToast({
  174. // title: "请输入帐号",
  175. // icon: 'none',
  176. // });
  177. // return
  178. // }
  179. // if (this.$isEmpty(this.password)) {
  180. // uni.showToast({
  181. // title: "请输入密码",
  182. // icon: 'none',
  183. // });
  184. // return
  185. // }
  186. // if (!this.agree) {
  187. // uni.showToast({
  188. // title: "请同意相关协议",
  189. // icon: 'none'
  190. // });
  191. // return
  192. // }
  193. var data = {
  194. // jpushId:this.registrationID,
  195. phone: this.userName,
  196. // password: this.password,
  197. // code:this.code,
  198. loginType:3,
  199. // source: this.source
  200. };
  201. var that = this;
  202. // uni.showLoading({
  203. // title:"处理中..."
  204. // });
  205. loginByApp(data).then(res => {
  206. console.log(res, '444')
  207. uni.hideLoading();
  208. // console.log("qxj res:"+JSON.stringify(res));
  209. if (res.code == 200) {
  210. console.log("token",res.token)
  211. uni.setStorageSync('userInfo', JSON.stringify(res.user));
  212. uni.setStorageSync('AppToken', res.token);
  213. // uni.setStorageSync('userId', res.user.userId);
  214. uni.switchTab({
  215. url: "/pages/list/index"
  216. })
  217. // uni.setStorageSync('userInfo', JSON.stringify(res.user));
  218. // uni.$emit('refreshIM');
  219. // uni.$emit('showHealthButler');
  220. // that.goPage();
  221. // // #ifdef H5
  222. // this.$navBack();
  223. // // #endif
  224. // // #ifdef APP-PLUS
  225. // this.$navBack();
  226. // // uni.reLaunch({
  227. // // url: '../index/index',
  228. // // animationType: 'pop-in',
  229. // // animationDuration: 100
  230. // // })
  231. // // #endif
  232. } else {
  233. uni.showToast({
  234. title: res.msg,
  235. icon: 'none'
  236. });
  237. }
  238. },
  239. rej => {
  240. console.log("qxj rej:" + JSON.stringify(rej));
  241. }
  242. );
  243. },
  244. quickAppleLogin() {
  245. let that = this;
  246. if (!this.agree) {
  247. uni.showToast({
  248. title: "请同意相关协议",
  249. icon: 'none'
  250. });
  251. return
  252. }
  253. uni.getProvider({
  254. service: 'oauth',
  255. success: function(res) {
  256. // console.log(res.provider)
  257. if (res.provider.indexOf('apple')) {
  258. uni.login({
  259. provider: 'apple',
  260. success: function(loginRes) {
  261. that.appleKey = loginRes.authResult.openid
  262. that.loginByAppleAct(loginRes.authResult)
  263. },
  264. fail: function(err) {
  265. console.log(err);
  266. // 登录授权失败
  267. // err.code错误码参考`授权失败错误码(code)说明`
  268. }
  269. });
  270. }
  271. }
  272. });
  273. },
  274. async loginByAppleAct(authResult) {
  275. let loginDevice = ''
  276. if (plus.runtime.isAgreePrivacy()) {
  277. const info = await uni.getPushClientId();
  278. uni.setStorageSync("registrationID", info.cid);
  279. this.registrationID = info.cid;
  280. let devinfo = await uni.getDeviceInfo();
  281. if (devinfo != null) {
  282. loginDevice += devinfo.deviceBrand ? devinfo.deviceBrand : "";
  283. loginDevice += devinfo.deviceModel ? " " + devinfo.deviceModel : "";
  284. loginDevice += devinfo.system ? " " + devinfo.system : "";
  285. }
  286. }
  287. const params = {
  288. loginDevice: loginDevice,
  289. jpushId: this.registrationID,
  290. source: this.source,
  291. appleKey: authResult.openid
  292. };
  293. uni.showLoading({
  294. title: '登陆中'
  295. })
  296. loginByApple(params).then(res => {
  297. uni.hideLoading()
  298. if (res.user != null) {
  299. uni.hideLoading();
  300. uni.setStorageSync('AppToken', res.token);
  301. uni.setStorageSync('userInfo', JSON.stringify(res.user));
  302. uni.closeAuthView();
  303. uni.$emit('refreshIM');
  304. uni.$emit('showHealthButler');
  305. uni.$emit('refreshUserInfo', {});
  306. // this.$navBack();
  307. this.goPage()
  308. } else {
  309. if (res.isNew) {
  310. this.bindMobile('apple');
  311. }
  312. }
  313. }).catch(() => {
  314. uni.hideLoading()
  315. })
  316. },
  317. loginWeixin() {
  318. if (!this.agree) {
  319. uni.showToast({
  320. title: "请同意相关协议",
  321. icon: 'none'
  322. });
  323. return
  324. }
  325. uni.login({
  326. provider: "weixin",
  327. onlyAuthorize: true,
  328. success: async (res) => {
  329. let that = this;
  330. uni.showLoading({
  331. title: "处理中..."
  332. });
  333. const params = {
  334. code: res.code,
  335. jpushId: this.registrationID,
  336. source: this.source
  337. };
  338. this.loginByWeChatAct(params);
  339. },
  340. fail: (err) => {
  341. console.log('qxj loginWeixin fail:', JSON.stringify(err));
  342. // 未开通
  343. if (err.code == 1000) {
  344. uni.showModal({
  345. title: '登录失败',
  346. content: `${err.errMsg}\n,错误码:${err.code}`,
  347. confirmText: '开通指南',
  348. cancelText: '确定',
  349. success: (res) => {
  350. if (res.confirm) {
  351. setTimeout(() => {
  352. plus.runtime.openWeb(
  353. 'https://ask.dcloud.net.cn/article/37965'
  354. )
  355. }, 500)
  356. }
  357. }
  358. });
  359. return;
  360. }
  361. // 一键登录预登陆失败
  362. if (err.code == '30005') {
  363. uni.showModal({
  364. showCancel: false,
  365. title: '预登录失败',
  366. content: err.errMsg
  367. });
  368. return;
  369. }
  370. // 一键登录用户关闭验证界面
  371. if (err.code != '30003') {
  372. uni.showModal({
  373. showCancel: false,
  374. title: '登录失败',
  375. content: JSON.stringify(err)
  376. });
  377. }
  378. },
  379. complete: () => {
  380. }
  381. });
  382. },
  383. goToRegister() {
  384. this.$navTo('./register');
  385. },
  386. goToFindPass() {
  387. this.$navTo('./findpass');
  388. },
  389. doUniverify(authResult) {
  390. uniCloud.callFunction({
  391. name: 'loginByMobile', // 你的云函数名称
  392. data: {
  393. access_token: authResult.access_token, // 客户端一键登录接口返回的access_token
  394. openid: authResult.openid // 客户端一键登录接口返回的openid
  395. }
  396. }).then(res => {
  397. uni.closeAuthView();
  398. if (res.result.errCode == 0) {
  399. this.userName = res.result.phoneNumber;
  400. } else {
  401. uni.showToast({
  402. title: res.result.message,
  403. icon: 'none'
  404. });
  405. }
  406. }).catch(err => {
  407. // 处理错误
  408. console.error('调用云函数失败:', err);
  409. // 详细记录错误信息
  410. console.error('错误信息:', err.errMsg);
  411. })
  412. },
  413. loginByWeChatAct(params) {
  414. loginByWeChat(params).then(res => {
  415. if (res.code == 200) {
  416. if (res.user != null) {
  417. uni.hideLoading();
  418. uni.setStorageSync('AppToken', res.token);
  419. uni.setStorageSync('userInfo', JSON.stringify(res.user));
  420. uni.closeAuthView();
  421. uni.$emit('refreshIM');
  422. uni.$emit('showHealthButler');
  423. uni.$emit('refreshUserInfo', {});
  424. // this.$navBack();
  425. this.goPage()
  426. } else {
  427. this.unionid = res.unionid;
  428. if (res.isNew) {
  429. this.bindMobile();
  430. }
  431. }
  432. } else {
  433. uni.hideLoading();
  434. uni.showToast({
  435. title: res.msg,
  436. icon: 'none'
  437. });
  438. }
  439. },
  440. rej => {}
  441. );
  442. },
  443. bindMobile(type) {
  444. // #ifdef APP-PLUS
  445. uni.login({
  446. provider: 'univerify',
  447. univerifyStyle: { // 自定义登录框样式
  448. fullScreen: false,
  449. authButton: {
  450. "title": "绑定手机号",
  451. "normalColor": "#FF5C03",
  452. "highlightColor": "#FF5C03",
  453. },
  454. privacyTerms: {
  455. "defaultCheckBoxState": true, // 条款勾选框初始状态 默认值: true
  456. "isCenterHint": false, //未勾选服务条款时点击登录按钮的提示是否居中显示 默认值: false (3.7.13+ 版本支持)
  457. "uncheckedImage": "", // 可选 条款勾选框未选中状态图片(仅支持本地图片 建议尺寸 24x24px)(3.2.0+ 版本支持)
  458. "checkedImage": "", // 可选 条款勾选框选中状态图片(仅支持本地图片 建议尺寸24x24px)(3.2.0+ 版本支持)
  459. "checkBoxSize": 18, // 可选 条款勾选框大小
  460. "textColor": "#BBBBBB", // 文字颜色 默认值:#BBBBBB
  461. "termsColor": "#FF5C03", // 协议文字颜色 默认值: #5496E3
  462. "prefix": "我已阅读并同意", // 条款前的文案 默认值:“我已阅读并同意”
  463. "suffix": "并使用本机号码登录", // 条款后的文案 默认值:“并使用本机号码登录”
  464. "privacyItems": [ // 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效
  465. ]
  466. },
  467. },
  468. success(res) { //
  469. console.log("qxj univerify login:" + JSON.stringify(res
  470. .authResult)); // {openid:'登录授权唯一标识',access_token:'接口返回的 token'}
  471. if (type == 'apple') {
  472. this.loginByUniverify(res.authResult, 3);
  473. } else {
  474. this.loginByUniverify(res.authResult, 1);
  475. }
  476. },
  477. fail(res) {
  478. uni.hideLoading();
  479. uni.showToast({
  480. title: "一键登录失败请检查网络和SIM卡是否可用",
  481. icon: 'none',
  482. position: 'bottom'
  483. });
  484. //setTimeout(function() {
  485. uni.navigateTo({
  486. url: "/pages/auth/login"
  487. });
  488. //}, 1800);
  489. //}
  490. //登录失败
  491. console.log("qxj failRes:" + JSON.stringify(res));
  492. }
  493. });
  494. // #endif
  495. // #ifdef H5
  496. uni.navigateTo({
  497. url: "/pages/auth/login"
  498. });
  499. // #endif
  500. },
  501. loginByUniverify(authResult, type) {
  502. uniCloud.callFunction({
  503. name: 'loginByMobile', // 你的云函数名称
  504. data: {
  505. access_token: authResult.access_token, // 客户端一键登录接口返回的access_token
  506. openid: authResult.openid // 客户端一键登录接口返回的openid
  507. }
  508. }).then(res => {
  509. console.log("qxj doUniverify:", JSON.stringify(res));
  510. if (res.result.errCode == 0) {
  511. userPhone = res.result.phoneNumber;
  512. if (type == 3) {
  513. // 苹果登录
  514. this.setPhoneAct(3, userPhone, this.unionid);
  515. } else {
  516. this.setPhoneAct(1, userPhone, this.unionid);
  517. }
  518. } else {
  519. uni.showToast({
  520. title: res.result.message,
  521. icon: 'none'
  522. });
  523. }
  524. }).catch(err => {
  525. // 处理错误
  526. console.error('调用云函数失败:', err);
  527. // 详细记录错误信息
  528. console.error('错误信息:', err.errMsg);
  529. })
  530. },
  531. setPhoneAct(type, phone, unionId) {
  532. let params = {
  533. phone: phone,
  534. unionId: unionId,
  535. };
  536. if (type == 3) {
  537. params = {
  538. phone: phone,
  539. unionId: unionId,
  540. appleKey: this.appleKey
  541. };
  542. }
  543. setPhone(params).then(res => {
  544. uni.hideLoading();
  545. if (res.code == 200) {
  546. uni.setStorageSync('AppToken', res.token);
  547. uni.setStorageSync('userInfo', JSON.stringify(res.user));
  548. uni.closeAuthView();
  549. uni.$emit('refreshIM');
  550. // #ifdef APP-PLUS
  551. // #endif
  552. this.goPage()
  553. } else {
  554. uni.showToast({
  555. title: res.msg,
  556. icon: 'none'
  557. });
  558. uni.closeAuthView();
  559. }
  560. },
  561. rej => {}
  562. );
  563. },
  564. getRegistrationID() {
  565. this.registrationID = uni.getStorageSync("registrationID");
  566. if (this.registrationID == null || this.registrationID == "") {
  567. uni.getPushClientId({
  568. success: res => {
  569. uni.setStorageSync("registrationID", res.cid);
  570. this.registrationID = res.cid
  571. }
  572. });
  573. }
  574. },
  575. goBack() {
  576. console.log("qxj goBack");
  577. uni.$emit('showHealthButler');
  578. // this.$navBack();
  579. uni.redirectTo({
  580. url: "/pages/auth/loginIndex"
  581. })
  582. },
  583. handleAgree() { // 同意
  584. this.agree = !this.agree
  585. if (this.isIos) {
  586. if (this.agree) {
  587. plus.runtime.agreePrivacy()
  588. this.getRegistrationID();
  589. } else {
  590. plus.runtime.disagreePrivacy();
  591. }
  592. }
  593. },
  594. goToWeb(index) {
  595. uni.setStorageSync('url', index == 0 ? "https://userapp.his.cdwjyyh.com/web/userAgreement" :
  596. "https://userapp.his.cdwjyyh.com/web/privacyPolicy");
  597. uni.navigateTo({
  598. url: "/pages/index/h5"
  599. })
  600. },
  601. goPage() {
  602. let pages = getCurrentPages();
  603. let url = pages[pages.length - 1];
  604. let openUrl = uni.getStorageSync("openUrl");
  605. if (openUrl) {
  606. uni.navigateTo({
  607. url: openUrl,
  608. success: function(res) {
  609. uni.removeStorageSync("openUrl")
  610. }
  611. })
  612. } else {
  613. uni.reLaunch({
  614. url: '../course/index',
  615. animationType: 'none',
  616. animationDuration: 2000
  617. });
  618. return;
  619. if (pages.length == 1) {
  620. uni.reLaunch({
  621. url: '../course/index',
  622. //url: '../course/video/living-app',
  623. animationType: 'none',
  624. animationDuration: 2000
  625. });
  626. } else {
  627. //this.$navBack();
  628. }
  629. }
  630. this.$updateMsgDot()
  631. this.$setSource()
  632. }
  633. },
  634. }
  635. </script>
  636. <style scoped lang="scss">
  637. page {
  638. background-color: #ffffff;
  639. }
  640. .other-login-btn {
  641. display: flex;
  642. align-items: center;
  643. justify-content: center;
  644. width: 100%;
  645. height: 80rpx;
  646. background: rgba(229, 138, 0, 0.08);
  647. border-radius: 40rpx;
  648. font-size: 30rpx;
  649. font-family: PingFang SC;
  650. font-weight: 500;
  651. color: #FF5C03;
  652. border: 2rpx solid #FF5C03;
  653. margin-top: 30rpx;
  654. &::after {
  655. border: none;
  656. }
  657. }
  658. .content {
  659. display: flex;
  660. flex-direction: column;
  661. align-items: center;
  662. height: calc(100vh);
  663. width: 100%;
  664. position: relative;
  665. // justify-content: space-between;
  666. //padding-top: calc(100% - 32vh);
  667. }
  668. .backImg {
  669. position: absolute;
  670. left: 30rpx;
  671. top: 40px;
  672. height: 30rpx;
  673. width: 30rpx;
  674. }
  675. .pageTop {
  676. display: flex;
  677. flex-direction: column;
  678. width: 100%;
  679. }
  680. .content .head {
  681. text-align: center;
  682. width: 100%;
  683. height: 100rpx;
  684. // background:url(/static/image/login/top_bg.png) no-repeat 0 center;
  685. background-size: cover;
  686. box-sizing: border-box;
  687. font-size: 36rpx;
  688. font-weight: bold;
  689. color: #666;
  690. }
  691. .content .head image {
  692. width: 150rpx;
  693. height: 150rpx;
  694. border-radius: 10rpx;
  695. box-shadow: 0px 0px 20rpx rgba(0, 0, 0, 0.2);
  696. }
  697. .title {
  698. color: #141414;
  699. margin: 50upx 0upx 30upx 0rpx;
  700. font-size: 38rpx;
  701. font-weight: 500;
  702. }
  703. .desc {
  704. color: #686866;
  705. padding: 0 0 30rpx 0rpx;
  706. font-size: 28rpx;
  707. }
  708. .loginBox {
  709. padding: 0 10px 30rpx;
  710. width: calc(100%);
  711. background: #FDFDFD;
  712. z-index: 10;
  713. position: relative;
  714. .login-item p {
  715. text-align: left;
  716. }
  717. .line {
  718. height: 0.5rpx;
  719. background-color: #efefef;
  720. margin-top: 10rpx;
  721. }
  722. .input-account {
  723. margin-top: 20rpx;
  724. margin-bottom: 0rpx;
  725. border-radius: 40rpx;
  726. border: solid 0rpx #efefef;
  727. height: 80rpx;
  728. width: 100%;
  729. // background: url('/static/account.png') no-repeat 0 center;
  730. background-size: 30rpx 30rpx;
  731. background-position: 30rpx;
  732. }
  733. .input-pwd {
  734. margin-top: 40rpx;
  735. margin-bottom: 20rpx;
  736. border-radius: 40rpx;
  737. border: solid 0rpx #efefef;
  738. height: 80rpx;
  739. width: 100%;
  740. // background: url(/static/password.png) no-repeat 0 center;
  741. background-size: 30rpx 30rpx;
  742. background-position: 30rpx;
  743. }
  744. input {
  745. margin-left: 80rpx;
  746. height: 80rpx;
  747. line-height: 80rpx
  748. }
  749. .reg-box {
  750. padding-bottom: 20rpx;
  751. margin: 0 10px;
  752. .reg-btn {
  753. font-size: 16px;
  754. color: #FF5C03;
  755. }
  756. }
  757. }
  758. .btns {
  759. margin: 60rpx 0rpx;
  760. }
  761. .login-btn {
  762. display: flex;
  763. align-items: center;
  764. justify-content: center;
  765. width: 100%;
  766. height: 80rpx;
  767. background: linear-gradient(to right, #FF5C03 0%, #FF5C03 100%);
  768. background: -moz-linear-gradient(to right, #FF5C03 0%, #FF5C03 100%);
  769. box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
  770. border-radius: 40rpx;
  771. font-size: 30rpx;
  772. font-family: PingFang SC;
  773. font-weight: 500;
  774. color: rgba(255, 255, 255, 1);
  775. }
  776. .pageBottom {
  777. height: 220rpx;
  778. width: 75%;
  779. display: flex;
  780. flex-direction: column;
  781. position: absolute;
  782. bottom: 100rpx;
  783. }
  784. .tips {
  785. color: #999;
  786. font-size: 32rpx;
  787. }
  788. .menu {
  789. margin-top: 30rpx;
  790. image {
  791. width: 96rpx;
  792. height: 96rpx;
  793. }
  794. }
  795. .checkbox {
  796. margin: 20rpx;
  797. margin-top: 36rpx;
  798. display: flex;
  799. flex-direction: row;
  800. align-items: flex-start;
  801. justify-content: flex-start;
  802. font-family: PingFang SC, PingFang SC;
  803. font-weight: 400;
  804. font-size: 26rpx;
  805. color: #999999;
  806. line-height: 38rpx;
  807. text-align: left;
  808. text {
  809. color: #FF5C03;
  810. }
  811. &-icon {
  812. flex-shrink: 0;
  813. margin-right: 12rpx;
  814. image {
  815. height: 24rpx;
  816. width: 24rpx;
  817. }
  818. }
  819. }
  820. </style>