detection-business/pages/Login/login.vue
2024-10-23 16:53:40 +08:00

566 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<view class="top">
<!-- <view class="touxiang">
<image src="../../static/logo.png" mode=""></image>
</view> -->
<view class="dalan">你好</view>
<view class="dalan">欢迎登陆商户端</view>
<view class="box-box">
<!-- <view class="bb-top" v-if="shopinfo == 0" @click="shopinfo = 1">
<view class="bb-bai">
<text>商户登录</text>
</view>
<view class="bb-hui">
<text>员工登录</text>
</view>
</view>
<view class="bb-top" v-if="shopinfo == 1" @click="shopinfo = 0">
<view class="bb-hui">
<text>商户登录</text>
</view>
<view class="bb-bai">
<text>员工登录</text>
</view>
</view> -->
<view class="bb-top" >
<view class="bb-bai" :class="{'shendu' : shopinfo == 0}" @click="shopinfo = 0">
<text>商户登录</text>
</view>
<view class="bb-bai" :class="{'shendu' : shopinfo == 1}" @click="shopinfo = 1">
<text>官方登录</text>
</view>
<view class="bb-bai" :class="{'shendu' : shopinfo == 2}" @click="shopinfo = 2">
<text>员工登录</text>
</view>
</view>
<view class="bb-baibox">
<view class="inputs" v-if="activeid == 0">
<input type="text" v-model="tel" placeholder="请输入手机号">
</view>
<view class="inputs" v-if="activeid == 1">
<input type="text" v-model="tel" placeholder="请输入手机号">
</view>
<view class="inputs" style="justify-content: space-between; " v-if="activeid == 1">
<input type="text" v-model="yzm" placeholder="请输入验证码">
<button class="jsq" :disabled="isButtonDisabled" @click="sendVerificationCode">{{ buttonText }}</button>
</view>
<view class="inputs" v-if="activeid == 0">
<input type="password" v-model="wrod" placeholder="请输入密码">
</view>
<view class="twotap" >
<view :class="{'blck':activeid == index}" v-for="(item,index) in qh " :key="index" @click="getxz(index)">{{item.text}}</view>
<view @click="getxz1()">忘记密码</view>
</view>
<view class="anniulanan" @click="getlogin()">
<text>登录</text>
</view>
</view>
</view>
</view>
<view class="dbottom">
<view class="axquan" v-if="yd == false" @click="yd = true"></view>
<view class="axquanl" v-if="yd == true" @click="yd = false">
<uni-icons type="checkmarkempty" color="#ffffff" size="14"></uni-icons>
</view>
<text>请您认真阅读</text>
<text class="lan">《用户协议》</text>
<text>和</text>
<text class="lan">《隐私政策》</text>
</view>
</view>
</template>
<script>
import request from '../../utils/request';
import {setToken,setTenantId, getToken} from '@/utils/auth.js'
import {
getTenantIdByWebsite
} from '@/api/login.js'
export default{
data(){
return{
phoneNumber: "",
shopinfo:0,
yd:false,
isButtonDisabled: false,
countdownTime: 60,
qh:[
{text:'密码登录'},
{text:'验证码登录'},
// {text:'忘记密码'}
],
tel:'',
yzm:'',
wrod:'',
activeid:0,
tenantCode: 'lanan'
}
},
mounted(){
getTenantIdByWebsite(this.tenantCode).then(res => {
const tenantId = res.data;
if (tenantId && tenantId >= 0) {
setTenantId(tenantId)
}
})
},
onLoad() {
},
computed: {
buttonText() {
if (this.isButtonDisabled) {
return `${this.countdownTime}s 后重新发送`;
} else {
return "获取验证码";
}
},
},
methods:{
//登录请求
getlogin(){
if(this.yd == false){
uni.showToast({
title:'请仔细阅读用户协议与隐私政策!',
icon:'none'
})
return
}
if(this.tel == ''){
uni.showToast({
title:'输入框不能为空!',
icon:'none'
})
return
}
if(this.activeid == 0){
const data ={
username:this.tel,
password:this.wrod,
type:0
}
request({
url: '/rescue/loginJcApp',
method: 'post',
data: data
}).then((res)=>{
console.log('密码请求',res);
if(res.code == 200){
setToken(res.data.accessToken)
this.userinfo()
}
})
}
if(this.activeid == 1){
const data ={
phone:this.tel,
code:this.yzm,
type:1
}
request({
url: '/rescue/loginApp',
method: 'post',
data: data
}).then((res)=>{
console.log('验证码请求',res);
if(res.code == 200){
setToken(res.data.accessToken)
this.userinfo()
}
})
}
},
userinfo(){
uni.setStorageSync("chooseIdx",this.shopinfo)
if(this.shopinfo == 0){
uni.showLoading({
title: '加载中'
});
console.log('商户');
request({
url: '/getJcPartnerInfo',
method: 'get',
}).then((res)=>{
if(res.code == 500){
uni.showToast({
title:"信息有误"
})
return
}
if(res.code == 200){
uni.setStorageSync('userinfo',res.user)
uni.setStorageSync('roleSelect','shop')
uni.hideLoading();
this.goselect()
}
})
}
if(this.shopinfo == 2){
uni.showLoading({
title: '加载中'
});
console.log('员工');
request({
url: '/getJcWorkerInfo',
method: 'get',
}).then((res)=>{
if(res.code == 200){
uni.setStorageSync('staffinfo',res.user)
uni.setStorageSync('partnerId',res.partnerInfo.partnerId)
uni.setStorageSync('roleSelect','worker')
uni.hideLoading();
uni.redirectTo({
url:'/pages/staff/staff'
})
}
})
}
if(this.shopinfo == 1){
uni.showLoading({
title: '加载中'
});
console.log('官方');
request({
url: '/rescue/getJcgfInfo',
method: 'get',
}).then((res)=>{
if(res.code == 200){
// uni.setStorageSync('staffinfo',res.user)
// uni.setStorageSync('partnerId',res.partnerInfo.partnerId)
uni.setStorageSync('roleSelect','jcgf')
uni.setStorageSync('userinfo',res.user)
console.log(res);
uni.hideLoading();
uni.redirectTo({
url:'/pages/authority/authority'
})
}
})
}
},
getxz(index){
this.activeid = index
},
getxz1(){
uni.navigateTo({
url:'/pages/Login/modify'
})
},
goregister(){
uni.navigateTo({
url:'/pages/login/register'
})
},
goforgot(){
uni.navigateTo({
url:'/pages/login/forgot'
})
},
goselect(){
console.log('执行');
uni.reLaunch({
url:'/pages/index/synthesis'
})
},
// 验证码方法
sendVerificationCode() {
let reg = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/;
if (!reg.test(this.tel)) {
uni.showToast({
icon: 'none',
title: '请输入正确的11位手机号'
})
this.tel = '';
return false;
}
if (this.isButtonDisabled) {
return; // 如果按钮已禁用,则直接返回
}
const data = {
phone:this.tel,
}
request({
url: '/loginSmsCode',
method: 'post',
params: data
}).then((res)=>{
console.log('验证码',res);
if(res.code == 200){
uni.showToast({
title:'验证码已发送 请注意查收',
icon:'none'
})
}else{
uni.showToast({
title:'网络不佳请稍后再试',
icon:'none'
})
}
})
this.disableButton(); // 禁用按钮
this.startCountdown(); // 启动倒计时
},
disableButton() {
this.isButtonDisabled = true;
},
enableButton() {
this.isButtonDisabled = false;
},
startCountdown() {
let countdown = setInterval(() => {
this.countdownTime--;
if (this.countdownTime === 0) {
clearInterval(countdown);
this.enableButton(); // 启用按钮
}
}, 1000);
},
}
}
</script>
<style scoped lang="scss">
.jsq{
border: none !important;
font-size: 12px;
height: 30px;
font-weight: 400;
color: #0078FF;
}
button {
border: none !important;
background: none !important;
margin: 0px;
display: block;
}
button:focus {
color: #0078FF;
outline: none;
box-shadow: none;
}
.content{
box-sizing: border-box;
background: linear-gradient(180deg, rgba(13,46,141,0.2) 0%, rgba(255,255,255,0) 100%);
}
.top{
box-sizing: border-box;
padding: 0px 27px;
padding-top: 100px;
// background-color:lightseagreen;
background-image: url('../../static/detection/loginbj.png');
background-size: cover;
// background-position: center;
width: 100%;
height: calc(100vh);
}
.touxiang{
width: 88px;
height: 88px;
border-radius: 10px;
background: #D7D7D7;
margin: 0 auto;
margin-bottom: 40px;
overflow: hidden;
image{
width: 100%;
height: 100%;
}
}
.twotap{
margin-top: 10px;
width: 100%;
display: flex;
align-items: center;
view{
font-size: 12px;
font-family: Microsoft YaHei;
font-weight: 400;
color: #666666;
margin-right: 38.5px;
}
}
.blck{
color: #333333 !important;
font-weight: bold !important;
}
.inputs{
height: 54px;
box-sizing: border-box;
padding: 16px 0px;
display: flex;
align-items: center;
border-bottom: 2px solid #E8E8E8 ;
// margin-top: 20px;
}
.wjworb{
margin-top: 5px;
width: 100%;
display: flex;
font-size: 12px;
color: #0078FF;
justify-content: flex-end;
align-items: center;
}
.dl{
width: 90%;
height: 44px;
background: linear-gradient(-46deg, #0853C4 0%, #4282D8 80%);
border-radius: 5px;
margin: 0 auto;
font-size: 16px;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
margin-top: 22px;
}
.hging{
width: 100%;
text-align: center;
font-size: 14px;
font-weight: 400;
color: #636363;
margin-top: 20px;
}
.wx{
width: 38px;
height: 38px;
overflow: hidden;
box-sizing: border-box;
margin: 0px auto;
margin-top: 20px;
image{
width: 100%;
height: 100%;
}
}
.hui{
font-size: 10px;
width: 100%;
text-align: center;
font-weight: 400;
color: #666666;
}
.dbottom{
display: flex;
align-items: center;
justify-content: center;
width: 100%;
text-align: center;
font-size: 12px;
color: #333333;
margin-top: 40px;
position: fixed;
bottom: 25px;
}
.lan{
color: #0D2E8D;
}
.box-box{
width: 95%;
margin: 20px auto;
border-radius: 8px;
overflow: hidden;
}
.bb-top{
height: 55px;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
background: #FFFFFF;
}
.bb-bai{
width: 33%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 17px;
font-weight: bold;
background: #FFFFFF;
// color: #0D2E8D;
color: #B5BACA;
}
.shendu{
color: #0D2E8D !important;
}
.bb-hui{
height: 100%;
width: 50%;
display: flex;
align-items: center;
justify-content: center;
background: #B5BACA;
font-size: 17px;
font-weight: 400;
color: #FFFFFF;
}
.bb-baibox{
box-sizing: border-box;
width: 100%;
padding: 15px;
background-color: white;
}
.anniulanan{
width: 90%;
height: 42px;
margin: 20px auto;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50px;
background-color: #0D2E8D;
color: white;
}
.dalan{
font-size: 25px;
font-weight: bold;
color: #0D2E8D;
margin-left: 10px;
}
.axquan{
width: 14px;
height: 14px;
border-radius: 50%;
border: 1px solid #AAAAAA;
margin-right: 5px;
}
.axquanl{
width: 14px;
height: 14px;
border-radius: 50%;
border: 1px solid #AAAAAA;
margin-right: 5px;
background-color: #0D2E8D;
}
</style>