|
@@ -0,0 +1,188 @@
|
|
|
|
+<!--
|
|
|
|
+ * @Author: your name
|
|
|
|
+ * @Date: 2021-01-11 11:14:26
|
|
|
|
+ * @LastEditTime: 2022-04-28 18:35:39
|
|
|
|
+ * @LastEditors: Please set LastEditors
|
|
|
|
+ * @Description: In User Settings Edit
|
|
|
|
+ * @FilePath: \vue3-element-admin\src\views\Login.vue
|
|
|
|
+-->
|
|
|
|
+<template>
|
|
|
|
+ <div class="backdrop-layer">
|
|
|
|
+ <div class="head">
|
|
|
|
+ <div class="logo"></div>
|
|
|
|
+ <div class="title">飞鸟确权平台
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="ve_container">
|
|
|
|
+ <el-card style="height: 300px" :body-style="{ background: '#ffffff' }">
|
|
|
|
+ <h1>用户登录</h1>
|
|
|
|
+ <transition name="el-fade-in-linear">
|
|
|
|
+ <el-form
|
|
|
|
+ :model="form"
|
|
|
|
+ :rules="rules"
|
|
|
|
+ v-show="!success"
|
|
|
|
+ class="ve_form"
|
|
|
|
+ ref="ref_form"
|
|
|
|
+ :inline="false"
|
|
|
|
+ @keyup.enter="onSubmit"
|
|
|
|
+ >
|
|
|
|
+ <el-form-item prop="phone">
|
|
|
|
+ <el-input
|
|
|
|
+ size="large"
|
|
|
|
+ v-model.trim="phone"
|
|
|
|
+ placeholder="用户名"
|
|
|
|
+ >
|
|
|
|
+ <template #prepend>
|
|
|
|
+ <el-icon :size="20"><Iphone /></el-icon>
|
|
|
|
+ </template>
|
|
|
|
+ </el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item prop="code">
|
|
|
|
+ <el-input
|
|
|
|
+ size="large"
|
|
|
|
+ v-model.trim="code"
|
|
|
|
+ placeholder="验证码"
|
|
|
|
+ >
|
|
|
|
+ <template #prepend>
|
|
|
|
+ <el-icon :size="20"><Key /></el-icon>
|
|
|
|
+ </template>
|
|
|
|
+ </el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item>
|
|
|
|
+ <div style="width: 50%;float: left;text-align: left;"><el-checkbox >记住密码</el-checkbox></div>
|
|
|
|
+ <div style="width: 50%;float: left;">
|
|
|
|
+ <el-button
|
|
|
|
+ class="ve_submit"
|
|
|
|
+ type="primary"
|
|
|
|
+ @click="onSubmit"
|
|
|
|
+ >
|
|
|
|
+ 登录
|
|
|
|
+ </el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </transition>
|
|
|
|
+ </el-card>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup>
|
|
|
|
+import {SET_TOKEN, SET_UNAME, SET_USER_INFO} from "@/store/modules/app/type";
|
|
|
|
+import Common from "@/components/Common";
|
|
|
|
+import { ref, reactive, toRefs } from "vue";
|
|
|
|
+import { useStore } from "vuex";
|
|
|
|
+import { useRouter } from "vue-router";
|
|
|
|
+
|
|
|
|
+const rules = {
|
|
|
|
+ phone: [{ required: true, message: "请输入用户名", trigger: "blur" }]
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+// const rules = {
|
|
|
|
+// phone: [{ required: true, message: "请输入用户名", trigger: "blur" }]
|
|
|
|
+// ,
|
|
|
|
+// code: [{ required: true, message: "请输入验证码", trigger: "blur" }
|
|
|
|
+// ],
|
|
|
|
+// };
|
|
|
|
+
|
|
|
|
+const store = useStore();
|
|
|
|
+const router = useRouter();
|
|
|
|
+const form = reactive({
|
|
|
|
+ "code": "",
|
|
|
|
+ "phone": "13797066447"
|
|
|
|
+});
|
|
|
|
+const { phone, code } = toRefs(form);
|
|
|
|
+const ref_form = ref(null);
|
|
|
|
+const success = ref(false);
|
|
|
|
+sessionStorage.clear();
|
|
|
|
+store.commit(`app/${SET_TOKEN}`, "");
|
|
|
|
+router.options.isAddDynamicMenuRoutes = false;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+const onSubmit = () => {
|
|
|
|
+ ref_form.value.validate(async (valid) => {
|
|
|
|
+ if (valid) {
|
|
|
|
+ const res = await VE_API.system.phoneLogin(form);
|
|
|
|
+ if (res.code == 0) {
|
|
|
|
+ const { token, userName, djiCloudToken } = res.data;
|
|
|
|
+ store.commit(`app/${SET_TOKEN}`, token);
|
|
|
|
+ store.commit(`app/djiCloudToken`, djiCloudToken);
|
|
|
|
+ store.commit(`app/${SET_UNAME}`, userName);
|
|
|
|
+ res.data["token"] = undefined
|
|
|
|
+ res.data["x-auth-token"] = undefined
|
|
|
|
+ res.data["pwd"] = undefined
|
|
|
|
+ store.commit(`app/${SET_USER_INFO}`, JSON.stringify(res.data));
|
|
|
|
+ success.value = true;
|
|
|
|
+ // router.push({ name: "Home" });
|
|
|
|
+ router.push({ name: "Authentic" });
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+.ve_container {
|
|
|
|
+ position: absolute;
|
|
|
|
+ z-index: 1;
|
|
|
|
+ width: 400px;
|
|
|
|
+ top: calc(50%);
|
|
|
|
+ left: calc(50% - 250px);
|
|
|
|
+ transform: translateY(-50%);
|
|
|
|
+ transition: all 1s;
|
|
|
|
+ min-height: 273px;
|
|
|
|
+ text-align: center;
|
|
|
|
+ h1 {
|
|
|
|
+ font-size: 24px;
|
|
|
|
+ transition: all 1s;
|
|
|
|
+ font-weight: normal;
|
|
|
|
+ text-align: left;
|
|
|
|
+ margin-bottom: 36px;
|
|
|
|
+ }
|
|
|
|
+ .ve_form {
|
|
|
|
+ .ve_submit {
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 45px;
|
|
|
|
+ background: #0BC678;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+.backdrop-layer{
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 0px;
|
|
|
|
+ bottom: 0px;
|
|
|
|
+ left: 0px;
|
|
|
|
+ right: 0px;
|
|
|
|
+ background: url(@/assets/login_bg.jpg) no-repeat;
|
|
|
|
+ background-size:100% 100%;
|
|
|
|
+ z-index: 1;
|
|
|
|
+ overflow: hidden;
|
|
|
|
+}
|
|
|
|
+.head{
|
|
|
|
+ position: absolute;
|
|
|
|
+ left: 300px;
|
|
|
|
+ top: 100px;
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ padding: 50px;
|
|
|
|
+ .title{
|
|
|
|
+ font-size: 30px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ color:#006600;
|
|
|
|
+ float: left;
|
|
|
|
+ line-height: 50px;
|
|
|
|
+ margin-left: 20px;
|
|
|
|
+ }
|
|
|
|
+ .logo{
|
|
|
|
+ width: calc(167px * 0.5);
|
|
|
|
+ height: calc(245px * 0.5);
|
|
|
|
+ background: url(@/assets/img/logo-verticle.png) no-repeat;
|
|
|
|
+ background-size:100% 100%;
|
|
|
|
+ float: left;
|
|
|
|
+ z-index: 1000;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|