前端工作总结9

418 阅读2分钟

回京一个月了,4月7号来的北京,集中隔离14天+居家观察7天4月份就过完了,加上五一放了天的长假,5月6好开始全员复工。在隔离的这段日子里由于自己主动接了一个项目,搞得自己异常的忙碌,曾经三天没睡过好觉了。下次一定要量力而行,不过忙碌中也还是有收获的。

想要留下的代码

  1. 有个vue项目做的是一个公共页面,路由都是动态路由,在菜单切换的时候页面没有刷新,加上下面的代码页面就更新了
<router-view :key="$route.fullPath"></router-view>
  1. 在项目中有动态路由的时候,路由的顺序也很重要,把相对确定的放在前面,完全动态的放在后面
router.push({
    path: '/:category/monitor',
    name: 'monitor',
    component: monitor
  })
  router.push({
    path: '/:category/:englishName',
    name: 'mainVue',
    component: Main
  })
  1. element 级联组建,动态获取数据,有时候三级页面数据渲染晚一步,重点是getThirdOrg方法中使用的是this.secondData(先把secondData存起来)去赋值,而不是this.organizeData一级一级的赋值
    //获取第一级组织机构
    async getFirstOrg() {
      let data = await this.getOrganizations('00000000')
      this.organizeData = this.handleOrganizations(data)
    },
    //获取第二级组织机构
    async getSecondOrg(val) {
      this.firstIndex = this.searchIndex(this.organizeData, val)
      let secondData = await this.getOrganizations(val)
      this.organizeData[this.firstIndex].children = this.handleOrganizations(
        secondData
      )
      this.secondData = this.organizeData[this.firstIndex].children
    },
    //获取第三级组织机构
    async getThirdOrg(val) {
      let secondIndex = this.searchIndex(this.secondData, val)
      let thirdData = await this.getOrganizations(val)
      this.secondData[secondIndex].children = thirdData
    },
    async handleItemChange(val, isReview) {
      // 是否回显
      if (!isReview) {
        let nodesObj = this.$refs['cascader'].currentLabels
        this.partner.orgName = nodesObj
        if (val.length > 1) {
          await this.getThirdOrg(val[1])
        } else {
          await this.getSecondOrg(val[0])
        }
      } else {
        val[0] && (await this.getSecondOrg(val[0]))
        val[1] && (await this.getThirdOrg(val[1]))
      }
    },
  1. element 动态表头
<jc-table
    class="form-loading"
    ref="singleTable"
    :data="tableData"
    highlight-current-row
    height="100"
     >
    <jc-table-column property="name" label="QPS数量">
    </jc-table-column>
    <jc-table-column
        v-for="(item, index) in labelTable"
        :key="index"
        :label="item.tablename"
        :property="item.prop"
    >
        <template slot-scope="scope">{{
            scope.row[scope.column.property]
        }}</template>
    </jc-table-column>
</jc-table>
// 获取表格的数据
async getPriceList() {
      let params = {
        chargeType: 7
      }
      let { data } = await getUnitPriceList(this.englishName, params)
      let table = { name: '单价(元/月/QPS)' }
      data &&
        data.map(item => {
          let name = item.qps
          table[name] = item.price
        })
      table.last = '联系客服'
      this.tableData.unshift(table)//处理表格数据,业务的原因,表格只有一行数据
      this.handlePrice(data) // 处理表头的数据
    },
    // 处理表头数据
    handlePrice(data) {
      let len = data.length
      data &&
        data.forEach((item, index, array) => {
          let name = item.qps + ''
          if (index > 0 && index < len) {
            let pre = index - 1
            this.labelTable.push({
              tablename: `${array[pre].qps}<n<=${name}`,
              prop: name
            })
          } else {
            if (index === 0) {
              this.labelTable.push({ tablename: `0<n<=${name}`, prop: name })
            }
          }
        })
      let lastName = data[len - 1].qps
      this.maxQps = lastName
      this.labelTable.push({ tablename: `${lastName}<n`, prop: 'last' })
    },

遇到的坑

  1. element 组件可多选的下拉框,初始赋值后,无法再次选择,业务场景是,一般的详情页回回显,多选组件回显没问题,但是想再次修改就改不了,后来发现是在回显的时候得先把对象赋予{} 才行,this.partner = Object.assign({}, this.partner, result.result) 这样去赋值就没有问题,this.partner = Object.assign( this.partner, result.result)这样就会有问题

学习

  1. 一个制作幻灯片的在线工具,只需要少量拖拽和对齐操作,就可以生成通过浏览器播放的幻灯片
  2. 一篇入门文章,介绍如何使用 React 写一个 SVG 图形
  3. 一个为手机浏览器加入控制台(console)的脚本库,可以用 Bookmarklet 注入外部网页。
  4. 该网站收集各类 PWA(渐进式网页引用),可以在该网站进行统一安装
  5. 以上转自软一峰的网络日志