You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
shengxian/components/shopro-auth-modal/shopro-auth-modal.vue

1084 lines
29 KiB

<template>
<view class="cu-modal bottom-modal" :class="{ show: showAuth }" @tap="closeAuthModal" style="z-index: 10080;">
<view class="login-wrap cu-dialog form-wrap safe-area-inset-bottom" @tap.stop
style="border-radius: 20rpx 20rpx 0 0;">
<!-- 1.账号密码登录 -->
<view v-if="authType === 'accountLogin'">
<!-- 标题 -->
<view class="head-box u-m-b-60 u-flex-col ">
<view class="u-flex u-m-b-20">
<view class="head-title u-m-r-40 head-title-animation">账号登录</view>
<view class="head-title-active head-title-line" @tap="showAuthModal('smsLogin')">
短信登录
</view>
</view>
<view class="head-subtitle">如果未设置过密码,请点击忘记密码</view>
</view>
<view class="form-item u-border-bottom ">
<view class="item-content u-flex u-col-center">
<view class="item-title">账号</view>
<u-input class="u-m-r-10 u-flex-1" placeholder="请输入账号" @blur="checkValue($event, 'account')"
@input="checkValue($event, 'account')" :placeholderStyle="placeholderStyle"
v-model="form['accountLogin'].data.account" type="text"></u-input>
<button class="u-reset-button forgot-btn" @tap="showAuthModal('forgotPwd')">
忘记密码
</button>
</view>
<view class="message-error">
{{ form["accountLogin"].error.account || "" }}
</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">密码</view>
<u-input class="u-m-r-10 u-flex-1" placeholder="请输入密码" :placeholderStyle="placeholderStyle"
v-model="form['accountLogin'].data.password" type="password"
@blur="checkValue($event, 'password')" @input="checkValue($event, 'password')"></u-input>
<button class="u-reset-button login-btn-start" @tap="accountLoginSubmit">
登录
</button>
</view>
<view class="message-error">
{{ form["accountLogin"].error.password || "" }}
</view>
</view>
<button class="u-reset-button type-btn" @tap="showAuthModal('register')">
立即注册
</button>
</view>
<!-- 2.短信登录 -->
<view v-if="authType === 'smsLogin'">
<view class="head-box u-m-b-60">
<view class="u-flex u-m-b-20">
<view class="head-title-active u-m-r-40" @tap="showAuthModal('accountLogin')">
账号登录
</view>
<view class="head-title head-title-line head-title-animation">
短信登录
</view>
</view>
<view class="head-subtitle">未注册手机号请先点击下方立即注册</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">手机号</view>
<u-input class="u-m-r-10 u-flex-1" placeholder="请输入手机号" @blur="checkValue($event, 'mobile')"
@input="mobileInput($event, 'mobile')" :placeholderStyle="placeholderStyle"
v-model="form['smsLogin'].data.mobile" type="number"></u-input>
<button class="u-reset-button code-btn code-btn-start"
:disabled="!form['smsLogin'].data.isMobileEnd"
:class="{ 'code-btn-end': form['smsLogin'].data.isMobileEnd }"
@tap="getSmsCode('mobilelogin')">
{{ codeText }}
</button>
</view>
<view class="message-error">{{ form["smsLogin"].error.mobile || "" }}</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">验证码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'code')"
@input="checkValue($event, 'code')" placeholder="请输入验证码"
:placeholderStyle="placeholderStyle" v-model="form['smsLogin'].data.code"
type="number"></u-input>
<button class="u-reset-button login-btn-start" @tap="smsLoginSubmit">
登录
</button>
</view>
<view class="message-error">{{ form["smsLogin"].error.code || "" }}</view>
</view>
<button class="u-reset-button type-btn" @tap="showAuthModal('register')">
立即注册
</button>
</view>
<!-- 3.注册 -->
<view v-if="authType === 'register'">
<view class="head-box u-m-b-60">
<view class="head-title u-m-b-20">注册</view>
<view class="head-subtitle">请使用本人手机号完成注册</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">手机号</view>
<u-input class="u-m-r-10 u-flex-1" placeholder="请输入手机号" @blur="checkValue($event, 'mobile')"
@input="mobileInput($event, 'mobile')" :placeholderStyle="placeholderStyle"
v-model="form['register'].data.mobile" type="number"></u-input>
<button class="u-reset-button code-btn code-btn-start"
:disabled="!form['register'].data.isMobileEnd"
:class="{ 'code-btn-end': form['register'].data.isMobileEnd }"
@tap="getSmsCode('register')">
{{ codeText }}
</button>
</view>
<view class="message-error">{{ form["register"].error.mobile || "" }}</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">密码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'password')"
@input="checkValue($event, 'password')" placeholder="请输入密码"
:placeholderStyle="placeholderStyle" v-model="form['register'].data.password"
type="password"></u-input>
</view>
<view class="message-error">{{ form["register"].error.password || "" }}</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">验证码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'code')"
@input="checkValue($event, 'code')" placeholder="请输入验证码"
:placeholderStyle="placeholderStyle" v-model="form['register'].data.code"
type="number"></u-input>
<button class="u-reset-button login-btn-start" @tap="registerSubmit">
注册
</button>
</view>
<view class="message-error">{{ form["register"].error.code || "" }}</view>
</view>
<button v-if="!isLogin" class="u-reset-button type-btn" @tap="showAuthModal('accountLogin')">
返回登录
</button>
</view>
<!-- 4.忘记密码 -->
<view v-if="authType === 'forgotPwd'">
<view class="head-box u-m-b-60">
<view class="head-title u-m-b-20">忘记密码</view>
<view class="head-subtitle">为了您的账号安全,修改密码前请先进行安全验证</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">手机号</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'mobile')"
@input="mobileInput($event, 'mobile')" :placeholderStyle="placeholderStyle"
v-model="form['forgotPwd'].data.mobile" type="number"></u-input>
<button class="u-reset-button code-btn code-btn-start"
:disabled="!form['forgotPwd'].data.isMobileEnd"
:class="{ 'code-btn-end': form['forgotPwd'].data.isMobileEnd }"
@tap="getSmsCode('resetpwd')">
{{ codeText }}
</button>
</view>
<view class="message-error">{{ form["forgotPwd"].error.mobile || "" }}</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">验证码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'code')"
@input="checkValue($event, 'code')" placeholder="请输入验证码"
:placeholderStyle="placeholderStyle" v-model="form['forgotPwd'].data.code"
type="number"></u-input>
</view>
<view class="message-error">{{ form["forgotPwd"].error.code || "" }}</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">密码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'password')"
@input="checkValue($event, 'password')" placeholder="请输入密码"
:placeholderStyle="placeholderStyle" v-model="form['forgotPwd'].data.password"
type="password"></u-input>
<button class="u-reset-button login-btn-start" @tap="forgotPwdSubmit">
确认
</button>
</view>
<view class="message-error">{{ form["forgotPwd"].error.password || "" }}</view>
</view>
<button v-if="!isLogin" class="u-reset-button type-btn" @tap="showAuthModal('accountLogin')">
返回登录
</button>
</view>
<!-- 5.绑定手机号 -->
<view v-if="authType === 'bindMobile'">
<view class="head-box u-m-b-60">
<view class="head-title u-m-b-20">绑定手机号</view>
<view class="head-subtitle">为了您的账号安全,请绑定手机号</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">手机号</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'mobile')"
@input="mobileInput($event, 'mobile')" placeholder="请输入手机号"
:placeholderStyle="placeholderStyle" v-model="form['bindMobile'].data.mobile"
type="number"></u-input>
<button class="u-reset-button code-btn code-btn-start"
:disabled="!form['bindMobile'].data.isMobileEnd"
:class="{ 'code-btn-end': form['bindMobile'].data.isMobileEnd }"
@tap="getSmsCode('changemobile')">
{{ codeText }}
</button>
</view>
<view class="message-error">{{ form["bindMobile"].error.mobile || "" }}</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">验证码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'code')"
@input="checkValue($event, 'code')" placeholder="请输入验证码"
:placeholderStyle="placeholderStyle" v-model="form['bindMobile'].data.code"
type="number"></u-input>
<button class="u-reset-button login-btn-start" @tap="bindMobileSubmit">
立即绑定
</button>
</view>
<view class="message-error">{{ form["bindMobile"].error.code || "" }}</view>
</view>
</view>
<!-- 6.修改密码 -->
<view v-if="authType === 'changePwd'">
<view class="head-box u-m-b-60">
<view class="head-title u-m-b-20">修改密码</view>
<view class="head-subtitle"></view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">旧密码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'oldPassword')"
@input="checkValue($event, 'oldPassword')" placeholder="请输入旧密码"
:placeholderStyle="placeholderStyle" v-model="form['changePwd'].data.oldPassword"
type="password"></u-input>
</view>
<view class="message-error">
{{ form["changePwd"].error.oldPassword || "" }}
</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">新密码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'newPassword')"
@input="checkValue($event, 'newPassword')" placeholder="请输入新密码"
:placeholderStyle="placeholderStyle" v-model="form['changePwd'].data.newPassword"
type="password"></u-input>
</view>
<view class="message-error">
{{ form["changePwd"].error.newPassword || "" }}
</view>
</view>
<view class="form-item u-border-bottom">
<view class="item-content u-flex u-col-center">
<view class="item-title">确认密码</view>
<u-input class="u-m-r-10 u-flex-1" @blur="checkValue($event, 'reNewPassword')"
@input="checkValue($event, 'reNewPassword')" placeholder="再次输入新密码"
:placeholderStyle="placeholderStyle" v-model="form['changePwd'].data.reNewPassword"
type="password"></u-input>
</view>
<view class="message-error">
{{ form["changePwd"].error.reNewPassword || "" }}
</view>
</view>
<view class="editPwd-btn-box u-m-t-80">
<button class="u-reset-button save-btn" @tap="changePwdSubmit">保存</button>
<button class="u-reset-button forgot-btn" @tap="showAuthModal('forgotPwd')">
忘记密码
</button>
</view>
</view>
<!-- 第三方登录 -->
<view v-if="authType === 'accountLogin' || authType === 'smsLogin'"
class="auto-login-box u-flex u-row-center u-col-center">
<!-- 微信 -->
<!-- #ifdef MP-WEIXIN -->
<button v-if="['App', 'wxOfficialAccount', 'wxMiniProgram'].includes(platform)" class="u-reset-button"
open-type="getPhoneNumber" @getphonenumber="thirdLogin('wechat', $event)"
@tap="thirdLogin('wechat')">
<image class="auto-login-img" :src="$IMG_URL + '/imgs/auto_login_wx.png'"></image>
</button>
<!-- #endif -->
<!-- 支付宝 -->
<!-- <image
v-if="['App', 'alipayMiniProgram', 'H5'].includes(platform)"
class="auto-login-img"
@tap="thirdLogin('alipay')"
:src="$IMG_URL + '/imgs/auto_login_ali.png'"
mode=""
></image> -->
<!-- 苹果 -->
<!-- #ifdef APP-PLUS -->
<image v-if="device === 'ios'" class="auto-login-img" @tap="thirdLogin('apple')"
:src="$IMG_URL + '/imgs/auto_login_iphone.png'"></image>
<!-- #endif -->
</view>
<!-- 协议 -->
<view v-if="['accountLogin', 'smsLogin', 'register'].includes(authType)"
class="agreement-box u-flex u-row-center">
<u-checkbox v-model="protocol" shape="circle" active-color="#17C161">
<view class="agreement-text tcp-text u-flex u-col-center">
我已阅读并遵守
<view class="tcp-text u-flex u-col-center">
<!-- initShop.user_protocol || 0 -->
<view @tap.stop="
$Router.push({
path: '/pages/public/richtext',
query: { id: 4 }
})
">
《用户协议》
</view>
<view @tap.stop="
$Router.push({
path: '/pages/public/richtext',
query: { id: initShop.privacy_protocol || 0 }
})
">
隐私协议
</view>
</view>
</view>
</u-checkbox>
</view>
</view>
</view>
</template>
<script>
/**
* 登录提示页
*/
import FormValidate from "@/shopro/validate/form";
import schema from "@/uview-ui/libs/util/async-validator";
import wechat from "@/shopro/wechat/wechat";
import { mapMutations, mapActions, mapState, mapGetters } from "vuex";
// #ifdef APP-PLUS
import apple from "@/shopro/apple";
// #endif
export default {
name: "shoproAuthModal",
data() {
return {
platform: this.$platform.get(),
device: this.$platform.device(),
form: {
// 1.账号密码登录
accountLogin: {
data: {
account: "", // 账号
password: "" // 密码
},
rules: {
account: FormValidate.account,
password: FormValidate.password
},
error: {
account: "",
password: ""
}
},
// 2.短信登录
smsLogin: {
data: {
mobile: "", // 手机号
code: "", // 验证码
isMobileEnd: false // 手机号输入完毕
},
rules: {
code: FormValidate.code,
mobile: FormValidate.mobile
},
error: {
mobile: "", // 手机号
code: "" // 验证码
}
},
// 3.注册
register: {
data: {
mobile: "", // 手机号
code: "", // 验证码
password: "", // 密码
isMobileEnd: false // 手机号输入完毕
},
rules: {
code: FormValidate.code,
mobile: FormValidate.mobile,
password: FormValidate.password
},
error: {
mobile: "", // 手机号
code: "", // 验证码
password: "" // 密码
}
},
// 4.忘记密码
forgotPwd: {
data: {
mobile: "", //手机号
code: "", //验证码
password: "", //密码
isMobileEnd: false // 手机号输入完毕
},
rules: {
mobile: FormValidate.mobile,
code: FormValidate.code,
password: FormValidate.password
},
error: {
mobile: "", //手机号
code: "", //验证码
password: "" //密码
}
},
// 5.绑定手机号
bindMobile: {
data: {
mobile: "", //手机号
code: "", //验证码
isMobileEnd: false // 手机号输入完毕
},
rules: {
code: FormValidate.code,
mobile: FormValidate.mobile
},
error: {
mobile: "", //手机号
code: "" //验证码
}
},
// 6.修改密码
changePwd: {
data: {
oldPassword: "", //旧密码
newPassword: "", //新密码
reNewPassword: "" //确认密码
},
rules: {
oldPassword: FormValidate.password,
newPassword: FormValidate.password,
reNewPassword: [
{
required: true,
message: "请重新输入密码",
trigger: ["change", "blur"]
},
{
validator: (rule, value, callback) => {
return value === this.form.changePwd.data.newPassword;
},
message: "两次输入的密码不一致",
trigger: ["change", "blur"]
}
]
},
error: {
oldPassword: "", //旧密码
newPassword: "", //新密码
reNewPassword: "" //确认密码
}
}
},
codeText: "获取验证码",
disabledCode: false,
protocol: false, //是否同意隐私协议
placeholderStyle: "font-size: 30rpx; font-weight: 500;color:#C2C7CF;"
};
},
computed: {
...mapGetters(["initShop", "isLogin", "authType"]),
showAuth: {
get() {
return !!this.authType;
},
set(value) {
value ? uni.hideTabBar() : uni.showTabBar();
}
}
},
mounted() { },
methods: {
...mapActions(["getUserInfo", "showAuthModal"]),
// 检测
checkValue(e, key) {
console.log(e, key)
this.validation(key);
},
// 校验数据
validation(key, callback = () => { }) {
let that = this;
//拿到需要校验的数据
let fieldValue = this.form[this.authType].data[key];
//拿到需要检验的规则
let rules = this.form[this.authType].rules[key];
// 判空
if (!rules || rules.length === 0) {
return callback("");
}
// 设置当前的装填,标识为校验中
let validateState = "validating";
// 调用async-validator的方法
let validator = new schema({
[key]: rules
});
// 校验
validator.validate(
{
[key]: fieldValue
},
{
firstFields: true
},
(errors, fields) => {
// 记录状态和报错信息
validateState = !errors ? "success" : "error";
let validateMessage = errors ? errors[0].message : "";
that.form[that.authType].error[key] = validateMessage;
callback(validateMessage);
}
);
},
// 校验全部数据
validateAll(callback) {
let that = this;
return new Promise(resolve => {
// 对当前所有表单检验
let valid = true; // 默认通过
let count = 0; // 用于标记是否检查完毕
let errorArr = []; // 存放错误信息
let curFormData = that.form[that.authType].data;
Object.keys(curFormData).map(field => {
that.validation(field, error => {
// 如果回调有error
if (error) {
valid = false;
errorArr.push(error);
}
if (++count === Object.keys(curFormData).length) {
resolve(valid);
if (errorArr.length) {
this.$u.toast(errorArr[0]);
}
if (typeof callback == "function") callback(valid);
}
});
});
});
},
// 手机号是否输入完毕
mobileInput(e, key) {
this.form[this.authType].data.isMobileEnd = this.$u.test.mobile(
this.form[this.authType].data.mobile
);
this.validation(key);
},
closeAuthModal() {
this.$store.dispatch("showAuthModal", "");
},
// 获取短信验证码
getSmsCode(type) {
const that = this;
if (that.form[this.authType].data.isMobileEnd && !that.disabledCode) {
that.$http(
"common.smsSend",
{
mobile: that.form[this.authType].data.mobile,
event: type
},
"获取验证码中..."
).then(res => {
if (res.code === 1) {
that.codeChange();
setTimeout(() => {
uni.showToast({
title: "验证码已发送,请注意查收短信",
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
// that.$u.toast();
} else {
setTimeout(() => {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
// that.$u.toast(res.msg);
}
});
} else {
setTimeout(() => {
uni.showToast({
title: "请稍后再试",
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
// that.$u.toast("请稍后再试");
}
},
// 倒计时
codeChange() {
if (this.disabledCode) return;
this.disabledCode = true;
let n = 60;
this.codeText = n + "s";
const run = setInterval(() => {
n -= 1;
if (n < 0) {
clearInterval(run);
}
this.codeText = n + "s";
if (this.codeText < 0 + "s") {
this.disabledCode = false;
this.codeText = "重新获取";
}
}, 1000);
},
// 规则校验
validateSubmit() {
if (
["accountLogin", "smsLogin", "register"].includes(this.authType) &&
!this.protocol
) {
this.$u.toast("请同意用户协议");
return false;
}
return this.validateAll();
},
// 第三方登录
async thirdLogin(provider, payload = null) {
console.log(provider,payload,"66666666")
if (this.platform === 'wxMiniProgram' && payload === null) return;
if (!this.protocol) {
this.$u.toast("请同意用户协议");
return false;
}
const that = this;
let token = "";
console.log(payload,"777")
switch (provider) {
case "wechat":
token = await wechat.login(payload);
break;
case "alipay":
break;
case "apple":
token = await apple.appleIdOauth();
break;
default:
break;
}
if (token) {
that.closeAuthModal();
that.getUserInfo(token);
}
},
// 1.账号登录
async accountLoginSubmit() {
let that = this;
(await that.validateSubmit()) &&
that
.$http(
"user.accountLogin",
{
account: that.form["accountLogin"].data.account,
password: that.form["accountLogin"].data.password,
session_id: uni.getStorageSync("session_id")||'',
},
"登录中..."
)
.then(res => {
if (res.code === 1) {
that.closeAuthModal();
that.getUserInfo(res.data.token);
// that.$u.toast(res.msg);
setTimeout(() => {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
}
});
},
// 2.短信登录
async smsLoginSubmit() {
let that = this;
(await that.validateSubmit()) &&
that
.$http(
"user.smsLogin",
{
mobile: that.form["smsLogin"].data.mobile,
code: that.form["smsLogin"].data.code
},
"登录中..."
)
.then(res => {
if (res.code === 1) {
that.closeAuthModal();
that.getUserInfo(res.data.token);
// that.$u.toast(res.msg);
}
});
},
// 3.注册
async registerSubmit() {
let that = this;
(await that.validateSubmit()) &&
that
.$http(
"user.register",
{
mobile: that.form["register"].data.mobile,
code: that.form["register"].data.code,
password: that.form["register"].data.password
},
"注册中..."
)
.then(res => {
if (res.code === 1) {
// that.$u.toast(res.msg);
setTimeout(() => {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
that.closeAuthModal();
that.getUserInfo(res.data.token);
}
});
},
// 4.忘记密码
async forgotPwdSubmit() {
let that = this;
(await that.validateSubmit()) &&
that
.$http(
"user.forgotPwd",
{
mobile: that.form["forgotPwd"].data.mobile,
code: that.form["forgotPwd"].data.code,
password: that.form["forgotPwd"].data.password
},
"修改中..."
)
.then(res => {
if (res.code === 1) {
// that.$u.toast(res.msg);
if (that.isLogin) {
that.closeAuthModal();
} else {
that.showAuthModal("accountLogin");
}
}
});
},
// 5.绑定手机
async bindMobileSubmit() {
let that = this;
(await that.validateSubmit()) &&
that
.$http(
"user.bindMobile",
{
mobile: that.form["bindMobile"].data.mobile,
code: that.form["bindMobile"].data.code,
password: that.form["bindMobile"].data.password
},
"绑定中..."
)
.then(res => {
if (res.code === 1) {
// that.$u.toast(res.msg);
setTimeout(() => {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
that.closeAuthModal();
that.getUserInfo();
}
});
},
// 6.修改密码
async changePwdSubmit() {
let that = this;
(await that.validateSubmit()) &&
that
.$http(
"user.changePwd",
{
oldpassword: that.form["changePwd"].data.oldPassword,
newpassword: that.form["changePwd"].data.newPassword
},
"修改中..."
)
.then(res => {
if (res.code === 1) {
that.closeAuthModal();
// that.$u.toast(res.msg);
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
that.getUserInfo(res.data.userinfo.token);
}
});
}
}
};
</script>
<style lang="scss" scoped>
@keyframes title-animation {
0% {
font-size: 32rpx;
}
100% {
font-size: 36rpx;
}
}
.form-wrap {
.form-item {
display: flex;
flex-direction: column;
font-size: 28rpx;
padding: 20rpx 0;
color: $u-main-color;
box-sizing: border-box;
line-height: $u-form-item-height;
width: 100%;
.item-title {
width: 140rpx;
font-size: 30rpx;
color: #333;
font-weight: 600;
text-align: left;
}
.message-error {
text-align: left;
font-size: 24rpx;
line-height: 24rpx;
color: $u-type-error;
margin-top: 12rpx;
margin-left: 120rpx;
}
}
}
.login-wrap {
padding: 50rpx 34rpx;
min-height: 700rpx;
background-color: #fff;
.head-box {
.head-title {
min-width: 160rpx;
font-size: 36rpx;
font-weight: bold;
color: #333333;
line-height: 36rpx;
}
.head-title-active {
width: 160rpx;
font-size: 32rpx;
font-weight: 600;
color: #999;
line-height: 36rpx;
}
.head-title-animation {
animation-name: title-animation;
animation-duration: 0.1s;
animation-timing-function: ease-out;
animation-fill-mode: forwards;
}
.head-title-line {
position: relative;
&::before {
content: "";
width: 1rpx;
height: 34rpx;
background-color: #e4e7ed;
position: absolute;
left: -30rpx;
top: 50%;
transform: translateY(-50%);
}
}
.head-subtitle {
font-size: 26rpx;
font-weight: 400;
color: #c2c7cf;
text-align: left;
display: flex;
}
}
.code-btn[disabled] {
background-color: #fff;
}
.code-btn-start {
width: 160rpx;
line-height: 56rpx;
border: 1rpx solid #e9b766;
border-radius: 28rpx;
font-size: 26rpx;
font-weight: 400;
color: #e9b766;
opacity: 0.5;
}
.forgot-btn {
width: 160rpx;
line-height: 56rpx;
font-size: 30rpx;
font-weight: 500;
color: #999;
}
.code-btn-end {
opacity: 1 !important;
}
.login-btn-start {
width: 158rpx;
line-height: 56rpx;
background: linear-gradient(90deg, #17C161, #eecc89);
border-radius: 28rpx;
font-size: 26rpx;
font-weight: 500;
color: #ffffff;
}
.type-btn {
padding: 20rpx;
margin: 40rpx auto;
width: 200rpx;
font-size: 30rpx;
font-weight: 500;
color: #999999;
}
.auto-login-box {
width: 100%;
.auto-login-img {
width: 68rpx;
height: 68rpx;
border-radius: 50%;
margin: 0 30rpx;
}
}
.agreement-box {
margin: 80rpx auto 0;
.protocol-check {
transform: scale(0.7);
}
.agreement-text {
font-size: 26rpx;
font-weight: 500;
color: #999999;
.tcp-text {
color: #e9b562;
}
}
}
}
// 修改密码
.editPwd-btn-box {
.save-btn {
width: 690rpx;
line-height: 70rpx;
background: linear-gradient(90deg, #17C161, #eecc89);
border-radius: 35rpx;
font-size: 28rpx;
font-weight: 500;
color: #ffffff;
}
.forgot-btn {
width: 690rpx;
line-height: 70rpx;
font-size: 28rpx;
font-weight: 500;
color: #999999;
}
}
</style>