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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...