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.

232 lines
4.9 KiB

2 days ago
<template>
<view class="loginPage">
<view class="header-top" :style="{'top':tops+'px'}">
<view class="header-title" :style="{'height': height+'px'}">
<view class="box-bg" :style="{ width: `calc(100vw - ${widths}px - 14px)` }">
<text></text>
</view>
</view>
</view>
<image class="loginBG" src="@/PDA/static/loginBG.png" mode="widthFix"></image>
<image class="loginHead" src="@/PDA/static/loginHead.png" mode="widthFix"></image>
<view class="card">
<view class="cardBody">
<view class="inputBox">
<uni-easyinput :inputBorder="false" prefixIcon="person" v-model="account"
placeholder="请输入您的账号"></uni-easyinput>
</view>
<view class="inputBox">
<uni-easyinput :inputBorder="false" prefixIcon="locked" type="password" v-model="password"
placeholder="请输入您的密码"></uni-easyinput>
</view>
<view class="box">
<view class="rememberBox">
<checkbox-group @change="changeRemember">
<label>
<checkbox :value="isSelect.toString()" :checked="isSelect" color="#000000"
style="transform:scale(0.7)" />
<text>记住密码</text>
</label>
</checkbox-group>
</view>
</view>
</view>
<button class="loginBtn" @click="goLogin"></button>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import { onLoad, useGlobal } from '../../common/js/uniHelper.js';
const { $http, $util } = useGlobal()
const tops = ref('');
const height = ref('');
const widths = ref('');
const account = ref('');
const password = ref('');
const isSelect = ref(false);
// 页面生命周期onLoadVue3 setup中通过导入的onLoad注册
onLoad(() => {
// 读取本地存储的密码
const pwd = uni.getStorageSync('pdaPWD');
if (pwd) {
account.value = pwd.account; // ref变量需通过.value修改
password.value = pwd.password;
isSelect.value = true;
}
// 获取系统信息
uni.getSystemInfo({
success: (e) => {
tops.value = e.statusBarHeight;
const custom = uni.getMenuButtonBoundingClientRect();
widths.value = custom.width;
height.value = custom.height + (custom.top - e.statusBarHeight) * 2;
}
});
});
// 登录方法直接在setup中定义无需放在methods里
const goLogin = async () => {
uni.reLaunch({
url: "/PDA/pages/index"
});
return;
const result = await $http.sendPda({
url: 'user/login',
data: {
account: account.value,
password: password.value,
}
});
if (result.code === 1) {
if (isSelect.value) {
uni.setStorageSync('pdaPWD', {
account: account.value,
password: password.value
});
}
uni.setStorageSync('pdatoken', result.data.token);
uni.reLaunch({
url: "/PDA/pages/index"
});
} else if (result.code === 0) {
$util.showToast({ // 直接使用获取到的$util
title: result.msg
});
}
};
// 切换记住密码状态
const changeRemember = () => {
isSelect.value = !isSelect.value;
if (!isSelect.value) {
uni.removeStorageSync('pdaPWD');
}
};
</script>
<style lang="scss" scoped>
.loginPage {
width: 100%;
min-height: 100vh;
box-sizing: border-box;
position: relative;
background: #FFFFFF;
}
.loginBG {
width: 100%;
height: auto;
}
.loginHead {
position: absolute;
top: 18%;
left: 50%;
transform: translate(-50%,0);
width: 580rpx;
height: auto;
margin-bottom: 40rpx;
}
.header-top {
position: absolute;
width: 100%;
.header-title {
display: flex;
justify-content: flex-start;
align-items: center;
.box-bg {
text-align: right;
box-sizing: border-box;
padding-right: 26rpx;
color: #FFFFFF;
font-weight: 500;
font-size: 32rpx;
}
}
}
::v-deep .uni-easyinput__content-input {
width: 100%;
height: 90rpx; // 确保输入框填满父容器的高度
line-height: 90rpx; // 使得文本垂直居中
border-radius: 80rpx;
}
::v-deep .uni-easyinput__content {
background-color: #f3f8ff !important;
border-radius: 80rpx !important;
}
.card {
margin: -140rpx 100rpx 0;
.cardBody {
.inputBox {
margin: 40rpx 0;
}
}
}
.box {
display: flex;
justify-content: space-between;
align-items: center;
.rememberBox {
text {
font-weight: 400 !important;
font-size: 26rpx !important;
color: #000000 !important;
line-height: 36rpx;
}
label {
display: inline-flex;
align-items: center;
justify-content: flex-start;
}
}
.forgetPWD {
text-align: right;
text {
font-weight: 400;
font-size: 25rpx;
color: #999999;
line-height: 60rpx;
}
}
}
.loginBtn {
margin-top: 100rpx;
width: 543rpx;
height: 91rpx;
background: $pda-btn-bg;
border-radius: 82rpx 82rpx 82rpx 82rpx;
display: flex;
justify-content: center;
align-items: center;
font-weight: 500;
font-size: 34rpx;
color: $pda-btn-color;
}
</style>