import React, { Component } from 'react'; import pdaApi from '../../common/api/pdauser' import './index.less'; import { Button, Toast, Modal,Switch } from 'antd-mobile' import box from '../../assets/box.png' import redscan from '../../assets/redscan.png' import success from '../../assets/succssed.png' import checkon from '../../assets/checkon.png' import checkoff from '../../assets/checkoff.png' import HomeHeader from '../../common/commonview/homeheader' import SingleItem, { SpecialSingleItem } from '../../common/commonview/singleitem' import SingleModal from '../../common/commonview/singlemodal' import DoubleModal from '../../common/commonview/doublemodal' import RightModal from '../../common/commonview/rightmodal' import http from "../../common/api/http"; const getQuery = function (key) { var url = window.location.href; var svalue = url.match(new RegExp("[\?\&]" + key + "=([^\&]*)(\&?)", "i")); return svalue ? svalue[1] : svalue; } const olddata = getQuery("olddata"); const alert = Modal.alert export default class Tab1 extends Component { constructor(props) { super(props) this.state = { height: '', boxnum: '', data: [], num: 0,//已扫描箱数 errbox: false,//箱号验证,箱号错误 repbox: false,//箱号验证,箱号重复 addboxisshow: false,//添加的箱号提示框是否出现 addboxid: '',//添加的箱号 delisshow: false,//删除提示框是否出现 delindex: '',//删除的数据序号 delok: false,//删除成功提示框是否出现 saveshow: false,//提交提示框是否出现 savenullvaule: false,//提交空值提示框是否出现 valuateisshow: false,//提交成功评价提示框是否出现 currentShipment:"",//签收的运单号 allSelectFlag:0,//20220316 全选标识 boxshow:false, checked:false, scanName:"扫描查询" } this.handleInputChange = this.handleInputChange.bind(this) this.checkboxs = this.checkboxs.bind(this) this.checkgetAllboxs = this.checkgetAllboxs.bind(this) this.Scan = this.Scan.bind(this) this.scanName = "扫描查询" this.allNum = 0 } handleInputChange(event) { this.setState({ boxnum: event.target.value }) } // 经销商按箱号签收功能 render() { return ( <div className="container"> <div style={{ flex: "1 1 0", overflowY: 'scroll' }}> <SpecialSingleItem singleName="箱号" name="boxnum" inputPosition="0" onClick={this.checkgetAllboxs} value={this.state.boxnum} onChange={this.handleInputChange} outerStyle={{ height: '.7rem' }} /> <HomeHeader leftheadericon={box} rightheadericon={redscan} leftheadertext="箱号查询" rightheadertext={this.state.scanName} outerStyle={{ height: '1.6rem', marginTop: '0.2rem' }} leftTextStyle={{ color: '#f5a623' }} rightTextStyle={{ color: '#eb5a6c' }} LeftonClick={() => { this.seacherShow() }} RightonClick={() => { this.Scan() }} /> <div className="table" style={{ display: (this.state.data.length>0) ? "block" : "none"}}> <div className="table-head"> <div className="table-head-item item-null" > <Switch checked={this.state.checked} onChange={() => {this.chageScan()}} /> </div> <div className="table-head-item item-left">交接单号</div> {/* <div className="table-head-item item-state">状态</div> */} {/*20220316 增加全选、反选功能*/} <div className="table-head-item item-right" onClick={() => { this.selectAllBox()}} > <img style={{ marginTop: '.15rem' }} src={this.state.allSelectFlag == 1 ? checkon : checkoff} /> </div> </div> {/*<div className="table-container-none-display">*/} {/* {this.state.data.map((item, index) => (*/} {/* <div key={index} className="table-item">*/} {/* </div>*/} {/* ))}*/} {/*</div>*/} <div className="table-container"> {this.state.data.map((item, index) => ( <div key={index} className="table-item"> <div className="table-item-icon-letf"> </div> <div className="table-item-left-float"> {item.pod_no} </div> <div className={item.boxshow? "table-item-icon" : "table-item-icon-old"} onClick={() => { this.showBow(index)}}> <svg t="1675742360113" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4384" width="110" height="110"><path d="M736 480c-12.5-12.5-32.8-12.5-45.3 0L523.3 647.4c-6.2 6.2-16.4 6.2-22.6 0L333.3 480c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L466.7 704c25 25 65.5 25 90.5 0L736 525.3c12.5-12.5 12.5-32.8 0-45.3z" p-id="4385" fill="#1296db"></path></svg> </div> <div className="table-item-left-boxnum">{'箱数:'+item.box_num}</div> <div className="table-item-icon-right" onClick={() => { this.selectAllBox2(index)}}> <img style={{ marginTop: '.15rem' }} src={item.statuscode == 0 ? checkon : checkoff} /> </div> {item.box_list.map((row, indexs) => ( <div key={indexs} style={{ display: (item.boxshow) ? "block" : "none",width:'100%',height: '0.8rem'}}> <div className="table-item-left-icon" onClick={() => { row.status == 0 ? this.delboxnumshow(indexs,index) : this.delboxnum(indexs,index) }}> </div> <div className="table-item-right-row"> {row.box_number}</div> <div className="table-item-left-row"></div> <div className="table-item-right-icon" onClick={() => { row.status == 0 ? this.delboxnumshow(indexs,index) : this.delboxnum(indexs,index) }}> <img style={{ marginTop: '.15rem' }} src={row.statuscode == 0 ? checkon : checkoff} /> </div> </div> ))} </div> ))} </div> </div> </div> <div className="prompt">已扫描箱数量:{this.allNum} 已选箱数量:{this.state.num}</div> <div className="submitContainer"> <Button className="submit" type="primary" // loading={this.state.loading} onClick={() => { this.saveboxshow() }}>提交</Button> </div> {/* 验证箱号 ---箱号错误 */} <SingleModal addboxisshow={this.state.errbox} modaltext="箱号错误" Close={() => { this.setState({ errbox: false }) }} ></SingleModal> {/* 验证箱号 ---箱号已存在 */} <SingleModal addboxisshow={this.state.repbox} modaltext="箱号已存在" Close={() => { this.setState({ repbox: false }) }} ></SingleModal> {/* 箱号查询 */} <Modal visible={this.state.addboxisshow} transparent maskClosable={false} > <div className="addboxtitle"> 请输入箱号 </div> <div className="addboxinput"> <input type='text' onChange={(e) => { this.setState({ addboxid: e.target.value }) }} /> </div> <div className="addboxbutton"> <Button className="addboxbutton1" onClick={() => { this.setState({ addboxisshow: false }) }}>取消</Button> <Button className="addboxbutton2" onClick={() => { this.seacherget() }}>确定</Button> </div> </Modal> {/* 删除箱号 */} <DoubleModal title='删除确认' isshow={this.state.delisshow} modaltext="继续删除数据,请点击确认!" Close={() => { this.setState({ delisshow: false }) }} Ok={() => { this.delboxnumshowok() }} > </DoubleModal> {/* 删除成功 */} {/* <RightModal isshow={this.state.delok} modaltext="删除成功" Close={()=>{this.setState({delok:false})}} ></RightModal> */} {/* 确认提交 */} <DoubleModal title='提示消息' isshow={this.state.saveshow} modaltext="确认提交吗?" Close={() => { this.setState({ saveshow: false }) }} Ok={() => { this.saveboxshowok() }} > </DoubleModal> {/* 提交空值 */} <SingleModal addboxisshow={this.state.savenullvaule} modaltext="请先添加箱号" Close={() => { this.setState({ savenullvaule: false }) }} ></SingleModal> {/* 提交成功,进入评价页面 */} <Modal visible={this.state.valuateisshow} transparent maskClosable={false} > <div className="valuatetitlewrap"> <div className="valuatetitleimg"> <img src={success} style={{ width: '100%', height: '100%' }} /> </div> <div className="valuatetitletexxt"> 操作成功 </div> </div> <div className="valuatebutton"> <Button className="valuatebutton1" onClick={() => { this.govaluate() }}>评价</Button> <Button className="valuatebutton2" onClick={() => { this.setState({ valuateisshow: false, boxnum: '', data: [], num: 0, }) }}>关闭</Button> </div> </Modal> </div> ) } componentDidMount() { // const height = (document.querySelector('body').offsetHeight - 350)/100-3 const height = (window.screen.height * 2 - 350) / 100 + .1 - 2 console.log('屏幕高度', height); this.setState({ height: height + 'rem' }) var url = window.location.href pdaApi.jssdk({ url }).then(res => { console.log('微信配置', res); if (res.code == 1) { wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: res.result.appId, // 必填,公众号的唯一标识 timestamp: res.result.timestamp, // 必填,生成签名的时间戳 nonceStr: res.result.nonceStr, // 必填,生成签名的随机串 signature: res.result.signature,// 必填,签名 jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表 }); wx.error(function (res) { alert(JSON.stringify(res)) // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); } }) if (olddata) { let newdata = JSON.parse(localStorage.getItem("tempdata")) || []; let newnum = JSON.parse(localStorage.getItem("num")) || 0; console.log('旧数据', newdata); this.setState({ data: newdata, num: newnum }) } // 获取用户信息 let userInfo = JSON.parse(localStorage.getItem("userInfo")) || '' if (userInfo != '') { console.log('用户信息', userInfo); this.setState({ userInfo: userInfo }) } else { // window.location.href = "/binduser.html"; // Leo 20220304 测试,不执行跳转 } } //验证箱号,获取详细信息 checkboxs() { //G0143806 00001 var sitecode = this.state.userInfo.code || ""//站点 var data = this.state.data if (this.state.boxnum) { if (data.length == 0) { var box_number = this.state.boxnum } else { for (var i = 0; i < data.length; i++) { if (data[i].box_number == this.state.boxnum) { if (data[i].statuscode == 0) { // Toast.info('该箱号已存在') this.setState({ repbox: true }) return } else { let newObj = data[i] if (item.state == "S") { newObj.statuscode = 2; } else { newObj.statuscode = 0 this.setState({ num: this.state.num + 1 }) } this.state.data.splice(i, 1, newObj) this.setState({ data: this.state.data.concat() }) return } } else { var box_number = this.state.boxnum } } } Toast.loading('Loading...', 0, () => { },true); pdaApi.getdealerboxs({ box_number, sitecode }).then(res => { Toast.hide(); // var res=pdaApi.getdealerboxs({box_number,sitecode}) console.log('验证箱号,获取详细信息', res, box_number); if (res.code == 1 && res.result.length != 0) { var tempdata = this.state.data if (res.result.state == "S") { tempdata = tempdata.concat(Object.assign({}, res.result, { statuscode: 2 })); } else { tempdata = tempdata.concat(Object.assign({}, res.result, { statuscode: 0 })); this.setState({ num: this.state.num + 1 }) } } else if(res.code == -1){ alert('提示信息','网络异常,请检查网络状况',[ {text:'确定',onPress:()=>console.log('确定')}, ]) }else if(res.code == 0){ alert('提示信息', res.result, [ { text: '确定', onPress: () => console.log('确定') }, ]) }else{ alert('提示信息', '系统错误,请联系客服人员处理', [ { text: '确定', onPress: () => console.log('确定') }, ]) } }) } else { Toast.info('请先输入箱号') } } chageScan(){ if(this.state.checked){ this.setState({ scanName: "扫描查询", checked: !this.state.checked, }); }else{ if(this.state.num>0){ alert('提示信息', '操作错误,请取消箱号勾选再重试', [ { text: '确定', onPress: () => console.log('确定') }, ]) }else{ this.setState({ scanName: "扫描验证", checked: !this.state.checked, }); } } } chageit(box_number){ var data = this.state.data var chose = false; for (var i = 0; i < data.length; i++) { var boxdata = data[i]['box_list'] for(var j = 0; j < boxdata.length; j++){ var row = boxdata[j] if(row.box_number==box_number){ chose =true if(row.statuscode == 0){ alert('提示信息', '验证失败,该箱号已验证', [ { text: '确定', onPress: () => console.log('确定') }, ]) return }else{ this.state.data[i].box_list[j].statuscode = 0 this.setState({ num: this.state.num + 1 }) Toast.success('扫码验证成功!!!', 1); return } } } } if(chose){ }else{ alert('提示信息', '验证失败,查询箱号中没有验证的箱号', [ { text: '确定', onPress: () => console.log('确定') }, ]) } } //20220316 全选或者反选所有箱号 //20220316 全选或者反选所有箱号 selectAllBox(){ if(this.state.checked){ return } let data = this.state.data; var box_total = 0 if(this.state.data){ var fdata = this.state.data for(var i=0;i<fdata.length;i++){ box_total = box_total + this.state.data[i]['box_list'].length; } }else{ box_total = 0 } console.log(box_total); let flag = this.state.allSelectFlag; //如果flag等于0,表示当前的状态是未全选的状态,需要将所有的数据全选(statuscode == 0) if(flag == 0){ for(var i = 0;i< data.length;i++){ let datas = this.state.data[i]['box_list']; //全选数据 data[i].statuscode = 0; //更新状态为全选 flag = 1; for(var j = 0;j< datas.length;j++){ //全选数据 datas[j].statuscode = 0; //更新状态为全选 } } }else{ for(var i = 0;i< data.length;i++){ let datas = this.state.data[i]['box_list']; //取消全选数据 data[i].statuscode = 1; //更新状态为全不选中 flag = 0; for(var j = 0;j< datas.length;j++){ //全选数据 datas[j].statuscode = 1; //更新状态为全选 } } } //设置数据 this.setState({ data: data, allSelectFlag: flag, num:flag == 1 ? box_total: 0 }) } //20220316 全选或者反选所有箱号 getnumbox(){ let data = this.state.data var num = 0 data.map((row, index) => { var boxList = row['box_list'] boxList.map((item, index) => { if (item.statuscode == 0) { num+=1 } }) }) return num } selectAllBox2(index){ if(this.state.checked){ return } let data = this.state.data; var box_total = 0 let flag = this.state.data[index].statuscode; let datas = this.state.data[index]['box_list']; //如果flag等于0,表示当前的状态是未全选的状态,需要将所有的数据全选(statuscode == 0) if(flag==undefined||flag == 1){ for(var i = 0;i< datas.length;i++){ //全选数据 datas[i].statuscode = 0; //更新状态为全选 flag = 0; } }else{ for(var i = 0;i< datas.length;i++){ //取消全选数据 datas[i].statuscode = 1; //更新状态为全不选中 flag = 1; } } //设置数据 box_total = this.getnumbox() this.state.data[index].statuscode = flag this.setState({ data: data, num:box_total }) } //20220316 检查全选或者反选的状态 checkSelectAllBox(){ let data = this.state.data; //数据 let flag = 1 ; //this.state.allSelectFlag; //全选标识 if(data.length == 0){ flag = 0; }else{ for(var i = 0;i< data.length;i++){ if(data[i].statuscode == 1){ //statuscode == 1 表示存在未选中的数据 flag = 0; } } }; //更新选中状态 this.setState({ allSelectFlag: flag }) } //验证箱号,根据箱号获取所有箱号 checkgetAllboxs() { //G0143806 00001 var sitecode = this.state.userInfo.code || ""//站点 var box_number = this.state.boxnum // Leo 20220308 // if(!box_number){ // box_number = 'test00000 00001' // var sitecode = 'CMAL/SP.51710' // } if (box_number) { Toast.loading('Loading...', 0, () => { },true); //Leo 20220308 pdaApi.getAllBoxsByBox({ box_number, sitecode }).then(res => { Toast.hide(); console.log('根据箱号,获取箱号列表详细信息', res); if (res.code == 1 && res.result.length != 0) { var tempdata = this.state.data var allNum = this.allNum res.result.map((item, index) => { if (tempdata.length == 0) { if (item.state == "S") { tempdata = tempdata.concat(Object.assign({}, item, { statuscode: 2 })); } else { tempdata = tempdata.concat(Object.assign({}, item, { statuscode: 1 })); // this.setState({ // num: this.state.num + 1 // }) } } else { var bj = true; for (var i = 0; i < tempdata.length; i++) { var boxlist = tempdata[i]['box_list'] for(var j = 0; j < boxlist.length; j++){ var box_number = boxlist[j]['box_number'] for(var n = 0; n < item.box_list.length; n++){ var itembox = item.box_list[n]['box_number'] if (box_number == itembox) { bj = false; this.setState({ repbox: true }) return }else{ } } } } if(bj){ tempdata = tempdata.concat(Object.assign({}, item, { statuscode: 1 })); } // if (item.state == "S") { // tempdata = tempdata.concat(Object.assign({}, item, { statuscode: 2 })); // } else { // tempdata = tempdata.concat(Object.assign({}, item, { statuscode: 1 })); // // this.setState({ // // num: this.state.num + 1 // // }) // } } allNum+=item.box_list.length this.allNum = allNum }) let currentShipment = res.result[0].shipment_gid; //20220316 增加选中状态判断,如果是第一次添加,直接将flag置位1 // if(this.state.data.length == 0){ // this.setState({ // allSelectFlag:1 // }) // }else{ // this.checkSelectAllBox(); // } this.setState({ data: tempdata, currentShipment:currentShipment }) }else if(res.code == -1){ alert('提示信息','网络异常,请检查网络状况',[ {text:'确定',onPress:()=>console.log('确定')}, ]) }else if(res.code == 0){ alert('提示信息', res.result, [ { text: '确定', onPress: () => console.log('确定') }, ]) }else{ alert('提示信息', '系统错误,请联系客服人员处理', [ { text: '确定', onPress: () => console.log('确定') }, ]) } console.log(this.state) }) } else { Toast.info('请先输入箱号') } } showBow(index){ let newObj = this.state.data[index] if(newObj.boxshow!=null){ newObj.boxshow = !newObj.boxshow }else{ newObj.boxshow =true } //这里毫无意义只是刷新 this.setState({ boxshow: true }) } //删除 delboxnumshow(index,findex) { if(this.state.checked){ return } this.setState({ delisshow: true, delindex: index }) } //确认删除 delboxnumshowok() { this.setState({ delisshow: false, }, () => { let index = this.state.delindex console.log(index); this.delboxnum(index) }) } //删除箱号 delboxnum(index,findex) { if(this.state.checked){ return } let newObj = this.state.data[findex].box_list[index] if (newObj.statuscode == 0) { newObj.statuscode = 1 //去除上级的全选 this.state.data[findex].statuscode = 1 this.state.allSelectFlag = 0 this.setState({ num: this.state.num - 1, // delok:true }) } else { newObj.statuscode = 0 this.setState({ num: this.state.num + 1 }) } } //扫描 Scan() { // wx.ready(function () { // wx.checkJsApi({ // jsApiList: ['scanQRCode'], // 需要检测的JS接口列表,所有JS接口列表见附录2, // success: function(res) { // alert(JSON.stringify(res)) // // 以键值对的形式返回,可用的api值true,不可用为false // // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} // } // });、 var self = this; //需在用户可能点击分享按钮前就先调用 wx.scanQRCode({ needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, scanType: ["qrCode","barCode","datamatrix"], // 可以指定扫二维码还是一维码,默认二者都有 success: function (res) { var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果 //处理扫描datamatrix类型的二维码结果中存在“DATA_MATRIX,”前缀 if(result){ var results = result.split("DATA_MATRIX,"); if(results.length == 1){ result = results[0] }else{ result = results[1] } } //end // console.log('扫描信息',result); if(self.state.checked){ self.chageit(result) }else{ self.setState({ boxnum: result }, () => { self.checkgetAllboxs() }) } } }); // }); } //显示查询箱号 seacherShow() { if (this.state.data.length == 0) { Toast.info("请先添加箱号") return } this.setState({ addboxisshow: true }) } //获取查询箱号数据 seacherget() { let seacherboxid = this.state.addboxid; if (!seacherboxid) { Toast.info("请输入箱号") return } this.setState({ addboxisshow: false }) let seacherdata = this.state.data this.seacher(seacherboxid, seacherdata) } //查询箱号 seacher(seacherboxid, seacherdata) { for (let i = 0; i < this.state.data.length; i++) { if (this.state.data[i].box_number === seacherboxid) { seacherdata.unshift(seacherdata[i])//添加查找的元素到第一位 this.setState({ data: this.state.data.concat() }, () => { this.state.data.splice(i + 1, 1); // 如果数据组存在该元素,则把该元素删除 Toast.info('查询成功') this.setState({ data: this.state.data.concat() }) }) return } else { Toast.info('没有查询到该箱号') } } } //显示保存箱号 saveboxshow() { this.setState({ saveshow: true }) } //确认保存箱号 saveboxshowok() { this.setState({ saveshow: false }) this.savebox() } // 根据箱号签收 savebox() { let tempdata = this.state.data let newdata = [] tempdata.map((row, index) => { var boxList = row['box_list'] boxList.map((item, index) => { if (item.statuscode == 0) { newdata.push(item) } }) }) if (newdata.length == 0) { this.setState({ savenullvaule: true }) return } let boxData = newdata let cell_phone = this.state.userInfo.mobile || "" let op_user = this.state.userInfo.membername || "" let op_location_gid = this.state.userInfo.code || "" let memberid = this.state.userInfo.innerid || "" let shipment_gid = this.state.currentShipment let op_type = "正常签收"; Toast.loading('Loading...', 0, () => { },true); pdaApi.saveboxs({ boxData, cell_phone, op_user, op_location_gid, memberid,shipment_gid,op_type }).then(res => { Toast.hide(); console.log('根据箱号签收', res); if (res.code == 1) { this.setState({ num: 0, valuateisshow: true }) }else if(res.code == -1){ alert('提示信息','网络异常,请检查网络状况',[ {text:'确定',onPress:()=>console.log('确定')}, ]) } else { Toast.info('签收失败') this.setState({ data: [], num: 0, }) } }) } gogoodlist(box_number) { if (box_number) { var tempdata = JSON.stringify(this.state.data) localStorage.setItem("tempdata", tempdata) localStorage.setItem("num", this.state.num) localStorage.setItem("box_number", box_number) window.location.href = "/dstributorGoodList.html?type=tab1"; } else { return } } govaluate() { let tempdata = this.state.data tempdata.map((item, index) => { if (item.status == 0) { localStorage.setItem("pod_no1", item.pod_no) } }) window.location.href = "/dstributorSiginInevaluate.html"; } }