• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Vue制作一個登錄界面(javaEE大作業實戰)

    標簽: vue

    項目基本目錄結構:
    在這里插入圖片描述

    1. global.css ,設置 html,body,以及 #app區域所有的高度占比都是 100%
    /* 全局樣式表 */
    
    html,
    body,
    #app {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    
    
    1. router 的配置
    import Vue from 'vue'
    import Router from 'vue-router'
    
    import LoginView from "@/views/login/LoginView";
    
    
    import NavLeft from "@/views/tabbar/NavLeft";
    import NavExample from "@/views/tabbar/NavExample";
    import LoginPage from "@/views/login/LoginPage";
    import Home from "../views/home/Home";
    
    
    Vue.use(Router)
    
    const router = new Router({
      routes: [
        {
          path: '/',
          name: 'LoginPage',
          component: LoginPage
        },
        {
          path: '/login',
          component: LoginPage
        },
        {
          path:'/home',
          component: Home
        },
        {
          path: '/nav',
          name: 'NavLeft',
          component: NavLeft
        },
        {
          path: '/nav2',
          name: 'NavExample',
          component: NavExample
        }
    
    
    
      ]
    })
    
    router.beforeEach((to,from,next) => {
      //to: 將要訪問的路徑
      //next 放行函數,強制跳轉路徑 next(url)
      if(to.path=='/login') return next()
    
      let token = window.sessionStorage.getItem('token')
      if(!token) {
        return next('/login')
      }
      next()
    
    
    })
    
    export default router
    
    
    1. main.js的配置
    // The Vue build version to load with the `import` command
    // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    import App from './App'
    import router from './router'
    //需要再 main這里引入全局樣式表 ,并且注冊
    import '@/assets/css/global.css'
    
    
    import 'element-ui/lib/theme-chalk/index.css';
    
    import {
      Button,Form,FormItem,Input,Message,Container,Header,Aside,Footer,Main
    
    } from "element-ui";
    
    
    
    Vue.use(Button)
    Vue.use(Form)
    Vue.use(FormItem)
    Vue.use(Input)
    Vue.use(Container)
    Vue.use(Header)
    Vue.use(Aside)
    Vue.use(Footer)
    Vue.use(Main)
    
    
    Vue.prototype.$message = Message
    
    
    import axios from 'axios'
    import el from "element-ui/src/locale/lang/el";
    axios.defaults.baseURL='localhost:8080/api/';
    Vue.prototype.$http = axios;
    
    
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      router,
      components: { App },
      template: '<App/>'
    })
    
    
    1. 登錄界面:
    <template>
      <div class="login_container">
        <div class="login_box">
          <div class="avater_box">
            <img src="@/assets/logo.png" alt="">
          </div>
          <!-- 登錄組件      -->
          <el-form label-width="0px" class="login_form"
                   comment="這個是登錄框,:model 用來雙向綁定數據"
                   :model="loginInfo"
                   :rules="inputRules"
                   ref="loginFormRef"
          >
            <el-form-item comment="用戶名" prop="username">
              <!-- 如果沒有提供的話,就去阿里圖標庫下載          -->
              <el-input prefix-icon="el-icon-user" v-model="loginInfo.username"></el-input>
            </el-form-item>
            <el-form-item comment="密碼"  prop="password">
              <el-input prefix-icon="el-icon-warning-outline"  v-model="loginInfo.password" type="password"></el-input>
            </el-form-item>
    
            <el-form-item class="btn-line">
              <el-button type="success" @click="doPost">登錄</el-button>
              <el-button type="info" @click="resetFields" >重置</el-button>
    
            </el-form-item>
    
    
          </el-form>
        </div>
      </div>
    </template>
    
    <script>
      export default {
        name: "LoginPage",
        data() {
          return {
            //用戶輸入信息校驗
            loginInfo: {
              username: '',
              password: ''
            },
          //  用戶輸入校驗
            inputRules:{
              username:[
                {required:true,message:'請輸入登錄賬號',trigger:'blur'},
                {min:3,max:20,message: "長度在3到20個字符",trigger: 'blur'}
              ],
              password: [
                {required:true,message:'請輸入登錄密碼',trigger:'blur'},
                {min:5,max:20,message: "長度在5到20個字符",trigger: 'blur'}
              ]
            }
          }
        },
        methods:{
          doPost() {
            this.$refs.loginFormRef.validate(async valid => {
              // console.log(123)
              console.log(valid);
              if(!valid) return;
              try{
                const {data:result} = await this.$http.post("login",this.loginInfo);
                console.log(result)
              }catch (e) {
                console.log('異常')
                // this.$message.error("網絡有問題")
                this.$message.success("登錄成功")
                let token = '123'
                window.sessionStorage.setItem('token',token)
                this.$router.push('/home')
              }
              //將 result.data 拿出來,并且打印
            })
          },
          resetFields() {
            this.$refs.loginFormRef.resetFields();
          }
        }
      }
    </script>
    
    <style scoped lang="less">
      .login_container {
        background-color: #111821;
        height: 100%;
        width: 100%;
    
    
        .login_box {
          width: 450px;
          height: 300px;
          background-color: white;
          border-radius: 3px;
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%, -50%);
    
          .avater_box {
            height: 130px;
            width: 133px;
            border: 1px solid #eeeeee;
            border-radius: 50%; /*    父節點圓角          */
            box-shadow: 0 0 10px #ddd; /* 設置同心圓陰影 */
            left: 50%;
            right: 50%;
            position: absolute;
            transform: translate(-50%, -50%); /* 使用絕對定位,所有根據該盒子的高度移動*/
            background-color: #fff;
    
            img {
              width: 100%;
              height: 100%;
              border-radius: 50%; /*   圖片圓角       */
              background-color: #eeeeee;
            }
    
          }
    
          .btn-line {
            display: flex;
            justify-content: flex-end;
          }
    
          .login_form {
            position: absolute;
            bottom: 0;
            width: 100%;
            padding: 0 10px;
            box-sizing: border-box; /* form 不設置border-sizing 會撐開父元素 */
          }
        }
    
      }
    
    
    </style>
    
    

    界面如圖所示:
    在這里插入圖片描述

    版權聲明:本文為qq_43923045原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_43923045/article/details/106564706

    智能推薦

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    猜你喜歡

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    19.vue中封裝echarts組件

    19.vue中封裝echarts組件 1.效果圖 2.echarts組件 3.使用組件 按照組件格式整理好數據格式 傳入組件 home.vue 4.接口返回數據格式...

    劍指Offer39-調整數組順序使奇數位于偶數前面

    一開始想著用冒泡排序的方法來做,但是bug還是很多,后來看了評論區答案,發現直接空間換時間是最簡單的,而且和快排的寫法是類似的。...

    【一只蒟蒻的刷題歷程】【藍橋杯】歷屆試題 九宮重排 (八數碼問題:BFS+集合set)

    資源限制 時間限制:1.0s 內存限制:256.0MB 問題描述 如下面第一個圖的九宮格中,放著 1~8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。 我們把第一個圖的局面記為:12345678. 把第二個圖的局面記為:123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。 本題目的任務是已知九宮的初態...

    精品国产乱码久久久久久蜜桃不卡