vue+element-ui后台管理系统模板

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

posted @ 2022-09-21 23:58  面向CV工程师  阅读(6307)  评论(0编辑  收藏  举报