自学内容网 自学内容网

解决修改详情与监听数据冲突的问题

问题:

表单中的某一个字段是根据表单中的另一个字段通过watch函数监听出来的;

但是我们的详情和修改也会触发监听事件!

解决方案:

通过监听判断是不是走的修改和详情操作;如何处理呢?

通过添加条件判断:监听数据从undefined--->实际值

  watch: {
    'form.type': {
      handler(val, oval) {
        /*知识产权类型变更,判断是否需要计算到期日期*/
        //如果原来没有值,然后有新值并且存在表单的id说明是编辑或者详情;
        if(!oval && !!val && this.form.id){
          console.log('详情或修改操作')
        }
        else{
          if(!!val){
            this.getDueDate()
          }
        }
      },
    },
    'form.applicationDate': {
      handler(val, oval) {
        /*申请日期变更,判断是否需要计算到期日期*/
        //如果原来没有值,然后有新值并且存在表单的id说明是编辑或者详情;
        if(!oval && !!val && this.form.id){
          console.log('详情或修改操作')
        }else{
          if(!!val){
            this.getDueDate()
          }
        }
      },
    },
  },

走逻辑的方法:

    // 获取到期日期
    getDueDate() {
      const scope = this
      if (!!scope.form.status && !!scope.form.applicationDate && !!scope.form.type) {
        //如果状态为有效和已失效,需要显示到期日期
        if (scope.form.status === '2' || scope.form.status === '3') {
          //如果是发明专利:申请日+20年-1天
          if (scope.form.type === '1') {
            const curDate = scope.form.applicationDate
            const afterCurDate = scope.getDueDateAfterYear(curDate, 20)
            this.$set(scope.form, 'expireDate', afterCurDate)
          }
          //如果是实用新型专利:申请日+10年-1天
          else if (scope.form.type === '2') {
            const curDate = scope.form.applicationDate
            const afterCurDate = scope.getDueDateAfterYear(curDate, 10)
            this.$set(scope.form, 'expireDate', afterCurDate)
          }
          //如果是外观设计专利:申请日+15年-1天
          else if (scope.form.type === '3') {
            const curDate = scope.form.applicationDate
            const afterCurDate = scope.getDueDateAfterYear(curDate, 15)
            this.$set(scope.form, 'expireDate', afterCurDate)
          }
          //如果是软件著作权:申请日+50年的12月31日
          else if (scope.form.type === '4') {
            const curDateString = scope.form.applicationDate
            const curDate = new Date(curDateString);
            // 获取当前年份
            const currentYear = curDate.getFullYear();
            // 计算50年后的年份
            const afterYear = currentYear + 50;
            const afterCurDate = afterYear+'-12-31';
            this.$set(scope.form, 'expireDate', afterCurDate)
          }else{
            //修改详情展示数据,如果是变更的话单独去置空
            //this.$set(scope.form, 'expireDate', '')
          }
        }
      }
    },
    // 获取指定年份后的到期日期
    getDueDateAfterYear(curDateString,year){
      const curDate = new Date(curDateString);
      // 获取当前年份
      const currentYear = curDate.getFullYear();
      // 计算year年后的年份
      const yearAfter20Years = currentYear + year;
      // 创建一个新的日期对象,设置为year年后的同一天
      const dateAfter20Years = new Date(curDate);
      dateAfter20Years.setFullYear(yearAfter20Years);
      // 减去一天
      dateAfter20Years.setDate(dateAfter20Years.getDate() - 1);
      // 格式化输出日期
      const formattedDate = dateAfter20Years.toISOString().split('T')[0];
      return formattedDate
    },


原文地址:https://blog.csdn.net/qq_58738794/article/details/144347740

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!