From be79ce19df6ea881de516ae0b44bfe527e90e736 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期三, 29 六月 2022 19:37:24 +0800 Subject: [PATCH] Merge branch 'master' of https://sinanoaq.cn:8888/r/gtqtOut --- src/views/loginPage/component/accountLogin.vue | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 207 insertions(+), 0 deletions(-) diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue new file mode 100644 index 0000000..d477fa1 --- /dev/null +++ b/src/views/loginPage/component/accountLogin.vue @@ -0,0 +1,207 @@ +<template> + <el-form size="large" class="login-content-form"> + <el-form-item class="login-animation1"> + <el-input type="text" :placeholder="$t('message.account.accountPlaceholder1')" v-model="ruleForm.username" clearable autocomplete="off" size="large"> + <template #prefix> + <el-icon class="el-input__icon" style="margin-right: 20px"><img src="../../../assets/loginPage/login_icon_user.png" style="width: 24px;height: 24px"></el-icon> + </template> + </el-input> + </el-form-item> + <el-form-item class="login-animation2"> + <el-input + :type="isShowPassword ? 'text' : 'password'" + :placeholder="$t('message.account.accountPlaceholder2')" + v-model="ruleForm.password" + autocomplete="off" + size="large" + > + <template #prefix> + <el-icon class="el-input__icon" style="margin-right: 20px"><img src="../../../assets/loginPage/login_icon_password.png" style="width: 24px;height: 24px"></el-icon> + </template> + <template #suffix> + <i + class="iconfont el-input__icon login-content-password" + :class="isShowPassword ? 'icon-yincangmima' : 'icon-xianshimima'" + @click="isShowPassword = !isShowPassword" + > + </i> + </template> + </el-input> + </el-form-item> + <el-form-item class="login-animation4 codeDeal"> + <el-checkbox v-model="saveCode" label="记住密码" size="large" /> + <span class="forgetCode">忘记密码?</span> + </el-form-item> + <el-form-item class="login-animation4"> + <el-button type="primary" class="login-content-submit" round @click="onSignIn" :loading="loading.signIn"> + <span>登录系统</span> + </el-button> + </el-form-item> + </el-form> +</template> + +<script lang="ts"> +import { toRefs, reactive, defineComponent, computed } from 'vue'; +import { useRoute, useRouter } from 'vue-router'; +import { ElMessage } from 'element-plus'; +import { useI18n } from 'vue-i18n'; +import Cookies from 'js-cookie'; +import { storeToRefs } from 'pinia'; +import { useThemeConfig } from '/@/stores/themeConfig'; +import { initFrontEndControlRoutes } from '/@/router/frontEnd'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { Session } from '/@/utils/storage'; +import { formatAxis } from '/@/utils/formatTime'; +import { NextLoading } from '/@/utils/loading'; +import { useLoginApi } from '/@/api/login'; +import {useUserInfo} from "/@/stores/userInfo"; + +export default defineComponent({ + name: 'accountLogin', + setup() { + const { t } = useI18n(); + const userInfo = useUserInfo() + const route = useRoute(); + const router = useRouter(); + const state = reactive({ + isShowPassword: false, + ruleForm: { + username: 'admin', + password: '123456', + }, + loading: { + signIn: false, + }, + }); + // 时间获取 + const currentTime = computed(() => { + return formatAxis(new Date()); + }); + // 登录 + const onSignIn = async () => { + state.loading.signIn = true; + // 存储 token 到浏览器缓存 + let res = await useLoginApi().signIn(state.ruleForm) + if(res.data.code === '200'){ + userInfo.setUserInfos(res.data.data) + Session.set('token', res.data.data.accessToken); + Session.set('projectId',''); + Session.set('uid',res.data.data.uid); + signInSuccess(); + }else{ + state.loading.signIn = false + ElMessage({ + type:'warning', + message:res.data.msg + }) + } + // Session.set('token', Math.random().toString(36).substr(0)); + // // 模拟数据,对接接口时,记得删除多余代码及对应依赖的引入。用于 `/src/stores/userInfo.ts` 中不同用户登录判断(模拟数据) + // Cookies.set('userName', state.ruleForm.username); + // if (!themeConfig.value.isRequestRoutes) { + // // 前端控制路由,2、请注意执行顺序 + // await initFrontEndControlRoutes(); + // signInSuccess(); + // } else { + // // 模拟后端控制路由,isRequestRoutes 为 true,则开启后端控制路由 + // // 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path "/" + // await initBackEndControlRoutes(); + // // 执行完 initBackEndControlRoutes,再执行 signInSuccess + // signInSuccess(); + // } + }; + // 登录成功后的跳转 + const signInSuccess = async () => { + // 初始化登录成功时间问候语 + let currentTimeInfo = currentTime.value; + // 登录成功,跳到转首页 + // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 + if (route.query?.redirect) { + router.push('/homeMenu'); + // router.push({ + // path: <string>route.query?.redirect, + // query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '', + // }); + } else { + router.push('/loginPage'); + } + state.loading.signIn = true; + const signInText = t('message.signInText'); + ElMessage.success(`${currentTimeInfo},${signInText}`); + // 登录成功提示 + // 关闭 loading + // 添加 loading,防止第一次进入界面时出现短暂空白 + // NextLoading.start(); + }; + return { + onSignIn, + ...toRefs(state), + }; + }, +}); +</script> + +<style scoped lang="scss"> +.login-content-form { + margin-top: 40px; + width: 420px; + + .el-input::v-deep .el-input__wrapper{ + height: 56px; + border-radius: 28px; + padding: 0 30px; + background: #F2F2F2; + &:focus-within{ + border: 1px solid #2053D7; + } + } + @for $i from 1 through 4 { + .login-animation#{$i} { + opacity: 0; + animation-name: error-num; + animation-duration: 0.5s; + animation-fill-mode: forwards; + animation-delay: calc($i/10) + s; + } + } + .codeDeal::v-deep .el-form-item__content{ + display: flex; + justify-content: space-between; + + .forgetCode{ + color: #2053D7; + cursor: pointer; + } + } + .login-content-password { + width: 100%; + display: inline-block; + width: 20px; + cursor: pointer; + &:hover { + color: #909399; + } + } + .login-content-code { + width: 100%; + padding: 0; + font-weight: bold; + letter-spacing: 5px; + } + .login-content-submit { + width: 100%; + height: 56px; + font-size: 16px; + border-radius: 28px; + letter-spacing: 4px; + font-weight: 300; + margin-top: 15px; + background: #2053D7; + transition: .3s; + &:hover{ + letter-spacing: 6px; + background: #4E7AEC; + } + } +} +</style> -- Gitblit v1.9.2