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