DESKTOP-2IO5MST\huting il y a 1 an
Parent
révision
9b0b398cc7

+ 17
- 7
pages/user/user.vue Voir le fichier

@@ -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
- 0
static/etc/ATAPI/ArtcBleUtil.js Voir le fichier

@@ -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,

+ 3
- 0
static/etc/CGAPI/cguBle.js Voir le fichier

@@ -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;


+ 2
- 0
static/etc/JLQZAPI/JLBleManagerTool.js Voir le fichier

@@ -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";

+ 181
- 1
static/etc/JLQZAPI/JLObuWecha33UnPackt.js Voir le fichier

@@ -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
}

+ 223
- 1
static/etc/JLQZAPI/JLObuWechat33Pack.js Voir le fichier

@@ -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
}

+ 76
- 1
static/etc/JLQZAPI/JLZJConfig.js Voir le fichier

@@ -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
}
}
};

+ 302
- 1
static/etc/JLQZAPI/dataTool.js Voir le fichier

@@ -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
};

+ 99
- 1
static/etc/JLQZAPI/onfire.js Voir le fichier

@@ -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
}
});

+ 932
- 1
static/etc/JTAPI/BleUtil.js
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 202
- 1
static/etc/JTAPI/DataHandler.js
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 397
- 1
static/etc/JTAPI/DataUtil.js
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 861
- 1
static/etc/JYAPI/GenvictBleUtil.js
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 414
- 1
static/etc/JYAPI/GenvictDataUtil.js
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 2
- 0
static/etc/TDAPI/TDRObuSDK.js Voir le fichier

@@ -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设备

+ 1
- 1
static/etc/WJAPI/wjBleAPI.js Voir le fichier

@@ -229,4 +229,4 @@ module.exports = {
disconnectDevice: disconnectDevice,
transCmd: transCmd,
getDeviceInfo: getDeviceInfo
};
};

+ 10
- 4
static/etc/WJAPI/wjService.js Voir le fichier

@@ -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
};
};

+ 2
- 0
static/etc/WQAPI/WDObuDataUtil.js Voir le fichier

@@ -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,

+ 608
- 0
static/etc/WXGCAPI/BleUtilForQT.js Voir le fichier

@@ -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
}

+ 358
- 0
static/etc/WXGCAPI/sm4.js Voir le fichier

@@ -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)
}
}

+ 3
- 0
static/etcUtil/datas.js Voir le fichier

@@ -1,3 +1,6 @@
const common_vendor = require("../../common/vendor.js");
var uni = common_vendor.index

/**
*json字符串转换成json对象
*/

+ 2
- 0
static/etcUtil/tools.js Voir le fichier

@@ -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 = [
{

+ 17
- 22
subpackage/personal-center/trajectory/trajectory.vue Voir le fichier

@@ -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: {

+ 2
- 2
utils/network/request.js Voir le fichier

@@ -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) {

Chargement…
Annuler
Enregistrer