@@ -152,8 +152,7 @@ | |||
<text class="val">{{state.monthFlowingVo.num}}次</text> | |||
</view> | |||
</view> | |||
<view class="detail" | |||
@click="$util.navTo('/subpackage/personal-center/trajectory/trajectory', true)">查看通行轨迹 | |||
<view class="detail" @click="goTrajectory()">查看通行轨迹 | |||
</view> | |||
<!-- <view class="detail">查看通行轨迹</view> --> | |||
</view> | |||
@@ -236,7 +235,7 @@ | |||
opId: "", | |||
}, | |||
accountInfoVo: { | |||
nickName: '', | |||
nickName:'', | |||
mobile: '' | |||
}, | |||
monthFlowingVo: { | |||
@@ -248,13 +247,13 @@ | |||
parkingLotNum: 0, | |||
money: 0, | |||
}, | |||
vehicleManageList: [], | |||
list: '', //车辆信息 | |||
carNumber: '',//车辆数量 | |||
userVehicleInfoSumQueryVo: { | |||
vehicleSum: 0, | |||
orderStatus0: 0 | |||
},//车数量 ,代办数量 | |||
isTrajectory:false, //是否有轨迹 | |||
}); | |||
onMounted(() => { | |||
const res = uni.getMenuButtonBoundingClientRect(); | |||
@@ -267,6 +266,15 @@ | |||
state.data.opId = getItem(StorageKeys.OpenId); | |||
mobile.value = getItem("mobile"); | |||
}); | |||
const goTrajectory=()=>{ | |||
if(state.isTrajectory){ | |||
uni.navigateTo({ | |||
url:"/subpackage/personal-center/trajectory/trajectory" | |||
}) | |||
}else{ | |||
msg("暂无轨迹") | |||
} | |||
} | |||
//监听页面滚动 | |||
onPageScroll((e) => { | |||
scrollTop.value = e.scrollTop; | |||
@@ -319,11 +327,13 @@ | |||
.then((res) => { | |||
let data = stringToJson(res.bizContent) | |||
state.accountInfoVo = data.accountInfoVo; | |||
state.monthFlowingVo = data.monthFlowingVo; | |||
state.vehicleManageList = data.monthFlowingVo; | |||
if(data.monthFlowingVo){ | |||
state.monthFlowingVo = data.monthFlowingVo; | |||
state.isTrajectory=true; | |||
} | |||
state.userVehicleInfoSumQueryVo.vehicleSum = JSON.parse(JSON.stringify(data.userVehicleInfoSumQueryVo)).vehicleSum; | |||
state.userVehicleInfoSumQueryVo.orderStatus0 = JSON.parse(JSON.stringify(data.userVehicleInfoSumQueryVo)).orderStatus0; | |||
console.log("获取用户信息", state.userVehicleInfoSumQueryVo.vehicleSum, state.userVehicleInfoSumQueryVo.orderStatus0); | |||
console.log("获取用户信息", data); | |||
queryCarMsg(); | |||
}) | |||
.catch((err) => { |
@@ -4,6 +4,10 @@ const SERVICE_UUID = "0000FF17-0000-1000-8000-00805F9B34FB" | |||
const WRITE_UUID = "0000FF02-0000-1000-8000-00805F9B34FB" | |||
const READ_UUID = "0000FF03-0000-1000-8000-00805F9B34FB" | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
var DevResult = function (code, data, msg) { | |||
this.code = code, | |||
this.data = data, |
@@ -5,6 +5,9 @@ const CGU_SERVICE_UUID = "0000FEE7-0000-1000-8000-00805F9B34FB";//目标服务 | |||
const CGU_WRTIE_UUID = "0000FFE1-0000-1000-8000-00805F9B34FB";//目标写特征 | |||
const CGU_READ_UUID = "0000FFE4-0000-1000-8000-00805F9B34FB";//目标读特征 | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
const SUCCESS_CODE=0; | |||
const FAILL_CODE=-1; | |||
@@ -1,6 +1,8 @@ | |||
var bleCode = require("./JLZJConfig.js"); | |||
var onfire = require("./onfire.js"); | |||
var dataTool = require("./dataTool.js"); | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
var successCode = bleCode.bleSuccessCode(); | |||
var errorCode = bleCode.bleErrorCode(); | |||
var serviceId = "FEE7"; |
@@ -1 +1,181 @@ | |||
var dataTool=require("./dataTool");var config=require("./JLZJConfig");var onfire=require("./onfire");export function receiveReset(callBack){onfire.on(config.ResetFlag(),res=>{onfire.clear();var data=unpack33Protocol(res,1);var result=config.DevResult(1,data);callBack.call(this,result)})};export function receiveChannel(callBack){onfire.on(config.ChannelFlag(),res=>{onfire.clear();var data=unpack33Protocol(res,0);var result=config.DevResult(0,data);callBack.call(this,result)})};function unpack33Protocol(data,type){var result_str="";for(var i=0;i<data.length;i++){var sub_data=data[i];var data_33=unpackWechatProtocol(sub_data);var resultData={code:"",msg:"",data:""};var tempBean_33={ST:"",SN:"",CTL:"",LEN:"",DATA:"",BCC:""};tempBean_33.ST=data_33.substring(0*2,1*2);tempBean_33.SN=data_33.substring(1*2,2*2);tempBean_33.CTL=data_33.substring(2*2,3*2);tempBean_33.LEN=data_33.substring(3*2,4*2);tempBean_33.DATA=data_33.substring(4*2,data_33.length-2);tempBean_33.BCC=data_33.substring(data_33.length-2);var bcc=dataTool.tenToHex(dataTool.bccCheck(tempBean_33.SN+tempBean_33.CTL+tempBean_33.LEN+tempBean_33.DATA),2);if(tempBean_33.BCC===bcc){resultData=unCmd(i,tempBean_33.DATA,type);result_str=result_str+resultData.data}else{resultData.code=config.errorCode();resultData.msg="BCC校验失败";resultData.data=""}}resultData.data=result_str;return resultData}function unCmd(count,data_cmd,type){var resultData={code:0,msg:"",data:""};if(count==0){var statu=data_cmd.substring(1*2,2*2);if(statu==="00"){resultData.code=config.successCode();resultData.msg="执行成功";if(type==0){var sub_data=data_cmd.substr(10,data_cmd.length);resultData.data=unApduData(sub_data)[0]}else{resultData.data=data_cmd}}else if(statu==="CF"){resultData.code=config.cardNoExists();resultData.msg="执行失败,请插入卡片";resultData.data=""}else{resultData.code=config.errorCode();resultData.msg="执行失败,状态是"+statu;resultData.data=""}return resultData}else{resultData.code=0;resultData.data=data_cmd;resultData.msg="执行成功";return resultData}}function unApduData(data){var flag=data.substring(0*2,1*2);var apdus=[];var len=0;if(flag==="81"){len=dataTool.hexToTen(data.substring(1*2,2*2));var temp=data.substring(2*2);var i=0;do{var len1=dataTool.hexToTen(temp.substring(1*2,2*2))+2;apdus.push(temp.substring(2*2,len1*2));i=i+len1;if(i<len){temp=temp.substring(len1*2)}}while(i<len)}else if(flag==="82"){len=dataTool.hexToTen(apduStr.substring(1*2,3*6));var temp=data.substring(3*6);var i=0;do{var len1=dataTool.hexToTen(temp.substring(1*2,2*2))+2;apdus.push(temp.substring(2*2,len1*2));i=i+len1;if(i<len){temp=temp.substring(len1*2)}}while(i<len)}else{len=dataTool.hexToTen(flag);var temp=data.substring(1*2);var i=0;do{var len1=dataTool.hexToTen(temp.substring(1*2,2*2))+2;apdus.push(temp.substring(2*2,len1*2));i=i+len1;if(i<len){temp=temp.substring(len1*2)}}while(i<len)}return apdus}function unpackWechatProtocol(data){var tempBean_wx={wxMagicNumber:"",wxVer:"",wxLen:"",wxCMD:"",wxSeq:"",wxData:"",wxExtra:"",wxTail:"",wxTotalData:""};tempBean_uni.wxMagicNumber=data.substring(0*2,1*2);tempBean_uni.wxVer=data.substring(1*2,2*2);tempBean_uni.wxLen=data.substring(2*2,4*2);tempBean_uni.wxCMD=data.substring(4*2,6*2);tempBean_uni.wxSeq=data.substring(6*2,8*2);tempBean_uni.wxExtra=data.substring(8*2,11*2);var len=dataTool.hexToTen(data.substring(11*2,12*2));if((len&128)==128){var len1=len&127;var len2=dataTool.hexToTen(data.substring(12*2,13*2))&127;var len3=(len2<<7)+len1;tempBean_uni.wxData=data.substring(13*2,len3*2+26)}else{tempBean_uni.wxData=data.substring(12*2,len*2+24)}return tempBean_uni.wxData}function getwcDATAlen(dataLen){var len="";var lens1=0;var lens2=0;if(dataLen>127){lens1=dataLen&127|128;lens2=dataLen>>7&127;len=dataTool.tenToHex(lens1,2)+dataTool.tenToHex(lens2,2)}else{len=dataTool.tenToHex(dataLen,2)}return len} | |||
var dataTool = require("./dataTool"); | |||
var config = require("./JLZJConfig"); | |||
var onfire = require("./onfire"); | |||
export function receiveReset(callBack) { | |||
onfire.on(config.ResetFlag(), res => { | |||
onfire.clear(); | |||
var data = unpack33Protocol(res, 1); | |||
var result = config.DevResult(1, data); | |||
callBack.call(this, result) | |||
}) | |||
}; | |||
export function receiveChannel(callBack) { | |||
onfire.on(config.ChannelFlag(), res => { | |||
onfire.clear(); | |||
var data = unpack33Protocol(res, 0); | |||
var result = config.DevResult(0, data); | |||
callBack.call(this, result) | |||
}) | |||
}; | |||
function unpack33Protocol(data, type) { | |||
var result_str = ""; | |||
for (var i = 0; i < data.length; i++) { | |||
var sub_data = data[i]; | |||
var data_33 = unpackWechatProtocol(sub_data); | |||
var resultData = { | |||
code: "", | |||
msg: "", | |||
data: "" | |||
}; | |||
var tempBean_33 = { | |||
ST: "", | |||
SN: "", | |||
CTL: "", | |||
LEN: "", | |||
DATA: "", | |||
BCC: "" | |||
}; | |||
tempBean_33.ST = data_33.substring(0 * 2, 1 * 2); | |||
tempBean_33.SN = data_33.substring(1 * 2, 2 * 2); | |||
tempBean_33.CTL = data_33.substring(2 * 2, 3 * 2); | |||
tempBean_33.LEN = data_33.substring(3 * 2, 4 * 2); | |||
tempBean_33.DATA = data_33.substring(4 * 2, data_33.length - 2); | |||
tempBean_33.BCC = data_33.substring(data_33.length - 2); | |||
var bcc = dataTool.tenToHex(dataTool.bccCheck(tempBean_33.SN + tempBean_33.CTL + tempBean_33.LEN + tempBean_33 | |||
.DATA), 2); | |||
if (tempBean_33.BCC === bcc) { | |||
resultData = unCmd(i, tempBean_33.DATA, type); | |||
result_str = result_str + resultData.data | |||
} else { | |||
resultData.code = config.errorCode(); | |||
resultData.msg = "BCC校验失败"; | |||
resultData.data = "" | |||
} | |||
} | |||
resultData.data = result_str; | |||
return resultData | |||
} | |||
function unCmd(count, data_cmd, type) { | |||
var resultData = { | |||
code: 0, | |||
msg: "", | |||
data: "" | |||
}; | |||
if (count == 0) { | |||
var statu = data_cmd.substring(1 * 2, 2 * 2); | |||
if (statu === "00") { | |||
resultData.code = config.successCode(); | |||
resultData.msg = "执行成功"; | |||
if (type == 0) { | |||
var sub_data = data_cmd.substr(10, data_cmd.length); | |||
resultData.data = unApduData(sub_data)[0] | |||
} else { | |||
resultData.data = data_cmd | |||
} | |||
} else if (statu === "CF") { | |||
resultData.code = config.cardNoExists(); | |||
resultData.msg = "执行失败,请插入卡片"; | |||
resultData.data = "" | |||
} else { | |||
resultData.code = config.errorCode(); | |||
resultData.msg = "执行失败,状态是" + statu; | |||
resultData.data = "" | |||
} | |||
return resultData | |||
} else { | |||
resultData.code = 0; | |||
resultData.data = data_cmd; | |||
resultData.msg = "执行成功"; | |||
return resultData | |||
} | |||
} | |||
function unApduData(data) { | |||
var flag = data.substring(0 * 2, 1 * 2); | |||
var apdus = []; | |||
var len = 0; | |||
if (flag === "81") { | |||
len = dataTool.hexToTen(data.substring(1 * 2, 2 * 2)); | |||
var temp = data.substring(2 * 2); | |||
var i = 0; | |||
do { | |||
var len1 = dataTool.hexToTen(temp.substring(1 * 2, 2 * 2)) + 2; | |||
apdus.push(temp.substring(2 * 2, len1 * 2)); | |||
i = i + len1; | |||
if (i < len) { | |||
temp = temp.substring(len1 * 2) | |||
} | |||
} while (i < len) | |||
} else if (flag === "82") { | |||
len = dataTool.hexToTen(apduStr.substring(1 * 2, 3 * 6)); | |||
var temp = data.substring(3 * 6); | |||
var i = 0; | |||
do { | |||
var len1 = dataTool.hexToTen(temp.substring(1 * 2, 2 * 2)) + 2; | |||
apdus.push(temp.substring(2 * 2, len1 * 2)); | |||
i = i + len1; | |||
if (i < len) { | |||
temp = temp.substring(len1 * 2) | |||
} | |||
} while (i < len) | |||
} else { | |||
len = dataTool.hexToTen(flag); | |||
var temp = data.substring(1 * 2); | |||
var i = 0; | |||
do { | |||
var len1 = dataTool.hexToTen(temp.substring(1 * 2, 2 * 2)) + 2; | |||
apdus.push(temp.substring(2 * 2, len1 * 2)); | |||
i = i + len1; | |||
if (i < len) { | |||
temp = temp.substring(len1 * 2) | |||
} | |||
} while (i < len) | |||
} | |||
return apdus | |||
} | |||
function unpackWechatProtocol(data) { | |||
var tempBean_wx = { | |||
wxMagicNumber: "", | |||
wxVer: "", | |||
wxLen: "", | |||
wxCMD: "", | |||
wxSeq: "", | |||
wxData: "", | |||
wxExtra: "", | |||
wxTail: "", | |||
wxTotalData: "" | |||
}; | |||
tempBean_uni.wxMagicNumber = data.substring(0 * 2, 1 * 2); | |||
tempBean_uni.wxVer = data.substring(1 * 2, 2 * 2); | |||
tempBean_uni.wxLen = data.substring(2 * 2, 4 * 2); | |||
tempBean_uni.wxCMD = data.substring(4 * 2, 6 * 2); | |||
tempBean_uni.wxSeq = data.substring(6 * 2, 8 * 2); | |||
tempBean_uni.wxExtra = data.substring(8 * 2, 11 * 2); | |||
var len = dataTool.hexToTen(data.substring(11 * 2, 12 * 2)); | |||
if ((len & 128) == 128) { | |||
var len1 = len & 127; | |||
var len2 = dataTool.hexToTen(data.substring(12 * 2, 13 * 2)) & 127; | |||
var len3 = (len2 << 7) + len1; | |||
tempBean_uni.wxData = data.substring(13 * 2, len3 * 2 + 26) | |||
} else { | |||
tempBean_uni.wxData = data.substring(12 * 2, len * 2 + 24) | |||
} | |||
return tempBean_uni.wxData | |||
} | |||
function getwcDATAlen(dataLen) { | |||
var len = ""; | |||
var lens1 = 0; | |||
var lens2 = 0; | |||
if (dataLen > 127) { | |||
lens1 = dataLen & 127 | 128; | |||
lens2 = dataLen >> 7 & 127; | |||
len = dataTool.tenToHex(lens1, 2) + dataTool.tenToHex(lens2, 2) | |||
} else { | |||
len = dataTool.tenToHex(dataLen, 2) | |||
} | |||
return len | |||
} |
@@ -1 +1,223 @@ | |||
var dataTool=require("./dataTool");var cmdKey=require("./JLZJConfig.js");var wxSeq=0;var frame=0;var MAX_PACK_LEN=95;var ST="33";export function wechatInit1(mac){var cmd_arr=packWechatInit1(mac);return cmd_arr};export function wechatInit2(){var cmd_arr=packWechatInit2();return cmd_arr};export function ICCResetReq(){var cmd=cmdKey.ICCResetCmd();var cmd_arr=packData(cmd);return cmd_arr};export function ESAMResetReq(){var cmd=cmdKey.ESAMResetCmd();var cmd_arr=packData(cmd);return cmd_arr};export function ICCChannelTransmission(type,dataArr){var cmdApdu=cread_apdu(dataArr);var cmdApduLen=cmdApdu.length/2;var cmd=cmdKey.ICCChannelCmd()+type+dataTool.tenToHex(cmdApduLen,4,true)+cmdApdu;var cmd_arr=packData(cmd);return cmd_arr};export function ESAMChannelTransmission(type,dataArr){var cmdApdu=cread_apdu(dataArr);var cmdApduLen=cmdApdu.length/2;var cmd=cmdKey.ESAMChannelCmd()+type+dataTool.tenToHex(cmdApduLen,4,true)+cmdApdu;var cmd_arr=packData(cmd);return cmd_arr};function packData(cmd){var cmd_arr=pack33Protocol(cmd);var wechat_arr=packWechatCmd(cmd_arr);var cmdArray=[];for(var i=0;i<wechat_arr.length;i++){var wechat_cmd=wechat_arr[i].wxTotalData;if(wechat_cmd.length<40){cmdArray.push(wechat_cmd)}else{for(var j=0;j<wechat_cmd.length;j+=40){var wechat_sub_cmd=wechat_cmd.substr(j,40);cmdArray.push(wechat_sub_cmd)}}}return cmdArray}function pack33Protocol(cmd){add_Frame();var cmdlen=cmd.length/2;var cmd33conten=[];if(cmdlen>MAX_PACK_LEN){var packages=Math.round(cmdlen/MAX_PACK_LEN);for(var i=0;i<packages;i++){var tempBean={ST:"",SN:"",CTL:"",LEN:"",DATA:"",BCC:"",TOTALDATA:""};tempBean.ST=ST;tempBean.SN=dataTool.tenToHex(frame,2);if(i==0){tempBean.CTL=get_ctl(1,packages-(i+1))}else{tempBean.CTL=get_ctl(0,packages-(i+1))}if(i+1==packages){tempBean.DATA=cmd.substring(i*MAX_PACK_LEN*2)}else{tempBean.DATA=cmd.substring(i*MAX_PACK_LEN*2,i*MAX_PACK_LEN*2+MAX_PACK_LEN*2)}tempBean.LEN=dataTool.tenToHex(tempBean.DATA.length/2,2);tempBean.BCC=dataTool.bccCheck(tempBean.SN+tempBean.CTL+tempBean.LEN+tempBean.DATA);console.log("tempBean.BCC====================:"+tempBean.BCC);tempBean.TOTALDATA=tempBean.ST+tempBean.SN+tempBean.CTL+tempBean.LEN+tempBean.DATA+tempBean.BCC;cmd33conten.push(tempBean)}}else{var tempBean={ST:"",SN:"",CTL:"",LEN:"",DATA:"",BCC:"",TOTALDATA:""};tempBean.ST=ST;tempBean.SN=dataTool.tenToHex(frame,2);tempBean.CTL=get_ctl(1,0);tempBean.LEN=dataTool.tenToHex(cmdlen,2);tempBean.DATA=cmd;tempBean.BCC=dataTool.bccCheck(tempBean.SN+tempBean.CTL+tempBean.LEN+tempBean.DATA);tempBean.TOTALDATA=tempBean.ST+tempBean.SN+tempBean.CTL+tempBean.LEN+tempBean.DATA+tempBean.BCC;cmd33conten.push(tempBean)}return cmd33conten}export function cread_apdu(cmdArr){var content=cread_TLV(cmdArr);var contentuLen=content.length/2;var contentApdu="";var contentApduLen="";if(contentuLen<=80){contentApduLen=dataTool.tenToHex(contentuLen,2)}else{if(contentuLen<=255){contentApduLen="81"+dataTool.tenToHex(contentuLen,2)}else{contentApduLen="82"+dataTool.tenToHex(contentuLen,4)}}contentApdu="80"+contentApduLen+content;return contentApdu};function cread_TLV(cmdArr){var strTLV="";for(var i=1;i<=cmdArr.length;i++){var cmd=cmdArr[i-1];var len=cmd.length/2;strTLV=strTLV+dataTool.tenToHex(i,2)+dataTool.tenToHex(len,2)+cmd}return strTLV}function add_Frame(){frame++;if(frame>15){frame=0}}function get_ctl(bit7,serial){var ctl="";if(bit7==0){ctl=dataTool.tenToHex(serial,2)}else{var n=(2<<6)+serial;ctl=dataTool.tenToHex(n,2)}return ctl}export function packWechatInit1(mac){var cmd="fe01000e4e21"+mac+"0a0208001200";var cmd_arr=[];for(var i=0;i<cmd.length;i+=40){var cmd_sub=cmd.substr(i,40);cmd_arr.push(cmd_sub)}return cmd_arr};export function packWechatInit2(){var cmd="fe0100134e23"+"0002"+"0a02080010b42418f8ac01";var cmd_arr=[];for(var i=0;i<cmd.length;i+=40){var cmd_sub=cmd.substr(i,40);cmd_arr.push(cmd_sub)}return cmd_arr};function packWechatCmd(cmdArray){var cmdwxconten=[];var temp33conten=cmdArray;if(temp33conten.length>0){for(var i=0;i<temp33conten.length;i++){var tempBean_33=temp33conten[i].TOTALDATA;var tempBean_wx={wxMagicNumber:"",wxVer:"",wxLen:"",wxCMD:"",wxSeq:"",wxData:"",wxExtra:"",wxTail:"",wxTotalData:""};tempBean_uni.wxMagicNumber="FE";tempBean_uni.wxVer="01";tempBean_uni.wxLen=dataTool.tenToHex(tempBean_33.length/2+14,4);tempBean_uni.wxCMD="7531";tempBean_uni.wxSeq="0000";tempBean_uni.wxExtra="0A0012"+getwcDATAlen(tempBean_33.length/2);tempBean_uni.wxData=tempBean_33;tempBean_uni.wxTail="1800";tempBean_uni.wxTotalData=tempBean_uni.wxMagicNumber+tempBean_uni.wxVer+tempBean_uni.wxLen+tempBean_uni.wxCMD+tempBean_uni.wxSeq+tempBean_uni.wxExtra+tempBean_uni.wxData+tempBean_uni.wxTail;cmdwxconten.push(tempBean_wx)}}return cmdwxconten}function getwcDATAlen(dataLen){var len="";var lens1=0;var lens2=0;if(dataLen>127){lens1=dataLen&127|128;lens2=dataLen>>7&127;len=dataTool.tenToHex(lens1,2)+dataTool.tenToHex(lens2,2)}else{len=dataTool.tenToHex(dataLen,2)}return len} | |||
var dataTool = require("./dataTool"); | |||
var cmdKey = require("./JLZJConfig.js"); | |||
var wxSeq = 0; | |||
var frame = 0; | |||
var MAX_PACK_LEN = 95; | |||
var ST = "33"; | |||
export function wechatInit1(mac) { | |||
var cmd_arr = packWechatInit1(mac); | |||
return cmd_arr | |||
}; | |||
export function wechatInit2() { | |||
var cmd_arr = packWechatInit2(); | |||
return cmd_arr | |||
}; | |||
export function ICCResetReq() { | |||
var cmd = cmdKey.ICCResetCmd(); | |||
var cmd_arr = packData(cmd); | |||
return cmd_arr | |||
}; | |||
export function ESAMResetReq() { | |||
var cmd = cmdKey.ESAMResetCmd(); | |||
var cmd_arr = packData(cmd); | |||
return cmd_arr | |||
}; | |||
export function ICCChannelTransmission(type, dataArr) { | |||
var cmdApdu = cread_apdu(dataArr); | |||
var cmdApduLen = cmdApdu.length / 2; | |||
var cmd = cmdKey.ICCChannelCmd() + type + dataTool.tenToHex(cmdApduLen, 4, true) + cmdApdu; | |||
var cmd_arr = packData(cmd); | |||
return cmd_arr | |||
}; | |||
export function ESAMChannelTransmission(type, dataArr) { | |||
var cmdApdu = cread_apdu(dataArr); | |||
var cmdApduLen = cmdApdu.length / 2; | |||
var cmd = cmdKey.ESAMChannelCmd() + type + dataTool.tenToHex(cmdApduLen, 4, true) + cmdApdu; | |||
var cmd_arr = packData(cmd); | |||
return cmd_arr | |||
}; | |||
function packData(cmd) { | |||
var cmd_arr = pack33Protocol(cmd); | |||
var wechat_arr = packWechatCmd(cmd_arr); | |||
var cmdArray = []; | |||
for (var i = 0; i < wechat_arr.length; i++) { | |||
var wechat_cmd = wechat_arr[i].wxTotalData; | |||
if (wechat_cmd.length < 40) { | |||
cmdArray.push(wechat_cmd) | |||
} else { | |||
for (var j = 0; j < wechat_cmd.length; j += 40) { | |||
var wechat_sub_cmd = wechat_cmd.substr(j, 40); | |||
cmdArray.push(wechat_sub_cmd) | |||
} | |||
} | |||
} | |||
return cmdArray | |||
} | |||
function pack33Protocol(cmd) { | |||
add_Frame(); | |||
var cmdlen = cmd.length / 2; | |||
var cmd33conten = []; | |||
if (cmdlen > MAX_PACK_LEN) { | |||
var packages = Math.round(cmdlen / MAX_PACK_LEN); | |||
for (var i = 0; i < packages; i++) { | |||
var tempBean = { | |||
ST: "", | |||
SN: "", | |||
CTL: "", | |||
LEN: "", | |||
DATA: "", | |||
BCC: "", | |||
TOTALDATA: "" | |||
}; | |||
tempBean.ST = ST; | |||
tempBean.SN = dataTool.tenToHex(frame, 2); | |||
if (i == 0) { | |||
tempBean.CTL = get_ctl(1, packages - (i + 1)) | |||
} else { | |||
tempBean.CTL = get_ctl(0, packages - (i + 1)) | |||
} | |||
if (i + 1 == packages) { | |||
tempBean.DATA = cmd.substring(i * MAX_PACK_LEN * 2) | |||
} else { | |||
tempBean.DATA = cmd.substring(i * MAX_PACK_LEN * 2, i * MAX_PACK_LEN * 2 + MAX_PACK_LEN * 2) | |||
} | |||
tempBean.LEN = dataTool.tenToHex(tempBean.DATA.length / 2, 2); | |||
tempBean.BCC = dataTool.bccCheck(tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA); | |||
console.log("tempBean.BCC====================:" + tempBean.BCC); | |||
tempBean.TOTALDATA = tempBean.ST + tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA + tempBean.BCC; | |||
cmd33conten.push(tempBean) | |||
} | |||
} else { | |||
var tempBean = { | |||
ST: "", | |||
SN: "", | |||
CTL: "", | |||
LEN: "", | |||
DATA: "", | |||
BCC: "", | |||
TOTALDATA: "" | |||
}; | |||
tempBean.ST = ST; | |||
tempBean.SN = dataTool.tenToHex(frame, 2); | |||
tempBean.CTL = get_ctl(1, 0); | |||
tempBean.LEN = dataTool.tenToHex(cmdlen, 2); | |||
tempBean.DATA = cmd; | |||
tempBean.BCC = dataTool.bccCheck(tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA); | |||
tempBean.TOTALDATA = tempBean.ST + tempBean.SN + tempBean.CTL + tempBean.LEN + tempBean.DATA + tempBean.BCC; | |||
cmd33conten.push(tempBean) | |||
} | |||
return cmd33conten | |||
} | |||
export function cread_apdu(cmdArr) { | |||
var content = cread_TLV(cmdArr); | |||
var contentuLen = content.length / 2; | |||
var contentApdu = ""; | |||
var contentApduLen = ""; | |||
if (contentuLen <= 80) { | |||
contentApduLen = dataTool.tenToHex(contentuLen, 2) | |||
} else { | |||
if (contentuLen <= 255) { | |||
contentApduLen = "81" + dataTool.tenToHex(contentuLen, 2) | |||
} else { | |||
contentApduLen = "82" + dataTool.tenToHex(contentuLen, 4) | |||
} | |||
} | |||
contentApdu = "80" + contentApduLen + content; | |||
return contentApdu | |||
}; | |||
function cread_TLV(cmdArr) { | |||
var strTLV = ""; | |||
for (var i = 1; i <= cmdArr.length; i++) { | |||
var cmd = cmdArr[i - 1]; | |||
var len = cmd.length / 2; | |||
strTLV = strTLV + dataTool.tenToHex(i, 2) + dataTool.tenToHex(len, 2) + cmd | |||
} | |||
return strTLV | |||
} | |||
function add_Frame() { | |||
frame++; | |||
if (frame > 15) { | |||
frame = 0 | |||
} | |||
} | |||
function get_ctl(bit7, serial) { | |||
var ctl = ""; | |||
if (bit7 == 0) { | |||
ctl = dataTool.tenToHex(serial, 2) | |||
} else { | |||
var n = (2 << 6) + serial; | |||
ctl = dataTool.tenToHex(n, 2) | |||
} | |||
return ctl | |||
} | |||
export function packWechatInit1(mac) { | |||
var cmd = "fe01000e4e21" + mac + "0a0208001200"; | |||
var cmd_arr = []; | |||
for (var i = 0; i < cmd.length; i += 40) { | |||
var cmd_sub = cmd.substr(i, 40); | |||
cmd_arr.push(cmd_sub) | |||
} | |||
return cmd_arr | |||
}; | |||
export function packWechatInit2() { | |||
var cmd = "fe0100134e23" + "0002" + "0a02080010b42418f8ac01"; | |||
var cmd_arr = []; | |||
for (var i = 0; i < cmd.length; i += 40) { | |||
var cmd_sub = cmd.substr(i, 40); | |||
cmd_arr.push(cmd_sub) | |||
} | |||
return cmd_arr | |||
}; | |||
function packWechatCmd(cmdArray) { | |||
var cmdwxconten = []; | |||
var temp33conten = cmdArray; | |||
if (temp33conten.length > 0) { | |||
for (var i = 0; i < temp33conten.length; i++) { | |||
var tempBean_33 = temp33conten[i].TOTALDATA; | |||
var tempBean_wx = { | |||
wxMagicNumber: "", | |||
wxVer: "", | |||
wxLen: "", | |||
wxCMD: "", | |||
wxSeq: "", | |||
wxData: "", | |||
wxExtra: "", | |||
wxTail: "", | |||
wxTotalData: "" | |||
}; | |||
tempBean_uni.wxMagicNumber = "FE"; | |||
tempBean_uni.wxVer = "01"; | |||
tempBean_uni.wxLen = dataTool.tenToHex(tempBean_33.length / 2 + 14, 4); | |||
tempBean_uni.wxCMD = "7531"; | |||
tempBean_uni.wxSeq = "0000"; | |||
tempBean_uni.wxExtra = "0A0012" + getwcDATAlen(tempBean_33.length / 2); | |||
tempBean_uni.wxData = tempBean_33; | |||
tempBean_uni.wxTail = "1800"; | |||
tempBean_uni.wxTotalData = tempBean_uni.wxMagicNumber + tempBean_uni.wxVer + tempBean_uni.wxLen + | |||
tempBean_uni.wxCMD + tempBean_uni.wxSeq + tempBean_uni.wxExtra + tempBean_uni.wxData + tempBean_uni | |||
.wxTail; | |||
cmdwxconten.push(tempBean_wx) | |||
} | |||
} | |||
return cmdwxconten | |||
} | |||
function getwcDATAlen(dataLen) { | |||
var len = ""; | |||
var lens1 = 0; | |||
var lens2 = 0; | |||
if (dataLen > 127) { | |||
lens1 = dataLen & 127 | 128; | |||
lens2 = dataLen >> 7 & 127; | |||
len = dataTool.tenToHex(lens1, 2) + dataTool.tenToHex(lens2, 2) | |||
} else { | |||
len = dataTool.tenToHex(dataLen, 2) | |||
} | |||
return len | |||
} |
@@ -1 +1,76 @@ | |||
export function ICCResetCmd(){return"A2"};export function ICCChannelCmd(){return"A3"};export function ESAMResetCmd(){return"AA"};export function ESAMChannelCmd(){return"AC"};export function ResetFlag(){return"JLReset"};export function ChannelFlag(){return"JLChannel"};export function successCode(){return 0};export function errorCode(){return 1202};export function timeOutCode(){return 1203};export function cardNoExists(){return 1204};export function bleSuccessCode(){return 0};export function bleErrorCode(){return 1001};export function disConnectError(){return 1101};export function cosErrorCode(){return 1201};export function ondisConnect(){return 1};export function DevResult(type,objc){var code="";var err_msg="";var data=null;var msg="";if(objc.code==successCode()){err_msg="执行成功";if(type==0){var data=objc.data;var sw=data.substr(data.length-4,4);code=successCode();data=objc.data;msg="操作成功"}else{code=objc.code;data=null;msg=objc.msg}return{code:code,data:data,msg:msg}}else{return{code:objc.code,data:null,msg:objc.msg}}}; | |||
export function ICCResetCmd() { | |||
return "A2" | |||
}; | |||
export function ICCChannelCmd() { | |||
return "A3" | |||
}; | |||
export function ESAMResetCmd() { | |||
return "AA" | |||
}; | |||
export function ESAMChannelCmd() { | |||
return "AC" | |||
}; | |||
export function ResetFlag() { | |||
return "JLReset" | |||
}; | |||
export function ChannelFlag() { | |||
return "JLChannel" | |||
}; | |||
export function successCode() { | |||
return 0 | |||
}; | |||
export function errorCode() { | |||
return 1202 | |||
}; | |||
export function timeOutCode() { | |||
return 1203 | |||
}; | |||
export function cardNoExists() { | |||
return 1204 | |||
}; | |||
export function bleSuccessCode() { | |||
return 0 | |||
}; | |||
export function bleErrorCode() { | |||
return 1001 | |||
}; | |||
export function disConnectError() { | |||
return 1101 | |||
}; | |||
export function cosErrorCode() { | |||
return 1201 | |||
}; | |||
export function ondisConnect() { | |||
return 1 | |||
}; | |||
export function DevResult(type, objc) { | |||
var code = ""; | |||
var err_msg = ""; | |||
var data = null; | |||
var msg = ""; | |||
if (objc.code == successCode()) { | |||
err_msg = "执行成功"; | |||
if (type == 0) { | |||
var data = objc.data; | |||
var sw = data.substr(data.length - 4, 4); | |||
code = successCode(); | |||
data = objc.data; | |||
msg = "操作成功" | |||
} else { | |||
code = objc.code; | |||
data = null; | |||
msg = objc.msg | |||
} | |||
return { | |||
code: code, | |||
data: data, | |||
msg: msg | |||
} | |||
} else { | |||
return { | |||
code: objc.code, | |||
data: null, | |||
msg: objc.msg | |||
} | |||
} | |||
}; |
@@ -1 +1,302 @@ | |||
function strToHexCharCode(str){if(str==="")return"";var hexCharCode=[];for(var i=0;i<str.length;i++){hexCharCode.push(str.charCodeAt(i).toString(16))}return hexCharCode.join("").toUpperCase()}function bccCheck(data){var bcc="";for(var a=0;a<data.length/2;a++){bcc^=parseInt(data.substring(2*a,2*a+2),16)}if(bcc.length==1){bcc="0"+bcc}return tenToHex(bcc,2).toUpperCase()}function tenToHex(num,len,boo){var hex=num.toString(16);var zero="";for(var a=0;a<len-hex.length;a++){zero+="0"}var ret="";if(boo){if(hex.length%2==0){}else{hex="0"+hex;zero=zero.substring(1)}ret=hex+zero}else if(!boo){ret=zero+hex}return ret.toUpperCase()}function hexToString(str){var trimedStr=str.trim();var rawStr=trimedStr.substr(0,2).toLowerCase()==="0x"?trimedStr.substr(2):trimedStr;var len=rawStr.length;if(len%2!==0){alert("Illegal Format ASCII Code!");return""}var curCharCode;var resultStr=[];for(var i=0;i<len;i=i+2){curCharCode=parseInt(rawStr.substr(i,2),16);resultStr.push(String.fromCharCode(curCharCode))}return resultStr.join("").toUpperCase()}function encodeUtf8(text){const code=encodeURIComponent(text);const bytes=[];for(var i=0;i<code.length;i++){const c=code.charAt(i);if(c==="%"){const hex=code.charAt(i+1)+code.charAt(i+2);const hexVal=parseInt(hex,16);bytes.push(hexVal);i+=2}else bytes.push(c.charCodeAt(0))}return bytes}function hexToTen(sixteen){var ten=parseInt(sixteen,16);return ten}function str2utf8(str){var code;var utf="";for(var i=0;i<str.length;i++){code=str.charCodeAt(i);if(code<128){utf+=str.charAt(i)}else if(code<2048){utf+=String.fromCharCode(192|code>>6&31);utf+=String.fromCharCode(128|code>>0&63)}else if(code<65536){utf+=String.fromCharCode(224|code>>12&15);utf+=String.fromCharCode(128|code>>6&63);utf+=String.fromCharCode(128|code>>0&63)}else{throw"不是UCS-2字符集"}}return utf}function hexTobin(str){str=str.toUpperCase();let hex_array=[{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},{key:8,val:"1000"},{key:9,val:"1001"},{key:"A",val:"1010"},{key:"B",val:"1011"},{key:"C",val:"1100"},{key:"D",val:"1101"},{key:"E",val:"1110"},{key:"F",val:"1111"}];let value="";for(let i=0;i<str.length;i++){for(let j=0;j<hex_array.length;j++){if(str.charAt(i)==hex_array[j].key){value=value.concat(hex_array[j].val);break}}}return value}function binTohex(str){let hex_array=[{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},{key:8,val:"1000"},{key:9,val:"1001"},{key:"a",val:"1010"},{key:"b",val:"1011"},{key:"c",val:"1100"},{key:"d",val:"1101"},{key:"e",val:"1110"},{key:"f",val:"1111"}];let value="";let list=[];if(str.length%4!==0){let a="0000";let b=a.substring(0,4-str.length%4);str=b.concat(str)}while(str.length>4){list.push(str.substring(0,4));str=str.substring(4)}list.push(str);for(let i=0;i<list.length;i++){for(let j=0;j<hex_array.length;j++){if(list[i]==hex_array[j].val){value=value.concat(hex_array[j].key);break}}}return value}function strToBuffer(cmd){let buffer=new ArrayBuffer(cmd.length/2);let dataView=new Uint8Array(buffer);for(var a=0;a<cmd.length/2;a++){dataView[a]="0x"+cmd.substring(2*a,2*a+2)}return buffer}function bufferTohex(buffer){var hexArr=Array.prototype.map.call(new Uint8Array(buffer),function(bit){return("00"+bit.toString(16)).slice(-2)});return hexArr.join("")}function isEmpty(data){if(data.length==0||data==null||data=="undefined"){return true}return false}function formatTime(date){var year=date.getFullYear();var month=date.getMonth()+1;var day=date.getDate();var hour=date.getHours();var minute=date.getMinutes();var second=date.getSeconds();return[year,month,day].map(formatNumber).join("/")+" "+[hour,minute,second].map(formatNumber).join(":")}function formatNumber(n){n=n.toString();return n[1]?n:"0"+n}function formatTimeTwo(number,format){var formateArr=["Y","M","D","h","m","s"];var returnArr=[];var date=new Date(number*1e3);returnArr.push(date.getFullYear());returnArr.push(formatNumber(date.getMonth()+1));returnArr.push(formatNumber(date.getDate()));returnArr.push(formatNumber(date.getHours()));returnArr.push(formatNumber(date.getMinutes()));returnArr.push(formatNumber(date.getSeconds()));for(var i in returnArr){format=format.replace(formateArr[i],returnArr[i])}return format}module.exports={encodeUtf8:encodeUtf8,tenToHex:tenToHex,hexToTen:hexToTen,bccCheck:bccCheck,hexToString:hexToString,strToHexCharCode:strToHexCharCode,str2utf8:str2utf8,hexTobin:hexTobin,binTohex:binTohex,isEmpty:isEmpty,strToBuffer:strToBuffer,bufferTohex:bufferTohex,formatTime:formatTime,formatTimeTwo:formatTimeTwo}; | |||
function strToHexCharCode(str) { | |||
if (str === "") return ""; | |||
var hexCharCode = []; | |||
for (var i = 0; i < str.length; i++) { | |||
hexCharCode.push(str.charCodeAt(i).toString(16)) | |||
} | |||
return hexCharCode.join("").toUpperCase() | |||
} | |||
function bccCheck(data) { | |||
var bcc = ""; | |||
for (var a = 0; a < data.length / 2; a++) { | |||
bcc ^= parseInt(data.substring(2 * a, 2 * a + 2), 16) | |||
} | |||
if (bcc.length == 1) { | |||
bcc = "0" + bcc | |||
} | |||
return tenToHex(bcc, 2).toUpperCase() | |||
} | |||
function tenToHex(num, len, boo) { | |||
var hex = num.toString(16); | |||
var zero = ""; | |||
for (var a = 0; a < len - hex.length; a++) { | |||
zero += "0" | |||
} | |||
var ret = ""; | |||
if (boo) { | |||
if (hex.length % 2 == 0) {} else { | |||
hex = "0" + hex; | |||
zero = zero.substring(1) | |||
} | |||
ret = hex + zero | |||
} else if (!boo) { | |||
ret = zero + hex | |||
} | |||
return ret.toUpperCase() | |||
} | |||
function hexToString(str) { | |||
var trimedStr = str.trim(); | |||
var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr; | |||
var len = rawStr.length; | |||
if (len % 2 !== 0) { | |||
alert("Illegal Format ASCII Code!"); | |||
return "" | |||
} | |||
var curCharCode; | |||
var resultStr = []; | |||
for (var i = 0; i < len; i = i + 2) { | |||
curCharCode = parseInt(rawStr.substr(i, 2), 16); | |||
resultStr.push(String.fromCharCode(curCharCode)) | |||
} | |||
return resultStr.join("").toUpperCase() | |||
} | |||
function encodeUtf8(text) { | |||
const code = encodeURIComponent(text); | |||
const bytes = []; | |||
for (var i = 0; i < code.length; i++) { | |||
const c = code.charAt(i); | |||
if (c === "%") { | |||
const hex = code.charAt(i + 1) + code.charAt(i + 2); | |||
const hexVal = parseInt(hex, 16); | |||
bytes.push(hexVal); | |||
i += 2 | |||
} else bytes.push(c.charCodeAt(0)) | |||
} | |||
return bytes | |||
} | |||
function hexToTen(sixteen) { | |||
var ten = parseInt(sixteen, 16); | |||
return ten | |||
} | |||
function str2utf8(str) { | |||
var code; | |||
var utf = ""; | |||
for (var i = 0; i < str.length; i++) { | |||
code = str.charCodeAt(i); | |||
if (code < 128) { | |||
utf += str.charAt(i) | |||
} else if (code < 2048) { | |||
utf += String.fromCharCode(192 | code >> 6 & 31); | |||
utf += String.fromCharCode(128 | code >> 0 & 63) | |||
} else if (code < 65536) { | |||
utf += String.fromCharCode(224 | code >> 12 & 15); | |||
utf += String.fromCharCode(128 | code >> 6 & 63); | |||
utf += String.fromCharCode(128 | code >> 0 & 63) | |||
} else { | |||
throw "不是UCS-2字符集" | |||
} | |||
} | |||
return utf | |||
} | |||
function hexTobin(str) { | |||
str = str.toUpperCase(); | |||
let hex_array = [{ | |||
key: 0, | |||
val: "0000" | |||
}, { | |||
key: 1, | |||
val: "0001" | |||
}, { | |||
key: 2, | |||
val: "0010" | |||
}, { | |||
key: 3, | |||
val: "0011" | |||
}, { | |||
key: 4, | |||
val: "0100" | |||
}, { | |||
key: 5, | |||
val: "0101" | |||
}, { | |||
key: 6, | |||
val: "0110" | |||
}, { | |||
key: 7, | |||
val: "0111" | |||
}, { | |||
key: 8, | |||
val: "1000" | |||
}, { | |||
key: 9, | |||
val: "1001" | |||
}, { | |||
key: "A", | |||
val: "1010" | |||
}, { | |||
key: "B", | |||
val: "1011" | |||
}, { | |||
key: "C", | |||
val: "1100" | |||
}, { | |||
key: "D", | |||
val: "1101" | |||
}, { | |||
key: "E", | |||
val: "1110" | |||
}, { | |||
key: "F", | |||
val: "1111" | |||
}]; | |||
let value = ""; | |||
for (let i = 0; i < str.length; i++) { | |||
for (let j = 0; j < hex_array.length; j++) { | |||
if (str.charAt(i) == hex_array[j].key) { | |||
value = value.concat(hex_array[j].val); | |||
break | |||
} | |||
} | |||
} | |||
return value | |||
} | |||
function binTohex(str) { | |||
let hex_array = [{ | |||
key: 0, | |||
val: "0000" | |||
}, { | |||
key: 1, | |||
val: "0001" | |||
}, { | |||
key: 2, | |||
val: "0010" | |||
}, { | |||
key: 3, | |||
val: "0011" | |||
}, { | |||
key: 4, | |||
val: "0100" | |||
}, { | |||
key: 5, | |||
val: "0101" | |||
}, { | |||
key: 6, | |||
val: "0110" | |||
}, { | |||
key: 7, | |||
val: "0111" | |||
}, { | |||
key: 8, | |||
val: "1000" | |||
}, { | |||
key: 9, | |||
val: "1001" | |||
}, { | |||
key: "a", | |||
val: "1010" | |||
}, { | |||
key: "b", | |||
val: "1011" | |||
}, { | |||
key: "c", | |||
val: "1100" | |||
}, { | |||
key: "d", | |||
val: "1101" | |||
}, { | |||
key: "e", | |||
val: "1110" | |||
}, { | |||
key: "f", | |||
val: "1111" | |||
}]; | |||
let value = ""; | |||
let list = []; | |||
if (str.length % 4 !== 0) { | |||
let a = "0000"; | |||
let b = a.substring(0, 4 - str.length % 4); | |||
str = b.concat(str) | |||
} | |||
while (str.length > 4) { | |||
list.push(str.substring(0, 4)); | |||
str = str.substring(4) | |||
} | |||
list.push(str); | |||
for (let i = 0; i < list.length; i++) { | |||
for (let j = 0; j < hex_array.length; j++) { | |||
if (list[i] == hex_array[j].val) { | |||
value = value.concat(hex_array[j].key); | |||
break | |||
} | |||
} | |||
} | |||
return value | |||
} | |||
function strToBuffer(cmd) { | |||
let buffer = new ArrayBuffer(cmd.length / 2); | |||
let dataView = new Uint8Array(buffer); | |||
for (var a = 0; a < cmd.length / 2; a++) { | |||
dataView[a] = "0x" + cmd.substring(2 * a, 2 * a + 2) | |||
} | |||
return buffer | |||
} | |||
function bufferTohex(buffer) { | |||
var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function(bit) { | |||
return ("00" + bit.toString(16)).slice(-2) | |||
}); | |||
return hexArr.join("") | |||
} | |||
function isEmpty(data) { | |||
if (data.length == 0 || data == null || data == "undefined") { | |||
return true | |||
} | |||
return false | |||
} | |||
function formatTime(date) { | |||
var year = date.getFullYear(); | |||
var month = date.getMonth() + 1; | |||
var day = date.getDate(); | |||
var hour = date.getHours(); | |||
var minute = date.getMinutes(); | |||
var second = date.getSeconds(); | |||
return [year, month, day].map(formatNumber).join("/") + " " + [hour, minute, second].map(formatNumber).join(":") | |||
} | |||
function formatNumber(n) { | |||
n = n.toString(); | |||
return n[1] ? n : "0" + n | |||
} | |||
function formatTimeTwo(number, format) { | |||
var formateArr = ["Y", "M", "D", "h", "m", "s"]; | |||
var returnArr = []; | |||
var date = new Date(number * 1e3); | |||
returnArr.push(date.getFullYear()); | |||
returnArr.push(formatNumber(date.getMonth() + 1)); | |||
returnArr.push(formatNumber(date.getDate())); | |||
returnArr.push(formatNumber(date.getHours())); | |||
returnArr.push(formatNumber(date.getMinutes())); | |||
returnArr.push(formatNumber(date.getSeconds())); | |||
for (var i in returnArr) { | |||
format = format.replace(formateArr[i], returnArr[i]) | |||
} | |||
return format | |||
} | |||
module.exports = { | |||
encodeUtf8: encodeUtf8, | |||
tenToHex: tenToHex, | |||
hexToTen: hexToTen, | |||
bccCheck: bccCheck, | |||
hexToString: hexToString, | |||
strToHexCharCode: strToHexCharCode, | |||
str2utf8: str2utf8, | |||
hexTobin: hexTobin, | |||
binTohex: binTohex, | |||
isEmpty: isEmpty, | |||
strToBuffer: strToBuffer, | |||
bufferTohex: bufferTohex, | |||
formatTime: formatTime, | |||
formatTimeTwo: formatTimeTwo | |||
}; |
@@ -1 +1,99 @@ | |||
!function(root,factory){if(typeof module==="object"&&module.exports)module.exports=factory();else root.onfire=factory()}(typeof window!=="undefined"?window:this,function(){var __onfireEvents={},__cnt=0,string_str="string",function_str="function",hasOwnKey=Function.call.bind(Object.hasOwnProperty),slice=Function.call.bind(Array.prototype.slice);function _bind(eventName,callback,is_one,context){if(typeof eventName!==string_str||typeof callback!==function_str){throw new Error("args: "+string_str+", "+function_str+"")}if(!hasOwnKey(__onfireEvents,eventName)){__onfireEvents[eventName]={}}__onfireEvents[eventName][++__cnt]=[callback,is_one,context];return[eventName,__cnt]}function _each(obj,callback){for(var key in obj){if(hasOwnKey(obj,key))callback(key,obj[key])}}function on(eventName,callback,context){return _bind(eventName,callback,0,context)}function one(eventName,callback,context){return _bind(eventName,callback,1,context)}function _fire_func(eventName,args){if(hasOwnKey(__onfireEvents,eventName)){_each(__onfireEvents[eventName],function(key,item){item[0].apply(item[2],args);if(item[1])delete __onfireEvents[eventName][key]})}}function fire(eventName){var args=slice(arguments,1);setTimeout(function(){_fire_func(eventName,args)})}function fireSync(eventName){_fire_func(eventName,slice(arguments,1))}function un(event){var eventName,key,r=false,type=typeof event;if(type===string_str){if(hasOwnKey(__onfireEvents,event)){delete __onfireEvents[event];return true}return false}else if(type==="object"){eventName=event[0];key=event[1];if(hasOwnKey(__onfireEvents,eventName)&&hasOwnKey(__onfireEvents[eventName],key)){delete __onfireEvents[eventName][key];return true}return false}else if(type===function_str){_each(__onfireEvents,function(key_1,item_1){_each(item_1,function(key_2,item_2){if(item_2[0]===event){delete __onfireEvents[key_1][key_2];r=true}})});return r}return true}function clear(){__onfireEvents={}}return{on:on,one:one,un:un,fire:fire,fireSync:fireSync,clear:clear}}); | |||
! function(root, factory) { | |||
if (typeof module === "object" && module.exports) module.exports = factory(); | |||
else root.onfire = factory() | |||
}(typeof window !== "undefined" ? window : this, function() { | |||
var __onfireEvents = {}, | |||
__cnt = 0, | |||
string_str = "string", | |||
function_str = "function", | |||
hasOwnKey = Function.call.bind(Object.hasOwnProperty), | |||
slice = Function.call.bind(Array.prototype.slice); | |||
function _bind(eventName, callback, is_one, context) { | |||
if (typeof eventName !== string_str || typeof callback !== function_str) { | |||
throw new Error("args: " + string_str + ", " + function_str + "") | |||
} | |||
if (!hasOwnKey(__onfireEvents, eventName)) { | |||
__onfireEvents[eventName] = {} | |||
} | |||
__onfireEvents[eventName][++__cnt] = [callback, is_one, context]; | |||
return [eventName, __cnt] | |||
} | |||
function _each(obj, callback) { | |||
for (var key in obj) { | |||
if (hasOwnKey(obj, key)) callback(key, obj[key]) | |||
} | |||
} | |||
function on(eventName, callback, context) { | |||
return _bind(eventName, callback, 0, context) | |||
} | |||
function one(eventName, callback, context) { | |||
return _bind(eventName, callback, 1, context) | |||
} | |||
function _fire_func(eventName, args) { | |||
if (hasOwnKey(__onfireEvents, eventName)) { | |||
_each(__onfireEvents[eventName], function(key, item) { | |||
item[0].apply(item[2], args); | |||
if (item[1]) delete __onfireEvents[eventName][key] | |||
}) | |||
} | |||
} | |||
function fire(eventName) { | |||
var args = slice(arguments, 1); | |||
setTimeout(function() { | |||
_fire_func(eventName, args) | |||
}) | |||
} | |||
function fireSync(eventName) { | |||
_fire_func(eventName, slice(arguments, 1)) | |||
} | |||
function un(event) { | |||
var eventName, key, r = false, | |||
type = typeof event; | |||
if (type === string_str) { | |||
if (hasOwnKey(__onfireEvents, event)) { | |||
delete __onfireEvents[event]; | |||
return true | |||
} | |||
return false | |||
} else if (type === "object") { | |||
eventName = event[0]; | |||
key = event[1]; | |||
if (hasOwnKey(__onfireEvents, eventName) && hasOwnKey(__onfireEvents[eventName], key)) { | |||
delete __onfireEvents[eventName][key]; | |||
return true | |||
} | |||
return false | |||
} else if (type === function_str) { | |||
_each(__onfireEvents, function(key_1, item_1) { | |||
_each(item_1, function(key_2, item_2) { | |||
if (item_2[0] === event) { | |||
delete __onfireEvents[key_1][key_2]; | |||
r = true | |||
} | |||
}) | |||
}); | |||
return r | |||
} | |||
return true | |||
} | |||
function clear() { | |||
__onfireEvents = {} | |||
} | |||
return { | |||
on: on, | |||
one: one, | |||
un: un, | |||
fire: fire, | |||
fireSync: fireSync, | |||
clear: clear | |||
} | |||
}); |
@@ -43,6 +43,8 @@ let m_isConn = false; | |||
let mCurrentPacketNum = 0; | |||
let mConnCount = 2; | |||
let beginTime = 0; | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
/** | |||
通过蓝牙,连接OBU设备 |
@@ -229,4 +229,4 @@ module.exports = { | |||
disconnectDevice: disconnectDevice, | |||
transCmd: transCmd, | |||
getDeviceInfo: getDeviceInfo | |||
}; | |||
}; |
@@ -8,6 +8,10 @@ var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator | |||
_wjUtils = require("./wjUtils.js"), | |||
_wjUtils2 = _interopRequireDefault(_wjUtils); | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
function _interopRequireDefault(e) { | |||
return e && e.__esModule ? e : { | |||
default: e | |||
@@ -98,7 +102,7 @@ function reallyscanConnect(s, r) { | |||
function reallyConnect(e, i, n) { | |||
_wjUtils2.default.showLog("start reallyConnect,20190830001,V0.0.4"), _onBLEConnectionStateChange(), onDisconnect = | |||
n; | |||
n; | |||
var c = {}, | |||
t = e.name; | |||
_wjUtils2.default.showLog("name:", t), -1 != t.indexOf("WJ") || -1 != t.indexOf("WanJi") || -1 != t.indexOf("ZZ") ? | |||
@@ -108,7 +112,8 @@ function reallyConnect(e, i, n) { | |||
_wjUtils2.default.showLog("已连接,开始使能服务", connectedDeviceId), _enableService(function(e) { | |||
0 == e.serviceCode ? (_wjUtils2.default.showLog("已连接,并使能成功"), c.serviceCode = 0, | |||
c.serviceInfo = "connected", (void 0 === i ? "undefined" : _typeof( | |||
i)) == TAG_FUNCTION && i(c), (void 0 === onDisconnect ? "undefined" : | |||
i)) == TAG_FUNCTION && i(c), (void 0 === onDisconnect ? | |||
"undefined" : | |||
_typeof(onDisconnect)) == TAG_FUNCTION && onDisconnect(c)) : ((c = | |||
e).serviceInfo = "连接成功,但服务使能失败!", (void 0 === i ? "undefined" : | |||
_typeof(i)) == TAG_FUNCTION && i(c)) | |||
@@ -116,7 +121,8 @@ function reallyConnect(e, i, n) { | |||
uni.closeBLEConnection({ | |||
deviceId: connectedDeviceId, | |||
success: function(e) {} | |||
}), uni.closeBluetoothAdapter(), _wjUtils2.default.showError("scan timeout"), | |||
}), uni.closeBluetoothAdapter(), _wjUtils2.default.showError( | |||
"scan timeout"), | |||
c.serviceCode = 100100, c.serviceInfo = "scan timeout fail!", (void 0 === | |||
i ? "undefined" : _typeof(i)) == TAG_FUNCTION && i(c) | |||
}, 5e3) | |||
@@ -240,4 +246,4 @@ module.exports = { | |||
reallyConnect: reallyConnect, | |||
_writeBLECharacteristicValue: _writeBLECharacteristicValue, | |||
_SetDataListenerCallBack: _SetDataListenerCallBack | |||
}; | |||
}; |
@@ -47,6 +47,8 @@ const ERROR_DATA_ERROR = 80004; | |||
const LENGTH_PER_PACKET = 95; //TODO:?92 | |||
const LENGTH_HEADER = 5; //skip st | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
module.exports = { | |||
startConnectDevice: startConnectDevice, |
@@ -0,0 +1,608 @@ | |||
const sm4 = require('./sm4.js'); | |||
const common_vendor = require("../../../common/vendor.js"); | |||
var wx = common_vendor.index | |||
var OBUNo = ''; | |||
const key = '1A70B8BE26C994DA88F4712F5E60C738'; | |||
var phoneRandom = ''; | |||
var encrypDeviceRandom = ''; | |||
var myDeviceId; | |||
// 蓝牙连接相关参数 | |||
var Service, notifyCharacteristicsId, writeCharacteristicsId, readCharacteristicsId; | |||
//回调函数 | |||
let CallBackInfo = null; | |||
let CallBackToQT = null; | |||
let CallBackInfoForconnected = null; | |||
var framNo = 0; | |||
var outDevices = new Array(); | |||
//当前是第几条命令 | |||
var currentCmdId = 0; | |||
//需要执行的命令总数 | |||
var cmdTotal; | |||
//返回的命令数组; | |||
var outCmdArr = new Array(); | |||
//输入的命令数组 | |||
var inCmdArr = new Array(); | |||
//命令类型 | |||
var globalCmdType = '01'; | |||
//复位状态:0未复位 1已复位 | |||
var resetState = 0; | |||
var _res = {}; | |||
//打开蓝牙适配器 | |||
function openBle(filter, timeout, callback) { | |||
outDevices.splice(0, outDevices.length); | |||
uni.openBluetoothAdapter({ | |||
success: function (res) { | |||
uni.startBluetoothDevicesDiscovery({ | |||
services: ['FEE7'], | |||
success: function () { | |||
setTimeout(function () { | |||
uni.stopBluetoothDevicesDiscovery(); | |||
uni.getBluetoothDevices({ | |||
success: function (res) { | |||
res.devices.forEach((device) => { | |||
// 根据filter进行过滤 | |||
if (device.name.indexOf(filter) == 0) { | |||
outDevices.push(device); | |||
} | |||
}) | |||
callback(0, outDevices, "扫描成功"); | |||
}, | |||
fail: function (error) { | |||
callback(1, null, "扫描失败:" + error.errMsg); | |||
} | |||
}) | |||
}, timeout) | |||
}, | |||
fail: function (error) { | |||
callback(1, null, "扫描失败:" + error.errMsg); | |||
} | |||
}) | |||
}, | |||
fail: function (error) { | |||
callback(1, null, "扫描失败:" + error.errMsg); | |||
} | |||
}) | |||
} | |||
function connectDevice(device, callback, callback2) { | |||
CallBackInfo = callback; | |||
CallBackInfoForconnected = callback2; | |||
myDeviceId = device.deviceId; | |||
uni.createBLEConnection({ | |||
deviceId: myDeviceId, | |||
timeout: 3000, | |||
success: function (res) { | |||
uni.getBLEDeviceServices({ | |||
deviceId: myDeviceId, | |||
success: function (res) { | |||
for (var a = 0; a < res.services.length; a++) { | |||
if ('0000FF00' == res.services[a].uuid.substr(0, 8)) { | |||
Service = res.services[a].uuid; | |||
} | |||
} | |||
uni.getBLEDeviceCharacteristics({ | |||
deviceId: myDeviceId, | |||
serviceId: Service, | |||
success: function (res) { | |||
for (var i = 0; i < res.characteristics.length; i++) { | |||
let item = res.characteristics[i] | |||
if (item.properties.notify || item.properties.indicate) { | |||
if ('0000FF02' == item.uuid.substr(0, 8)) { | |||
notifyCharacteristicsId = item.uuid; | |||
} | |||
} | |||
if (item.properties.write) { | |||
if ('0000FF01' == item.uuid.substr(0, 8)) { | |||
writeCharacteristicsId = item.uuid; | |||
} | |||
} else if (item.properties.read) { | |||
if ('0000FF03' == item.uuid.substr(0, 8)) { | |||
readCharacteristicsId = item.uuid; | |||
} | |||
} | |||
} | |||
uni.notifyBLECharacteristicValueChange({ | |||
state: true, | |||
deviceId: myDeviceId, | |||
serviceId: Service, | |||
characteristicId: notifyCharacteristicsId, | |||
success: function (res) { | |||
sendData(ass2001(), function (code) { | |||
if (code != 0) { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:认证失败" | |||
CallBackInfo(_res); | |||
} | |||
}) | |||
}, | |||
fail: function (error) { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:" + error.errMsg | |||
CallBackInfo(_res); | |||
} | |||
}) | |||
}, | |||
fail: function (error) { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:" + error.errMsg | |||
CallBackInfo(_res); | |||
}, | |||
}) | |||
}, | |||
fail: function (error) { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:" + error.errMsg | |||
CallBackInfo(_res); | |||
} | |||
}) | |||
}, | |||
fail: function (error) { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:" + error.errMsg | |||
CallBackInfo(_res); | |||
} | |||
}) | |||
// 必须在这里的回调才能获取 | |||
uni.onBLECharacteristicValueChange(function (characteristic) { | |||
var hex = Array.prototype.map.call(new Uint8Array(characteristic.value), x => ('00' + x.toString(16)).slice(-2)).join(''); | |||
console.log('接收信息:' + hex); | |||
checkAndDistribution(hex); | |||
}) | |||
uni.onBLEConnectionStateChange(function (res) { | |||
console.log('监听连接状态变化:'); | |||
if (res.connected) { | |||
CallBackInfoForconnected(0, null, "监听连接成功"); | |||
} else { | |||
resetState = 0; | |||
CallBackInfoForconnected(1, null, "监听到断开连接"); | |||
} | |||
}) | |||
} | |||
//断开与蓝牙外设的连接 | |||
function disconnectDevice(callback) { | |||
resetState = 0; | |||
uni.closeBLEConnection({ | |||
deviceId: myDeviceId, | |||
success: function (res) { | |||
uni.closeBluetoothAdapter({ | |||
success: function (res) { | |||
var _res = {}; | |||
_res.code = 0; | |||
_res.data = null; | |||
_res.msg = "断开成功"; | |||
callback(_res); | |||
}, | |||
fail: function (res) { | |||
var _res = {}; | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "断开失败:" + res.errMsg; | |||
callback(_res); | |||
} | |||
}) | |||
}, | |||
fail: function (res) { | |||
var _res = {}; | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "断开失败:" + res.errMsg; | |||
callback(_res); | |||
} | |||
}) | |||
} | |||
///////////////////////下面是util///////////////////////// | |||
/** | |||
* 发送数据 | |||
*/ | |||
function sendData(cmd, callback) { | |||
console.log('发送信息:' + cmd); | |||
uni.writeBLECharacteristicValue({ | |||
deviceId: myDeviceId, | |||
serviceId: Service, | |||
characteristicId: writeCharacteristicsId, | |||
value: strToBuff(cmd), | |||
success: function (res) { | |||
console.log('数据发送成功'); | |||
callback(0); | |||
}, | |||
fail: function (res) { | |||
console.log('数据发送失败'); | |||
console.log(res); | |||
callback(1); | |||
} | |||
}) | |||
} | |||
function hex2int(hex) { | |||
var len = hex.length, | |||
a = new Array(len), | |||
code; | |||
for (var i = 0; i < len; i++) { | |||
code = hex.charCodeAt(i); | |||
if (48 <= code && code < 58) { | |||
code -= 48; | |||
} else { | |||
code = (code & 0xdf) - 65 + 10; | |||
} | |||
a[i] = code; | |||
} | |||
return a.reduce(function (acc, c) { | |||
acc = 16 * acc + c; | |||
return acc; | |||
}, 0); | |||
} | |||
//命令转buffer | |||
function strToBuff(cmd) { | |||
let buffer = new ArrayBuffer(cmd.length / 2); | |||
let dataView = new Uint8Array(buffer); | |||
for (var a = 0; a < cmd.length / 2; a++) { | |||
dataView[a] = '0x' + cmd.substring(2 * a, 2 * a + 2); | |||
} | |||
return buffer | |||
} | |||
function ass2001() { | |||
OBUNo = '1122334455667788'; | |||
phoneRandom = getRandom(); | |||
console.log("phoneRandom:" + phoneRandom); | |||
var cmd = OBUNo + phoneRandom; | |||
return assbCmd("2001", cmd); | |||
} | |||
function ass2002() { | |||
var cmd = OBUNo + encrypDeviceRandom; | |||
return assbCmd("2002", cmd); | |||
} | |||
function ass2005() { | |||
var cmd = OBUNo; | |||
return assbCmd("2005", cmd); | |||
} | |||
function ass2006(option) { | |||
var cmd = OBUNo + option; | |||
return assbCmd("2006", cmd); | |||
} | |||
function channel(channelType, cmd, callback) { | |||
CallBackInfo = callback; | |||
sendData(ass200A(channelType, cmd), function (code) { | |||
if (code == 0) {} else { | |||
callback(1); | |||
} | |||
}) | |||
} | |||
function transCmd(cmd, cmdtype, callback) { | |||
if (cmdtype == "10") { | |||
cmdtype = "01" | |||
} | |||
if (cmdtype == "20") { | |||
cmdtype = "02" | |||
} | |||
CallBackToQT = callback; | |||
currentCmdId = 0; | |||
cmdTotal = cmd.length; | |||
inCmdArr = cmd; | |||
outCmdArr.splice(0, outCmdArr.length); | |||
console.log("resetState" + resetState); | |||
if (resetState == 0) { | |||
globalCmdType = "03"; | |||
channel("03", "", function (code, data, msg) { | |||
if (code == 0) { | |||
resetState = 1; | |||
globalCmdType = cmdtype; | |||
channel(cmdtype, cmd[0], function (code, data, msg) { | |||
}); | |||
} | |||
}); | |||
} else { | |||
globalCmdType = cmdtype; | |||
channel(cmdtype, cmd[0], function (code, data, msg) { | |||
}); | |||
} | |||
} | |||
function channel2005(callback) { | |||
CallBackInfo = callback; | |||
sendData(ass2005(), function (code) { | |||
if (code == 0) { | |||
console.log(code); | |||
} else { | |||
console.log(code); | |||
callback(1); | |||
} | |||
}) | |||
} | |||
function channel2006(cmd, callback) { | |||
CallBackInfo = callback; | |||
sendData(ass2006(cmd), function (code) { | |||
if (code == 0) { | |||
console.log(code); | |||
} else { | |||
console.log(code); | |||
callback(1); | |||
} | |||
}) | |||
} | |||
function channelTLV(channelType, cmds, callback) { | |||
sendData(ass200A(channelType, cmd), function (code) { | |||
if (code == 0) { | |||
console.log(code); | |||
callback(0); | |||
} else { | |||
console.log(code); | |||
callback(1); | |||
} | |||
}) | |||
} | |||
function ass200A(channelType, cmd) { | |||
var cmd = channelType + tenToHex(cmd.length / 2, 2) + cmd; | |||
return assbCmd("200A", cmd); | |||
} | |||
//获取16字节随机数 | |||
function getRandom() { | |||
var result = ''; | |||
for (var i = 0; i < 16; i++) { | |||
var tmp = Math.ceil((Math.random() * 255)); | |||
tmp = (tmp.toString(16)); | |||
if (tmp.length == 1) { | |||
tmp = "0" + tmp; | |||
} | |||
result += tmp; | |||
} | |||
return result.toUpperCase(); | |||
} | |||
//组装命令 | |||
function assbCmd(msgType, cmd) { | |||
var CmdId = 'AA55AA55'; | |||
var nLength = tenToHex(8 + cmd.length / 2, 4); | |||
var data = CmdId + msgType + nLength + getFramNo() + '01' + cmd + getDate(); | |||
var check = crc16(data, true); | |||
return data + check; | |||
} | |||
function getDate() { | |||
var date = new Date(); | |||
return date.getFullYear().toString().substring(2, 4) + pad2(date.getMonth() + 1) + pad2(date.getDate()) + pad2(date.getHours()) + pad2(date.getMinutes()) + pad2(date.getSeconds()); | |||
} | |||
function pad2(n) { | |||
return n < 10 ? '0' + n : n | |||
} | |||
function getFramNo() { | |||
if (framNo == 2147483647) { | |||
framNo = 1; | |||
} else { | |||
framNo++; | |||
} | |||
return tenToHex(framNo, 8); | |||
} | |||
/** | |||
* 10to16 | |||
* num 数字 | |||
* len 想要的16进制长度 | |||
*/ | |||
function tenToHex(num, len) { | |||
var hex = num.toString(16); | |||
var zero = ''; | |||
for (var a = 0; a < len - hex.length; a++) { | |||
zero += '0'; | |||
} | |||
return zero + hex | |||
} | |||
function strToByte(str) { | |||
var arr = []; | |||
for (var i = 0; i < str.length; i += 2) { | |||
arr.push(parseInt('0x' + str.substring(i, i + 2))); | |||
} | |||
return arr; | |||
}; | |||
function bytesToHexString(bytes) { | |||
var hexStr = ''; | |||
for (var i = 0; i < bytes.length; i++) { | |||
var hex = bytes[i].toString(16); | |||
if (hex.length == 1) { | |||
hex = "0" + hex; | |||
} | |||
hexStr += hex; | |||
} | |||
return hexStr.toUpperCase(); | |||
} | |||
//crc16校验,传入要校验的字符串,返回计算的crc16结果 | |||
function crc16(str) { | |||
var data = strToByte(str); | |||
var crc = 0x0000; | |||
for (var i = 0; i < data.length; i++) { | |||
crc = crc ^ (data[i] << 8); | |||
for (var j = 0; j < 8; j++) { | |||
if ((crc & 0x8000) != 0) | |||
crc = (crc << 1) ^ 0x8005; | |||
else | |||
crc = (crc << 1); | |||
} | |||
} | |||
crc = ((Math.pow(2, 32) + crc).toString(16)); | |||
crc = crc.substring(crc.length - 4); | |||
return crc.toUpperCase(); | |||
} | |||
function checkAndDistribution(data) { | |||
var cmd = data.substring(0, data.length - 4); | |||
var crc = data.substring(data.length - 4); | |||
if (crc.toUpperCase() == crc16(cmd)) { | |||
var head = data.substring(0, 8); | |||
if (head == "aa55aa55") { | |||
var type = data.substring(8, 12); | |||
switch (type) { | |||
case "3001": | |||
analysis3001(data); | |||
break; | |||
case "3002": | |||
analysis3002(data); | |||
break; | |||
case "3005": | |||
analysis3005(data); | |||
break; | |||
case "3006": | |||
analysis3006(data); | |||
break; | |||
case "300a": | |||
analysis300A(data); | |||
break; | |||
default: | |||
} | |||
} else { | |||
console.log("信息有误"); | |||
} | |||
} else { | |||
console.log("信息CRC校验不通过"); | |||
} | |||
} | |||
function analysis3001(data) { | |||
var length = hex2int(data.substring(12, 16)); | |||
var cmd = data.substring(26, 26 + length * 2); | |||
var cmd1 = cmd.substring(0, 16); | |||
var cmd2 = cmd.substring(16, 48); | |||
var cmd3 = cmd.substring(48, 80); | |||
console.log("cmd2" + cmd2); | |||
OBUNo = cmd1; | |||
if (authCheck(phoneRandom, cmd2)) { | |||
// 认证通过 | |||
encrypDeviceRandom = encryption(cmd3); | |||
sendData(ass2002(), function (code) { | |||
if (code != 0) { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:2001认证失败" | |||
CallBackInfo(_res); | |||
} | |||
}) | |||
} else { | |||
// 认证不通过 | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:3001认证失败" | |||
CallBackInfo(_res); | |||
} | |||
} | |||
function analysis3002(data) { | |||
var length = hex2int(data.substring(12, 16)); | |||
var cmd = data.substring(26, 26 + length * 2); | |||
var cmd1 = cmd.substring(0, 16); | |||
var cmd2 = cmd.substring(16, 18); | |||
if (cmd2 == "00") { | |||
_res.code = 0; | |||
_res.data = null; | |||
_res.msg = "连接成功" | |||
CallBackInfo(_res); | |||
} else { | |||
_res.code = 1; | |||
_res.data = null; | |||
_res.msg = "连接失败:认证失败" | |||
CallBackInfo(_res); | |||
} | |||
} | |||
function authCheck(random, data) { | |||
console.log("random" + random); | |||
console.log("data" + data); | |||
let decryptData = sm4.decrypt(strToByte(data), strToByte(key), { | |||
padding: 'none', | |||
output: 'array' | |||
}) // 解密,不使用 padding | |||
console.log("bytesToHexString(decryptData)" + bytesToHexString(decryptData)); | |||
return bytesToHexString(decryptData) == random; | |||
} | |||
function encryption(data) { | |||
// 可以为 16 进制串或字节数组,要求为 128 比特 | |||
let encryptData = sm4.encrypt(strToByte(data), strToByte(key), { | |||
padding: 'none' | |||
}) // 加密,默认输出 16 进制字符串 | |||
return encryptData; | |||
} | |||
function analysis300A(data) { | |||
var length = hex2int(data.substring(12, 16)); | |||
var cmd = data.substring(26, 26 + length * 2); | |||
var cmd1 = cmd.substring(0, 2); | |||
var cmd2 = cmd.substring(2, 4); | |||
var cmd3 = cmd.substring(4, 6); | |||
var cmd4 = cmd.substring(6, 6 + hex2int(cmd3) * 2); | |||
if (globalCmdType == '03') { | |||
CallBackInfo(0, cmd4, cmd4); | |||
} else { | |||
if (cmd4.substr(0, 2).toUpperCase() == "6C") { | |||
var cmd = inCmdArr[currentCmdId]; | |||
channel(globalCmdType, cmd.substr(0, cmd.length - 2) + cmd4.substr(cmd4.length - 2), function (code, data, msg) { | |||
}); | |||
} else { | |||
outCmdArr.push(cmd4); | |||
currentCmdId++; | |||
if (currentCmdId == cmdTotal) { | |||
var _res = {}; | |||
_res.code = 0; | |||
_res.data = outCmdArr; | |||
_res.msg = "成功"; | |||
CallBackToQT(_res); | |||
} else { | |||
channel(globalCmdType, inCmdArr[currentCmdId], function (code, data, msg) {}); | |||
} | |||
} | |||
} | |||
} | |||
function analysis3005(data) { | |||
var length = hex2int(data.substring(12, 16)); | |||
var cmd = data.substring(26, 26 + length * 2); | |||
CallBackInfo(0, cmd, cmd); | |||
} | |||
function analysis3006(data) { | |||
var length = hex2int(data.substring(12, 16)); | |||
var cmd = data.substring(26, 26 + length * 2); | |||
CallBackInfo(0, cmd, cmd); | |||
} | |||
/////////// | |||
/** | |||
* 将方法暴露出来 | |||
*/ | |||
module.exports = { | |||
openBle: openBle, | |||
disconnectDevice: disconnectDevice, | |||
connectDevice: connectDevice, | |||
transCmd: transCmd | |||
} |
@@ -0,0 +1,358 @@ | |||
/* eslint-disable no-bitwise, no-mixed-operators, complexity */ | |||
const DECRYPT = 0 | |||
const ROUND = 32 | |||
const BLOCK = 16 | |||
const Sbox = [ | |||
0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, | |||
0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, | |||
0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62, | |||
0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6, | |||
0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8, | |||
0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35, | |||
0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87, | |||
0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e, | |||
0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1, | |||
0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3, | |||
0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f, | |||
0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51, | |||
0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8, | |||
0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0, | |||
0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84, | |||
0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48 | |||
] | |||
const CK = [ | |||
0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, | |||
0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, | |||
0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, | |||
0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, | |||
0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, | |||
0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, | |||
0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, | |||
0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 | |||
] | |||
/** | |||
* 16 进制串转字节数组 | |||
*/ | |||
function hexToArray(str) { | |||
const arr = [] | |||
for (let i = 0, len = str.length; i < len; i += 2) { | |||
arr.push(parseInt(str.substr(i, 2), 16)) | |||
} | |||
return arr | |||
} | |||
/** | |||
* 字节数组转 16 进制串 | |||
*/ | |||
function ArrayToHex(arr) { | |||
return arr.map(item => { | |||
item = item.toString(16) | |||
return item.length === 1 ? '0' + item : item | |||
}).join('') | |||
} | |||
/** | |||
* utf8 串转字节数组 | |||
*/ | |||
function utf8ToArray(str) { | |||
const arr = [] | |||
for (let i = 0, len = str.length; i < len; i++) { | |||
const point = str.codePointAt(i) | |||
if (point <= 0x007f) { | |||
// 单字节,标量值:00000000 00000000 0zzzzzzz | |||
arr.push(point) | |||
} else if (point <= 0x07ff) { | |||
// 双字节,标量值:00000000 00000yyy yyzzzzzz | |||
arr.push(0xc0 | (point >>> 6)) // 110yyyyy(0xc0-0xdf) | |||
arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf) | |||
} else if (point <= 0xD7FF || (point >= 0xE000 && point <= 0xFFFF)) { | |||
// 三字节:标量值:00000000 xxxxyyyy yyzzzzzz | |||
arr.push(0xe0 | (point >>> 12)) // 1110xxxx(0xe0-0xef) | |||
arr.push(0x80 | ((point >>> 6) & 0x3f)) // 10yyyyyy(0x80-0xbf) | |||
arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf) | |||
} else if (point >= 0x010000 && point <= 0x10FFFF) { | |||
// 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz | |||
i++ | |||
arr.push((0xf0 | (point >>> 18) & 0x1c)) // 11110www(0xf0-0xf7) | |||
arr.push((0x80 | ((point >>> 12) & 0x3f))) // 10xxxxxx(0x80-0xbf) | |||
arr.push((0x80 | ((point >>> 6) & 0x3f))) // 10yyyyyy(0x80-0xbf) | |||
arr.push((0x80 | (point & 0x3f))) // 10zzzzzz(0x80-0xbf) | |||
} else { | |||
// 五、六字节,暂时不支持 | |||
arr.push(point) | |||
throw new Error('input is not supported') | |||
} | |||
} | |||
return arr | |||
} | |||
/** | |||
* 字节数组转 utf8 串 | |||
*/ | |||
function arrayToUtf8(arr) { | |||
const str = [] | |||
for (let i = 0, len = arr.length; i < len; i++) { | |||
if (arr[i] >= 0xf0 && arr[i] <= 0xf7) { | |||
// 四字节 | |||
str.push(String.fromCodePoint(((arr[i] & 0x07) << 18) + ((arr[i + 1] & 0x3f) << 12) + ((arr[i + 2] & 0x3f) << 6) + (arr[i + 3] & 0x3f))) | |||
i += 3 | |||
} else if (arr[i] >= 0xe0 && arr[i] <= 0xef) { | |||
// 三字节 | |||
str.push(String.fromCodePoint(((arr[i] & 0x0f) << 12) + ((arr[i + 1] & 0x3f) << 6) + (arr[i + 2] & 0x3f))) | |||
i += 2 | |||
} else if (arr[i] >= 0xc0 && arr[i] <= 0xdf) { | |||
// 双字节 | |||
str.push(String.fromCodePoint(((arr[i] & 0x1f) << 6) + (arr[i + 1] & 0x3f))) | |||
i++ | |||
} else { | |||
// 单字节 | |||
str.push(String.fromCodePoint(arr[i])) | |||
} | |||
} | |||
return str.join('') | |||
} | |||
/** | |||
* 32 比特循环左移 | |||
*/ | |||
function rotl(x, y) { | |||
return x << y | x >>> (32 - y) | |||
} | |||
/** | |||
* 非线性变换 | |||
*/ | |||
function byteSub(a) { | |||
return (Sbox[a >>> 24 & 0xFF] & 0xFF) << 24 | | |||
(Sbox[a >>> 16 & 0xFF] & 0xFF) << 16 | | |||
(Sbox[a >>> 8 & 0xFF] & 0xFF) << 8 | | |||
(Sbox[a & 0xFF] & 0xFF) | |||
} | |||
/** | |||
* 线性变换,加密/解密用 | |||
*/ | |||
function l1(b) { | |||
return b ^ rotl(b, 2) ^ rotl(b, 10) ^ rotl(b, 18) ^ rotl(b, 24) | |||
} | |||
/** | |||
* 线性变换,生成轮密钥用 | |||
*/ | |||
function l2(b) { | |||
return b ^ rotl(b, 13) ^ rotl(b, 23) | |||
} | |||
/** | |||
* 以一组 128 比特进行加密/解密操作 | |||
*/ | |||
function sms4Crypt(input, output, roundKey) { | |||
const x = new Array(4) | |||
// 字节数组转成字数组(此处 1 字 = 32 比特) | |||
const tmp = new Array(4) | |||
for (let i = 0; i < 4; i++) { | |||
tmp[0] = input[4 * i] & 0xff | |||
tmp[1] = input[4 * i + 1] & 0xff | |||
tmp[2] = input[4 * i + 2] & 0xff | |||
tmp[3] = input[4 * i + 3] & 0xff | |||
x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3] | |||
} | |||
// x[i + 4] = x[i] ^ l1(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ roundKey[i])) | |||
for (let r = 0, mid; r < 32; r += 4) { | |||
mid = x[1] ^ x[2] ^ x[3] ^ roundKey[r + 0] | |||
x[0] ^= l1(byteSub(mid)) // x[4] | |||
mid = x[2] ^ x[3] ^ x[0] ^ roundKey[r + 1] | |||
x[1] ^= l1(byteSub(mid)) // x[5] | |||
mid = x[3] ^ x[0] ^ x[1] ^ roundKey[r + 2] | |||
x[2] ^= l1(byteSub(mid)) // x[6] | |||
mid = x[0] ^ x[1] ^ x[2] ^ roundKey[r + 3] | |||
x[3] ^= l1(byteSub(mid)) // x[7] | |||
} | |||
// 反序变换 | |||
for (let j = 0; j < 16; j += 4) { | |||
output[j] = x[3 - j / 4] >>> 24 & 0xff | |||
output[j + 1] = x[3 - j / 4] >>> 16 & 0xff | |||
output[j + 2] = x[3 - j / 4] >>> 8 & 0xff | |||
output[j + 3] = x[3 - j / 4] & 0xff | |||
} | |||
} | |||
/** | |||
* 密钥扩展算法 | |||
*/ | |||
function sms4KeyExt(key, roundKey, cryptFlag) { | |||
const x = new Array(4) | |||
// 字节数组转成字数组(此处 1 字 = 32 比特) | |||
const tmp = new Array(4) | |||
for (let i = 0; i < 4; i++) { | |||
tmp[0] = key[0 + 4 * i] & 0xff | |||
tmp[1] = key[1 + 4 * i] & 0xff | |||
tmp[2] = key[2 + 4 * i] & 0xff | |||
tmp[3] = key[3 + 4 * i] & 0xff | |||
x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3] | |||
} | |||
// 与系统参数做异或 | |||
x[0] ^= 0xa3b1bac6 | |||
x[1] ^= 0x56aa3350 | |||
x[2] ^= 0x677d9197 | |||
x[3] ^= 0xb27022dc | |||
// roundKey[i] = x[i + 4] = x[i] ^ l2(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ CK[i])) | |||
for (let r = 0, mid; r < 32; r += 4) { | |||
mid = x[1] ^ x[2] ^ x[3] ^ CK[r + 0] | |||
roundKey[r + 0] = x[0] ^= l2(byteSub(mid)) // x[4] | |||
mid = x[2] ^ x[3] ^ x[0] ^ CK[r + 1] | |||
roundKey[r + 1] = x[1] ^= l2(byteSub(mid)) // x[5] | |||
mid = x[3] ^ x[0] ^ x[1] ^ CK[r + 2] | |||
roundKey[r + 2] = x[2] ^= l2(byteSub(mid)) // x[6] | |||
mid = x[0] ^ x[1] ^ x[2] ^ CK[r + 3] | |||
roundKey[r + 3] = x[3] ^= l2(byteSub(mid)) // x[7] | |||
} | |||
// 解密时使用反序的轮密钥 | |||
if (cryptFlag === DECRYPT) { | |||
for (let r = 0, mid; r < 16; r++) { | |||
mid = roundKey[r] | |||
roundKey[r] = roundKey[31 - r] | |||
roundKey[31 - r] = mid | |||
} | |||
} | |||
} | |||
function sm4(inArray, key, cryptFlag, { | |||
padding = 'pkcs#7', mode, iv = [], output = 'string' | |||
} = {}) { | |||
if (mode === 'cbc') { | |||
// CBC 模式,默认走 ECB 模式 | |||
if (typeof iv === 'string') iv = hexToArray(iv) | |||
if (iv.length !== (128 / 8)) { | |||
// iv 不是 128 比特 | |||
throw new Error('iv is invalid') | |||
} | |||
} | |||
// 检查 key | |||
if (typeof key === 'string') key = hexToArray(key) | |||
if (key.length !== (128 / 8)) { | |||
// key 不是 128 比特 | |||
throw new Error('key is invalid') | |||
} | |||
// 检查输入 | |||
if (typeof inArray === 'string') { | |||
if (cryptFlag !== DECRYPT) { | |||
// 加密,输入为 utf8 串 | |||
inArray = utf8ToArray(inArray) | |||
} else { | |||
// 解密,输入为 16 进制串 | |||
inArray = hexToArray(inArray) | |||
} | |||
} else { | |||
inArray = [...inArray] | |||
} | |||
// 新增填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7 | |||
if ((padding === 'pkcs#5' || padding === 'pkcs#7') && cryptFlag !== DECRYPT) { | |||
const paddingCount = BLOCK - inArray.length % BLOCK | |||
for (let i = 0; i < paddingCount; i++) inArray.push(paddingCount) | |||
} | |||
// 生成轮密钥 | |||
const roundKey = new Array(ROUND) | |||
sms4KeyExt(key, roundKey, cryptFlag) | |||
const outArray = [] | |||
let lastVector = iv | |||
let restLen = inArray.length | |||
let point = 0 | |||
while (restLen >= BLOCK) { | |||
const input = inArray.slice(point, point + 16) | |||
const output = new Array(16) | |||
if (mode === 'cbc') { | |||
for (let i = 0; i < BLOCK; i++) { | |||
if (cryptFlag !== DECRYPT) { | |||
// 加密过程在组加密前进行异或 | |||
input[i] ^= lastVector[i] | |||
} | |||
} | |||
} | |||
sms4Crypt(input, output, roundKey) | |||
for (let i = 0; i < BLOCK; i++) { | |||
if (mode === 'cbc') { | |||
if (cryptFlag === DECRYPT) { | |||
// 解密过程在组解密后进行异或 | |||
output[i] ^= lastVector[i] | |||
} | |||
} | |||
outArray[point + i] = output[i] | |||
} | |||
if (mode === 'cbc') { | |||
if (cryptFlag !== DECRYPT) { | |||
// 使用上一次输出作为加密向量 | |||
lastVector = output | |||
} else { | |||
// 使用上一次输入作为解密向量 | |||
lastVector = input | |||
} | |||
} | |||
restLen -= BLOCK | |||
point += BLOCK | |||
} | |||
// 去除填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7 | |||
if ((padding === 'pkcs#5' || padding === 'pkcs#7') && cryptFlag === DECRYPT) { | |||
const len = outArray.length | |||
const paddingCount = outArray[len - 1] | |||
for (let i = 1; i <= paddingCount; i++) { | |||
if (outArray[len - i] !== paddingCount) throw new Error('padding is invalid') | |||
} | |||
outArray.splice(len - paddingCount, paddingCount) | |||
} | |||
// 调整输出 | |||
if (output !== 'array') { | |||
if (cryptFlag !== DECRYPT) { | |||
// 加密,输出转 16 进制串 | |||
return ArrayToHex(outArray) | |||
} else { | |||
// 解密,输出转 utf8 串 | |||
return arrayToUtf8(outArray) | |||
} | |||
} else { | |||
return outArray | |||
} | |||
} | |||
module.exports = { | |||
encrypt(inArray, key, options) { | |||
return sm4(inArray, key, 1, options) | |||
}, | |||
decrypt(inArray, key, options) { | |||
return sm4(inArray, key, 0, options) | |||
} | |||
} |
@@ -1,3 +1,6 @@ | |||
const common_vendor = require("../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
/** | |||
*json字符串转换成json对象 | |||
*/ |
@@ -6,6 +6,8 @@ import theme from './theme.js'; | |||
// import config from '../../config/config.js'; | |||
// import urlConfig from '../../config/urlConfig.js'; | |||
// import http from './http.js'; //身份类型 | |||
const common_vendor = require("../../common/vendor.js"); | |||
var uni = common_vendor.index | |||
const identityData = [ | |||
{ |
@@ -67,7 +67,7 @@ | |||
import {request} from "@/utils/network/request.js"; | |||
import {stringToJson} from "@/utils/network/encryption"; | |||
import { onLoad} from "@dcloudio/uni-app"; | |||
import {orderList,queryTrajectory} from "@/utils/network/api.js"; | |||
import {orderList,queryTrajectory,selectCarInfo} from "@/utils/network/api.js"; | |||
import {getItem,StorageKeys} from "@/utils/storage"; | |||
const state = reactive({ | |||
array: [], | |||
@@ -76,34 +76,28 @@ | |||
msg:'', | |||
}) | |||
onLoad((option : any) => { | |||
quanCheckActionTrue().then((item: any) => { | |||
for(var i=0;i<item.data.length;i++){ | |||
state.array.push(item.data[i].vehiclePlate) | |||
state.arrayVehicleId.push(item.data[i].vehicleId) | |||
} | |||
getVehicleMsg(); | |||
}) | |||
quanCheckActionTrue(); | |||
}) | |||
const quanCheckActionTrue = () => { | |||
var data = { | |||
opId: getItem(StorageKeys.OpenId), | |||
source: 'WECHAT', //渠道为小程序 | |||
tabIndex: '0', //0全部 | |||
orderStep: '11', //11 为已完成” | |||
}; | |||
const options = { | |||
type: 2, | |||
data: data, | |||
data: { | |||
"openId": getItem('openId') | |||
}, | |||
method: "POST", | |||
showLoading: true, | |||
}; | |||
return new Promise(async (resolve, reject) => { | |||
const res = await request(orderList, options); | |||
const data = stringToJson(res.bizContent); | |||
resolve(data); | |||
}).catch((error) => { | |||
reject(error); | |||
//调用方式 | |||
request(selectCarInfo, options).then((res) => { | |||
const data = (stringToJson(res.bizContent).vehicleManages) | |||
for(var i=0;i<data.length;i++){ | |||
state.array.push(data[i].vehiclePlate) | |||
state.arrayVehicleId.push(data[i].vehicleId) | |||
} | |||
getVehicleMsg(); | |||
}) | |||
.catch((err) => { | |||
console.log('输出内容', err) | |||
}); | |||
} | |||
const bindPickerChange=(e)=> { | |||
@@ -122,6 +116,7 @@ | |||
}) | |||
} | |||
const getVehicleMsg = () => { | |||
console.log("state.arrayVehicleId[state.index]",state.arrayVehicleId[state.index]) | |||
const options = { | |||
type: 2, | |||
data: { |
@@ -64,11 +64,11 @@ export function request(code, options = {}) { | |||
mask: true | |||
}); | |||
} | |||
// console.log('请求参数:', options.data) | |||
console.log('请求参数:', options.data) | |||
//参数返回 | |||
return new Promise((resolve, reject) => { | |||
options.success = (res) => { | |||
// console.log('请求成功返回参数:', res) | |||
console.log('请求成功返回参数:', res) | |||
// 请求返回后,隐藏loading(如果请求返回快的话,可能会没有loading) | |||
uni.hideLoading() | |||
if (res.data.statusCode !== 0) { |