JS通过Excel上传数据

115 阅读1分钟
<input className="btn-upload-style" type="file" name="xlfile" accept=".xls, .xlsx" onChange={this.onFileChange}/>
          
<Button type="primary" className="save-item" disabled={this.state.disableSaveBtnStatus} onClick={this.saveItems}>
    导入商品
</Button>

onFileChange = (event) => {
    this.state.list = [];
    if (!event.target.files) {
      return;
    }
    let file = event.target.files[0];
    let reader = new FileReader();
    reader.onload = this.excelOnLoad;
    reader.readAsBinaryString(file);
}

excelOnLoad = (e) => {
    let wb = XLSX.read(e.target.result, {type: 'binary'});
    let _list = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
    if (_list.length > 1000) {
      Toast.error('Excel表格数据不得超过1000行!');
      this.setState({list:[], disableSaveBtnStatus: true });
      return;
    }
    _list = JSON.stringify(_list);
    var reg1 = new RegExp('商品ID' ,"g");
    var newstr1 = _list.replace( reg1 , 'itemId');
    _list = JSON.parse(newstr1);
    // 商品去重
    let itemMap = {}
    _list.forEach(it => {
      if (it.itemId) {
        itemMap[it.itemId] = it;
      }
    })
    const list = Object.values(itemMap);
    this.setState({list, disableSaveBtnStatus: false });
}

saveItems = () => {
    const {list} = this.state;
    const {lmShopId, lmShopIdDefault, addItems,invoiceType,value} = this.props;
    let syncToSelect=undefined
    if(value.length>0){
      syncToSelect=true
    }else{
      syncToSelect=false
    }
    if (lmShopId && list) {
      addItems({lmShopId, list,invoiceType,syncToSelect}, this.addResponse);
    } else {
      this.addResponseFailed();
    }
}

addResponse = () => {
    Toast.success('上传商品成功。');
    this.setState({
      disableSaveBtnStatus: true,
    })
}

addResponseFailed = () => {
    Toast.error('上传失败!');
    this.setState({
        disableSaveBtnStatus: true,
    })
}