2023-12-06 11:13:49 +08:00

162 lines
5.1 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>
<div class="login-container">
<div class="login-title-content">
<div class="login-title">佳信捷30综合展示系统</div>
<div class="login-title-bg"></div>
</div>
<div class="login-pannel" v-if="!nonLogin">
<div class="login-pannel_text">系统登录</div>
<el-form ref="loginFormRef" class="form" :model="loginForm" :rules="loginRules" size="large" :show-message="false">
<el-form-item prop="account">
<el-input v-model="loginForm.account" placeholder="请输入账号">
<template #prefix>
<img src="@/assets/images/login/accountIcon.png" alt="" />
</template>
</el-input>
</el-form-item>
<el-form-item prop="showPassword">
<el-input
type="password"
v-model="loginForm.showPassword"
placeholder="请输入密码"
show-password
autocomplete="new-password"
>
<template #prefix>
<img src="@/assets/images/login/lockIcon.png" alt="" />
</template>
</el-input>
</el-form-item>
</el-form>
<div class="other-operate">
<el-checkbox>记住密码</el-checkbox>
<span>忘记密码?</span>
</div>
<div class="login-btn">
<el-button @click="login(loginFormRef)" type="primary" size="large"> 登录 </el-button>
</div>
</div>
<div class="type-select" v-else>
<div class="type-select-item" @click="toBackLargeScreen">
<img src="@/assets/images/login/type-icon-1.png" alt="" srcset="" />
<span>展示后台</span>
</div>
<div class="type-select-item" @click="toFrontLargeScreen">
<img src="@/assets/images/login/type-icon-2.png" alt="" srcset="" />
<span>展示前台</span>
</div>
<!-- <div class="type-select-item">
<img src="@/assets/images/login/type-icon-3.png" alt="" srcset="" />
<span>企业后台</span>
</div> -->
</div>
</div>
</template>
<script setup lang="ts" name="login">
import { ref, reactive, onMounted, onBeforeUnmount } from "vue";
import { ElMessage } from "element-plus";
import { useRouter } from "vue-router";
import { Login } from "@/api/interface";
import { loginApi } from "@/api/modules/login";
import { Global3DStore } from "@/stores";
import { TabsStore } from "@/stores/modules/tabs";
import { KeepAliveStore } from "@/stores/modules/keepAlive";
import { initDynamicRouter } from "@/routers/modules/dynamicRouter";
import type { ElForm } from "element-plus";
const nonLogin = ref(false);
const router = useRouter();
const tabsStore = TabsStore();
const keepAlive = KeepAliveStore();
const globalStore = Global3DStore();
// 定义 formRef校验规则
type FormInstance = InstanceType<typeof ElForm>;
const loginFormRef = ref<FormInstance>();
const loginRules = reactive({
account: [{ required: true, message: "请输入用户名", trigger: "blur" }],
showPassword: [{ required: true, message: "请输入密码", trigger: "blur" }]
});
const loading = ref(false);
const loginForm = reactive<Login.ReqLoginForm>({ account: "", showPassword: "" });
const login = (formEl: FormInstance | undefined) => {
if (!formEl) return;
formEl.validate(async (valid, params) => {
if (!valid) {
ElMessage.error("请输入账号密码");
return;
}
loading.value = true;
try {
const arr = ref(["/config", "/home", "/home", "/home"]);
// 1.执行登录接口
const { result } = await loginApi({ ...loginForm, showPassword: loginForm.showPassword });
console.log(result);
globalStore.setUserInfo(result);
globalStore.setToken(result.token);
globalStore.setAccount(result.account);
globalStore.setAccountType(result.accountType);
globalStore.setProjectDateAuth(result.projectDateAuth);
globalStore.setIsManager(result.isManager); //我已知晓
// 2.添加动态路由
// await initDynamicRouter();
// router.push(arr[result.accountType - 1]);
// 3.清空 tabs、keepAlive 保留的数据
tabsStore.closeMultipleTab();
keepAlive.setKeepAliveName();
nonLogin.value = true;
// if (result.accountType === 1) {
// await initDynamicRouter();
// router.push(arr.value[result.accountType - 1]);
// } else {
// router.push(arr.value[result.accountType - 1]);
// }
// router.go(0);
// router.push(arr.value[result.accountType - 1]);
// 4.跳转到首页
// ElNotification({
// title: getTimeState(),
// message: "欢迎登录",
// type: "success",
// duration: 3000
// });
// return router.go(0);
} finally {
loading.value = false;
}
});
};
// 跳转到后台系统
const toBackLargeScreen = async () => {
// 添加路由
await initDynamicRouter();
router.push("/largeScreen");
};
// 跳转到前台系统
const toFrontLargeScreen = async () => {
// 添加路由
await initDynamicRouter();
router.push("/frontLargeScreen");
};
onMounted(() => {
// 监听enter事件调用登录
document.onkeydown = (e: any) => {
e = window.event || e;
if (e.code === "Enter" || e.code === "enter" || e.code === "NumpadEnter") {
if (loading.value) return;
login(loginFormRef.value);
}
};
});
// login页面销毁时需要去掉enter监听
onBeforeUnmount(() => {
document.onkeydown = null;
});
</script>
<style scoped lang="scss">
@import "./index.scss";
</style>