美文网首页让前端飞Vue.js开发技巧前端开发
基于nuxt和iview搭建OM后台管理系统实践-项目简要介绍(

基于nuxt和iview搭建OM后台管理系统实践-项目简要介绍(

作者: 小呆爱学习 | 来源:发表于2018-06-03 17:46 被阅读103次
封面图,使用创客贴制作

目录结构

这是《基于nuxt和iview搭建OM后台管理系统实践》这一个系列文章的目录,大致思路如下:

项目背景

清明节后回到武汉,在周例会上,项目经理提出要开发一个咱们app的后台管理系统(OM系统),预估两周时间开发完并上线,并且要实现前后端分离,最终在经过短暂的技术选型和苦逼开发后终于延后几天并上线了。写下这篇文章记录一下开发(踩坑)过程。

项目模块分布

因为是公司的项目,后台模块分布的图片只存在于我的有道云笔记,后续会根据这些模块封装一些公共组件出来。

iview-admin参考

技术实现

  • 左侧和顶部导航:使用nuxt的布局属性,在文件夹layouts里新建nav.vue文件,引入leftNav和topNav组件,使用 layout 属性来为页面指定使用nav布局。导航高亮通过在leftNav里更新menuName字段来实现。
// 文件 layouts/nav.vue
<template>
  <div>
    <nuxt/>
    <leftNav/>
    <topNav/>
  </div>
</template>

<script>
// import MyFooter from '~/components/Footer.vue'
import leftNav from '~/components/leftNav.vue';
import topNav from '~/components/topNav.vue';

export default {
  components: {
    leftNav,
    topNav
  }
}
</script>

<style>
</style>

// 文件 pages/index.vue
<script>
  export default {
    layout: "nav",//此处引用layout的nav布局文件
  }
</script>

  • 菜单高亮代码实现
//文件 components/left-nav.vue
goto(obj) {
    let path = "";
    // this.$store.commit("upMenuName", obj); //更新menuName
    setStore('menuName',obj);
    this.menuName = getStore('menuName');
    this.$store.state.menuList.forEach(element => {
        element.list.forEach(el => {
          if (el.id == obj) {
            path = el.path;
          }
        });
    });
    this.$router.push(path);
    // window.location = path;
}

  • 全局axios配置,并对登录失效做跳转处理
//文件 plugins/axios.js
import axios from 'axios';
import Vue from 'vue';
import * as utils from '../lib/utils';
// import {Spin,Notice}  from 'iview';
// import router from ''

let options = {}
// The server-side needs a full url to works
if (process.server) {
  // options.baseURL = `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}`
  axios.defaults.baseURL = `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}/api`
}
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest';
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.withCredentials = true;
axios.defaults.timeout = 5000;


//请求之前
axios.interceptors.request.use((config)=>{
  // console.log(config)
  // Spin.show();
  return config;
});

//登陆失效跳转登录页面
axios.interceptors.response.use(
  response => {
    console.log('-------axiosResponse---------')
    // console.log(response);
    // Spin.hide();
    return response;
  },
  error => {
    console.log('-------axiosError---------');
    console.log(error.response.status);
    if (error.response.status) {
      switch (error.response.status) {
        case 401:
          // if (process.server){
            utils.clearLocalStorage();
            console.log(window.location)
            window.location.href= '/login?url'+window.location.pathname
          // }
      }
    }
    // Spin.hide();
    // Notice.error({
    //   title: '温馨提示:',
    //   desc: '网络请求失败,请稍后再试'
    // });
    // console.log(error.response.status);
    
    return Promise.reject(error.response.data)
  }
);
export default axios;

  • 有数据请求的页面
<script>
import axios from "~plugins/axios";
export default {
    methods:{
        loadData(){
            axios.get(urls.api, { params: this.param })
            .then(res => {
            //请求成功回调
                
            })
            .catch(error => {
            //请求失败
                
       });
    }
}
</script>

主要技术栈

vue、nuxt、iview、axios、vuex、v-charts、proxy、nginx

参考文档

以下列了一些开发过程中所用到的文档和ui组件

相关文章

网友评论

  • Cecile_小新:怎么部署呢?
    小呆爱学习:@Cecile_小新 后面会写的
  • 0xLamb:请问为什么选nuxt 直接用vue不可以吗
    小呆爱学习:@AvatarBB 可以啊 nuxt不用自己配置路由 配置更更简单 开箱既用
  • 8ce8ef85f99f:您好,我这边也想做一个后端管理平台, 之前的框架是 Nuxt + element 的,想将element 替换为 iView ,可是移植不过去,你这边能不能分享一下框架的代码,谢谢🙏
    小呆爱学习:@零分的借口 你好 我这里的业务代码还没有剔除出去 后续会分离出来放到github上
  • dab08cd3edcf:可以分享一下源码吗
    dab08cd3edcf:@愿爱无忧dk_ 谢谢了
    小呆爱学习:@狼毒花_86b3 后续会分享出来 现在还没有把业务代码剔除出去

本文标题:基于nuxt和iview搭建OM后台管理系统实践-项目简要介绍(

本文链接:https://www.haomeiwen.com/subject/enojsftx.html