|
@@ -1,22 +1,39 @@
|
|
|
<template>
|
|
|
<div class="qrcodeLogin">
|
|
|
- <div class="left">
|
|
|
- <img src="@/assets/images/common/qrcodeLogin.png" />
|
|
|
- </div>
|
|
|
- <div class="right">
|
|
|
- <div>
|
|
|
- <div class="login-title"><img src="@/assets/images/login/login.png" /></div>
|
|
|
- <div class="tab">
|
|
|
- <li>扫码登录</li>
|
|
|
- <li>密码登录</li>
|
|
|
- </div>
|
|
|
- <div class="qrcodeBox">
|
|
|
- <img :src="erweima" @click="getMobile" />
|
|
|
+ <div class="qrcodeLogin-center">
|
|
|
+ <div class="login-title"><img src="@/assets/images/login/login.png" /></div>
|
|
|
+ <Transition :enter-active-class="proxy?.animate.error.enter">
|
|
|
+ <div class="qrcodeLogin-box" :key="key">
|
|
|
+ <div class="tab">
|
|
|
+ <div class="li" :class="{ 'current': type == 1 }" @click="changeType(1)">扫码登录</div>
|
|
|
+ <div class="li" :class="{ 'current': type == 2 }" @click="changeType(2)">密码登录</div>
|
|
|
+ </div>
|
|
|
+ <div class="qrcodeLogin-content">
|
|
|
+ <div class="qrcodeBox" v-show="type == 1 ? true : false">
|
|
|
+ <div class="pic"><img :src="erweima" @click="getMobile" /></div>
|
|
|
+ <div class="name">使用微信扫一扫</div>
|
|
|
+ </div>
|
|
|
+ <div class="login-input-box" v-show="type == 2 ? true : false">
|
|
|
+ <div class="login-item">
|
|
|
+ <input class="login-input" type="text" placeholder="请输入设备ID" v-model.trim="loginForm.deviceid" />
|
|
|
+ </div>
|
|
|
+ <div class="login-item">
|
|
|
+ <input class="login-input" type="text" placeholder="请输入帐号" v-model.trim="loginForm.username" />
|
|
|
+ </div>
|
|
|
+ <div class="login-item">
|
|
|
+ <input class="login-input" type="password" autocomplete="off" placeholder="请输入密码"
|
|
|
+ v-model.trim="loginForm.password" />
|
|
|
+ </div>
|
|
|
+ <div @click="getLogin" class="login-btn">
|
|
|
+ <el-icon class="is-loading" v-if="loading">
|
|
|
+ <Loading />
|
|
|
+ </el-icon>
|
|
|
+ 登 录
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="formBox">
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ </Transition>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -32,8 +49,16 @@ const data = reactive<any>({
|
|
|
erweima: '',
|
|
|
sid: '',
|
|
|
listenWs: false,//是否监听手势
|
|
|
+ loginForm: {
|
|
|
+ deviceid: '',
|
|
|
+ username: '',
|
|
|
+ password: ''
|
|
|
+ },
|
|
|
+ loading: false,
|
|
|
+ key: 0,
|
|
|
+ type: 1,
|
|
|
});
|
|
|
-const { erweima, sid, listenWs } = toRefs(data);
|
|
|
+const { erweima, sid, listenWs, loginForm, loading, key, type } = toRefs(data);
|
|
|
|
|
|
/**
|
|
|
* 手势
|
|
@@ -63,29 +88,16 @@ const getHandWs = () => {
|
|
|
//获取信息
|
|
|
if (e?.data?.token) {
|
|
|
//保存token
|
|
|
- let token = 'JWT ' + e.data.token;
|
|
|
+ let token = e.data.token;
|
|
|
localStorage.setItem("token", token);
|
|
|
let deviceid = e?.data?.deviceid;
|
|
|
localStorage.setItem("deviceid", deviceid);
|
|
|
- getUserInfo();
|
|
|
//刷新
|
|
|
window.location.reload()
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
|
|
|
-//获取个人信息
|
|
|
-const getUserInfo = () => {
|
|
|
- let params = {};
|
|
|
- proxy?.$http.common.getUserInfo(params).then((res: any) => {
|
|
|
- //保存信息
|
|
|
- if (res.data.length) {
|
|
|
- let info = JSON.stringify(res.data[0]);
|
|
|
- localStorage.setItem("userInfo", info);
|
|
|
- }
|
|
|
- });
|
|
|
-};
|
|
|
-
|
|
|
/**
|
|
|
* 获取二维码
|
|
|
*/
|
|
@@ -98,6 +110,46 @@ const getErweima = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+// 登录
|
|
|
+const getLogin = () => {
|
|
|
+ let deviceid = loginForm.value.deviceid;
|
|
|
+ let username = loginForm.value.username;
|
|
|
+ let password = loginForm.value.password;
|
|
|
+ if (!deviceid || !username || !password) {
|
|
|
+ proxy?.$modal.msgWarning("请填写完整信息!");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ loading.value = true;
|
|
|
+ proxy?.$modal.loading();
|
|
|
+ let params = {
|
|
|
+ sid: sid.value,
|
|
|
+ deviceid,
|
|
|
+ username,
|
|
|
+ password,
|
|
|
+ };
|
|
|
+ proxy?.$http.common.qrlogin(params).then((res: any) => {
|
|
|
+ if (res.access_token) {
|
|
|
+ }
|
|
|
+ }).catch(() => {
|
|
|
+ key.value++;
|
|
|
+ }).finally(() => {
|
|
|
+ proxy?.$modal?.closeLoading();
|
|
|
+ loading.value = false;
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 切换登录类型
|
|
|
+*/
|
|
|
+const changeType = (data: Number) => {
|
|
|
+ type.value = data
|
|
|
+ if (type.value == 2 && sid.value == undefined && !sid.value) {
|
|
|
+ proxy?.$modal.msgError("缺少SID,重新获取!");
|
|
|
+ //刷新
|
|
|
+ window.location.reload()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 跳转手机登录页
|
|
|
*/
|
|
@@ -112,7 +164,6 @@ onMounted(() => {
|
|
|
if (token && deviceid) {
|
|
|
//跳转
|
|
|
router.push({ path: '/gesture' });
|
|
|
- getUserInfo();
|
|
|
} else {
|
|
|
getHandWs();
|
|
|
}
|
|
@@ -121,25 +172,132 @@ onMounted(() => {
|
|
|
onBeforeUnmount(() => {
|
|
|
listenWs.value = false;
|
|
|
})
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ //测试环境默认密码
|
|
|
+ if (import.meta.env.DEV) {
|
|
|
+ loginForm.value.deviceid = '38715692';
|
|
|
+ loginForm.value.username = 'manage1';
|
|
|
+ loginForm.value.password = 'trops@2022';
|
|
|
+ }
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
.qrcodeLogin {
|
|
|
- width: 100vw;
|
|
|
+ width: 100%;
|
|
|
height: 100vh;
|
|
|
display: flex;
|
|
|
- background: #ffffff;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .qrcodeLogin-center {
|
|
|
+ .login-title {
|
|
|
+ text-align: center;
|
|
|
|
|
|
- .left {
|
|
|
- width: 50%;
|
|
|
+ img {
|
|
|
+ width: 8rem;
|
|
|
+ }
|
|
|
|
|
|
- img {
|
|
|
- width: 100%;
|
|
|
+ margin-bottom: 1.2rem;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .right {
|
|
|
- width: 50%;
|
|
|
+ .qrcodeLogin-box {
|
|
|
+ background: linear-gradient(41deg, #1D2F3D -83%, #304453 95%);
|
|
|
+ box-shadow: inset 0px 1px 0px 2px rgba(255, 255, 255, 0.2);
|
|
|
+ border-radius: 1.6rem;
|
|
|
+
|
|
|
+ .tab {
|
|
|
+ display: flex;
|
|
|
+ font-size: 1.2rem;
|
|
|
+ text-align: center;
|
|
|
+ height: 4rem;
|
|
|
+ line-height: 4rem;
|
|
|
+ .li {
|
|
|
+ width: 50%;
|
|
|
+ color: #ffffff;
|
|
|
+ border-bottom: 1px solid #f1f1f1;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ .current{
|
|
|
+ color: #14F287;
|
|
|
+ border-bottom: 1px solid #14F287;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .qrcodeLogin-content {
|
|
|
+ width: 13rem;
|
|
|
+ height: calc(13rem + 1rem + 2rem);
|
|
|
+ padding: 2rem 5rem;
|
|
|
+ .qrcodeBox {
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ .pic {
|
|
|
+ width: 100%;
|
|
|
+ margin-bottom: 1rem;
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .name {
|
|
|
+ color: #ffffff;
|
|
|
+ font-size: 1.4rem;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .login-input-box {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ flex-direction: column;
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ .login-item {
|
|
|
+ width: 100%;
|
|
|
+ margin-bottom: 1.2rem;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .login-input {
|
|
|
+ width: 100%;
|
|
|
+ height: 2.9rem;
|
|
|
+ line-height: 2.9rem;
|
|
|
+ border-radius: 0.83rem;
|
|
|
+ padding: 0 1rem;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 1.65rem;
|
|
|
+ opacity: 1;
|
|
|
+ background: #EAEAEA;
|
|
|
+ box-sizing: border-box;
|
|
|
+ border: 1px solid #FFFFFF;
|
|
|
+ box-shadow: inset 0px 0px 10px 1px rgba(78, 78, 78, 0.5899);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .login-btn {
|
|
|
+ width: 100%;
|
|
|
+ height: 3.59rem;
|
|
|
+ line-height: 3.59rem;
|
|
|
+ border-radius: 0.83rem;
|
|
|
+ font-size: 2rem;
|
|
|
+ opacity: 1;
|
|
|
+ text-align: center;
|
|
|
+ background: radial-gradient(141% 126% at 5% 93%, #8EFFA9 0%, #07FFE7 100%);
|
|
|
+ box-shadow: inset 0px 1px 0px 2px rgba(255, 255, 255, 0.5577);
|
|
|
+ cursor: pointer;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ .is-loading {
|
|
|
+ margin-right: 5px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|