后台管理系统项目总结(上)

项目架构

使用到vue框架
ElementUI

技术栈

vue组件化开发
proxy跨域
API封装
路由鉴权
VUEX

首先处理跨域问题
创建一个vue.config.js文件,配置一下proxy开发环境


//处理跨域
module.exports = {
   
    publicPath: "./",
    devServer: {
   
        open: true,
        proxy: {
   
            '': {
   
                target: "http://39.100.7.70:81/",
                changeOrigin: true,
                pathRewrite: {
   
                    '^/api': ""
                }
            }
        }
    }
};

配置main.js文件

import Vue from 'vue'
import App from './App.vue'
import router from './router'
// import './plugins/element'
// axios引入配置
import axios from 'axios'
  //导入进度条插件
  import NProgress from 'nprogress'
  //导入进度条样式
  // import 'nprogress/nprogress.css'
  
  //-------
      //文档提供基准接口
      axios.defaults.baseURL='https://www.liulongbin.top:8888/api/private/v1/'
      axios.defaults.timeout = 5000;
            //当进入request拦截器,表示发送了请求,我们就开启进度条
      NProgress.start()
          //设置请求头
          axios.interceptors.request.use(config => {
   
            config.headers.Authorization=sessionStorage.getItem('token')
            return config;
            });
    //--------    

// TreeTable
import TreeTable from 'vue-table-with-tree-grid'
Vue.component('tree-table', TreeTable)
Vue.prototype.$http = axios
  // 时间戳
  Vue.filter('dateFormat', function (originVal) {
   
    const dt = new Date(originVal)
    const y = dt.getFullYear()
    const m = (dt.getMonth() + 1 + '').padStart(2, '0')
    const d = (dt.getDate() + '').padStart(2, '0')
    const hh = (dt.getHours() + '').padStart(2, '0')
    const mm = (dt.getMinutes() + '').padStart(2, '0')
    const ss = (dt.getSeconds() + '').padStart(2, '0')
    return `${
     y}-${
     m}-${
     d} ${
     hh}:${
     mm}:${
     ss}`
  })

Vue.config.productionTip = false

new Vue({
   
  router,

  render: h => h(App)
}).$mount('#app')

配置axiosApi
在这里插入图片描述

// 单独封装根路径 
import axios from 'axios'
const request = axios.create({
   
    baseURL:'https://www.liulongbin.top:8888/api/private/v1/',
    timeout : 5000,
})
 //设置请求头
 request.interceptors.request.use(config => {
   
    config.headers.Authorization=sessionStorage.getItem('token')
    return config;
    });
export default request

配置路由

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export default new Router({
   
  routes: [
    {
   
      //登录
      path: '/',
      name: 'login',
      component: () => import(/* webpackChunkName:"login_home_welcome" */ './views/Login.vue'),
    },
    {
   
      path: '/home',
      name: 'Home',
      component: () => import(/* webpackChunkName:"login_home_welcome" */ './views/Home.vue'),
      children:[{
   
        path: '/',
        redirect:'/home/welcome'
      },{
   //默认展示welcome页
         path:'welcome',
         name: 'Welcome',
         component: () => import(/* webpackChunkName:"login_home_welcome" */ './components/Welcome.vue'),
      },
      {
   //用户列表
        path:'Users',
        name: 'Users',
        component: () => import(/* webpackChunkName:"users" */ './components/user/Users.vue'),
      },
      {
   //角色列表
        path:'roles',
        name: 'roles',
        component: () => import(/* webpackChunkName:"roles" */ './components/roles/Roles.vue'),
      },{
   //所有角色列表
        path:'rights',
        name: 'rights',
        component: () => import(/* webpackChunkName:"roles" */ './components/roles/Right.vue'),
      },{
   
        path:'Categories',
        name: 'Categories',
        component: () => import(/* webpackChunkName:"goods" */ './components/goods/Categories.vue'),
      },{
   
        path:'params',
        name: 'params',
        component: () => import(/* webpackChunkName:"goods" */ './components/goods/parm.vue'),
      },{
   
        path:'goods',
        name: 'goods',
        component: () => import(/* webpackChunkName:"goods" */ './components/goods/ProductList.vue'),
        children: [
          {
   
            path: 'add',
            name: 'Add',
            component: () => import(/* webpackChunkName:"goods" */ './components/goods/Add.vue'),
          }
        ]
      },{
   
        path:'orders',
        name: 'orders',
        component: () => import(/* webpackChunkName:"orders" */ './components/orders/Orders.vue'),
      },{
   
        path:'reports',
        name: 'reports',
        component: () => import(/* webpackChunkName:"reports" */ './components/report/Report.vue'),
      }
      ]
    }
    
  ]
})

封装面包屑导航

<template>
  <div>
    <el-breadcrumb separator-class="el-icon-arrow-right">
        <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
        <el-breadcrumb-item v-for="(item,index) in obj" :key="index">{
   {
   item}}</el-breadcrumb-item>
    </el-breadcrumb>
  </div>
</template>

<script>
export default {
   
data(){
   
    return{
   
        obj:{
   },
    }
},
created(){
   
    this.obj=JSON.parse(window.sessionStorage.getItem('breadName'));
}
}
</script>

登录login

<template>
  <div class="home">
    <div class="box">
      <div class="pic">
        <img src="../assets/logo.png" alt />
      </div>
      <!-- 用户账号 -->
      <el-form
        :model="ruleForm"
        status-icon
        :rules="rules"
        ref="ruleForm"
        label-width="100px"
        class="demo-ruleForm"
      >
        <el-form-item label="账号" prop="username">
          <el-input  v-model="ruleForm.username"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="password">
          <el-input type="password" v-model="ruleForm.password"></el-input>
        </el-form-item>
       
        <el-form-item>
          <el-button type="primary" @click="submit">提交</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
  import loginApi from './loginApi'
export default {
   
  data(){
   
     return {
   
        ruleForm: {
   
          username: 'admin',
          password: '123456',
          
        },
        rules: {
   
          username: [
            {
    required: true, message: '请输入登录名', trigger: 'blur' },
            {
    min: 3
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台管理系统项目实战是一个非常有价值的学习和实践机会,特别适合以下人群: 1. 大学即将毕业或者自学前端缺乏项目经验的人。 2. 入职后需要开发Vue后台管理系统的人。 3. 后端开发人员没有前端经验,需要开发Vue + Java后台管理项目的人。 4. 缺乏Vue实战项目经验,基础不太好的人。 这个项目是一个通用版后台管理系统,与企业级开发非常接近,采用了组件化思想,非常详细,每一步都总结在md文档里面。你可以参考这个项目的博客文章\[1\]和视频教程\[2\]来学习和实践。无论你是大学生还是多年的程序员,这个项目都能帮助你巩固知识,提升技能。如果你是大学生,它还可以作为你的毕业设计项目。 希望这个项目能够帮助你提升技能,加深对Vue后台管理系统开发的理解。祝你学习顺利! #### 引用[.reference_title] - *1* [Vue项目实战 —— 后台管理系统( pc端 ) 第二篇](https://blog.csdn.net/m0_57904695/article/details/124823989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Vue项目实战 —— 后台管理系统( pc端 )](https://blog.csdn.net/m0_67391377/article/details/124818830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值