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
  • PasteSpider是什麼? 一款使用.net編寫的開源的Linux容器部署助手,支持一鍵發佈,平滑升級,自動伸縮, Key-Value配置,項目網關,環境隔離,運行報表,差量升級,私有倉庫,集群部署,版本管理等! 30分鐘上手,讓開發也可以很容易的學會在linux上部署你得項目! [從需求角度介 ...
  • SQLSugar是什麼 **1. 輕量級ORM框架,專為.NET CORE開發人員設計,它提供了簡單、高效的方式來處理資料庫操作,使開發人員能夠更輕鬆地與資料庫進行交互 2. 簡化資料庫操作和數據訪問,允許開發人員在C#代碼中直接操作資料庫,而不需要編寫複雜的SQL語句 3. 支持多種資料庫,包括但 ...
  • 在C#中,經常會有一些耗時較長的CPU密集型運算,因為如果直接在UI線程執行這樣的運算就會出現UI不響應的問題。解決這類問題的主要途徑是使用多線程,啟動一個後臺線程,把運算操作放在這個後臺線程中完成。但是原生介面的線程操作有一些難度,如果要更進一步的去完成線程間的通訊就會難上加難。 因此,.NET類 ...
  • 一:背景 1. 講故事 前些天有位朋友在微信上丟了一個崩潰的dump給我,讓我幫忙看下為什麼出現了崩潰,在 Windows 的事件查看器上顯示的是經典的 訪問違例 ,即 c0000005 錯誤碼,不管怎麼說有dump就可以上windbg開幹了。 二:WinDbg 分析 1. 程式為誰崩潰了 在 Wi ...
  • CSharpe中的IO+NPOI+序列化 文件文件夾操作 學習一下常見的文件、文件夾的操作。 什麼是IO流? I:就是input O:就是output,故稱:輸入輸出流 將數據讀入記憶體或者記憶體輸出的過程。 常見的IO流操作,一般說的是[記憶體]與[磁碟]之間的輸入輸出。 作用 持久化數據,保證數據不再 ...
  • C#.NET與JAVA互通之MD5哈希V2024 配套視頻: 要點: 1.計算MD5時,SDK自帶的計算哈希(ComputeHash)方法,輸入輸出參數都是byte數組。就涉及到字元串轉byte數組轉換時,編碼選擇的問題。 2.輸入參數,字元串轉byte數組時,編碼雙方要統一,一般為:UTF-8。 ...
  • CodeWF.EventBus,一款靈活的事件匯流排庫,實現模塊間解耦通信。支持多種.NET項目類型,如WPF、WinForms、ASP.NET Core等。採用簡潔設計,輕鬆實現事件的發佈與訂閱。通過有序的消息處理,確保事件得到妥善處理。簡化您的代碼,提升系統可維護性。 ...
  • 一、基本的.NET框架概念 .NET框架是一個由微軟開發的軟體開發平臺,它提供了一個運行時環境(CLR - Common Language Runtime)和一套豐富的類庫(FCL - Framework Class Library)。CLR負責管理代碼的執行,而FCL則提供了大量預先編寫好的代碼, ...
  • 本章將和大家分享在ASP.NET Core中如何使用高級客戶端NEST來操作我們的Elasticsearch。 NEST是一個高級別的Elasticsearch .NET客戶端,它仍然非常接近原始Elasticsearch API的映射。所有的請求和響應都是通過類型來暴露的,這使得它非常適合快速上手 ...
  • 參考delphi的代碼更改為C# Delphi 檢測密碼強度 規則(仿 google) 仿 google 評分規則 一、密碼長度: 5 分: 小於等於 4 個字元 10 分: 5 到 7 字元 25 分: 大於等於 8 個字元 二、字母: 0 分: 沒有字母 10 分: 全都是小(大)寫字母 20 ...