• Stars
    star
    126
  • Rank 284,543 (Top 6 %)
  • Language
    JavaScript
  • Created over 6 years ago
  • Updated about 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Vue.js 2.x 实战开发项目脚手架

vue-cli-project

  • 👨‍💻‍已构建配置好的vuejs全家桶项目,统一管理后端接口 | 获取数据 | 请求数据,已包含vue-router,vuex,api,axios. webpack, 储存用vue-ls, 异步async/await, css sass. 下载即使用项目开发。
  • 喜欢或对你有帮助的话请点star,Thanks.

A Vue.js project

Vue cli3.x

基于 Vue-cli3 搭建的前端开发项目模板,已在 vue.config.js 文件中配置好 webpack,仅供参考,开箱即用,欢迎大家围观指教!https://github.com/liangfengbo/vue-cli3-template

使用

# 安装服务
npm install

# 启动服务
npm run dev

说明

src架构

├── App.vue
├── api
│   ├── doctor.js
│   └── fetch.js
├── assets
│   └── logo.png
├── components
│   └── HelloWorld.vue
├── libs
│   └── util.js
├── main.js
├── router
│   └── index.js
├── store
│   ├── index.js
│   ├── modules
│   └── mutation-types.js
└── views
    └── doctor

处理数据页面这2大块,把数据和页面分离,在vuex里面做请求数据,页面只需要做调用数据。

请求接口这块再细分,接口和请求接口分开,我使用了最新的async/await函数做数据请求

api文件夹 主要放后端提供的接口,如

import fetch from './fetch';

export default {
  // 获取医生列表
  list(params) {
    return fetch.get('/doctor/list', params)
  },

  // 获取医生详情信息
  detail(id) {
    return fetch.post('/doctor/detail/' + id);
  },
}

fetch.js 文件是封装axios请求,以及请求处理,和http状态码的等处理

import Util from '../libs/util'
import qs from 'qs'
import Vue from 'vue'

Util.ajax.defaults.headers.common = {
  'X-Requested-With': 'XMLHttpRequest'
};

Util.ajax.interceptors.request.use(config => {
  /**
   * 在这里做loading ...
   * @type {string}
   */

  // 获取token
  config.headers.common['Authorization'] = 'Bearer ' + Vue.ls.get("web-token");
  return config

}, error => {
  return Promise.reject(error)

});

Util.ajax.interceptors.response.use(response => {

  /**
   * 在这里做loading 关闭
   */

    // 如果后端有新的token则重新缓存
  let newToken = response.headers['new-token'];

  if (newToken) {
    Vue.ls.set("web-token", newToken);
  }

  return response;

}, error => {
  let response = error.response;
  if (response.status == 401) {
    // 处理401错误

  } else if (response.status == 403) {
    // 处理403错误

  } else if (response.status == 412) {
    // 处理412错误

  } else if (response.status == 413) {
    // 处理413权限不足

  }

  return Promise.reject(response)

});

export default {
  post(url, data) {

    return Util.ajax({
      method: 'post',
      url: url,
      data: qs.stringify(data),
      timeout: 30000,
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
      }
    })
  },

  get(url, params) {
    return Util.ajax({
      method: 'get',
      url: url,
      params,
    })
  },

  delete(url, params) {
    return Util.ajax({
      method: 'delete',
      url: url,
      params
    })
  },

  put(url, data) {

    return Util.ajax({
      method: 'put',
      url: url,
      data: qs.stringify(data),
      timeout: 30000,
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
      }
    })
  }
}

在vuex里面做请求,比如请求医生列表,用async/await,拿到数据存进store数据里面

├── index.js
├── modules
   └── doctor.js
└── mutation-types.js

import doctor from '../../api/doctor'
import * as types from '../mutation-types'

const state = {
  // 医生列表
  doctorList: [],
  // 医生详情信息
  doctorDetail: null,
};

const mutations = {
  // 设置医生列表
  [types.SET_DOCTOR_LIST](state, data) {
    state.doctorList = data
  },
  // 设置医生详情信息
  [types.SET_DOCTOR_DETAIL](state, data) {
    state.doctorDetail = data
  },
};

const actions = {

  /**
   * 获取医生顾问列表
   * @param state
   * @param commit
   * @param params
   * @returns {Promise<void>}
   */
  async getDoctorList({state, commit}, params) {
    let ret = await doctor.list(params);
    commit(types.SET_DOCTOR_LIST, ret.data.data);
  },

  /**
   * 获取医生详情信息
   * @param state
   * @param commit
   * @param id 医生ID
   * @returns {Promise<void>}
   */
  async getDoctorDetail({state, commit}, id) {
    let ret = await doctor.detail(id);
    commit(types.SET_DOCTOR_DETAIL, ret.data.data);
  }
};

export default {
  state,
  actions,
  mutations
}

在页面里需要执行引入:

import {mapActions, mapState} from 'vuex'

代码可以具体看文件的代码

└── doctor
    ├── detail.vue
    └── list.vue

<script>
  import {mapActions, mapState} from 'vuex'

  export default {
    components: {},
    data() {
      return {}
    },
    computed: {
      ...mapState({
        doctorList: state => state.doctor.doctorList,
      })
    },
    async created() {
      // 医生类型
      let params = {type: 'EXP'};
      // 获取医生列表
      await this.getDoctorList(params);
    },
    methods: {
      ...mapActions([
        // 获取医生列表
        'getDoctorList'
      ]),

      // 路由跳转方法
      routeLink(link) {
        this.$router.push({path: link});
      },
    }
  }
</script>

核心就是把API数据和页面分离,细分把接口,请求API数据方法放在vuex做处理,在页面映射vuex的mapActions提供的接口方法获取数据,做统一管理项目。喜欢或对你有帮助的话请点star,Thanks.

More Repositories

1

nodejs-koa-blog

基于 Node.js Koa2 实战开发的一套完整的博客项目网站
JavaScript
1,770
star
2

nodejs-koa-wxapp

Node.js + Koa2 + MySQL 实战开发微信小程序服务端接口
JavaScript
42
star
3

vue-cli3-template

基于 Vue-cli3 搭建的脚手架项目模板
JavaScript
30
star
4

react-blog-admin

基于 React.js + Ant Design 实现的博客管理后台项目
JavaScript
17
star
5

vue-blog-admin

基于 Vue.js + Element-UI 实现的博客管理后台
Vue
17
star
6

frontend

深入浅出前端体系
HTML
14
star
7

nuxtjs-blog-web

基于 Nuxt.js 实现的博客 SSR 网站
Vue
12
star
8

koa-analysis

Koa.js 源码分析
JavaScript
10
star
9

function

锻炼思维小能手:实现一些 JavaScript 常见实用的方法
JavaScript
6
star
10

frontend-performance-optimization

前端性能优化原理与实践
JavaScript
5
star
11

dart

study dart
Dart
3
star
12

vue-component

学习写一个 Vue.js 组件
Vue
3
star
13

nodejs-koa-service

Node.js Koa2 服务端实战项目
JavaScript
3
star
14

study-java-notes

Learn java notes, pure notes.
Java
3
star
15

javascript-basics

理解 JavaScript 的基础知识
JavaScript
2
star
16

webpack-example

webpack常见配置示例
JavaScript
2
star
17

JSFunction

✨✨JS各种实用方法Demo
JavaScript
2
star
18

react-todolist

A react todolist example
JavaScript
2
star
19

node-blog

JavaScript
1
star
20

wechat-applet

搭建微信小程序架构
JavaScript
1
star
21

Design-Patterns

设计模式
JavaScript
1
star
22

dxj-me

大小姐
1
star
23

http-cache

JavaScript
1
star
24

boblog-template

boblog template
1
star
25

quill-editor-element

Quill editor element
1
star
26

study-git

1
star
27

mytodolist

mytodolist
1
star
28

lfb.github.io

Next Blog
1
star
29

hutao

hutao
HTML
1
star
30

git-project

git actions
1
star
31

flutter

study flutter
Dart
1
star
32

js-algorithm

js algorithm
JavaScript
1
star
33

understand-webpack

理解webpack4笔记。Understand webpack4.0 notes.
JavaScript
1
star
34

snabbdom-demo

snabbdom-demo
JavaScript
1
star
35

webpack.js

1
star
36

vue-cli-admin

iview-admin-template.
JavaScript
1
star
37

nuxtjs-template

nuxtjs template
1
star
38

rem-mobile-responsive-adaptation

rem移动端响应式适配
HTML
1
star
39

cherry-storage

A front-end locally cached library
1
star
40

Promise-in-Action

Promise 从入门到实战
1
star
41

bojs

深入浅出 JavaScript 的基础知识
1
star
42

css-layout

css常用布局
HTML
1
star
43

css-layout-basis

系统学习 CSS 布局基础
HTML
1
star