qs.js解决传参为空,null,undefinde问题

qs.js去除参数为空的参数

vue的后台管理项目导出功能按搜索条件传参导出,但是后台比接受值为null,空,undefined的值。直接上代码

 let  obj={
            "isAppointment" :this.isAppointment,
            "id":this.selectorBehindObj.orderNumber, //工单号
            "thirdOrderId":this.selectorBehindObj.thirdOrderId, //渠道商订单号
            "userPhoneNum":this.selectorBehindObj.userPhoneNum, //下订单绑定手机号码
            "linkmanPhoneNum":this.selectorBehindObj.orderTel, //下订单联系人手机号码
            "linkmanCityId":this.selectorBehindObj.cityId,       //城市
            "linkmanAreaId":this.selectorBehindObj.areaId,       //区域
            "appointmentDatetime":this.selectorBehindObj.makeTime,   //预约时间
            "createTime":this.selectorBehindObj.placeTime,     //    下单时间
            "state":this.selectorBehindObj.orderStatus,      //工单状态
            "officialPartnerId":this.channelID,  //主渠道ID
            'officialPartnerSubsetId':this.officialPartnerSubsetId, //子渠道ID
            "appointmentDatetimeStartStr":this.statisticsDateStartStr,   //预约开始时间
            "appointmentDatetimeEndStr":this.statisticsDateEndStr,       //预约结束时间
            "createTimeStartStr":this.statisticsDateStartStr2,      //下单开始时间
            "createTimeEndStr":this.statisticsDateEndStr2,          //下单结束时间
            'fLabelBusiness':this.selectorBehindObj.labelId,         //工单分类
            "type":this.orderName, // 工单类型
            "linkmanName":this.phoneName, // 联系人
            "masterName":this.masterName, // 工程师姓名
            "masterPhoneNum":this.masterPhone, // 工程师手机
            "completedTimeStartStr": this.completedTimeStartStr, // 完成开始时间
            "completedTimeEndStr": this.completedTimeEndStr,// 完成结束时间
            "channelWarranty":this.selectQuality ,                                // 质保
            "source":this.numId1,                                            // 工单来源
            "siteId":this.siteID, // 网点名称
        }

上诉代码中是后台搜索条件必须要的参数,但是导出又不接受null,空,unedfinde等值。

npm install qs -S

在main.js中全局引入

import qs from “qs”
Vue.prototype.$Qs = qs; 绑定在vue的原型上

在需要的页面用到首先排除为空的值qs可以把为null的去掉,所以为空的全部变为null,

for(let key in obj){
      if(!obj[key]){
        obj[key] = null;
      }
    }

导出的路径接口窗口另外打开下载

 let strUrl = `${this.$reportdomain}/order/download?`;
    let data = strUrl+this.$Qs.stringify(obj,{skipNulls:true});
    window.open(data, 'newwindow', 'top=0, left=0, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes, location=yes, status=yes')

qs.js的NULL值处理

默认地,Null值会被解析为空字符串:

var withNull = qs.stringify({ a: null, b: '' }); //'a=&b='

解析器不区分参数是否含有等号或者不含都会转换为空:

qs.parse('a&b='); //{ a: '', b: '' }

在字符串化的时候,可以使用strictNullHandling选项来区分Null值和空,输出结果中Null值将不会含有等号:

qs.stringify({ a: null, b: '' }, { strictNullHandling: true })//'a&b='

如果要将没有等号的字符串值解析为Null的话,也可以使用strictNullHandling选项:

qs.parse('a&b=', { strictNullHandling: true }) //{ a: null, b: '' }

skipNulls选项可以忽略Null值的解析:

qs.stringify({ a: 'b', c: null}, { skipNulls: true }) //'a=b'

猜你喜欢

转载自blog.csdn.net/m18565890306/article/details/82733992