优化维度及参考标准

  • 是否使用 ES6及以后的新语法
  • 前端开发规范
  • 组建使用的规范
  • 代码质量

    常见问题汇总

  • 创建多余变量未使用,引入公共方法未使用

image.png
image.png

  • 调试代码用console.log()未删除

image.png

  • 未抽离公共代码,导致代码冗余

image.png

  • 页面name建议用菜单事务码,防止重复影响缓存

image.png

top-filter 初始化默认查询条件建议写法

  1. <template>
  2. <div>
  3. <top-filter
  4. ref="topFilter"
  5. :initialValue="initialValue" // 设置初始化页面展示的查询条件字段的value
  6. :list="filterList"
  7. @change="filterChangeHandle"
  8. @collapseChange="collapseChangeHandle"
  9. />
  10. ....
  11. </div>
  12. </template>
  13. <script>
  14. // 正确的使用方式
  15. import { generateParams } from '@/utils';
  16. // generateParams 调用该方法的用途是在请求接口之前处理初始化的查询条件数据
  17. const filterInitialValue = generateParams({
  18. datetype: '1',
  19. 'startTime|endTime': [getCurrentMonthFirstDay('YYYY-MM-DD 00:00:00'), moment().format('YYYY-MM-DD 23:59:59')],
  20. vfinishstates: ['00', '15'],
  21. vflag: '0'
  22. });
  23. export default {
  24. data () {
  25. return{
  26. initialValue: { ...filterInitialValue },
  27. fetch: {
  28. api: getList,
  29. params: {
  30. ...filterInitialValue, // 确保页面展示的查询条件和接口的查询入参数保持一致
  31. ndealerid: ''
  32. },
  33. dataKey: 'items',
  34. },
  35. }
  36. }
  37. </script>

关于try{}catch(err){}的正确用法

  1. // 目前项目里对try{}catch(err){}用的比较少
  2. // 下面这个例子是用了但用的不标准
  3. // 1.loading结束的时机不对,这个loading基本等于没加
  4. // 2.需要对catch (err) {}进行异常捕获,
  5. async handleSendGoods(row) {
  6. try {
  7. this.divloading = true;
  8. const { msg, code } = await sendGoods(row);
  9. this.divloading = false;
  10. if (code === 200) {
  11. notifyAction(msg, 'success');
  12. this.fetch.params = Object.assign({}, this.fetch.params);
  13. }
  14. } catch (err) {}
  15. ......
  16. },
  17. // 请求需要用接用 try{}catch(err){}的意义
  18. // 1.可以保证代码报错loading状态仍然可以取消,优化用户体验。
  19. // 2.可以捕获更详细的异常信息
  20. // 修改后
  21. async handleSendGoods(row) {
  22. try {
  23. this.divloading = true;
  24. const { msg, code } = await sendGoods(row);
  25. if (code === 200) {
  26. notifyAction(msg, 'success');
  27. this.fetch.params = Object.assign({}, this.fetch.params);
  28. }
  29. } catch (err) {
  30. // 这里如果不输出如果代码报错,控制台看不到报错信息,增加处理bug的难度及时间
  31. console.log(err)
  32. }
  33. // 关掉loading的正确触发时机
  34. this.divloading = false
  35. },

优化项建议

  • 非响应式变量创建方式

image.png

代码参考:EP项目下 tds-vue-svc/pages/mntn/UI_SVC_20_020/index.vue

  • 用ES6的模板字符串替代字符串拼接 “ `` ” ```javascript // 字符串拼接 let val.endtime = val.endtime + ‘ ‘ + ‘23:59:59’;

// 模板字符串 let val.endtime = ${val.endtime} 23:59:59;

  1. - table组件uniqueKey建议用事务码,uniqueKey作用是保存用户对table操作,比如用户对table样式的调整,单元格的列款操作,字段的位置的切换等操作 会通过该字段作为key把用户设置保存到服务器,每次初始化会从服务器读取该用户的设置
  2. ```javascript
  3. <template>
  4. <div>
  5. <virtual-table
  6. ref="table"
  7. // TODO
  8. uniqueKey="UI_SPT_MDA_023"
  9. >
  10. </virtual-table>
  11. </div>
  12. </template>