|
@@ -1,48 +1,136 @@
|
|
|
<template>
|
|
|
- <view style="height: 100%;">
|
|
|
- <image mode="widthFix" src="/pages4/static/login_bg.jpg" class="full_img"></image>
|
|
|
- <!-- #ifdef MP-WEIXIN -->
|
|
|
- <u-navbar title="登录" :border-bottom="false" background="{ background: '#ffffff',opacity:0.4; }" title-color="#ffffff" back-icon-color="#ffffff"></u-navbar>
|
|
|
- <!-- #endif -->
|
|
|
- <view style="padding: 30rpx;">
|
|
|
- <view style="width: 400rpx;">
|
|
|
- <u-subsection @change="sectionChange" :list="list" :current="current" active-color="#007AFF" inactive-color="#ffffff" bg-color="rgba(255,255,255,0.52)"></u-subsection>
|
|
|
- </view>
|
|
|
- <view class="login_box">
|
|
|
- <u-form :model="form" ref="uForm1" v-show="current==0">
|
|
|
- <u-form-item prop="account" ><u-input type="idcard" v-model="form.account" placeholder-style="color:#999999" placeholder="手机号/学员身份证"/></u-form-item>
|
|
|
- <u-form-item prop="pwd" ><u-input class="password" v-model="form.pwd" placeholder-style="color:#999999" type="password" placeholder="登录密码"/></u-form-item>
|
|
|
- </u-form>
|
|
|
- <u-form :model="form" ref="uForm2" v-show="current==1">
|
|
|
- <u-form-item prop="tel" ref="tel"><u-input type="number" maxlength="11" placeholder-style="color:#999999" v-model="form.tel" placeholder="手机号"/></u-form-item>
|
|
|
- <u-form-item prop="code" >
|
|
|
- <u-input v-model="form.code" type="number" placeholder-style="color:#999999" placeholder="验证码"/>
|
|
|
- <u-button slot="right" size="mini" @click="getCode">{{codeTips}}</u-button>
|
|
|
- </u-form-item>
|
|
|
- </u-form>
|
|
|
- </view>
|
|
|
- <button class="loginBtn" :class="{able:canLogin()}" @click="pwlogin" v-if="current==0">
|
|
|
- 登录
|
|
|
- </button>
|
|
|
- <button :disabled="isUse" :class="{able:canLogin()}" class="loginBtn" @click="sms_login" v-if="current==1">
|
|
|
- 登录
|
|
|
- </button>
|
|
|
- <view style="width: 100%;margin: 40rpx auto;">
|
|
|
- <view style="display: flex;align-items: center;color: #007AFF;font-size: 24rpx;justify-content:center;">
|
|
|
- <navigator hover-class="none" :url="'/pages2/register/register?scanCode=' + scanCode" style="margin: 0 40rpx;">立即注册</navigator>
|
|
|
- <view style="width: 3rpx;height: 20rpx;background-color: #007AFF;"></view>
|
|
|
- <navigator hover-class="none" url="/pages2/register/forget" style="margin: 0 40rpx;">忘记密码</navigator>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <!-- #ifdef MP-WEIXIN -->
|
|
|
- <view class="wxBtn">
|
|
|
- <button type="default" open-type="getPhoneNumber" @getphonenumber="wxLogin" class="wxloginBtn"></button>
|
|
|
- <view style="text-align: center;color: #999999;font-size: 24rpx;margin-top: 10rpx;">微信快捷登录</view>
|
|
|
- </view>
|
|
|
- <!-- #endif -->
|
|
|
- </view>
|
|
|
- <u-verification-code seconds="60" ref="uCode" @change="codeChange"></u-verification-code>
|
|
|
- </view>
|
|
|
+ <view style="height: 100%">
|
|
|
+ <image
|
|
|
+ mode="widthFix"
|
|
|
+ src="/pages4/static/login_bg.jpg"
|
|
|
+ class="full_img"
|
|
|
+ ></image>
|
|
|
+ <!-- #ifdef MP-WEIXIN -->
|
|
|
+ <u-navbar
|
|
|
+ title="登录"
|
|
|
+ :border-bottom="false"
|
|
|
+ background="{ background: '#ffffff',opacity:0.4; }"
|
|
|
+ title-color="#ffffff"
|
|
|
+ back-icon-color="#ffffff"
|
|
|
+ ></u-navbar>
|
|
|
+ <!-- #endif -->
|
|
|
+ <view style="padding: 30rpx">
|
|
|
+ <view style="width: 400rpx">
|
|
|
+ <u-subsection
|
|
|
+ @change="sectionChange"
|
|
|
+ :list="list"
|
|
|
+ :current="current"
|
|
|
+ active-color="#007AFF"
|
|
|
+ inactive-color="#ffffff"
|
|
|
+ bg-color="rgba(255,255,255,0.52)"
|
|
|
+ ></u-subsection>
|
|
|
+ </view>
|
|
|
+ <view class="login_box">
|
|
|
+ <u-form :model="form" ref="uForm1" v-show="current == 0">
|
|
|
+ <u-form-item prop="account"
|
|
|
+ ><u-input
|
|
|
+ type="idcard"
|
|
|
+ v-model="form.account"
|
|
|
+ placeholder-style="color:#999999"
|
|
|
+ placeholder="手机号/学员身份证"
|
|
|
+ /></u-form-item>
|
|
|
+ <u-form-item prop="pwd"
|
|
|
+ ><u-input
|
|
|
+ class="password"
|
|
|
+ v-model="form.pwd"
|
|
|
+ placeholder-style="color:#999999"
|
|
|
+ type="password"
|
|
|
+ placeholder="登录密码"
|
|
|
+ /></u-form-item>
|
|
|
+ </u-form>
|
|
|
+ <u-form :model="form" ref="uForm2" v-show="current == 1">
|
|
|
+ <u-form-item prop="tel" ref="tel"
|
|
|
+ ><u-input
|
|
|
+ type="number"
|
|
|
+ maxlength="11"
|
|
|
+ placeholder-style="color:#999999"
|
|
|
+ v-model="form.tel"
|
|
|
+ placeholder="手机号"
|
|
|
+ /></u-form-item>
|
|
|
+ <u-form-item prop="code">
|
|
|
+ <u-input
|
|
|
+ v-model="form.code"
|
|
|
+ type="number"
|
|
|
+ placeholder-style="color:#999999"
|
|
|
+ placeholder="验证码"
|
|
|
+ />
|
|
|
+ <u-button slot="right" size="mini" @click="getCode">{{
|
|
|
+ codeTips
|
|
|
+ }}</u-button>
|
|
|
+ </u-form-item>
|
|
|
+ </u-form>
|
|
|
+ </view>
|
|
|
+ <button
|
|
|
+ class="loginBtn"
|
|
|
+ :class="{ able: canLogin() }"
|
|
|
+ @click="pwlogin"
|
|
|
+ v-if="current == 0"
|
|
|
+ >
|
|
|
+ 登录
|
|
|
+ </button>
|
|
|
+ <button
|
|
|
+ :disabled="isUse"
|
|
|
+ :class="{ able: canLogin() }"
|
|
|
+ class="loginBtn"
|
|
|
+ @click="sms_login"
|
|
|
+ v-if="current == 1"
|
|
|
+ >
|
|
|
+ 登录
|
|
|
+ </button>
|
|
|
+ <view style="width: 100%; margin: 40rpx auto">
|
|
|
+ <view
|
|
|
+ style="
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ color: #007aff;
|
|
|
+ font-size: 24rpx;
|
|
|
+ justify-content: center;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <!-- <navigator hover-class="none" :url="'/pages2/register/register?scanCode=' + scanCode" style="margin: 0 40rpx;">立即注册</navigator> -->
|
|
|
+ <view style="margin: 0 40rpx" @click="toRegister">立即注册</view>
|
|
|
+ <view
|
|
|
+ style="width: 3rpx; height: 20rpx; background-color: #007aff"
|
|
|
+ ></view>
|
|
|
+ <navigator
|
|
|
+ hover-class="none"
|
|
|
+ url="/pages2/register/forget"
|
|
|
+ style="margin: 0 40rpx"
|
|
|
+ >忘记密码</navigator
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <!-- #ifdef MP-WEIXIN -->
|
|
|
+ <view class="wxBtn">
|
|
|
+ <button
|
|
|
+ type="default"
|
|
|
+ open-type="getPhoneNumber"
|
|
|
+ @getphonenumber="wxLogin"
|
|
|
+ class="wxloginBtn"
|
|
|
+ ></button>
|
|
|
+ <view
|
|
|
+ style="
|
|
|
+ text-align: center;
|
|
|
+ color: #999999;
|
|
|
+ font-size: 24rpx;
|
|
|
+ margin-top: 10rpx;
|
|
|
+ "
|
|
|
+ >微信快捷登录</view
|
|
|
+ >
|
|
|
+ </view>
|
|
|
+ <!-- #endif -->
|
|
|
+ </view>
|
|
|
+ <u-verification-code
|
|
|
+ seconds="60"
|
|
|
+ ref="uCode"
|
|
|
+ @change="codeChange"
|
|
|
+ ></u-verification-code>
|
|
|
+ </view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
@@ -51,489 +139,504 @@ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4qkbwIKErstK1sFESPEhOShpR
|
|
|
pj4+sOVpJHxl5r/2xLBfA/MrXcAEra5Ro9cXNQSqmLLt8wecoLk/glfa5IdhXV0h
|
|
|
RVQplIVs5z3MxcUa9ptKPHUTgh8xMCBvl8sUJKwkmn4vYWeDfHT22EL7Hr1pTMwU
|
|
|
hF6WiNlWfQTVoF1rhwIDAQAB
|
|
|
------END PUBLIC KEY-----`
|
|
|
-import JSEncrypt from '@/pages4/static/jsencrypt.min.js';
|
|
|
+-----END PUBLIC KEY-----`;
|
|
|
+import JSEncrypt from "@/pages4/static/jsencrypt.min.js";
|
|
|
export default {
|
|
|
- data() {
|
|
|
- return {
|
|
|
- code: '',
|
|
|
- form:{
|
|
|
- tel:'',
|
|
|
- code:'',
|
|
|
- account:'',
|
|
|
- pwd:''
|
|
|
- },
|
|
|
- list: [
|
|
|
- {
|
|
|
- name: '密码登录'
|
|
|
- },
|
|
|
- {
|
|
|
- name: '短信登录'
|
|
|
- }
|
|
|
- ],
|
|
|
- rules: {
|
|
|
- tel: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请输入手机号',
|
|
|
- // 可以单个或者同时写两个触发验证方式
|
|
|
- trigger: ['change'],
|
|
|
- },
|
|
|
- {
|
|
|
- validator: (rule, value, callback) => {
|
|
|
- // 上面有说,返回true表示校验通过,返回false表示不通过
|
|
|
- // this.$u.test.mobile()就是返回true或者false的
|
|
|
- return this.$u.test.mobile(value);
|
|
|
- },
|
|
|
- message: '手机号码格式不正确',
|
|
|
- // 触发器可以同时用blur和change
|
|
|
- trigger: ['change'],
|
|
|
- }
|
|
|
- ],
|
|
|
- account: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请输入手机号/学员身份证',
|
|
|
- // 可以单个或者同时写两个触发验证方式
|
|
|
- trigger: ['change'],
|
|
|
- }
|
|
|
- ],
|
|
|
- pwd: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请输入密码',
|
|
|
- // 可以单个或者同时写两个触发验证方式
|
|
|
- trigger: ['change'],
|
|
|
- }
|
|
|
- ],
|
|
|
- code: [
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请输入验证码',
|
|
|
- // 可以单个或者同时写两个触发验证方式
|
|
|
- trigger: ['change'],
|
|
|
- }
|
|
|
- ],
|
|
|
- },
|
|
|
- current: 1,
|
|
|
- codeTips: '',
|
|
|
- isUse:false,
|
|
|
- scanCode: '', // pc端扫码登录获取的标志码
|
|
|
- newUser_sc: '', // 用户扫码进来详情页获取的sc
|
|
|
- shareActivityCode: '', // 用户扫码进来详情页获取的
|
|
|
- isBack:false
|
|
|
- };
|
|
|
- },
|
|
|
- onLoad(option) {
|
|
|
- if(option.isBack){
|
|
|
- this.isBack = option.isBack;
|
|
|
- }
|
|
|
- console.log('登录后的this.isBack:', option.isBack, typeof this.isBack);
|
|
|
- // else if (option.scanCode) {
|
|
|
- // this.scanCode = option.scanCode
|
|
|
- // }
|
|
|
- // this.from = option.from;
|
|
|
- if (uni.getStorageSync('newUser_sc')) {
|
|
|
- this.newUser_sc = uni.getStorageSync('newUser_sc')
|
|
|
- }
|
|
|
- if (uni.getStorageSync('shareActivityCode')) {
|
|
|
- this.shareActivityCode = uni.getStorageSync('shareActivityCode')
|
|
|
- }
|
|
|
- console.log('---this.newUser_sc:', this.newUser_sc, 'this.shareActivityCode:', this.shareActivityCode);
|
|
|
- },
|
|
|
- onShow() {
|
|
|
- // 获取code
|
|
|
- // #ifdef MP-WEIXIN
|
|
|
- this.getwxCode()
|
|
|
- // #endif
|
|
|
- },
|
|
|
- onReady() {
|
|
|
- this.$refs.uForm1.setRules(this.rules)
|
|
|
- this.$refs.uForm2.setRules(this.rules)
|
|
|
- },
|
|
|
- methods: {
|
|
|
- getwxCode() {
|
|
|
- uni.login({
|
|
|
- provider: 'weixin',
|
|
|
- success: (loginRes) => {
|
|
|
- this.code = loginRes.code
|
|
|
- console.log('获取的code:', this.code)
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- wxLogin(e) {
|
|
|
- this.$api.wxLogin({
|
|
|
- code: this.code,
|
|
|
- encryptedData: e.detail.encryptedData,
|
|
|
- iv: e.detail.iv,
|
|
|
- shareCode: this.newUser_sc,
|
|
|
- shareActivityCode: this.shareActivityCode
|
|
|
- }).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.loginCallback(res, 'wxlogin')
|
|
|
- } else {
|
|
|
- this.getwxCode() // code用完一次就会过期,防止用户点击取消后再点微信登录后code过期
|
|
|
- // this.$u.toast(res.data.msg);
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- canLogin() {
|
|
|
- if(this.current == 0) {
|
|
|
- if(this.form.account && this.form.pwd) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- } else if(this.current == 1) {
|
|
|
- if(this.form.tel && this.form.code) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
- },
|
|
|
- sms_login(){
|
|
|
- this.$refs.uForm2.validate(valid => {
|
|
|
- if(valid) {
|
|
|
- let that = this
|
|
|
- if(!this.form.tel){
|
|
|
- this.$u.toast('请输入手机号码');
|
|
|
- return
|
|
|
- }
|
|
|
- if(!this.form.code){
|
|
|
- this.$u.toast('请输入验证码');
|
|
|
- return
|
|
|
- }
|
|
|
- that.isUse = true
|
|
|
- let datas = {
|
|
|
- shareActivityCode: this.shareActivityCode,
|
|
|
- tel:this.form.tel,
|
|
|
- code:this.form.code
|
|
|
- }
|
|
|
- that.$api.smsLogin(datas).then(
|
|
|
- res => {
|
|
|
- that.isUse = false
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.loginCallback(res, 'smslogin')
|
|
|
- } else {
|
|
|
- that.$u.toast(res.data.msg);
|
|
|
- }
|
|
|
- },
|
|
|
- err => {
|
|
|
- that.isUse = false
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- },
|
|
|
- fakeLogin(){
|
|
|
- uni.setStorageSync('user_account', '123');
|
|
|
- uni.setStorageSync('token', '123');
|
|
|
- uni.switchTab({
|
|
|
- url:'/pages/index/index'
|
|
|
- })
|
|
|
- },
|
|
|
- /**
|
|
|
- *
|
|
|
- * @param {*} data
|
|
|
- * @returns
|
|
|
- * 加密
|
|
|
- */
|
|
|
- encryptor(data) {
|
|
|
- const encrypt =new JSEncrypt();
|
|
|
- encrypt.setPublicKey(PUBLIC_KEY);
|
|
|
-
|
|
|
- return encrypt.encrypt(data);
|
|
|
- },
|
|
|
- pwlogin(){
|
|
|
- let that = this
|
|
|
- if(!this.form.account){
|
|
|
- this.$u.toast('请输入手机号码/身份证号');
|
|
|
- return
|
|
|
- }
|
|
|
- if(!this.form.pwd){
|
|
|
- this.$u.toast('请输入密码');
|
|
|
- return
|
|
|
- }
|
|
|
- //虚拟登录
|
|
|
- /* that.fakeLogin()
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ code: "",
|
|
|
+ form: {
|
|
|
+ tel: "",
|
|
|
+ code: "",
|
|
|
+ account: "",
|
|
|
+ pwd: "",
|
|
|
+ },
|
|
|
+ list: [
|
|
|
+ {
|
|
|
+ name: "密码登录",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "短信登录",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ rules: {
|
|
|
+ tel: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请输入手机号",
|
|
|
+ // 可以单个或者同时写两个触发验证方式
|
|
|
+ trigger: ["change"],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ // 上面有说,返回true表示校验通过,返回false表示不通过
|
|
|
+ // this.$u.test.mobile()就是返回true或者false的
|
|
|
+ return this.$u.test.mobile(value);
|
|
|
+ },
|
|
|
+ message: "手机号码格式不正确",
|
|
|
+ // 触发器可以同时用blur和change
|
|
|
+ trigger: ["change"],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ account: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请输入手机号/学员身份证",
|
|
|
+ // 可以单个或者同时写两个触发验证方式
|
|
|
+ trigger: ["change"],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ pwd: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请输入密码",
|
|
|
+ // 可以单个或者同时写两个触发验证方式
|
|
|
+ trigger: ["change"],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ code: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: "请输入验证码",
|
|
|
+ // 可以单个或者同时写两个触发验证方式
|
|
|
+ trigger: ["change"],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ current: 1,
|
|
|
+ codeTips: "",
|
|
|
+ isUse: false,
|
|
|
+ scanCode: "", // pc端扫码登录获取的标志码
|
|
|
+ newUser_sc: "", // 用户扫码进来详情页获取的sc
|
|
|
+ shareActivityCode: "", // 用户扫码进来详情页获取的
|
|
|
+ isBack: false,
|
|
|
+ };
|
|
|
+ },
|
|
|
+ onLoad(option) {
|
|
|
+ if (option.isBack) {
|
|
|
+ this.isBack = option.isBack;
|
|
|
+ }
|
|
|
+ console.log("登录后的this.isBack:", option.isBack, typeof this.isBack);
|
|
|
+ // else if (option.scanCode) {
|
|
|
+ // this.scanCode = option.scanCode
|
|
|
+ // }
|
|
|
+ // this.from = option.from;
|
|
|
+ if (uni.getStorageSync("newUser_sc")) {
|
|
|
+ this.newUser_sc = uni.getStorageSync("newUser_sc");
|
|
|
+ }
|
|
|
+ if (uni.getStorageSync("shareActivityCode")) {
|
|
|
+ this.shareActivityCode = uni.getStorageSync("shareActivityCode");
|
|
|
+ }
|
|
|
+ console.log(
|
|
|
+ "---this.newUser_sc:",
|
|
|
+ this.newUser_sc,
|
|
|
+ "this.shareActivityCode:",
|
|
|
+ this.shareActivityCode
|
|
|
+ );
|
|
|
+ },
|
|
|
+ onShow() {
|
|
|
+ // 获取code
|
|
|
+ // #ifdef MP-WEIXIN
|
|
|
+ this.getwxCode();
|
|
|
+ // #endif
|
|
|
+ },
|
|
|
+ onReady() {
|
|
|
+ this.$refs.uForm1.setRules(this.rules);
|
|
|
+ this.$refs.uForm2.setRules(this.rules);
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getwxCode() {
|
|
|
+ uni.login({
|
|
|
+ provider: "weixin",
|
|
|
+ success: (loginRes) => {
|
|
|
+ this.code = loginRes.code;
|
|
|
+ console.log("获取的code:", this.code);
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+ toRegister() {
|
|
|
+ if (this.isBack) {
|
|
|
+ uni.redirectTo({
|
|
|
+ url: "/pages2/register/register?isBack=" + this.isBack,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: "/pages2/register/register?isBack=" + false,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ wxLogin(e) {
|
|
|
+ this.$api
|
|
|
+ .wxLogin({
|
|
|
+ code: this.code,
|
|
|
+ encryptedData: e.detail.encryptedData,
|
|
|
+ iv: e.detail.iv,
|
|
|
+ shareCode: this.newUser_sc,
|
|
|
+ shareActivityCode: this.shareActivityCode,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.data.code == 200) {
|
|
|
+ this.loginCallback(res, "wxlogin");
|
|
|
+ } else {
|
|
|
+ this.getwxCode(); // code用完一次就会过期,防止用户点击取消后再点微信登录后code过期
|
|
|
+ // this.$u.toast(res.data.msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ canLogin() {
|
|
|
+ if (this.current == 0) {
|
|
|
+ if (this.form.account && this.form.pwd) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ } else if (this.current == 1) {
|
|
|
+ if (this.form.tel && this.form.code) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ sms_login() {
|
|
|
+ this.$refs.uForm2.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ let that = this;
|
|
|
+ if (!this.form.tel) {
|
|
|
+ this.$u.toast("请输入手机号码");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.form.code) {
|
|
|
+ this.$u.toast("请输入验证码");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ that.isUse = true;
|
|
|
+ let datas = {
|
|
|
+ shareActivityCode: this.shareActivityCode,
|
|
|
+ tel: this.form.tel,
|
|
|
+ code: this.form.code,
|
|
|
+ };
|
|
|
+ that.$api.smsLogin(datas).then(
|
|
|
+ (res) => {
|
|
|
+ that.isUse = false;
|
|
|
+ if (res.data.code == 200) {
|
|
|
+ this.loginCallback(res, "smslogin");
|
|
|
+ } else {
|
|
|
+ that.$u.toast(res.data.msg);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ that.isUse = false;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ fakeLogin() {
|
|
|
+ uni.setStorageSync("user_account", "123");
|
|
|
+ uni.setStorageSync("token", "123");
|
|
|
+ uni.switchTab({
|
|
|
+ url: "/pages/index/index",
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param {*} data
|
|
|
+ * @returns
|
|
|
+ * 加密
|
|
|
+ */
|
|
|
+ encryptor(data) {
|
|
|
+ const encrypt = new JSEncrypt();
|
|
|
+ encrypt.setPublicKey(PUBLIC_KEY);
|
|
|
+
|
|
|
+ return encrypt.encrypt(data);
|
|
|
+ },
|
|
|
+ pwlogin() {
|
|
|
+ let that = this;
|
|
|
+ if (!this.form.account) {
|
|
|
+ this.$u.toast("请输入手机号码/身份证号");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!this.form.pwd) {
|
|
|
+ this.$u.toast("请输入密码");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //虚拟登录
|
|
|
+ /* that.fakeLogin()
|
|
|
return */
|
|
|
- that.isUse = true
|
|
|
- let form = JSON.parse(JSON.stringify(this.form))
|
|
|
- form.pwd = this.encryptor(form.pwd)
|
|
|
- form['shareActivityCode'] = this.shareActivityCode
|
|
|
- // 账号登录用户 /app/common/account_login
|
|
|
- that.$api.accountLogin(form).then(
|
|
|
- res => {
|
|
|
- that.isUse = false
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.loginCallback(res, 'pwlogin')
|
|
|
- } else {
|
|
|
- that.$u.toast(res.data.msg);
|
|
|
- }
|
|
|
- },
|
|
|
- err => {
|
|
|
- that.isUse = false
|
|
|
- }
|
|
|
- );
|
|
|
- },
|
|
|
- codeChange(text) {
|
|
|
- this.codeTips = text;
|
|
|
- },
|
|
|
- // 获取验证码
|
|
|
- getCode() {
|
|
|
- let that = this
|
|
|
- if(that.$refs.uCode.canGetCode) {
|
|
|
- if(that.$refs.tel.validateState == 'success') {
|
|
|
- let datas = {tel:this.form.tel}
|
|
|
- that.$api.loginSms(datas).then(
|
|
|
- res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- that.$u.toast('验证码已发送');
|
|
|
- // 通知验证码组件内部开始倒计时
|
|
|
- that.$refs.uCode.start();
|
|
|
- } else {
|
|
|
- that.$u.toast(res.data.msg);
|
|
|
- }
|
|
|
- },
|
|
|
- err => {
|
|
|
- console.log(err);
|
|
|
- }
|
|
|
- );
|
|
|
- } else {
|
|
|
-
|
|
|
- this.$refs.tel.onFieldChange()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
- sectionChange(index) {
|
|
|
- this.current = index;
|
|
|
- },
|
|
|
- getPhoneNumber(e) {
|
|
|
- let that = this;
|
|
|
- uni.checkSession({
|
|
|
- success () {
|
|
|
- //session_key 未过期,并且在本生命周期一直有效
|
|
|
- that.putInfo(e)
|
|
|
- },
|
|
|
- fail () {
|
|
|
- // session_key 已经失效,需要重新执行登录流程
|
|
|
- uni.login({
|
|
|
- provider: 'weixin',
|
|
|
- success: function(loginRes) {
|
|
|
- that.code = loginRes.code;
|
|
|
- that.putInfo(e)
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- putInfo(e){
|
|
|
- let that = this;
|
|
|
- if (e.detail.encryptedData) {
|
|
|
- let inviteCode = uni.getStorageSync("inviteCode")
|
|
|
- //用户同意授权
|
|
|
- var datas = {
|
|
|
- iv: e.detail.iv,
|
|
|
- encryptedData: e.detail.encryptedData,
|
|
|
- code: that.code
|
|
|
- };
|
|
|
- if(inviteCode){
|
|
|
- datas.inviteCode = inviteCode
|
|
|
- }
|
|
|
- that.$api.login(datas).then(
|
|
|
- res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.setStorageSync('union_id', res.data.data.union_id);
|
|
|
- uni.setStorageSync('token', res.data.data.token);
|
|
|
- that.$api.getInfo({ fromPlat: 1 }).then(resdata => {
|
|
|
- if(resdata.data.code == 200){
|
|
|
- uni.navigateBack();
|
|
|
- that.$store.state.userInfo = resdata.data.data;
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
- } else {
|
|
|
- uni.showModal({
|
|
|
- title: '提示',
|
|
|
- content: res.data.msg,
|
|
|
- showCancel: false
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- err => {
|
|
|
- console.log(err);
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- },
|
|
|
- // 微信、密码、验证码 登录成功的回调
|
|
|
- loginCallback(res, types) {
|
|
|
- console.log('登录页面:', this.isBack)
|
|
|
- // if(res.data.data && res.data.data.full_info){
|
|
|
- uni.removeStorageSync('newUser_sc')
|
|
|
- uni.removeStorageSync('shareActivityCode')
|
|
|
- //信息完善,直接进入页面
|
|
|
- uni.setStorageSync('user_account', res.data.data.user_account);
|
|
|
- uni.setStorageSync('token', res.data.data.token);
|
|
|
- // 修改邀请码
|
|
|
- let sac = uni.getStorageSync("sac")
|
|
|
- sac&&this.$api.shareActivityCode({shareActivityCode: sac}).then(res=>{
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.removeStorageSync("sac");
|
|
|
- }
|
|
|
- })
|
|
|
- // /app/user/getInfo 登录用户信息// fromPlat来源平台 1小程序 2PC网站
|
|
|
- this.$api.getInfo({ fromPlat: 1 }).then(resdata => {
|
|
|
- if(resdata.data.code == 200){
|
|
|
- this.$store.state.userInfo = resdata.data.data;
|
|
|
-
|
|
|
- if(!this.isBack){
|
|
|
- let goPath = ''
|
|
|
- if (types == 'wxlogin' || types == 'smslogin') { //密码登录不用判断电脑goPath, 直接到首页
|
|
|
- goPath = uni.getStorageSync('goPath')
|
|
|
- }
|
|
|
- if(goPath == 'course') {
|
|
|
- uni.redirectTo({
|
|
|
- url:'/pages2/wd/class'
|
|
|
- })
|
|
|
- types == 'wxlogin' && this.$method.setUuid(new Date().valueOf() + "")
|
|
|
- } else if(goPath == 'bank') {
|
|
|
- uni.redirectTo({
|
|
|
- url:'/pages2/wd/question_bank'
|
|
|
- })
|
|
|
- types == 'wxlogin' && this.$method.setUuid(new Date().valueOf() + "")
|
|
|
- } else {
|
|
|
- console.log('登录后跳转');
|
|
|
- uni.removeStorageSync('h5_code')
|
|
|
- uni.reLaunch({
|
|
|
- url:'/pages/index/index'
|
|
|
- })
|
|
|
- types == 'wxlogin' && this.$method.setUuid(new Date().valueOf() + "")
|
|
|
- }
|
|
|
-
|
|
|
- }else{
|
|
|
- uni.navigateBack();
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // } else {
|
|
|
- // //未完善信息,存为临时信息
|
|
|
- // uni.setStorageSync('user_account_temp', res.data.data.user_account);
|
|
|
- // uni.setStorageSync('token_temp', res.data.data.token);
|
|
|
- // this.$navTo.togo('/pages2/register/bind');
|
|
|
-
|
|
|
- // }
|
|
|
- },
|
|
|
- // scanLoginCheck小程序校验PC登录二维码,执行登录获取到令牌,然后把扫码的路径最后面的6位标识码提交给后台就行
|
|
|
- // submitCode() {
|
|
|
- // console.log('跳转请求提交code到接口', this.scanCode)
|
|
|
- // this.$api.scanLoginCheck({
|
|
|
- // scanCode: this.scanCode
|
|
|
- // }).then((res) => {
|
|
|
- // if (res.data.code == 200) {
|
|
|
- // uni.navigateTo({
|
|
|
- // url: '/pages4/login/pcLoginSuccess'
|
|
|
- // })
|
|
|
- // } else {
|
|
|
- // this.$u.toast(res.data.msg)
|
|
|
- // }
|
|
|
- // })
|
|
|
- // }
|
|
|
- }
|
|
|
+ that.isUse = true;
|
|
|
+ let form = JSON.parse(JSON.stringify(this.form));
|
|
|
+ form.pwd = this.encryptor(form.pwd);
|
|
|
+ form["shareActivityCode"] = this.shareActivityCode;
|
|
|
+ // 账号登录用户 /app/common/account_login
|
|
|
+ that.$api.accountLogin(form).then(
|
|
|
+ (res) => {
|
|
|
+ that.isUse = false;
|
|
|
+ if (res.data.code == 200) {
|
|
|
+ this.loginCallback(res, "pwlogin");
|
|
|
+ } else {
|
|
|
+ that.$u.toast(res.data.msg);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ that.isUse = false;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
+ codeChange(text) {
|
|
|
+ this.codeTips = text;
|
|
|
+ },
|
|
|
+ // 获取验证码
|
|
|
+ getCode() {
|
|
|
+ let that = this;
|
|
|
+ if (that.$refs.uCode.canGetCode) {
|
|
|
+ if (that.$refs.tel.validateState == "success") {
|
|
|
+ let datas = { tel: this.form.tel };
|
|
|
+ that.$api.loginSms(datas).then(
|
|
|
+ (res) => {
|
|
|
+ if (res.data.code == 200) {
|
|
|
+ that.$u.toast("验证码已发送");
|
|
|
+ // 通知验证码组件内部开始倒计时
|
|
|
+ that.$refs.uCode.start();
|
|
|
+ } else {
|
|
|
+ that.$u.toast(res.data.msg);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ this.$refs.tel.onFieldChange();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ sectionChange(index) {
|
|
|
+ this.current = index;
|
|
|
+ },
|
|
|
+ getPhoneNumber(e) {
|
|
|
+ let that = this;
|
|
|
+ uni.checkSession({
|
|
|
+ success() {
|
|
|
+ //session_key 未过期,并且在本生命周期一直有效
|
|
|
+ that.putInfo(e);
|
|
|
+ },
|
|
|
+ fail() {
|
|
|
+ // session_key 已经失效,需要重新执行登录流程
|
|
|
+ uni.login({
|
|
|
+ provider: "weixin",
|
|
|
+ success: function (loginRes) {
|
|
|
+ that.code = loginRes.code;
|
|
|
+ that.putInfo(e);
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+ });
|
|
|
+ },
|
|
|
+ putInfo(e) {
|
|
|
+ let that = this;
|
|
|
+ if (e.detail.encryptedData) {
|
|
|
+ let inviteCode = uni.getStorageSync("inviteCode");
|
|
|
+ //用户同意授权
|
|
|
+ var datas = {
|
|
|
+ iv: e.detail.iv,
|
|
|
+ encryptedData: e.detail.encryptedData,
|
|
|
+ code: that.code,
|
|
|
+ };
|
|
|
+ if (inviteCode) {
|
|
|
+ datas.inviteCode = inviteCode;
|
|
|
+ }
|
|
|
+ that.$api.login(datas).then(
|
|
|
+ (res) => {
|
|
|
+ if (res.data.code == 200) {
|
|
|
+ uni.setStorageSync("union_id", res.data.data.union_id);
|
|
|
+ uni.setStorageSync("token", res.data.data.token);
|
|
|
+ that.$api.getInfo({ fromPlat: 1 }).then((resdata) => {
|
|
|
+ if (resdata.data.code == 200) {
|
|
|
+ uni.navigateBack();
|
|
|
+ that.$store.state.userInfo = resdata.data.data;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ uni.showModal({
|
|
|
+ title: "提示",
|
|
|
+ content: res.data.msg,
|
|
|
+ showCancel: false,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ console.log(err);
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 微信、密码、验证码 登录成功的回调
|
|
|
+ loginCallback(res, types) {
|
|
|
+ console.log("登录页面:", this.isBack);
|
|
|
+ // if(res.data.data && res.data.data.full_info){
|
|
|
+ uni.removeStorageSync("newUser_sc");
|
|
|
+ uni.removeStorageSync("shareActivityCode");
|
|
|
+ //信息完善,直接进入页面
|
|
|
+ uni.setStorageSync("user_account", res.data.data.user_account);
|
|
|
+ uni.setStorageSync("token", res.data.data.token);
|
|
|
+ // 修改邀请码
|
|
|
+ let sac = uni.getStorageSync("sac");
|
|
|
+ sac &&
|
|
|
+ this.$api.shareActivityCode({ shareActivityCode: sac }).then((res) => {
|
|
|
+ if (res.data.code == 200) {
|
|
|
+ uni.removeStorageSync("sac");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // /app/user/getInfo 登录用户信息// fromPlat来源平台 1小程序 2PC网站
|
|
|
+ this.$api.getInfo({ fromPlat: 1 }).then((resdata) => {
|
|
|
+ if (resdata.data.code == 200) {
|
|
|
+ this.$store.state.userInfo = resdata.data.data;
|
|
|
+
|
|
|
+ if (!this.isBack) {
|
|
|
+ let goPath = "";
|
|
|
+ if (types == "wxlogin" || types == "smslogin") {
|
|
|
+ //密码登录不用判断电脑goPath, 直接到首页
|
|
|
+ goPath = uni.getStorageSync("goPath");
|
|
|
+ }
|
|
|
+ if (goPath == "course") {
|
|
|
+ uni.redirectTo({
|
|
|
+ url: "/pages2/wd/class",
|
|
|
+ });
|
|
|
+ types == "wxlogin" &&
|
|
|
+ this.$method.setUuid(new Date().valueOf() + "");
|
|
|
+ } else if (goPath == "bank") {
|
|
|
+ uni.redirectTo({
|
|
|
+ url: "/pages2/wd/question_bank",
|
|
|
+ });
|
|
|
+ types == "wxlogin" &&
|
|
|
+ this.$method.setUuid(new Date().valueOf() + "");
|
|
|
+ } else {
|
|
|
+ console.log("登录后跳转");
|
|
|
+ uni.removeStorageSync("h5_code");
|
|
|
+ uni.reLaunch({
|
|
|
+ url: "/pages/index/index",
|
|
|
+ });
|
|
|
+ types == "wxlogin" &&
|
|
|
+ this.$method.setUuid(new Date().valueOf() + "");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ uni.navigateBack();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
+ // } else {
|
|
|
+ // //未完善信息,存为临时信息
|
|
|
+ // uni.setStorageSync('user_account_temp', res.data.data.user_account);
|
|
|
+ // uni.setStorageSync('token_temp', res.data.data.token);
|
|
|
+ // this.$navTo.togo('/pages2/register/bind');
|
|
|
+
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ // scanLoginCheck小程序校验PC登录二维码,执行登录获取到令牌,然后把扫码的路径最后面的6位标识码提交给后台就行
|
|
|
+ // submitCode() {
|
|
|
+ // console.log('跳转请求提交code到接口', this.scanCode)
|
|
|
+ // this.$api.scanLoginCheck({
|
|
|
+ // scanCode: this.scanCode
|
|
|
+ // }).then((res) => {
|
|
|
+ // if (res.data.code == 200) {
|
|
|
+ // uni.navigateTo({
|
|
|
+ // url: '/pages4/login/pcLoginSuccess'
|
|
|
+ // })
|
|
|
+ // } else {
|
|
|
+ // this.$u.toast(res.data.msg)
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // }
|
|
|
+ },
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
- .wxBtn{
|
|
|
- position: fixed;
|
|
|
- bottom: 10%;
|
|
|
- width: 100%;
|
|
|
- left: 0;
|
|
|
- }
|
|
|
- /deep/ .wxBtn button::after{
|
|
|
- border: none;
|
|
|
- }
|
|
|
- .loginBtn{
|
|
|
- width: 526rpx;
|
|
|
- height: 80rpx;
|
|
|
- background: linear-gradient(90deg, #015EEA, #00C0FA);
|
|
|
- box-shadow: 0rpx 10rpx 16rpx 4rpx rgba(1, 99, 235, 0.04);
|
|
|
- opacity: 0.6;
|
|
|
- border-radius: 40rpx;
|
|
|
- color: #FFFFFF;
|
|
|
- text-align: center;
|
|
|
- line-height: 80rpx;
|
|
|
- margin: 40rpx auto;
|
|
|
-
|
|
|
- &.able {
|
|
|
- opacity: 1;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- .wxloginBtn{
|
|
|
- margin:0 auto;
|
|
|
- background: url("/static/loginBtn.png") no-repeat;
|
|
|
- background-size:100% 100%;
|
|
|
- border:none;
|
|
|
- width: 100rpx;
|
|
|
- height: 100rpx;
|
|
|
- }
|
|
|
-
|
|
|
- /deep/page {
|
|
|
- background-color: #FFFFFF;
|
|
|
- height: 100%;
|
|
|
- width: 100%;
|
|
|
- }
|
|
|
- .login_box{
|
|
|
- width: 100%;
|
|
|
- height: 360rpx;
|
|
|
- background: #FFFFFF;
|
|
|
- box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(1, 99, 235, 0.1);
|
|
|
- border-radius: 24rpx;
|
|
|
- margin-top: 30rpx;
|
|
|
- padding:40rpx 35rpx;
|
|
|
-
|
|
|
-
|
|
|
- .password {
|
|
|
- /deep/.uicon-eye-fill {
|
|
|
- &::before{
|
|
|
- color:#007AFF;
|
|
|
- content:"\e613";
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- /deep/ .u-item-bg{
|
|
|
- border-radius: 32px !important;
|
|
|
- }
|
|
|
- /deep/ .u-subsection{
|
|
|
- border-radius: 32px !important;
|
|
|
- }
|
|
|
+.wxBtn {
|
|
|
+ position: fixed;
|
|
|
+ bottom: 10%;
|
|
|
+ width: 100%;
|
|
|
+ left: 0;
|
|
|
+}
|
|
|
+/deep/ .wxBtn button::after {
|
|
|
+ border: none;
|
|
|
+}
|
|
|
+.loginBtn {
|
|
|
+ width: 526rpx;
|
|
|
+ height: 80rpx;
|
|
|
+ background: linear-gradient(90deg, #015eea, #00c0fa);
|
|
|
+ box-shadow: 0rpx 10rpx 16rpx 4rpx rgba(1, 99, 235, 0.04);
|
|
|
+ opacity: 0.6;
|
|
|
+ border-radius: 40rpx;
|
|
|
+ color: #ffffff;
|
|
|
+ text-align: center;
|
|
|
+ line-height: 80rpx;
|
|
|
+ margin: 40rpx auto;
|
|
|
+
|
|
|
+ &.able {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.wxloginBtn {
|
|
|
+ margin: 0 auto;
|
|
|
+ background: url("/static/loginBtn.png") no-repeat;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ border: none;
|
|
|
+ width: 100rpx;
|
|
|
+ height: 100rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/deep/page {
|
|
|
+ background-color: #ffffff;
|
|
|
+ height: 100%;
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.login_box {
|
|
|
+ width: 100%;
|
|
|
+ height: 360rpx;
|
|
|
+ background: #ffffff;
|
|
|
+ box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(1, 99, 235, 0.1);
|
|
|
+ border-radius: 24rpx;
|
|
|
+ margin-top: 30rpx;
|
|
|
+ padding: 40rpx 35rpx;
|
|
|
+
|
|
|
+ .password {
|
|
|
+ /deep/.uicon-eye-fill {
|
|
|
+ &::before {
|
|
|
+ color: #007aff;
|
|
|
+ content: "\e613";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+/deep/ .u-item-bg {
|
|
|
+ border-radius: 32px !important;
|
|
|
+}
|
|
|
+/deep/ .u-subsection {
|
|
|
+ border-radius: 32px !important;
|
|
|
+}
|
|
|
.full_img {
|
|
|
- position: absolute;
|
|
|
- left: 0;
|
|
|
- display: block;
|
|
|
- width: 100%;
|
|
|
- z-index: -999;
|
|
|
- top: 0;
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ display: block;
|
|
|
+ width: 100%;
|
|
|
+ z-index: -999;
|
|
|
+ top: 0;
|
|
|
}
|
|
|
|
|
|
.head {
|
|
|
- height: 96rpx;
|
|
|
- width: 100%;
|
|
|
- line-height: 96rpx;
|
|
|
- margin-top: 40rpx;
|
|
|
- text-align: center;
|
|
|
- display: flex;
|
|
|
- position: relative;
|
|
|
- justify-content: center;
|
|
|
+ height: 96rpx;
|
|
|
+ width: 100%;
|
|
|
+ line-height: 96rpx;
|
|
|
+ margin-top: 40rpx;
|
|
|
+ text-align: center;
|
|
|
+ display: flex;
|
|
|
+ position: relative;
|
|
|
+ justify-content: center;
|
|
|
}
|
|
|
.icon {
|
|
|
- position: absolute;
|
|
|
- left: 30rpx;
|
|
|
+ position: absolute;
|
|
|
+ left: 30rpx;
|
|
|
}
|
|
|
</style>
|