vue+element-ui後臺管理系統模板

来源:https://www.cnblogs.com/b10100912/archive/2022/09/21/16717705.html
-Advertisement-
Play Games

##vue+element-ui後臺管理系統模板 前端:基於vue2.0+或3.0+加上element-ui組件框架 後端:springboot+mybatis-plus寫介面 通過Axios調用介面完成數據傳遞 通過router路由完成各頁面的跳轉 ###全局配置 App.vue <templat ...


vue+element-ui後臺管理系統模板

前端:基於vue2.0+或3.0+加上element-ui組件框架

後端:springboot+mybatis-plus寫介面

通過Axios調用介面完成數據傳遞

通過router路由完成各頁面的跳轉

全局配置

App.vue

<template>
  <div>
    <router-view></router-view>
  </div>
</template>

<script>
import Login from '@/views/Login.vue'
export default {
  name: 'app',
  components: {
    Login
  }
}
</script>

<style>
body {
  margin: 0px auto;
  padding: 0px;
}
</style>

第一種頁面集合在一個頁面

登錄界面

註冊界面

vue頁面實現
LogReg.vue

<template>
  <el-form class="login-box">
  <el-tabs stretch="true">
    <el-tab-pane label="登錄用戶" value="first"><Login></Login></el-tab-pane>
    <el-tab-pane label="註冊用戶" name="second"><Register></Register></el-tab-pane>
  </el-tabs>
  </el-form>
</template>
<script>
import Register from '../Register.vue';
import Login from '../Login.vue';
  export default {
    components: {
    Register,
    Login
},
    data() {
      return {
        activeName: 'first'
      };
    },
    methods: {
      
    }
  };
</script>

<style>
.login-box {
    border: 1px solid #DCDFE6;
    width: 350px;
    margin: 180px auto;
    padding: 35px 35px 15px 35px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    box-shadow: 0 0 25px #909399;
  }
</style>

Login.vue

<template>
  <div>
    <el-form ref="loginForm" :model="loginform" :rules="rules" label-width="80px" >
        <h3 class="login-title">歡迎登錄</h3>
      <el-form-item label="賬號" prop="user">
        <el-input type="text" placeholder="請輸入賬號" v-model="loginform.user"/>
      </el-form-item>
      <el-form-item label="密碼" prop="password">
        <el-input type="password" placeholder="請輸入密碼" v-model="loginform.password"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" :loading="logining" v-on:click="onSubmit()">登錄</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import Axios from 'axios';


  export default{
    components: {

    },
    name: "Login",
    data() {
      return {
        activeName: 'first',
        logining:false,
        loginform: {
          user: '',
          password: ''
        },

        // 表單驗證,需要在 el-form-item 元素中增加 prop 屬性
        rules: {
          user: [
            {required: true, message: '賬號不可為空', trigger: 'blur'}
          ],
          password: [
            {required: true, message: '密碼不可為空', trigger: 'blur'}
          ]
        },

        // 對話框顯示和隱藏
        // dialogVisible: false
      }
    },
    methods: {
      onSubmit() {
        // console.log(this.form)
        // 為表單綁定驗證功能
        this.$refs.loginForm.validate((valid) => {
          if (valid) {
            this.logining=true
            let _this = this
            if (_this.logining == true) {
              Axios.get("http://localhost:8181/admin/login",{params:this.loginform}).then(function (res) {
              _this.logining=false
              // console.log(res.data.code)
              if (res.data.code == -1) {
                _this.$message.error('用戶名不存在');
              }
              if (res.data.code == -2) {
                _this.$message.error('密碼錯誤');
              }
              if (res.data.code == 0) {
                _this.$message({
                  message: '恭喜你,登錄成功',
                  type: 'success'
                });
                localStorage.setItem('main',JSON.stringify(res.data.data));
                _this.$router.replace({path:'/main'})
              }
            })
            }
            
          }
            // 使用 vue-router 路由到指定頁面,該方式稱之為編程式導航
            // this.$router.push("/main");
          // } else {
            
          //   // return false;
          // }
        });
      }
    }
  }

</script>

<style scoped>
.login-box {
    border: 1px solid #DCDFE6;
    width: 350px;
    margin: 180px auto;
    padding: 35px 35px 15px 35px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    box-shadow: 0 0 25px #909399;
  }

  .login-title {
    text-align: center;
    margin: 0 auto 40px auto;
    color: #303133;
  }
</style>

Register.vue

<template>
  <div>
    <el-form ref="registerForm" :model="registerform" :rules="rules" label-width="80px" >
    <h3 class="register-title">註冊用戶</h3>
      <el-form-item label="賬號" prop="user">
        <el-input type="text" placeholder="請輸入賬號" v-model="registerform.user"/>
      </el-form-item>
      <el-form-item label="密碼" prop="password">
        <el-input type="password" placeholder="請輸入密碼" v-model="registerform.password"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" :loading="logining" v-on:click="onSubmit()">註冊</el-button>
      </el-form-item>
    </el-form>
  </div>
  
</template>

<script>
  import Axios from 'axios';
  export default{
    data() {
      return {
        logining:false,
        registerform: {
          user: '',
          password: ''
        },
        // 表單驗證,需要在 el-form-item 元素中增加 prop 屬性
        rules: {
          user: [
            {required: true, message: '賬號不可為空', trigger: 'blur'}
          ],
          password: [
            {required: true, message: '密碼不可為空', trigger: 'blur'}
          ]
        },
      }
    },
    methods: {
      onSubmit() {
        // console.log(this.form)
        // 為表單綁定驗證功能
        this.$refs.registerForm.validate((valid) => {
          if (valid) {
            this.logining=true
            let _this = this
            if (_this.logining == true) {
              Axios.get("http://localhost:8181/admin/register",{params:this.registerform}).then(function (res) {
              _this.logining=false
              // console.log(res.data.code)
              if (res.data.code == -1) {
                _this.$message.error('用戶名已存在');
              }
              if (res.data.code == 0) {
                _this.$message({
                  message: '恭喜你,註冊成功',
                  type: 'success'
                });
                localStorage.setItem('login',JSON.stringify(res.data.data));
                _this.$router.push({path:'/'})
              }
            })
            }
            
          }
            // 使用 vue-router 路由到指定頁面,該方式稱之為編程式導航
            // this.$router.push("/main");
          // } else {
            
          //   // return false;
          // }
        });
      }
    }
  }
  
</script>

<style>
  .register-title {
    text-align: center;
    margin: 0 auto 40px auto;
    color: #303133;
  }
</style>

首頁界面

Main.vue

<template >
<el-container class="homecontainer">
  <el-header >
    <div class="head" >
      <div class="div1" >XXXXX管理系統</div>
      <div class="div2" >
        <el-dropdown >
        <span class="el-dropdown-link" >
          下拉菜單<i class="el-icon-arrow-down el-icon--right" style="margin-right: 15px"  ></i>
        </span>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item>個人信息</el-dropdown-item>
          <el-dropdown-item>修改密碼</el-dropdown-item>
          <el-dropdown-item>退出登錄</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      </div>
    </div>
    
    
  </el-header>
  <el-container>
    <el-aside width="200px">
        <el-menu router
          default-active="2"
          class="el-menu-vertical-demo"
          @open="handleOpen"
          @close="handleClose">
          <el-submenu index="1">
            <template slot="title"><i class="el-icon-platform-eleme"></i><span>導航一</span></template>
              <el-menu-item index="/manage">商品管理</el-menu-item>
              <el-menu-item index="/add">添加商品</el-menu-item>
          </el-submenu>
          <el-menu-item index="2">
            <i class="el-icon-eleme"></i>
            <span slot="title">導航二</span>
          </el-menu-item>
        </el-menu>
    </el-aside>
    <el-container>
      <el-main  height="300px" >
        <el-breadcrumb separator-class="el-icon-arrow-right">
          <el-breadcrumb-item :to="{ path: '/main' }">首頁</el-breadcrumb-item>
          <el-breadcrumb-item v-text="this.$router.currentRoute.name"></el-breadcrumb-item>
        </el-breadcrumb>
        <router-view></router-view>
      </el-main>
      <el-footer height="60px">2022-Spring Boot-Vue-Element-ui-Mabtis-Plus</el-footer>
    </el-container>
  </el-container>
</el-container>
</template>

<script>
  export default {
    
    methods: {
      handleClick(row) {
        console.log(row);
      },
      handleOpen() {
      },
      handleClose() {
      }
    },
    data() {
      
      return {
        
      }
    }
  }
</script>

<style scoped>
  .homecontainer{
    height: 763px;
    width: 100%;
    
  }
  .head{
    display: flex ;
    flex-direction: row;
  }
  .div1{
    align-items: center;
    margin-top: 25px;
  }
  .div2{
    margin-left: 1270px;
    margin-top: 30px;
    float: right; 
    font-size: 12px;
  }
  .el-header{
    background-color: #1b7cfbbb;
    color: #333;
    text-align: center;
    line-height: 10px;
  } 
  .el-footer {
    background-color: #B3C0D1;
    color: #333;
    text-align: center;
    line-height: 60px;
  }
  
  .el-aside {
    background-color: #D3DCE6;
    color: #333;
    text-align: center;
    line-height: 200px;
  }
  
  .el-main {
    background-color: #E9EEF3;
    color: #333;
    text-align: center;
    line-height: 10px;
  }
  .el-dropdown-link {
    cursor: pointer;
    color: #010e1b;
  }
  .el-icon-arrow-down {
    font-size: 12px;
  }
  
</style>

路由設置
index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Main from "@/views/Main"
import Manage from '@/views/Manage'
import Add from '@/views/Add'
import LogReg from '@/views/LogAndReg/LogReg'


Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: '入口',
    component: LogReg
  },
  {
    path: '/main',
    name: '首頁',
    component: Main,
    // redirect:'/manage',
    children:[
      {
        path: '/manage',
        name: '商品管理',
        component: Manage
      },
      {
        path: '/add',
        name: '添加商品',
        component: Add
      },
    ]
  },
]

const router = new VueRouter({
  routes
})

export default router

第二種頁面獨立分開

登錄界面

註冊頁面

vue實現
Login.vue

<template>
  <div>
    <el-form ref="loginForm" :model="loginform" :rules="rules" label-width="80px" class="login-box" >
        <h3 class="login-title">歡迎登錄</h3>
      <el-form-item label="賬號" prop="user">
        <el-input type="text" placeholder="請輸入賬號" v-model="loginform.user"/>
      </el-form-item>
      <el-form-item label="密碼" prop="password">
        <el-input type="password" placeholder="請輸入密碼" v-model="loginform.password"/>
      </el-form-item>
      <div style="text-align: center;">
        <router-link :to="{path: '/register'}">還沒有賬號?去註冊</router-link>
        <el-form-item>
        <el-button type="primary" :loading="logining" v-on:click="onSubmit()">登錄</el-button>
      </el-form-item>
      </div>
    </el-form>
  </div>
</template>
<script>
import Axios from 'axios';


  export default{
    components: {

    },
    name: "Login",
    data() {
      return {
        activeName: 'first',
        logining:false,
        loginform: {
          user: '',
          password: ''
        },

        // 表單驗證,需要在 el-form-item 元素中增加 prop 屬性
        rules: {
          user: [
            {required: true, message: '賬號不可為空', trigger: 'blur'}
          ],
          password: [
            {required: true, message: '密碼不可為空', trigger: 'blur'}
          ]
        },

        // 對話框顯示和隱藏
        // dialogVisible: false
      }
    },
    methods: {
      onSubmit() {
        // console.log(this.form)
        // 為表單綁定驗證功能
        this.$refs.loginForm.validate((valid) => {
          if (valid) {
            this.logining=true
            let _this = this
            if (_this.logining == true) {
              Axios.get("http://localhost:8181/admin/login",{params:this.loginform}).then(function (res) {
              _this.logining=false
              // console.log(res.data.code)
              if (res.data.code == -1) {
                _this.$message.error('用戶名不存在');
              }
              if (res.data.code == -2) {
                _this.$message.error('密碼錯誤');
              }
              if (res.data.code == 0) {
                _this.$message({
                  message: '恭喜你,登錄成功',
                  type: 'success'
                });
                localStorage.setItem('main',JSON.stringify(res.data.data));
                _this.$router.replace({path:'/main'})
              }
            })
            }
            
          }
            // 使用 vue-router 路由到指定頁面,該方式稱之為編程式導航
            // this.$router.push("/main");
          // } else {
            
          //   // return false;
          // }
        });
      }
    }
  }

</script>

<style scoped>
.login-box {
    border: 1px solid #DCDFE6;
    width: 350px;
    margin: 180px auto;
    padding: 35px 35px 15px 35px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    box-shadow: 0 0 25px #909399;
  }

  .login-title {
    text-align: center;
    margin: 0 auto 40px auto;
    color: #303133;
  }
</style>

register.vue

<template>
  <div>
    <el-form ref="registerForm" :model="registerform" :rules="rules" label-width="80px"  class="register-box">
    <h3 class="register-title">註冊用戶</h3>
      <el-form-item label="賬號" prop="user">
        <el-input type="text" placeholder="請輸入賬號" v-model="registerform.user"/>
      </el-form-item>
      <el-form-item label="密碼" prop="password">
        <el-input type="password" placeholder="請輸入密碼" v-model="registerform.password"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" :loading="logining" v-on:click="onSubmit()">註冊</el-button>
      </el-form-item>
    </el-form>
  </div>
  
</template>

<script>
  import Axios from 'axios';
  export default{
    data() {
      return {
        logining:false,
        registerform: {
          user: '',
          password: ''
        },
        // 表單驗證,需要在 el-form-item 元素中增加 prop 屬性
        rules: {
          user: [
            {required: true, message: '賬號不可為空', trigger: 'blur'}
          ],
          password: [
            {required: true, message: '密碼不可為空', trigger: 'blur'}
          ]
        },
      }
    },
    methods: {
      onSubmit() {
        // console.log(this.form)
        // 為表單綁定驗證功能
        this.$refs.registerForm.validate((valid) => {
          if (valid) {
            this.logining=true
            let _this = this
            if (_this.logining == true) {
              Axios.get("http://localhost:8181/admin/register",{params:this.registerform}).then(function (res) {
              _this.logining=false
              // console.log(res.data.code)
              if (res.data.code == -1) {
                _this.$message.error('用戶名已存在');
              }
              if (res.data.code == 0) {
                _this.$message({
                  message: '恭喜你,註冊成功',
                  type: 'success'
                });
                localStorage.setItem('login',JSON.stringify(res.data.data));
                _this.$router.push({path:'/'})
              }
            })
            }
            
          }
            // 使用 vue-router 路由到指定頁面,該方式稱之為編程式導航
            // this.$router.push("/main");
          // } else {
            
          //   // return false;
          // }
        });
      }
    }
  }
  
</script>

<style>
  .register-box {
    border: 1px solid #DCDFE6;
    width: 350px;
    margin: 180px auto;
    padding: 35px 35px 15px 35px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    box-shadow: 0 0 25px #909399;
  }
  .register-title {
    text-align: center;
    margin: 0 auto 40px auto;
    color: #303133;
  }
</style>

路由設置
index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'



Vue.use(VueRouter)

const routes = [
  {
    path: '/login',
    name: '登錄',
    component: ()=>import('../views/Login/LoginView.vue')
  },
  {
    path: '/register',
    name: '註冊',
    component: ()=>import('../views/Register/registerView.vue')
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  }
]

const router = new VueRouter({
  routes
})

export default router


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:帶你瞭解基於FusionInsight HD&MRS的5種kafka消費端性能優化方法。 本文分享自華為雲社區《FusionInsight HD&MRSkafka消費端性能優化方法》,作者: 穿夾克的壞猴子。 kafka消費端性能優化主要從下麵幾個方面優化: 1.介面使用方面優化: 舊版本hi ...
  • 摘要:RDS關係型資料庫是一種基於雲計算平臺的即開即用、穩定可靠、彈性伸縮、便捷管理的線上關係型資料庫服務。 本文分享自華為雲社區《一致性處理事務這下還是看RDS的吧【秋招特訓】》,作者:樣子的木偶。 什麼是RDS? RDS關係型資料庫是一種基於雲計算平臺的即開即用、穩定可靠、彈性伸縮、便捷管理的在 ...
  • 一、 登錄 1.1 登錄預設資料庫 首先切換到oracle用戶,用資料庫預設管理員登錄。 [root@tsm-zh01 ~]# su – oracle [oracle@redhat ~]$ lsnrctl start #開啟監聽 [oracle@tsm-zh01 ~]$ sqlplus / as s ...
  • 對於一個服務端開發來說 MYSQL 可能是他使用最熟悉的資料庫工具,然而,大部分的Java工程師對MySQL的瞭解和掌握程度,大致就停留在這麼一個階段:它可以建庫、建表、建索引,然後就是對裡面的數據進行增刪改查,語句性能有點差?沒關係,在表裡建幾個索引或者調整一下查詢邏輯就可以了,一條sql,MYS... ...
  • 在數字化時代的今天,我們都認同數據會創造價值。為了最大化數據的價值,我們不停的建立著數據遷移的管道,從同構到異構,從關係型到非關係型,從雲下到雲上,從數倉到數據湖,試圖在各種場景挖掘數據的價值。而在這縱橫交錯的數據網路中,邏輯複製扮演著及其重要的角色。 讓我們將視角從複雜的網路拉回其中的一個端點,... ...
  • 2022年9月2日,日本MIC(総務省)發佈了“電波法施行規則等の一部を改正する省令(令和4年総務省令第59號)”省令,更新了Wi-Fi 6E Band 5頻帶5925 ~ 6425 MHz的技術要求。隔天(9月3日),日本DSP機構發佈了“「6GHz帯小電力データ通信システム」の特性試験方法”,為 ...
  • AU上傳ipa出現下圖紅框提示說明成功上傳,如果App Store後臺沒有出現構建版本, 請登錄 apple賬號對應的郵箱查看反饋,特別留意垃圾郵箱,無論成功還是失敗,apple都會發郵件 一、首先登錄iTunes Connect 後臺、查看ipa構建情況 https://appstoreconne ...
  • 現如今,人們在網上聊天、發帖時越來越愛用表情包,表情包一方面是一種個性化的表達方式,另一方面更能傳達出當下的心理活動,可以說在網路社交中表情包是一個不可或缺的存在。加上近年來元宇宙的興起,3D虛擬形象廣泛應用,用戶可以通過自己的表情來控制虛擬形象的表情,做一系列專屬的表情包,更加生動形象。 那麼,如 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...