前端开发规范v1

671 阅读8分钟

写在前面:

本次前端规范更多侧重的是在产品业务开发时的统一性,对用户体验和测试环节遇到的规范问题进行整理统一,对代码层面的规范涉及不多。后续会根据团队开发协作效率的不断提高,以及暴露的规范问题进行规范迭代。

一、规范的好处

1、从根本上降低开发成本:

提高代码整体的可读性、可维护性、可复用性。

2、保证代码的一致性:

软件系统中最重要的因素之一就是编码的一致性。如果编码风格一致,也更加易于维护,因为团队内任何人都可以快速理解并修改。

3、提升团队整体效率:

开发人员通常需要花费大量的时间来解决代码质量问题,如果都按照规范编写,也有助于团队尽早发现问题,这将提高整个交付过程的效率。

二、不规范代码的弊端

1、增加团队成员间的协作负担:

由于缺乏规范,导致代码风格不一,极端情况下,某段代码只有某个人能修改。

2、团队间协作更加困难:

由于开发人员要适应不同的风格,会导致效率低下。

3、回顾困难:

在review期间,可能经常为类似的事情做过多的讨论。

4、影响降低团队整体效率:

影响团队的生产力和质量,严重的甚至会影响团队和谐。

三、为什么很多团队缺乏规范

1、当开发人员被要求在短时间内完成任务时,通常会回避质量标准。

2、长时间养成的开发习惯很难在短时间内去改变。

3、有的时候虽然达成了一致,但在开发中依旧我行我素。

1.loading加载规范

  • 页面级loading:不需要,使用table自带的loading+块级loading。
  • 块级loading(弹框等):参照antd spning(包裹的方式)。
  • 按钮级loading:默认查询相关的按钮都不加loading。导入,导出,弹框保存类的按钮需要加loading。
  • 需要接口的下拉框:下拉select需要加loading,参考antd。
  • 模糊下拉分页的下拉组件:单独封装成组件。

2.表格相关规范

  1. 切换分页时保留勾选选中项。
  2. 表格在当前页删除某(单个/批量)选中项时,如果当前页删除后没有数据,需要跳转至前一页。如果不需要跳转,删除后,要保持当前页。
  3. 表格新增数据后,分页切换至page:1,查询条件重置。编辑保存成功后,不重置当前查询条件,保留选中项,并且停留在当前分页。如有特殊需求,再做处理。
  4. 分页显示为10/20/30,显示total。
  5. 删除需要弹出confirm弹框,这个弹框就是modal.confirm。类似需要确认的交互都使用该弹框,确认后再调接口。
  6. 表格里,如果有时间,由于时间格式一般长度都是固定的。所以时间列的内容需要完整显示,不要省略。除世时间列外的其他过长数据时,不能换行,而是省略...鼠标移上显示完整信息。在其表格列加入ellipsis: true 即可,下拉框里的数据过长时也是如此。
  7. 在进行枚举判断时,例如0,1,必须判断0和1这两种具体情况,而不是单纯的判断其中一种,其他情况else。
  8. 分页条数切换后,跳到第一页(对pagetion Hook进行处理),只有选择查询条件后,并且点击查询按钮后的查询条件,才在分页切换时代入,否则不带入。
  9. 表格行内涉及图片的列,都需要放大,antd有image这个组件。图片大小高度统一为40X40
  10. 每个模块的首页表格高度的规则是:距离页面底部始终为固定距离(大概在63px左右),且当前也有展开和收起时,点击展开和收起表格高度会自适应变化,页面整体不会出现滚动条,且高度变化过程中,用动画进行平滑过度。具体如下图:

image.png

image.png 表格空状态时的高度也是如此:

image.png

11.表格的布局为紧凑型布局。

3. 文件命名规范

  • 除vue组件部分用大驼峰的方式命名,其余文件全部小驼峰命名。
  • 页面内所有的fn还有data参数全部小驼峰。
  • 文件夹也是小驼峰命名。

4.注释规范

  1. 变量:涉及到业务模块的变量需要加注释,控制元素类的变量可以不加。
  2. 方法函数:必须要加,说明该函数的作用。
  3. 组件的注释:需要说明传参的作用,参数类型,给出一个基本示例。
  4. 代码页面中引入组件功能注释。

5.查询表单规范

  1. 查询表单默认展示两行,一行4列,超过两行则隐藏,label字体大小为14px,重置后,如果当前查询条件展开,则收起,并且重置当前查询条件,但不调接口,不刷新页面。并且此时如果表格有选中项,保持不变。
  2. 如果低于等于两行8列,不需要展开/收起按钮。宽度用栅格col span=6,为了保证数据铺满的情况下的外观问题,左右需要加间隙gutter,代码如下:
<a-row :gutter="[16,0]">
  1. label宽度90px,超出部分...鼠标移上显示
  2. 内容全部以靠右为准
  3. select相关的下拉查询,都需要一个清除按钮,input也需要清除按钮。
  4. 前端需要清除查询条件里的前后空格
  5. input框输入需要限制默认长度,默认长度30,可以根据业务需求额外设置。
  6. 前端按钮颜色,圆角值,鼠标移上,移开的样式,均按照产品规范要求来。
  7. 查询条件输入信息后,可按回车键进行查询。
  8. 查询表单中,当要求查询条件不能为空时,点击查询按钮后,提示:“所有查询条件不能同时为空”,并将查询条件重置恢复为默认状态,若系统中有默认查询条件为空的状态,且有查询条件为空限制时,处理方式是将结束时间设置成当天时间。
  9. 查询表单中如果有开始——结束日期范围组件,应拆分两个日期组件,即:

img_v2_a2305616-b0e0-4b7e-bc44-2164387f9b5g.jpg 当查询表单中的日期查询条件超过两个时,不拆开日期范围组件,产品会在设计图里额外标注。 12.select组件的下拉数据需要接口请求时,在@focus时去请求下拉数据,如果只在进入组件初始化的时候请求一次,会导致下拉数据出现更新不同步的问题。

6.按钮规范

  • 查询type=primary
  • 重置type=reload
  • 删除danger
  • 按钮都需要图标,如果没有指定,就默认不加图标

7.提示信息规范

  • 所有的提示信息(纯前端校验)使用warning
  • 错误信息error
  • 成功的success

8.接口返回体规范

需要前端自定义错误提示时,或者其他额外操作,code需要跟后端协商。

9.表格高度规范

  • 首页表格的高度使用vh动态计算 clac(100vh-动态高度)
  • 在1920x1080分辨率下,不能出现滚动条
  • 最小高度min-height:300px

10. 本地开发环境时,代理格式规范

首先,后端必须统一所有模块的接口格式,例如公共字段+模块字段,前端在本地代理时,也参照如此公共字段+模块字段。 例如:

proxy: {
      '/front-api/v1/basic': {
        // 基础资料模块接口地址
        target: 'http://192.168.233.181:30088',
        pathRewrite: {
          '^/front-api/v1/basic': '/basic/front-api/v1',
        },
        ws: false,
        changeOrigin: true,
      },

11.弹框内部布局统一规范

  • 抽屉宽度默认50%,默认最小宽度800px

  • 弹框默认宽度是520px

  • 弹框内如果是两行并列表单布局,用栅格模式。

  • 单行参照表单查询格式,左侧label,90px.

<a-row :gutter="32">
          <a-col :span="12">
           <a-form-item  label="名称">
                 </a-form-item>
          </a-col>
</a-row>

12.placeholder默认输入规范

  • input 请输入
  • select 请选择
  • 校验rules 请输入+label名

13.滚动条样式在mac和window上样式区别

设置全局滚动条样式

14.弹框关闭

打开弹框时,点击非弹框区域,弹窗默认不关闭

15.换行问题

所有超出问题不采用换行,而是使用...+鼠标移上提示

overflow:hidden; 
text-overflow:ellipsis; 
white-space:nowrap; 
width:90px;

16.数字类型的输入框

涉及到数字类型的输入校验,一律用ant的数组组件input-number,禁止自定义input。除非该功能antd组件无法实现,如在开发中遇到这种情况,需要告知项目负责人确定。

17.一些待确定的问题

  1. 重置到底要不要请求接口,以及重置后是回到默认条件还是为空?(需要跟产品确定)重置不调接口,查询项为空不允许查询,特殊情况
  2. 筛选列时,固定列是否可以筛除?不可以

18.vfrom组件优化

19.其他

一些其他额外需求,在UI图中未表达确定时,可能涉及到样式,交互,要统一时,需与项目负责人确定

image.png

image.png

image.png

20.上传组件

上传校验文件大小和格式不满足限制条件时,提示信息类型为warning,提示内容需给出支持的大小/格式有哪些