Ver código fonte

feat: 静态页面

xiaoyu10 1 ano atrás
pai
commit
d6dd29fa50

+ 17 - 4
src/views/AdminPage/LoginPage/AdminLoginPage.vue

@@ -12,9 +12,12 @@
           <img src="@/image/seecoderLogo.png" alt="logo" width="400vh">
         </div>
       </div>
-      <div class="login-box">
-        <div class="box-content" style="height: 300px">
-          <AdminLoginForm/>
+      <div  class="login-box">
+        <div v-if="isLogin" class="box-content" style="height: 300px">
+          <AdminLoginForm @register="showRegister"/>
+        </div>
+        <div v-if="!isLogin" class="box-content" style="height: 300px">
+          <AdminRegisterForm @back="showLogin"/>
         </div>
       </div>
     </div>
@@ -23,7 +26,17 @@
 
 <script setup lang="ts">
 import "@/views/LoginPage/index.scss"
-import AdminLoginForm from "@/views/AdminPage/LoginPage/component/AdminLoginForm.vue";
+import AdminLoginForm from "@/views/AdminPage/LoginPage/component/AdminLoginForm.vue"
+import AdminRegisterForm from "@/views/AdminPage/LoginPage/component/AdminRegisterForm.vue"
+import { ref } from "vue";
+
+const isLogin = ref(true);
+const showRegister = () => {
+  isLogin.value = false;
+}
+const showLogin = () => {
+  isLogin.value = true;
+}
 </script>
 
 <script lang="ts">

+ 130 - 7
src/views/AdminPage/LoginPage/component/AdminLoginForm.vue

@@ -1,9 +1,12 @@
+<!-- 目前先征用为绕过门户账号登录的内部通道了hhh -->
+
 <template>
   <div class="login-style">
     <div class="box-vessel">
       <div class="vessel-title">
-        账号登录
+        开发者账号登录
       </div>
+      <div class="vessel-desc" style="text-align: center; font: 300; color: #66ccff; margin-bottom: 16px;"> 🚀 内部测试通道 无需门户账号</div>
       <el-form
           :model="data"
           :rules="rules"
@@ -23,16 +26,19 @@
                 show-password
             />
         </el-form-item>
-        <el-form-item>
-          <el-button class="login-button" @click="handleLogin">登录</el-button>
-        </el-form-item>
+        <div class="btn-box">
+          <!-- <el-button class="login-button" @click="handleLogin">登录</el-button> -->
+          <div class="login-button"  style="background-color: #3c84bb;" @click="handleDevLogin">🔑 登录</div>
+          <div class="login-button" style="background-color: #f3a44c;" @click="handleGetAccount">👀 已有测试账号</div>
+          <div class="login-button" style="background-color: #50a879;" @click="handleCreateAccount">🪐 新建测试账号</div>
+        </div>
       </el-form>
     </div>
   </div>
 </template>
 
 <script setup lang="ts">
-  import "@/views/LoginPage/component/index.scss"
+  // import "@/views/LoginPage/component/index.scss"
   import {reactive} from "vue";
   import router from "@/router";
   import {ElMessage} from "element-plus";
@@ -55,7 +61,7 @@
       { required: true, message: '密码不能为空', trigger: 'blur' },
     ],
   });
-
+  //管理员登录相关 暂时弃用
   const handleLogin = () => {
 
     //1.判断是不是管理员账号
@@ -96,10 +102,127 @@
           })
           console.log("登陆失败", _err)
         })
-      };
+  };
+  // TODO: 开发者账号登录相关
+  //登录
+
+  const emit = defineEmits(['register']);
+
+  const handleDevLogin = () =>{
+
+  }
+  //获取已有测试账号列表
+  const handleGetAccount = () => {
+
+  }
+  //新建测试账号
+  const handleCreateAccount = () => {
+    emit('register');
+  }
+
+  
 
 </script>
 
+<style lang="scss">
+.login-style {
+  .box-vessel {
+      padding: 20px 32px;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      height: 100%;
+      flex: 1;
+    //   box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.20);
+        .vessel-title{
+            font-size: 24px;
+            // margin-top: 16px;
+            text-shadow: 0px -1px 16px rgba(0, 0, 0, 0.20);
+        }
+        .vessel-desc{
+            margin-top: auto ;
+            font-size: 16px;
+        }
+
+    .code-button-active {
+      color: #fff;
+      background-color: var(--main-color);
+      
+      &:hover {
+        color: #fff;
+        background-color: rgba(#1677ff, 0.5);
+      }
+    }
+    .btn-box {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      // height: 100%;
+      width: 100%;
+      // flex: 1 0 0;
+
+      .login-button{
+        width: 60%;
+        color: #fff;
+        // background-color: var(--main-color);
+        border-radius: 50px;
+        text-align: center;
+        font-size: 16px;
+        margin-bottom: 8px;
+        line-height: 32px;
+        border: 1px solid rgba(0, 0, 0, 0.03);
+        box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.20);
+
+        &.hover {
+          background-color: rgba(#1677ff, 0.5);
+        }
+
+        &:active {
+          background-color: rgba(#1677ff, 0.5);
+        }
+      
+    }
+
+    }
+
+    
+
+    .forget {
+      font-size: 14px;
+      text-align: right;
+      margin-bottom: 20px;
+      cursor: pointer;
+      color: var(--main-color)
+    }
+
+
+    .sign {
+      text-align: center;
+      font-size: 16px;
+      color: #8e8e8e;
+      cursor: pointer;
+    }
+
+    .verify-code {
+      display: flex;
+      align-items: center; /* 垂直居中 */
+      justify-content: space-between; /* 两端对齐 */
+    }
+    
+    .form-item {
+      flex: 1; /* 让表单项占据剩余空间 */
+      margin-right: 10px; /* 给表单项和按钮之间添加一些间距 */
+    }
+    
+    .button {
+      white-space: nowrap; /* 防止按钮文本换行 */
+    }
+  }
+}
+
+</style>
+
 <script lang="ts">
 export default {
   name: "AdminLoginForm"

+ 255 - 0
src/views/AdminPage/LoginPage/component/AdminRegisterForm.vue

@@ -0,0 +1,255 @@
+<!-- 目前先征用为绕过门户账号登录的内部通道了hhh -->
+
+<template>
+    <div class="login-style">
+      <div class="box-vessel">
+        <div class="vessel-title">
+          开发者账号注册
+        </div>
+        <div class="vessel-desc" style="text-align: center; font: 300; color: #66ccff; margin-bottom: 16px;"> 🚀 内部测试通道 无需门户账号</div>
+        <el-form
+            :model="data"  
+            :rules="rules"
+            ref="form"
+            label-width="0"
+        >
+          <el-form-item prop="account">
+            <el-input
+                v-model="data.account"
+                placeholder="请输入账号"
+            />
+          </el-form-item>
+          <el-form-item prop="password">
+              <el-input
+                  v-model="data.password"
+                  placeholder="请输入密码"
+                  show-password
+              />
+          </el-form-item>
+          <el-form-item prop="role">
+            <el-select v-model="data.role" placeholder="请选择角色">
+                <!-- <el-option label="管理员" value="ADMIN"></el-option> -->
+                <el-option label="教师" value="TEACHER"></el-option>
+                <el-option label="学生" value="STUDENT"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="description">
+              <el-input
+                  v-model="data.description"
+                  placeholder="请输入描述"
+
+              />
+          </el-form-item>
+          <div class="btn-box">
+            <!-- <el-button class="login-button" @click="handleLogin">登录</el-button> -->
+            <div class="login-button" style="background-color: #50a879;" @click="handleCreateAccount">🛸 注册!</div>
+            <div class="back"  @click="handleBack">返回</div>
+          </div>
+        </el-form>
+      </div>
+    </div>
+  </template>
+  
+  <script setup lang="ts">
+    // import "@/views/LoginPage/component/index.scss"
+    import {reactive} from "vue";
+    import router from "@/router";
+    import {ElMessage} from "element-plus";
+    import {useStore} from "@/store";
+    import useApis from "@/apis";
+  
+    const store = useStore();
+    const apis = useApis();
+  
+    const data = reactive({
+      account: '',
+      password: '',
+      role: '',
+      description: '',
+    });
+  
+    const rules = reactive({
+      account: [
+        { required: true, message: '账号不能为空', trigger: 'blur' },
+      ],
+      password: [
+        { required: true, message: '密码不能为空', trigger: 'blur' },
+      ],
+      description: [
+        { required: true, message: '请说明账号用途', trigger: 'blur' },
+      ],
+    });
+    //管理员登录相关 暂时弃用
+    const handleLogin = () => {
+  
+      //1.判断是不是管理员账号
+      if(data.account != "ADMIN"){
+        ElMessage({
+          message: '用户名或密码错误',
+          type: 'error',
+        })
+        return;
+      }
+  
+      // 2.登录
+      apis.login({officialNumber: data.account, password: data.password})
+          .then((_res:any) => {
+            const data = _res.data.data
+            if (_res.data.code === 200) {
+              store.setUser(data);
+              store.setToken(data?.token)
+              localStorage.setItem('Authorization', data?.token);
+              localStorage.setItem('User', data);
+              // router.push("/")
+              ElMessage({
+                message: '登录成功',
+                type: 'success',
+              })
+              router.push(`/manager/course`)
+            } else if(_res.data.code === 400){
+              ElMessage({
+                message: '用户名或密码错误',
+                type: 'error',
+              })
+            }
+          })
+          .catch((_err:any) => {
+            ElMessage({
+              message: '网络错误',
+              type: 'error',
+            })
+            console.log("登陆失败", _err)
+          })
+    };
+    // TODO: 开发者账号注册相关
+    //登录
+  
+    const emit = defineEmits(['register','back']);
+  
+    //提交注册
+    const handleCreateAccount = () => {
+     
+    }
+
+    const handleBack = () => {
+        emit('back');
+    }
+  
+    
+  
+  </script>
+  
+  <style lang="scss">
+  .login-style {
+    
+    .box-vessel {
+      padding: 20px 32px;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      height: 100%;
+      flex: 1;
+    //   box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.20);
+        .vessel-title{
+            font-size: 24px;
+            // margin-top: 16px;
+            text-shadow: 0px -1px 16px rgba(0, 0, 0, 0.20);
+        }
+        .vessel-desc{
+            margin-top: auto ;
+            font-size: 16px;
+        }
+  
+      .code-button-active {
+        color: #fff;
+        background-color: var(--main-color);
+        
+        &:hover {
+          color: #fff;
+          background-color: rgba(#1677ff, 0.5);
+        }
+      }
+      .btn-box {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        // height: 100%;
+        width: 100%;
+        // flex: 1 0 0;
+  
+        .login-button{
+          width: 60%;
+          color: #fff;
+          // background-color: var(--main-color);
+          border-radius: 50px;
+          text-align: center;
+          font-size: 16px;
+          margin-bottom: 4px;
+          line-height: 32px;
+          border: 1px solid rgba(0, 0, 0, 0.03);
+          box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.20);
+  
+          &.hover {
+            background-color: rgba(#1677ff, 0.5);
+          }
+  
+          &:active {
+            background-color: rgba(#1677ff, 0.5);
+          }
+        
+        }
+
+        .back{
+            text-align: center;
+            color:#8e8e8e;
+            font-size: 14px;
+            // margin-top: 16px;
+            margin-bottom: 8px;
+        }
+  
+      }
+  
+      
+  
+      .forget {
+        font-size: 14px;
+        text-align: right;
+        margin-bottom: 20px;
+        cursor: pointer;
+        color: var(--main-color)
+      }
+  
+  
+      .sign {
+        text-align: center;
+        font-size: 16px;
+        color: #8e8e8e;
+        cursor: pointer;
+      }
+  
+      .verify-code {
+        display: flex;
+        align-items: center; /* 垂直居中 */
+        justify-content: space-between; /* 两端对齐 */
+      }
+      
+      .form-item {
+        flex: 1; /* 让表单项占据剩余空间 */
+        margin-right: 10px; /* 给表单项和按钮之间添加一些间距 */
+      }
+      
+      .button {
+        white-space: nowrap; /* 防止按钮文本换行 */
+      }
+    }
+  }
+  
+  </style>
+  
+  <script lang="ts">
+  export default {
+    name: "AdminRegisterForm"
+  }
+  </script>
+  

+ 2 - 0
src/views/LoginPage/index.scss

@@ -65,6 +65,8 @@
         min-height: 350px;
         display: flex;
         flex-direction: column;
+        box-shadow: 0px 5px 30px 0px rgba(0, 0, 0, 0.20);
+
 
         .box-tabs {
           display: flex;