基于nuxt和iview搭建后台管理系统实践(1)

项目背景

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

项目模块分布

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

技术实现

  • 左侧和顶部导航:使用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组件

  • nuxt官方文档 https://zh.nuxtjs.org/guide

  • vue官方文档 https://cn.vuejs.org/index.html

  • vuex文档 https://vuex.vuejs.org/zh-cn/

  • element-admin http://lit.ipyro.cn/#/dashboard

  • 基于vue的前端ui组件库iview https://www.iviewui.com/

  • 基于iview的后台管理系统iview-admin https://iview.github.io/iview-admin/#/home

  • vue-element-admin http://panjiachen.github.io/vue-element-admin/#/dashboard

  • 基于echarts的和vue封装的图表组件v-charts https://v-charts.js.org/#/

  • 《nuxt 踩坑之 -- Vuex状态树的模块方式使用》https://blog.csdn.net/github_38847071/article/details/78851209

### 回答1: 很高兴为您解答。答案是:要搭建一个基于Nuxt和Vant的应用,首先你需要安装Nuxt和Vant,然后创建一个新的项目,在项目中安装Vant,然后使用Vant提供的API来设置HELLO应用的模块、页面和布局,最后,在Nuxt中添加路由来完成应用的配置。 ### 回答2: 要基于 Nuxt 和 Vant 搭建一个 HELLO 应用,首先需要确保本地已经安装了 Node.js 和 Vue CLI。 首先,通过命令行在本地创建一个新的 Nuxt 项目,可以运行以下命令: ``` npx create-nuxt-app hello-app ``` 然后,根据命令行提示选择配置项,如选择框架是 "None (Nuxt默认配置)",选择编程语言是 "JavaScript",选择包管理工具是 "npm"。 等待安装完成后,在项目根目录下运行以下命令: ``` cd hello-app npm install vant ``` 然后,打开编辑器,进入 `nuxt.config.js` 文件,添加 Vant 的样式和组件配置。在 `head` 对象中的 `link` 数组添加以下代码: ```javascript { rel: 'stylesheet', type: 'text/css', href:"https://cdn.bootcdn.net/ajax/libs/vant/2.12.16/index.css" } ``` 在 `modules` 属性中的 `css` 数组中添加以下代码: ```javascript "@nuxtjs/style-resources" ``` 接着,在项目根目录下创建一个新文件夹 `assets`,并在该文件夹下创建 `scss` 文件夹,然后在 `scss` 文件夹中创建一个名为 `_variables.scss` 的文件,并添加以下代码: ```scss $--color-primary: #007bff; ``` 然后,在 `nuxt.config.js` 文件中找到 `styleResources` 对象,添加以下代码: ```javascript scss: ["@/assets/scss/_variables.scss"] ``` 接下来,在项目根目录下找到 `pages` 文件夹,在该文件夹下创建一个名为 `index.vue` 的文件,并添加以下代码: ```vue <template> <div> <van-button type="primary">{{ message }}</van-button> </div> </template> <script> export default { data() { return { message: 'Hello, World!' } } } </script> ``` 最后,通过命令行启动项目并查看效果: ``` npm run dev ``` 打开浏览器,访问 `http://localhost:3000` 即可看到一个带有 "Hello, World!" 按钮的页面。 这样就完成了基于 Nuxt 和 Vant 搭建一个 HELLO 应用的过程。 ### 回答3: 要基于 Nuxt 和 Vant 搭建一个 HELLO 应用,首先需要确保已经安装了 Node.js 和 NPM。接下来,按照以下步骤操作: 1. 创建一个空的项目文件夹,进入该文件夹并执行命令 `npm init` 来初始化项目,根据提示填写相关信息。这将生成 `package.json` 文件。 2. 安装 Nuxt.js 和 Vant,执行命令 `npm install nuxt vant`。 3. 创建一个新的 `nuxt.config.js` 文件,并在其中进行基本配置,如设置应用名称、引入 Vant 样式等。 4. 执行命令 `mkdir pages` 来创建一个 `pages` 文件夹。 5. 在 `pages` 文件夹中创建一个名为 `index.vue` 的文件,用于定义首页的内容。可以在其中添加一个 `<template>` 块来设置页面布局,使用 Vant 组件来构建界面。 6. 在 `nuxt.config.js` 文件中配置路由,将根目录 `/` 映射到 `pages/index.vue`。 7. 执行命令 `npm run dev` 启动开发服务器,然后在浏览器中访问 `http://localhost:3000`,即可看到你的 HELLO 应用的界面。 通过以上步骤,我们就成功地基于 Nuxt 和 Vant 搭建了一个简单的 HELLO 应用。你可以根据自己的需求进一步扩展和定制该应用,添加更多功能和页面。同时,你也可以参考 Nuxt 和 Vant 的官方文档来了解更多关于它们的详细用法和特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值