# vue前端开发规范

版本v1.0

# 1、前言

现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。为了提高工作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,在网站建设中,使结构更加清晰,代码简明有序,有一个更好的前端架构。

# 2、概述

该文档主要对前端开发提供了标准化的数据参考和使用实例,便于前端项目的开发。符合web标准,使用具有语义的标签,使结构、表现、行为分离,兼容性优良。页面性能优化,代码简洁、明了、有序,尽可能的减少服务器的负载,保证最快的解析速度。

# 3、技术选型

PC端Vue项目UI框架:Element-UI

移动端Vue项目UI框架:Vant-UI

路由管理:Vue-Router

网络请求:Axios

全局状态:Vuex

css预处理器:Sass

富文本编辑器:WangEditor

图表:Echarts

地图:百度map、高德map

# 4、命名规范

# 4.1、命名原则

应反映该元素的功能或使用通用名称,而不要用抽象的晦涩的命名(原则:见名知其义)。

# 4.2、具体命名规范(驼峰命名法)

  • 文件夹采用“小驼峰命名法”

    例:dataBaseUser:变量dataBaseUser单词首字母大写。
    注:文件名不要以中文或人名命名,可以在文件内部注释说明是谁修改或建立的这个文件
    
  • .vue文件夹采用“大驼峰命名法”

    例:Index、BaseUser:变量BaseUser单词首字母大写。
    
  • 其它文件夹采用“小驼峰命名法”

    例:dataBaseUser:变量dataBaseUser单词首字母大写。
    
  • id采用“小驼峰命名法”

    例:myStudentCount:变量myStudentCount第一个单词是全部小写,后面的单词首字母大写。
    
  • class:采用“中划线法命名法”

    例:print-employee-paychecks:函数名中的每一个逻辑断点都有一个下划线来标记。
    

# 4.3、精简命名

精简命名,应当表达该变量或方法的含义;采用缩写后,应当在首次使用的地方进行注释;id和class命名越精简越好,只要足够表达意思,这样有助于理解,同时也能提高代码效率。

.navigation{} /* 不推荐 */
.login_box_inside_con{} /* 不推荐 */
.nav{} /* 推荐 */

# 4.4、命名嵌套问题

书写css要注意先后顺序和嵌套问题,从性能上考虑尽量减少选择器的层级。

// 常规写法 - 最好不超过三级
.nav ul.list{} /* 不推荐 */
.nav .list{} /* 推荐 */

// sass 写法 - 不推荐
.nav {}
.nav-list{}
.nav-list-item{}

// sass 写法 - 推荐 (以模块划分写样式)
.nav {
 &-list {
 	&-item {
 	...
 	}
 }
}

# 4.5、避免使用中文拼音

命名中尽量避免使用中文拼音,应该采用更简明有语义的英文单词进行组合。

  • 命名注意缩写,但是不能盲目缩写;
  • 不允许通过1、2、3等序号进行命名;
  • 避免class与id重名;
  • id注意用于标识模块或页面的某一个父容器区域,名称必须唯一,不要随意新建id;
  • class用于标识某一个类型的对象,命名必须言简意赅;
  • 尽可能提高代码模块的复用,样式尽量用组合的方式;
  • 规则名称中不应该包含颜色、定位等与具体显示效果相关的信息,应该用意义命名,而不是结果名称。

# 4.6、Vue 项目中的命名

* Store 中的Module 使用“小驼峰命名法”
* Store 中的Mutation 使用 全部大写的下划线命名法
* Store 中的state/getters/action 使用“小驼峰命名法”
* 组件必须使用“大驼峰命名法”命名法,
* 引用组件时禁止使用别名,模板内组件标签名遵循html 标签命名规范,或者使用组件名
* 组件名必须避免使用Vue保留标签名(包括HTML标签和Vue内部标签)
* 模块文件夹不要和文件出现重复相同的单词
* 前端路由路径使用“小驼峰命名法”

# 5、排版规范

# 5.1、代码格式

  • 1、大括号的使用约定。

    * 如果是大括号内为空,则简洁地写成{}即可,不需要换行
    例:{}
    
    * 非空代码块则:
    (1)左大括号前不换行有空格;
    (2)左大括号后换行;
    (3)右大括号前换行;
    (4)右大括号后还有else等代码则不换行;
    (5)表示终止的右大括号后必须换行。
    (6)在vue里面换行可以不使用分号(;)。
    例:
        methods: {
            testFunc () {
                console.log("测试方法")
                var flag = false
                if (this.num === 0) {
                    flag = true
                } else {
                     flag = false
                }
            }
        }
    
  • 2、左右小括号与中间字符之间不出现空格。

    例:
    if (this.num === 0) {  // 左右小括号()中间字符直接不出现空格
        flag = true;
    } 
    
  • 3、if/for/while/switch 等保留字与括号之间都必须加空格。

    例:
    if () {}
    for () {}
    while () {}
    switch () {}
    
  • 4、任何二目、三目运算符的左右两边都需要加一个空格。

例: int a = 1, b = 2, z, c = 3; z = a > b ? a : (b > c ? b : c);


- 5、变量和方法在首次使用时,应当添加标准注释;注释的双斜线与注释内容之间有且只有一个空格。

例: // 我就是个注释信息展示 /** 我就是个注释信息展示 / / ** 我就是个注释信息展示 **/

// 函数注释 /**

  • 累加函数
  • @param {number} 初始值
  • @param {number} 累加值
  • @return {number} 累计后值 */

- 6、方法参数在定义和传入时,多个参数逗号后边必须加空格。

```dart
例:
    methods: {
        testFunc (pra1, pra2, pra3) {
            console.log("测试方法");
            var flag = false;
            if (this.num === 0) {
                flag = true;
            } else {
                 flag = false;
            }
        }
    }
  • 7、在 if/else/for/while/do 语句中必须使用大括号。即使只有一行代码,避免采用 单行的编码方式:if (condition) statements;

# 5.2、vue文件代码顺序

必须按照该代码结构构建代码。

// html 代码
<template></template>

// js 代码
<script>
export default {
	props: {},
	components: {},
	watch: {},
	computed: {},
	data () {},
	methed: {},
	beforeCreated () {},
	created () {},
	beforeMounted () {},
	mounted () {},
	beforeUpdated () {},
	updated () {},
	beforeDestroyed () {},
	destroyed () {},
}
</script>

// css 代码
<style lang="scss" scoped></style>

# 6、项目结构

# 6.1 项目基本目录

├── dist                        // 打包后文件
├── node_modules                // 依赖包
├── public                      // html模板和静态文件
├── src                         // 源代码(模块应与apis里的js一一对应)
│   ├── apis                    // 后端接口
│   ├── assets                  // 静态资源
│   ├── components              // 全局公用组件
│   ├── layout             	    // 布局
│   ├── router                  // 路由
│   ├── store                   // 全局状态管理
│   ├── utils                   // 全局公用方法
│   ├── views                   // 前端页面代码
│   │   ├── admin               // 系统管理模块
│   │   │   ├── menu            // 菜单管理页面
│   │   │   │   ├── components  // 页面组件
│   │   │   │   ├── Index.vue   // 页面入口
│   ├── App.vue                 // 入口页面
│   └── main.js                 // 入口 加载组件 初始化等
├── .env.dev                	// 开发环境配置文件
├── .env.test                	// 测试环境配置文件
├── .env.prod                	// 生产环境配置文件
└── package.json                // 依赖包管理

# 6.2 各环境开发文件配置

  • 不同的打包命令对应着不同的配置文件。

    .env.dev // 开发环境配置文件 .env.test // 测试环境配置文件 .env.prod // 生产环境配置文件

    // 正常打包
    npm run build
    // 开发环境打包
    npm run build-dev
    // 测试环境打包
    npm run build-test
    // 生成环境打包
    npm run build-prod
    
  • 配置文件

    // 后端的接口服务地址
    VUE_APP_PORT = 'http://192.169.0.220:5001'
    
    // 可以配置多个对应不同的后端
    VUE_APP_PORT_TEST1 = 'http://192.169.0.220:5002'
    VUE_APP_PORT_TEST2 = 'http://192.169.0.220:5003'
    VUE_APP_PORT_TEST3 = 'http://192.169.0.220:5004'
    
    //  注意:必须以 VUE_APP_ 开头
    

# 6.3 后端接口注册

所以的后端接口在apis文件夹中统一注册,每一个模块对应一个js文件,接口必须以页面 + 下划线 + 功能 (全大写)定义。

例如:
// 配置文件中定义的后端接口服务地址
let baseURL = process.env.VUE_APP_PORT || ''

// api管理
export const DEMO_LIST = baseURL + '/system/demo/list'

# 6.3 页面和组件

  • 公用组件和全部已经抽离sanhui里面,具体是使用方法请请参考说明文档。

  • 页面全部定义在views文件夹下,以模块文件夹 + 页面文件夹 + Index.vue组成,页面组件放在页面文件夹的components文件夹下。

    例:
    
     admin               // 系统管理模块
       ├── menu            // 菜单管理页面
       │   ├── components  // 页面组件
       │   ├── Index.vue   // 页面入口
    
    
  • 其它组件,由业务部门自定义的公用组件放在views同级下的conpoents目录下。

# 6.4 样式管理

  • 样式由技术部进行统一封装管理,原则上业务部门不应该写全局样式。
  • 页面局部样式写在.vue文件中,避免样式污染,每个style标签必须加上scoped属性。

# 7、接口规范

# 7.1、接口命名

接口URL规范:以projectName/name或者IP:port/name开头,name一般放表名或者能表达这个接口的单词,name遵循驼峰法命名。

例如:
projectName/login 、ip:port/projectList等

# 7.2、请求方式规范

  • 支持 HTTP /HTTPS协议(全称HyperText Transfer Protocol/HyperText Transfer Protocol Secure,超文本传输协议/超文本传输安全协议),公司层面统一使用WebApi接口。

  • GET 从指定的资源请求数据。

  • POST 向指定的资源提交修改数据/获取数据。

  • 请求传输方式:HTTP /HTTPS协议,支持GET/POST方法。

# 7.3、请求参数规范

  • 请求参数使用JSON格式,采用application/json;charset=UTF-8进行请求。

  • 需要登录的请求必须带Token, Token参数放在请求头 header内。

    例如:
    Authorization: Bearer 269b5e37bdc0444ab756b02977f07e83
    

# 7.4、返回参数规范

数据对象字段,不建议返回null,数据应当是{}(类),一些接口也可以是[](数组)或者 ‘’ (字符串)。

参数格式:JSON

  • 普通请求必须参数如下:code状态码,data业务数据,msg返回消息

    {
      code: 0,
      data: {},
      msg: '成功'
    }
    
  • 列表请求必须参数如下:code状态码,data业务数据,msg返回消息,count总条数

    {
      code: 0,
      data: [],
      count: 0,
      msg: '成功'
    }
    

# 7.5、状态码

  • code为0时请求成功,非0时当成错误抛出。
  • code为2时为未登录,自动跳转登录页。