|
@@ -1,16 +1,26 @@
|
|
|
<script setup>
|
|
|
import {ref} from 'vue'
|
|
|
import { showToast } from 'vant';
|
|
|
-import {apiLogin} from '@/api/user'
|
|
|
+import {apiLogin,_apiLogin} from '@/api/user'
|
|
|
import md5 from 'js-md5'
|
|
|
import {Base64} from 'js-base64'
|
|
|
import { useRouter } from 'vue-router';
|
|
|
+import MobileModel from './login/MobileModel.vue';
|
|
|
+import OrdinaryModel from './login/OrdinaryModel.vue';
|
|
|
+import EmailModel from './login/EmailModel.vue';
|
|
|
+import ForgetPassModel from './login/ForgetPassModel.vue';
|
|
|
|
|
|
const router=useRouter()
|
|
|
|
|
|
-
|
|
|
-let username=ref(localStorage.getItem('account')?Base64.decode(localStorage.getItem('account')):'')
|
|
|
-let password=ref(localStorage.getItem('checkPass')?Base64.decode(localStorage.getItem('checkPass')):'')
|
|
|
+//登陆模式 ordinaryModel账号密码 mobileModel手机号 emailModel邮箱
|
|
|
+let activeModel = ref('ordinaryModel')
|
|
|
+let autoAccount = ref('')
|
|
|
+function changeModel(model){
|
|
|
+ if(model==='forgetPassModel'){
|
|
|
+ autoAccount.value = loginForm.value.getValues().username
|
|
|
+ }
|
|
|
+ activeModel.value = model
|
|
|
+}
|
|
|
|
|
|
const onSubmit = (values) => {
|
|
|
const params={
|
|
@@ -22,7 +32,7 @@ const onSubmit = (values) => {
|
|
|
if(res.Ret===200){
|
|
|
localStorage.setItem('token',res.Data.Authorization)
|
|
|
localStorage.setItem('account',Base64.encode(values.username))
|
|
|
- localStorage.setItem('checkPass',Base64.encode(values.password))
|
|
|
+ localStorage.setItem('checkPass',Base64.encode(values.password))
|
|
|
const userInfo={
|
|
|
AdminName:res.Data.AdminName,
|
|
|
Authority:res.Data.Authority,
|
|
@@ -39,40 +49,143 @@ const onSubmit = (values) => {
|
|
|
}
|
|
|
})
|
|
|
};
|
|
|
+
|
|
|
+
|
|
|
+let loginForm = ref(null)
|
|
|
+let mobileModel = ref(null)
|
|
|
+let emailModel = ref(null)
|
|
|
+const onSubmit2 = ()=>{
|
|
|
+ //根据activeModel验证值
|
|
|
+ const values = loginForm.value.getValues()
|
|
|
+ if(activeModel.value==='ordinaryModel'){
|
|
|
+ loginForm.value.validate(['username','password']).then(()=>{
|
|
|
+ userLogin({
|
|
|
+ LoginType:1,
|
|
|
+ Username:values.username,
|
|
|
+ Password:md5(values.password),
|
|
|
+ },values)
|
|
|
+ }).catch((error)=>{
|
|
|
+ console.log('error',error)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if(activeModel.value==='mobileModel'){
|
|
|
+ loginForm.value.validate(['mobile','mobileCode']).then(()=>{
|
|
|
+ userLogin({
|
|
|
+ LoginType:2,
|
|
|
+ Mobile:values.mobile,
|
|
|
+ VerifyCode:values.mobileCode
|
|
|
+ })
|
|
|
+ }).catch((error)=>{
|
|
|
+ console.log('error',error)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if(activeModel.value==='emailModel'){
|
|
|
+ loginForm.value.validate(['email','emailCode']).then(()=>{
|
|
|
+ userLogin({
|
|
|
+ LoginType:3,
|
|
|
+ Email:values.email,
|
|
|
+ VerifyCode:values.emailCode
|
|
|
+ })
|
|
|
+ }).catch((error)=>{
|
|
|
+ console.log('error',error)
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+function userLogin(params,values){
|
|
|
+ _apiLogin.apiUserLogin(params).then(res=>{
|
|
|
+ //账号异常,提醒用户用其他方式登陆
|
|
|
+ if(res.Ret===4011){
|
|
|
+ showToast('您的账号异常,请使用其他方式登陆')
|
|
|
+ }
|
|
|
+ //账号或密码错误,弹窗提示就行,因为PC端有特殊提示要求所以单独设置了状态码
|
|
|
+ if(res.Ret===4012){
|
|
|
+ showToast('账号或密码错误,请检查')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(res.Ret!==200){
|
|
|
+ activeModel.value!=='ordinaryModel'&&[activeModel].value.getCodePic()
|
|
|
+ }
|
|
|
+
|
|
|
+ localStorage.setItem('token',res.Data.Authorization)
|
|
|
+ activeModel.value==='ordinaryModel'&&localStorage.setItem('account',Base64.encode(values.username))
|
|
|
+ activeModel.value==='ordinaryModel'&&localStorage.setItem('checkPass',Base64.encode(values.password))
|
|
|
+ const userInfo={
|
|
|
+ AdminName:res.Data.AdminName,
|
|
|
+ Authority:res.Data.Authority,
|
|
|
+ ProductName:res.Data.ProductName,
|
|
|
+ RealName:res.Data.RealName,
|
|
|
+ RoleName:res.Data.RoleName,
|
|
|
+ RoleTypeCode:res.Data.RoleTypeCode,
|
|
|
+ SysRoleTypeCode:res.Data.SysRoleTypeCode,
|
|
|
+ AdminId:res.Data.AdminId,
|
|
|
+ DepartmentName:res.Data.DepartmentName
|
|
|
+ }
|
|
|
+ localStorage.setItem('userInfo',Base64.encode(JSON.stringify(userInfo)))
|
|
|
+ router.replace('/')
|
|
|
+ })
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<div class="login-page">
|
|
|
- <van-form class="form-box" @submit="onSubmit">
|
|
|
+ <van-form class="form-box" ref="loginForm" v-if="activeModel!=='forgetPassModel'">
|
|
|
<div class="logo-wrap">
|
|
|
<img class="logo" src="@/assets/imgs/logo_icon.png" alt="">
|
|
|
<div class="title">Bind on account,</div>
|
|
|
<div class="sub-title">sign in to continue</div>
|
|
|
</div>
|
|
|
- <van-field
|
|
|
- class="form-input-box"
|
|
|
- v-model="username"
|
|
|
- name="username"
|
|
|
- placeholder="请输入管理后台账号"
|
|
|
- :rules="[{ required: true, message: '请填写账号' }]"
|
|
|
- />
|
|
|
- <van-field
|
|
|
- class="form-input-box"
|
|
|
- v-model="password"
|
|
|
- type="password"
|
|
|
- name="password"
|
|
|
- placeholder="请输入密码"
|
|
|
- :rules="[{ required: true, message: '请填写密码' }]"
|
|
|
- />
|
|
|
+ <div class="ordinaryModel" v-show="activeModel==='ordinaryModel'">
|
|
|
+ <ordinary-model :activeModel="activeModel" @change-model="changeModel('forgetPassModel')"/>
|
|
|
+ </div>
|
|
|
+ <div class="mobileModel" v-show="activeModel==='mobileModel'">
|
|
|
+ <mobile-model ref="mobileModel"
|
|
|
+ :activeModel="activeModel"/>
|
|
|
+ </div>
|
|
|
+ <div class="emailModel" v-show="activeModel==='emailModel'">
|
|
|
+ <email-model ref="emailModel"
|
|
|
+ :activeModel="activeModel"/>
|
|
|
+ </div>
|
|
|
<div class="btn-box">
|
|
|
<van-button
|
|
|
round
|
|
|
block
|
|
|
type="primary"
|
|
|
- native-type="submit"
|
|
|
+ @click="onSubmit2"
|
|
|
>登录</van-button>
|
|
|
</div>
|
|
|
+ <!-- 选择其他登陆方法 -->
|
|
|
+ <div class="model-icon-box">
|
|
|
+ <div class="model-item"
|
|
|
+ @click="changeModel('ordinaryModel')"
|
|
|
+ v-show="activeModel!=='ordinaryModel'">
|
|
|
+ <div class="model-item-icon">
|
|
|
+ <img src="@/assets/imgs/login/account-icon.png"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="model-item"
|
|
|
+ @click="changeModel('mobileModel')"
|
|
|
+ v-show="activeModel!=='mobileModel'">
|
|
|
+ <div class="model-item-icon">
|
|
|
+ <img src="@/assets/imgs/login/phone-icon.png"/>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div class="model-item"
|
|
|
+ @click="changeModel('emailModel')"
|
|
|
+ v-show="activeModel!=='emailModel'">
|
|
|
+ <div class="model-item-icon">
|
|
|
+ <img src="@/assets/imgs/login/email-icon.png"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</van-form>
|
|
|
+ <div class="form-box" v-else>
|
|
|
+ <forget-pass-model ref="forgetPassModel"
|
|
|
+ :autoAccount="autoAccount"
|
|
|
+ @change-model="changeModel('ordinaryModel')"/>
|
|
|
+ </div>
|
|
|
<img class="pad-img" src="https://hzstatic.hzinsights.com/static/ETA_mobile/login_img.png" alt="">
|
|
|
<div class="mobile-bot-text">Long time More profit</div>
|
|
|
</div>
|
|
@@ -100,16 +213,24 @@ const onSubmit = (values) => {
|
|
|
|
|
|
}
|
|
|
|
|
|
-.form-input-box{
|
|
|
- padding-left: 0;
|
|
|
- padding-right: 0;
|
|
|
- border-bottom: 1px solid $border-color;
|
|
|
- margin-bottom: 40px;
|
|
|
- &::after{
|
|
|
- display: none;
|
|
|
+.model-icon-box{
|
|
|
+ margin-top: 100px;
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ justify-content: center;
|
|
|
+ gap:120px;
|
|
|
+ .model-item-icon{
|
|
|
+ width:80px;
|
|
|
+ height:80px;
|
|
|
+ border-radius: 50%;
|
|
|
+ box-shadow: 0px 2px 12px 0px #0000001A;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding:16px;
|
|
|
+ img{
|
|
|
+ width:100%;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
.mobile-bot-text{
|
|
|
margin-top: 200px;
|
|
|
text-align: center;
|
|
@@ -148,17 +269,6 @@ const onSubmit = (values) => {
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- .form-input-box{
|
|
|
- padding-left: 0;
|
|
|
- padding-right: 0;
|
|
|
- border: 1px solid $border-color;
|
|
|
- border-radius: 4px;
|
|
|
- padding: 12px 20px;
|
|
|
- margin-bottom: 40px;
|
|
|
- &::after{
|
|
|
- display: none;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
.pad-img{
|
|
|
display: block;
|
|
@@ -173,5 +283,23 @@ const onSubmit = (values) => {
|
|
|
.mobile-bot-text{
|
|
|
display: none;
|
|
|
}
|
|
|
+ .model-icon-box{
|
|
|
+ margin-top: 50px;
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ justify-content: center;
|
|
|
+ gap:60px;
|
|
|
+ .model-item-icon{
|
|
|
+ width:40px;
|
|
|
+ height:40px;
|
|
|
+ border-radius: 50%;
|
|
|
+ box-shadow: 0px 2px 12px 0px #0000001A;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding:6px;
|
|
|
+ img{
|
|
|
+ width:100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|