190 lines
8.1 KiB
Plaintext
190 lines
8.1 KiB
Plaintext
|
|
@{
|
|||
|
|
Layout = null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
<!DOCTYPE html>
|
|||
|
|
<html>
|
|||
|
|
<head>
|
|||
|
|
<meta charset="utf-8">
|
|||
|
|
<!-- 取消固定手机框架宽度980 -->
|
|||
|
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|||
|
|
|
|||
|
|
<title>Login</title>
|
|||
|
|
|
|||
|
|
<!-- Vue.js -->
|
|||
|
|
<script src="~/plugins/vue.js/vue_2.6.14.js"></script>
|
|||
|
|
<!-- 引入样式 -->
|
|||
|
|
@* <link href="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-2-s/element-ui/2.15.7/theme-chalk/index.min.css" type="text/css" rel="stylesheet" />*@
|
|||
|
|
|
|||
|
|
<!-- 引入组件库 -->
|
|||
|
|
@* <script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-2-s/element-ui/2.15.7/index.min.js" type="application/javascript"></script>*@
|
|||
|
|
<!-- 引入样式 -->
|
|||
|
|
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
|
|||
|
|
<!-- 引入组件库 -->
|
|||
|
|
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
|
|||
|
|
<!-- jQuery -->
|
|||
|
|
<script src="~/plugins/jQuery/jquery.min.js"></script>
|
|||
|
|
<style>
|
|||
|
|
/* 流动布局样式 */
|
|||
|
|
.login-container {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: center;
|
|||
|
|
align-items: center;
|
|||
|
|
height: 100vh;
|
|||
|
|
margin: 0;
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
|
|||
|
|
</head>
|
|||
|
|
<body style=" overflow: hidden; margin: 0; padding: 0;">
|
|||
|
|
<h1 style="font-size: 22px; position: absolute; top: 12%; left: 50%; transform: translate(-50%, -50%); margin: 0;">MQTT</h1>
|
|||
|
|
<div id="app" class="login-container">
|
|||
|
|
<el-card class="box-card" style="width: 500px;">
|
|||
|
|
<div slot="header" class="clearfix">
|
|||
|
|
<span>登录</span>
|
|||
|
|
</div>
|
|||
|
|
<div>
|
|||
|
|
<el-form ref="loginForm" :model="loginForm" label-width="85px">
|
|||
|
|
<el-form-item label="账号">
|
|||
|
|
<el-input style="width:88%" v-model="loginForm.username"></el-input>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="密码">
|
|||
|
|
<el-input style="width:88%" type="password" v-model="loginForm.password"></el-input>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item>
|
|||
|
|
<el-checkbox v-model="loginForm.remember">记住密码</el-checkbox>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item style="padding-left:0px">
|
|||
|
|
<el-button style="width:77%" type="primary" @@click="handleLogin">登录</el-button>
|
|||
|
|
</el-form-item>
|
|||
|
|
</el-form>
|
|||
|
|
</div>
|
|||
|
|
</el-card>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
var app = new Vue({
|
|||
|
|
el: '#app',
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
loginForm: {
|
|||
|
|
username: '',
|
|||
|
|
password: '',
|
|||
|
|
remember: true,
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
created: function () {
|
|||
|
|
this.loadCredentials(); // 加载凭证
|
|||
|
|
this.adjustLayout();
|
|||
|
|
window.addEventListener('resize', this.adjustLayout);
|
|||
|
|
document.addEventListener('keydown', this.handleGlobalEnter);
|
|||
|
|
this.attemptAutoLogin(); // 尝试自动登录
|
|||
|
|
},
|
|||
|
|
beforeDestroy: function () {
|
|||
|
|
window.removeEventListener('resize', this.adjustLayout);
|
|||
|
|
document.removeEventListener('keydown', this.handleGlobalEnter);
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
loadCredentials: function () {
|
|||
|
|
var username = localStorage.getItem('username');
|
|||
|
|
var password = localStorage.getItem('password');
|
|||
|
|
var remember = localStorage.getItem('remember') == 'true';
|
|||
|
|
var loginTime = localStorage.getItem('loginTime');
|
|||
|
|
|
|||
|
|
if (username && password && remember) {
|
|||
|
|
this.loginForm.username = username;
|
|||
|
|
this.loginForm.password = password;
|
|||
|
|
this.loginForm.remember = remember;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
handleLogin() {
|
|||
|
|
var _this = this; // 保存 Vue 实例的引用
|
|||
|
|
// 发送登录请求
|
|||
|
|
$.ajax({
|
|||
|
|
url: '/api/Login/Login', // 登录处理程序
|
|||
|
|
type: 'POST',
|
|||
|
|
data: {
|
|||
|
|
user_name: _this.loginForm.username,
|
|||
|
|
password: _this.loginForm.password
|
|||
|
|
},
|
|||
|
|
success: function (response) {
|
|||
|
|
// 处理成功响应
|
|||
|
|
if (response) {
|
|||
|
|
_this.$message({
|
|||
|
|
message: '登录成功!',
|
|||
|
|
type: 'success'
|
|||
|
|
});
|
|||
|
|
// 如果用户选择了记住密码,将用户名和密码保存到localStorage
|
|||
|
|
if (_this.loginForm.remember) {
|
|||
|
|
localStorage.setItem('username', _this.loginForm.username);
|
|||
|
|
localStorage.setItem('password', _this.loginForm.password);
|
|||
|
|
localStorage.setItem('remember', 'true');
|
|||
|
|
localStorage.setItem('loginTime', new Date().toString());
|
|||
|
|
} else {
|
|||
|
|
localStorage.removeItem('username');
|
|||
|
|
localStorage.removeItem('password');
|
|||
|
|
localStorage.setItem('remember', 'false');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 跳转到 /home/Index 页面
|
|||
|
|
setTimeout(function () {
|
|||
|
|
window.location.href = '/Home/Index';
|
|||
|
|
}, 666);
|
|||
|
|
} else {
|
|||
|
|
// 如果后端返回了错误信息,显示Message提示
|
|||
|
|
_this.$message.error(response);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
error: function (xhr, status, error) {
|
|||
|
|
// 处理错误响应
|
|||
|
|
_this.$message.error('登录失败!');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
handleGlobalEnter: function (event) {
|
|||
|
|
if (event.key === 'Enter') {
|
|||
|
|
this.handleLogin();
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
adjustLayout: function () {
|
|||
|
|
var width = window.innerWidth;
|
|||
|
|
var loginContainer = document.querySelector('.login-container');
|
|||
|
|
var boxCard = document.querySelector('.box-card');
|
|||
|
|
var header = document.querySelector('h1');
|
|||
|
|
|
|||
|
|
if (width < 768) { // 默认768px以下为移动设备
|
|||
|
|
// 调整登录容器的样式
|
|||
|
|
loginContainer.style.flexDirection = 'column';
|
|||
|
|
loginContainer.style.alignItems = 'flex-start';
|
|||
|
|
|
|||
|
|
boxCard.style.width = '99vw';
|
|||
|
|
|
|||
|
|
header.style.fontSize = '18px';
|
|||
|
|
} else {
|
|||
|
|
// 还原为原始样式
|
|||
|
|
loginContainer.style.flexDirection = 'row';
|
|||
|
|
loginContainer.style.alignItems = 'center';
|
|||
|
|
|
|||
|
|
boxCard.style.width = '500px';
|
|||
|
|
header.style.fontSize = '22px';
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
attemptAutoLogin: function () {
|
|||
|
|
var loginTime = localStorage.getItem('loginTime');
|
|||
|
|
if (loginTime) {
|
|||
|
|
var timeSinceLastLogin = (new Date() - new Date(loginTime)) / 3600000; // 计算时间差,单位改为小时
|
|||
|
|
if (timeSinceLastLogin < 2 && this.loginForm.username && this.loginForm.password) {
|
|||
|
|
console.log('自动登录成功');
|
|||
|
|
this.handleLogin();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
</body>
|
|||
|
|
</html>
|