login.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. <template>
  2. <view class="container">
  3. <!-- <image @click="navBack" src="../../static/images/index/close.png" style="width: 32upx;height: 32upx;margin-left: 46upx;"></image> -->
  4. <!-- 小程序状态下登录 -->
  5. <!-- #ifdef MP-WEIXIN -->
  6. <view class="login-box">
  7. <view class="mp_wxBox">
  8. <view>
  9. <view class="logo-box">
  10. <image src="@/static/images/jobApplicant/logo.svg" mode="scaleToFill" />
  11. </view>
  12. <view class="content">
  13. <view>申请获取以下权限</view>
  14. <text>获得你的公开信息(昵称,头像、地区等)</text>
  15. </view>
  16. <view
  17. v-if="weixinPhone == true || weixinPhone == 'true'"
  18. class="login-btn wechat"
  19. open-type="getPhoneNumber"
  20. @getphonenumber="getPhoneNumber"
  21. >
  22. <image src="@/static/images/jobApplicant/phone.svg" mode="scaleToFill" />
  23. 授权手机号
  24. </view>
  25. <button
  26. v-else
  27. style="background: rgba(13, 39, 247, 1); color: #ffffff"
  28. class="bottom"
  29. bindtap="getUserProfile"
  30. @tap="login()"
  31. >
  32. 授权登录
  33. </button>
  34. </view>
  35. </view>
  36. <view style="text-align: center">
  37. <view class="footer">
  38. <view class="check-box" @click="checked = !checked">
  39. <image
  40. src="@/static/images/jobApplicant/check.svg"
  41. v-if="checked"
  42. mode="scaleToFill"
  43. />
  44. <image
  45. src="@/static/images/jobApplicant/border.svg"
  46. v-else
  47. mode="scaleToFill"
  48. />
  49. </view>
  50. 已阅读并同意<navigator url="/my/setting/xieyi">《亿职赞用户协议》</navigator>
  51. 和<navigator url="/my/setting/mimi">《隐私协议》</navigator
  52. >,允许亿职赞统一管理本人账号信息
  53. </view>
  54. </view>
  55. </view>
  56. <!-- #endif -->
  57. <!-- #ifndef MP-WEIXIN -->
  58. <view style="text-align: center" class="login-box">
  59. <view class="logo-box">
  60. <image src="@/static/images/jobApplicant/logo.svg" mode="scaleToFill" />
  61. </view>
  62. <!-- <button class="confirm-btn" style="margin-top: 100rpx" @click="register">
  63. 手机号登录
  64. </button> -->
  65. <view class="login-btn wechat" @click="register"
  66. ><image
  67. src="@/static/images/jobApplicant/phone.svg"
  68. mode="scaleToFill"
  69. />手机账号密码登录</view
  70. >
  71. <view
  72. class=""
  73. v-if="isopen"
  74. @click="weixinLo"
  75. style="width: 100%; padding-top: 100rpx"
  76. >
  77. <view class="">
  78. <u-icon name="weixin-circle-fill" color="#5fcd73" size="100"></u-icon>
  79. </view>
  80. <view class="login-btn wechat"> 公众号快捷登录 </view>
  81. </view>
  82. <!-- 底部信息 -->
  83. <view class="footer">
  84. <view class="check-box" @click="checked = !checked">
  85. <image
  86. src="@/static/images/jobApplicant/check.svg"
  87. v-if="checked"
  88. mode="scaleToFill"
  89. />
  90. <image
  91. src="@/static/images/jobApplicant/border.svg"
  92. v-else
  93. mode="scaleToFill"
  94. />
  95. </view>
  96. 已阅读并同意<navigator url="/my/setting/xieyi">《亿职赞用户协议》</navigator>
  97. 和<navigator url="/my/setting/mimi">《隐私协议》</navigator
  98. >,允许亿职赞统一管理本人账号信息
  99. </view>
  100. <!-- <view class="footer">
  101. <u-checkbox shape="circle" v-model="checked"> </u-checkbox>
  102. <text>同意</text>
  103. 协议地址
  104. <navigator url="/my/setting/mimi" open-type="navigate">《隐私政策》</navigator>
  105. <navigator url="/my/setting/xieyi" open-type="navigate">《用户协议》</navigator>
  106. </view> -->
  107. </view>
  108. <!-- #endif -->
  109. </view>
  110. </template>
  111. <script>
  112. export default {
  113. data() {
  114. return {
  115. checked: false,
  116. mobile: "",
  117. code: "",
  118. weixinLogin: false,
  119. sending: false,
  120. sendTime: "获取验证码",
  121. count: 60,
  122. weixinPhone: false,
  123. sendDataList: {},
  124. sessionkey: "",
  125. phoneNum: false,
  126. isopen: false,
  127. };
  128. },
  129. onLoad(e) {
  130. if (e.inviterCode) {
  131. this.$queue.setData("inviterCode", e.inviterCode);
  132. }
  133. this.sessionkey = uni.getStorageSync("sessionkey");
  134. this.weixinPhone = uni.getStorageSync("weixinPhone");
  135. console.log(this.weixinPhone);
  136. if (uni.getStorageSync("sendDataList")) {
  137. this.sendDataList = uni.getStorageSync("sendDataList");
  138. }
  139. // //微信登录开启
  140. // this.$Request.getT('/app/common/type/53').then(res => {
  141. // if (res.code == 0) {
  142. // if (res.data && res.data.value && res.data.value == '是') {
  143. // // this.weixinLogin = true;
  144. // }
  145. // }
  146. // });
  147. this.$Request.getT("/app/common/type/188").then((res) => {
  148. if (res.code == 0) {
  149. if (res.data && res.data.value && res.data.value == "是") {
  150. this.phoneNum = true;
  151. }
  152. }
  153. });
  154. // #ifdef H5
  155. let ua = navigator.userAgent.toLowerCase();
  156. if (ua.indexOf("micromessenger") !== -1) {
  157. //公众号是否自动登录 108
  158. this.$Request.getT("/app/common/type/108").then((res) => {
  159. if (res.code == 0) {
  160. if (res.data && res.data.value && res.data.value == "是") {
  161. this.isopen = true;
  162. } else {
  163. this.isopen = false;
  164. }
  165. }
  166. });
  167. } else {
  168. this.isopen = false;
  169. }
  170. this.selbindwx();
  171. // #endif
  172. },
  173. methods: {
  174. selbindwx() {
  175. let ua = navigator.userAgent.toLowerCase();
  176. if (ua.indexOf("micromessenger") !== -1) {
  177. let openid = uni.getStorageSync("openid");
  178. let userId = uni.getStorageSync("userId");
  179. // let that = this;
  180. if (
  181. window.location.href.indexOf("?code=") !== -1 ||
  182. window.location.href.indexOf("&code=") !== -1
  183. ) {
  184. let code;
  185. if (window.location.href.indexOf("?code=") !== -1) {
  186. code = window.location.href.split("?code=")[1].split("&")[0];
  187. } else {
  188. code = window.location.href.split("&code=")[1].split("&")[0];
  189. }
  190. let data = {
  191. code: code,
  192. };
  193. this.$Request.getT("/app/Login/getOpenId", data).then((ret) => {
  194. if (ret.code == 0) {
  195. uni.setStorageSync("openid", ret.data);
  196. this.$Request
  197. .getT("/app/Login/openid/login", {
  198. openId: ret.data,
  199. })
  200. .then((res) => {
  201. if (res.code == 0) {
  202. uni.setStorageSync("token", res.token);
  203. uni.setStorageSync("userName", res.user.userName);
  204. uni.setStorageSync("avatar", res.user.avatar);
  205. uni.setStorageSync("phone", res.user.phone);
  206. uni.setStorageSync("invitationCode", res.user.invitationCode);
  207. this.$queue.setData("inviterCode", res.user.inviterCode);
  208. uni.setStorageSync("sex", res.user.sex);
  209. uni.setStorageSync("userId", res.user.userId);
  210. uni.setStorageSync("openId", res.user.openId);
  211. uni.setStorageSync("userType", res.user.userType);
  212. this.$Request.get("/app/UserVip/isUserVip").then((res) => {
  213. if (res.code == 0 && res.data && res.data.isVip == 2) {
  214. uni.setStorageSync("isVIP", true);
  215. } else {
  216. uni.setStorageSync("isVIP", false);
  217. }
  218. });
  219. //判断是否开启身份选择 是/否
  220. this.$Request.get("/app/common/type/339").then((rest) => {
  221. if (rest.code == 0) {
  222. if (rest.data.value == "是") {
  223. uni.reLaunch({
  224. url: "/pages/public/selectIdentity/selectIdentity",
  225. });
  226. } else {
  227. uni.navigateBack();
  228. }
  229. } else {
  230. uni.navigateBack();
  231. }
  232. });
  233. } else {
  234. uni.navigateTo({
  235. url: "/pages/public/bind",
  236. });
  237. }
  238. });
  239. }
  240. });
  241. }
  242. }
  243. },
  244. //微信公众号登录
  245. weixinLo() {
  246. if (this.checked == false) {
  247. uni.showToast({
  248. title: "请先同意《隐私政策》和《用户服务协议》",
  249. icon: "none",
  250. });
  251. return;
  252. }
  253. let ua = navigator.userAgent.toLowerCase();
  254. if (ua.indexOf("micromessenger") !== -1) {
  255. let openid = uni.getStorageSync("openid");
  256. let userId = uni.getStorageSync("userId");
  257. if (!openid) {
  258. if (
  259. window.location.href.indexOf("?code=") !== -1 ||
  260. window.location.href.indexOf("&code=") !== -1
  261. ) {
  262. let code;
  263. if (window.location.href.indexOf("?code=") !== -1) {
  264. code = window.location.href.split("?code=")[1].split("&")[0];
  265. } else {
  266. code = window.location.href.split("&code=")[1].split("&")[0];
  267. }
  268. let data = {
  269. code: code,
  270. };
  271. this.$Request.getT("/app/Login/getOpenId", data).then((res) => {
  272. if (ret.code == 0) {
  273. uni.setStorageSync("openid", ret.data);
  274. let datas = {
  275. openId: ret.data,
  276. };
  277. this.$Request.getT("/app/Login/openid/login", datas).then((res) => {
  278. if (res.code == 0) {
  279. uni.setStorageSync("token", res.token);
  280. uni.setStorageSync("userName", res.user.userName);
  281. uni.setStorageSync("avatar", res.user.avatar);
  282. uni.setStorageSync("phone", res.user.phone);
  283. uni.setStorageSync("invitationCode", res.user.invitationCode);
  284. this.$queue.setData("inviterCode", res.user.inviterCode);
  285. uni.setStorageSync("sex", res.user.sex);
  286. uni.setStorageSync("userId", res.user.userId);
  287. uni.setStorageSync("openId", res.user.openId);
  288. uni.setStorageSync("userType", res.user.userType);
  289. this.$Request.get("/app/UserVip/isUserVip").then((res) => {
  290. if (res.code == 0 && res.data && res.data.isVip == 2) {
  291. uni.setStorageSync("isVIP", true);
  292. } else {
  293. uni.setStorageSync("isVIP", false);
  294. }
  295. });
  296. //判断是否开启身份选择 是/否
  297. this.$Request.get("/app/common/type/339").then((rest) => {
  298. if (rest.code == 0) {
  299. if (rest.data.value == "是") {
  300. uni.reLaunch({
  301. url: "/pages/public/selectIdentity/selectIdentity",
  302. });
  303. } else {
  304. uni.navigateBack();
  305. }
  306. } else {
  307. uni.navigateBack();
  308. }
  309. });
  310. } else {
  311. uni.navigateTo({
  312. url: "/pages/public/bind",
  313. });
  314. }
  315. });
  316. }
  317. });
  318. } else {
  319. let that = this;
  320. window.location.href =
  321. "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
  322. that.$queue.getWxAppid() +
  323. "&redirect_uri=" +
  324. window.location.href.split("#")[0] +
  325. "&response_type=code&scope=snsapi_userinfo#wechat_redirect";
  326. }
  327. } else {
  328. this.$Request
  329. .getT("/app/Login/openid/login", {
  330. openId: openid,
  331. })
  332. .then((res) => {
  333. if (res.code == 0) {
  334. uni.setStorageSync("token", res.token);
  335. uni.setStorageSync("userName", res.user.userName);
  336. uni.setStorageSync("avatar", res.user.avatar);
  337. uni.setStorageSync("phone", res.user.phone);
  338. uni.setStorageSync("invitationCode", res.user.invitationCode);
  339. this.$queue.setData("inviterCode", res.user.inviterCode);
  340. uni.setStorageSync("sex", res.user.sex);
  341. uni.setStorageSync("userId", res.user.userId);
  342. uni.setStorageSync("openId", res.user.openId);
  343. uni.setStorageSync("userType", res.user.userType);
  344. this.$Request.get("/app/UserVip/isUserVip").then((res) => {
  345. if (res.code == 0 && res.data && res.data.isVip == 2) {
  346. uni.setStorageSync("isVIP", true);
  347. } else {
  348. uni.setStorageSync("isVIP", false);
  349. }
  350. });
  351. //判断是否开启身份选择 是/否
  352. this.$Request.get("/app/common/type/339").then((rest) => {
  353. if (rest.code == 0) {
  354. if (rest.data.value == "是") {
  355. uni.reLaunch({
  356. url: "/pages/public/selectIdentity/selectIdentity",
  357. });
  358. } else {
  359. uni.navigateBack();
  360. }
  361. } else {
  362. uni.navigateBack();
  363. }
  364. });
  365. } else {
  366. uni.navigateTo({
  367. url: "/pages/public/bind",
  368. });
  369. }
  370. });
  371. }
  372. }
  373. },
  374. wxGetUserInfo(e) {
  375. if (this.checked) {
  376. wx.getUserProfile({
  377. desc: "业务需要",
  378. success: (infoRes) => {
  379. console.log(
  380. "infoRes.encryptedData__________:" + JSON.stringify(infoRes.userInfo)
  381. );
  382. let nickName = infoRes.userInfo.nickName; //昵称
  383. let avatarUrl = infoRes.userInfo.avatarUrl; //头像
  384. let sex = infoRes.userInfo.gender; //头像
  385. try {
  386. this.$queue.showLoading("正在登录中...");
  387. this.login(nickName, avatarUrl, sex);
  388. } catch (e) {}
  389. },
  390. });
  391. } else {
  392. uni.showToast({
  393. title: "请阅读并同意《隐私协议》和《用户服务协议》",
  394. icon: "none",
  395. });
  396. }
  397. },
  398. //登录
  399. login(nickName, avatarUrl, sex) {
  400. if (!this.checked) {
  401. uni.showToast({
  402. title: "请阅读并同意《隐私协议》和《用户服务协议》",
  403. icon: "none",
  404. });
  405. return;
  406. }
  407. let that = this;
  408. // 1.wx获取登录用户code
  409. uni.login({
  410. provider: "weixin",
  411. success: function (loginRes) {
  412. console.log(loginRes, "************");
  413. let data = {
  414. code: loginRes.code,
  415. };
  416. that.$Request.get("/app/Login/wxLogin", data).then((res) => {
  417. if (res.code == 0) {
  418. uni.hideLoading();
  419. uni.setStorageSync("openId", res.data.open_id);
  420. uni.setStorageSync("unionId", res.data.unionId);
  421. that.sessionkey = res.data.session_key;
  422. let sendData = {
  423. openId: uni.getStorageSync("openId"),
  424. unionId: uni.getStorageSync("unionId"),
  425. userName: "游客",
  426. avatar: "",
  427. sex: "1", //性别
  428. inviterCode: that.$queue.getData("inviterCode"), //别人登录进来携带你的邀请码
  429. };
  430. that.sendDataList = sendData;
  431. that.flag = res.data.flag;
  432. // 第一次登录获取手机号
  433. // console.log(that.phoneNum,'**********************1')
  434. // console.log(that.flag,'**********************2')
  435. if (that.flag == "2" && that.phoneNum) {
  436. that.weixinPhone = true;
  437. } else {
  438. that.getWeixinInfo(sendData);
  439. }
  440. } else {
  441. uni.showToast({
  442. icon: "none",
  443. title: res.msg,
  444. duration: 2000,
  445. });
  446. console.log(res, "失败");
  447. }
  448. });
  449. },
  450. });
  451. },
  452. //小程序微信登录后获取手机号
  453. getPhoneNumber: function (e) {
  454. if (e.detail.errMsg == "getPhoneNumber:fail user deny") {
  455. console.log("用户拒绝提供手机号");
  456. } else {
  457. console.log("用户同意提供手机号");
  458. console.log(e);
  459. this.setPhoneByInsert(e.detail.encryptedData, e.detail.iv);
  460. }
  461. },
  462. //小程序微信登录后获取手机号
  463. setPhoneByInsert(decryptData, iv) {
  464. let data = {
  465. decryptData: decryptData,
  466. key: this.sessionkey,
  467. iv: iv,
  468. };
  469. this.$Request.postJson("/app/Login/selectPhone", data).then((res) => {
  470. if (res.code == 0) {
  471. this.phone = res.data.phoneNumber;
  472. this.getWeixinInfo(this.sendDataList);
  473. } else {
  474. uni.showToast({
  475. title: res.msg,
  476. icon: "none",
  477. duration: 2000,
  478. });
  479. }
  480. });
  481. },
  482. //获取个人信息
  483. getWeixinInfo(sendData) {
  484. let that = this;
  485. uni.showLoading({
  486. title: "登录中...",
  487. });
  488. let postData = {
  489. openId: sendData.openId, //小程序openId
  490. unionId: sendData.unionId, //unionId
  491. userName: sendData.userName, //微信名称
  492. avatar: sendData.avatar, //头像
  493. sex: sendData.sex, //性别
  494. phone: that.phone,
  495. inviterCode: sendData.inviterCode,
  496. };
  497. that.$Request.postJson("/app/Login/insertWxUser", postData).then((res) => {
  498. uni.hideLoading();
  499. if (res.code == 0) {
  500. uni.setStorageSync("token", res.token);
  501. uni.setStorageSync("userName", res.user.userName);
  502. uni.setStorageSync("avatar", res.user.avatar);
  503. uni.setStorageSync("phone", res.user.phone);
  504. uni.setStorageSync("invitationCode", res.user.invitationCode);
  505. this.$queue.setData("inviterCode", res.user.inviterCode);
  506. uni.setStorageSync("sex", res.user.sex);
  507. uni.setStorageSync("userId", res.user.userId);
  508. uni.setStorageSync("openId", res.user.openId);
  509. uni.setStorageSync("userType", res.user.userType);
  510. this.$Request.get("/app/UserVip/isUserVip").then((res) => {
  511. if (res.code == 0 && res.data && res.data.isVip == 2) {
  512. uni.setStorageSync("isVIP", true);
  513. } else {
  514. uni.setStorageSync("isVIP", false);
  515. }
  516. });
  517. //判断是否开启身份选择 是/否
  518. this.$Request.get("/app/common/type/339").then((rest) => {
  519. if (rest.code == 0) {
  520. if (rest.data.value == "是") {
  521. uni.reLaunch({
  522. url: "/pages/public/selectIdentity/selectIdentity",
  523. });
  524. } else {
  525. uni.navigateBack();
  526. }
  527. } else {
  528. uni.navigateBack();
  529. }
  530. });
  531. } else {
  532. uni.showModal({
  533. showCancel: false,
  534. title: "登录失败",
  535. content: res.msg,
  536. });
  537. }
  538. });
  539. },
  540. forget() {
  541. uni.navigateTo({
  542. url: "/pages/public/pwd",
  543. });
  544. },
  545. register() {
  546. if (!this.checked) {
  547. uni.showToast({
  548. title: "请阅读并同意《隐私协议》和《用户服务协议》",
  549. icon: "none",
  550. });
  551. } else {
  552. uni.navigateTo({
  553. url: "/pages/public/loginphone",
  554. });
  555. }
  556. },
  557. inputChange(e) {
  558. const key = e.currentTarget.dataset.key;
  559. this[key] = e.detail.value;
  560. },
  561. navBack() {
  562. uni.navigateBack();
  563. },
  564. },
  565. };
  566. </script>
  567. <style lang="scss" scoped>
  568. .login-box {
  569. position: absolute;
  570. left: 0;
  571. right: 0;
  572. top: 0;
  573. bottom: 0;
  574. display: flex;
  575. flex-direction: column;
  576. padding: 0 32rpx;
  577. padding-bottom: 180rpx;
  578. box-sizing: border-box;
  579. }
  580. .logo-box {
  581. flex: 1;
  582. display: flex;
  583. justify-content: center;
  584. align-items: center;
  585. image {
  586. width: 160rpx;
  587. height: 160rpx;
  588. }
  589. }
  590. page {
  591. height: 100%;
  592. background: #ffffff !important;
  593. }
  594. /deep/.u-checkbox__label {
  595. margin-right: 0rpx !important;
  596. }
  597. /deep/.u-checkbox {
  598. padding: 0 !important;
  599. }
  600. .footer {
  601. font-family: DM Sans;
  602. font-size: 16rpx;
  603. font-weight: 400;
  604. letter-spacing: 0%;
  605. text-align: left;
  606. display: flex;
  607. align-items: center;
  608. justify-content: center;
  609. color: #605d67;
  610. margin-top: 16rpx;
  611. navigator {
  612. color: #016bf6;
  613. }
  614. .check-box {
  615. display: flex;
  616. justify-content: center;
  617. align-items: center;
  618. margin-right: 16rpx;
  619. image {
  620. width: 24rpx;
  621. height: 24rpx;
  622. }
  623. }
  624. }
  625. .container {
  626. top: 0;
  627. padding: 50rpx 32rpx;
  628. box-sizing: border-box;
  629. position: relative;
  630. overflow: hidden;
  631. color: #fff;
  632. }
  633. .confirm-btn-weixin {
  634. width: 200px;
  635. height: 42px;
  636. line-height: 42px;
  637. border-radius: 30px;
  638. margin-top: 40upx;
  639. background: -moz-linear-gradient(left, #f15b6c, #e10a07 100%);
  640. background: -webkit-gradient(
  641. linear,
  642. left top,
  643. left right,
  644. color-stop(0, #f15b6c),
  645. color-stop(100%, #e10a07)
  646. );
  647. background: -webkit-linear-gradient(left, #f15b6c 0, #e10a07 100%);
  648. background: -o-linear-gradient(left, #f15b6c 0, #e10a07 100%);
  649. background: -ms-linear-gradient(left, #f15b6c 0, #e10a07 100%);
  650. background: linear-gradient(to left, #f15b6c 0, #e10a07 100%);
  651. color: #fff;
  652. font-size: 32upx;
  653. &:after {
  654. border-radius: 60px;
  655. }
  656. }
  657. .confirm-btn {
  658. width: 200px;
  659. height: 42px;
  660. line-height: 42px;
  661. border-radius: 30px;
  662. margin-top: 300upx;
  663. background: -moz-linear-gradient(left, #f15b6c, #e10a07 100%);
  664. background: -webkit-gradient(
  665. linear,
  666. left top,
  667. left right,
  668. color-stop(0, #f15b6c),
  669. color-stop(100%, #e10a07)
  670. );
  671. background: -webkit-linear-gradient(left, #f15b6c 0, #e10a07 100%);
  672. background: -o-linear-gradient(left, #f15b6c 0, #e10a07 100%);
  673. background: -ms-linear-gradient(left, #f15b6c 0, #e10a07 100%);
  674. background: linear-gradient(to left, #f15b6c 0, #e10a07 100%);
  675. color: #fff;
  676. font-size: 32upx;
  677. &:after {
  678. border-radius: 60px;
  679. }
  680. }
  681. .headers {
  682. text-align: center;
  683. }
  684. .headers > image {
  685. width: 400upx;
  686. height: 400upx;
  687. }
  688. // .footer {
  689. // padding-left: 100upx;
  690. // margin-top: 32upx;
  691. // font-size: 24upx;
  692. // color: #666666;
  693. // text-align: center;
  694. // display: flex;
  695. // }
  696. .login-btn {
  697. padding: 20rpx;
  698. box-sizing: border-box;
  699. border-radius: 100rpx;
  700. color: rgba(255, 255, 255, 1);
  701. font-family: DM Sans;
  702. font-size: 32rpx;
  703. font-weight: 400;
  704. line-height: 44rpx;
  705. display: flex;
  706. justify-content: center;
  707. align-items: center;
  708. margin-bottom: 16rpx;
  709. image {
  710. width: 28rpx;
  711. height: 28rpx;
  712. margin-right: 20rpx;
  713. }
  714. }
  715. .wechat {
  716. background: linear-gradient(90deg, rgba(13, 39, 247, 1), rgba(19, 193, 234, 1) 100%);
  717. }
  718. .password {
  719. background: rgba(1, 107, 246, 1);
  720. }
  721. .phone {
  722. background: #99c4fa;
  723. }
  724. page {
  725. background: #fff;
  726. }
  727. .send-msg {
  728. border-radius: 30px;
  729. color: black;
  730. background: white;
  731. height: 30px;
  732. font-size: 14px;
  733. line-height: 30px;
  734. }
  735. .container {
  736. top: 0;
  737. padding-top: 32rpx;
  738. position: relative;
  739. width: 100%;
  740. height: 100vh;
  741. overflow: hidden;
  742. background: #ffffff;
  743. color: #fff;
  744. .mp_wxBox {
  745. .headers {
  746. margin: 35% auto 50rpx;
  747. text-align: center;
  748. border-radius: 60rpx;
  749. width: 650rpx;
  750. height: 300rpx;
  751. line-height: 450rpx;
  752. image {
  753. width: 300rpx;
  754. height: 300rpx;
  755. }
  756. }
  757. .content {
  758. text-align: center;
  759. }
  760. text {
  761. display: block;
  762. color: #9d9d9d;
  763. margin-top: 40rpx;
  764. }
  765. .bottom {
  766. line-height: 80upx;
  767. border-radius: 80upx;
  768. margin: 70rpx 50rpx;
  769. height: 80upx;
  770. font-size: 35rpx;
  771. }
  772. }
  773. }
  774. .wrapper {
  775. position: relative;
  776. z-index: 90;
  777. background: #fff;
  778. padding-bottom: 20px;
  779. }
  780. .input-content {
  781. padding: 0 20px;
  782. }
  783. .confirm-btn {
  784. width: 300px;
  785. height: 42px;
  786. line-height: 42px;
  787. border-radius: 30px;
  788. margin-top: 40px;
  789. background: #016bf6;
  790. color: #fff;
  791. // font-size: $font-lg;
  792. &:after {
  793. border-radius: 60px;
  794. }
  795. }
  796. </style>