diff --git a/App.vue b/App.vue
index 3346b2f..8c8c38c 100644
--- a/App.vue
+++ b/App.vue
@@ -9,32 +9,34 @@
export default {
onLaunch: function() {
- //以下代码仅在开发时使用,否则会出现不可预知的问题。
- //清除登陆之外的所有信息;
- // let store=uni.getStorageInfoSync();
- // store.keys.forEach((val,index,array)=>{
- // if(val=="tokenTime"){
- // let time=uni.getStorageSync(val);
- // if(!time){
- // time=0;
- // }
- // let currTime=new Date().getTime();
- // if(currTime>=time){
- // uni.removeStorageSync(val);
- // uni.removeStorageSync("token");
- // uni.removeStorageSync("clientID");
- // }
- // }
- // else if(val=="token" || val=="clientID" || val=='phone'){
- // console.log("忽略登陆信息");
- // }else{
- // uni.removeStorageSync(val);
- // }
- // });
- // uni.clearStorageSync();
- //以上代码仅在开发时使用,否则会出现不可预知的问题。
-
+
// #ifdef APP|APP-PLUS
+ let appid = plus.runtime.appid;
+ console.log("appid=", appid);
+
+ if (appid === 'HBuilder') {
+ let store = uni.getStorageInfoSync();
+ store.keys.forEach((val, index, array) => {
+ if (val == "tokenTime") {
+ let time = uni.getStorageSync(val);
+ if (!time) {
+ time = 0;
+ }
+ let currTime = new Date().getTime();
+ if (currTime >= time) {
+ uni.removeStorageSync(val);
+ uni.removeStorageSync("token");
+ uni.removeStorageSync("clientID");
+ }
+ } else if (val == "token" || val == "clientID" || val == 'phone') {
+ console.log("忽略登陆信息");
+ } else {
+ uni.removeStorageSync(val);
+ }
+ });
+ }
+
+
let system = uni.getSystemInfoSync();
diff --git a/pages.json b/pages.json
index b688c26..c31d80a 100644
--- a/pages.json
+++ b/pages.json
@@ -365,7 +365,8 @@
"path" : "pages/018A/HBY018A",
"style" :
{
- "navigationBarTitleText" : "HBY018A"
+ "navigationBarTitleText" : "HBY018A",
+ "navigationStyle": "custom"
}
},
{
diff --git a/pages/018A/HBY018A.vue b/pages/018A/HBY018A.vue
index 6378a92..db9752f 100644
--- a/pages/018A/HBY018A.vue
+++ b/pages/018A/HBY018A.vue
@@ -37,6 +37,10 @@
设备名称
{{device.deviceName}}
+
+ IMEI
+ {{device.deviceImei}}
+
Mac地址
{{device.deviceMac}}
@@ -57,12 +61,12 @@
定位信息
- {{formData.sta_longitude}}
+ {{formData?formData.sta_longitude:""}}
- {{formData.sta_latitude}}
+ {{formData?formData.sta_latitude:""}}
@@ -70,7 +74,7 @@
- {{formData.address}}
+ {{formData?formData.address:''}}
@@ -318,10 +322,11 @@
let eventChannel = this.getOpenerEventChannel();
eventChannel.on('detailData', (data) => {
-
+ this.initWatch();
// console.log("收到父页面的参数:" + JSON.stringify(data));
var device = data.data;
these.device = device;
+ these.Status.apiType = data.apiType;
if (data.apiType !== 'listA') {
Common.getdeviceShareId(data.data.id).then(res => {
if (res.code == 200) {
@@ -364,7 +369,7 @@
these.setBleFormData();
- this.initWatch();
+
});
},
@@ -736,7 +741,7 @@
console.log("this.formData[key] =", this.formData[key]);
}
},
- bleSend(json, validWarn = true) {
+ bleSend(json, validWarn = true,bleLink) {
return new Promise((resolve, reject) => {
if (this.formData.sta_ShakeBit != '' && this.formData.sta_ShakeBit != '0' && validWarn) {
reject({
@@ -750,8 +755,10 @@
reject({
code: -1
});
-
- this.showBleUnConnect();
+ if(bleLink){
+ this.showBleUnConnect();
+ }
+
return;
}
@@ -882,10 +889,8 @@
let json = {
ins_Side_Light: val
}
- this.bleSend(json, true).then(() => {}).catch(ex => {
- if (ex.code == -1) {
- return;
- }
+ this.bleSend(json, true,false).then(() => {}).catch(ex => {
+
console.log("蓝牙发送失败,尝试用mq发送");
this.mqSend(json, true).catch(err => {
if (err.code == -1) {
@@ -933,10 +938,8 @@
ins_ShakeBit: type
};
- this.bleSend(json, false).catch(ex => {
- if (ex.code == -1) {
- return;
- }
+ this.bleSend(json, false,false).catch(ex => {
+
this.mqSend(json, false).catch(err => {
if (err.code == -1) {
diff --git a/pages/210/HBY210.vue b/pages/210/HBY210.vue
index 08b0642..c7288db 100644
--- a/pages/210/HBY210.vue
+++ b/pages/210/HBY210.vue
@@ -29,7 +29,7 @@
电量
-
+
@@ -118,8 +118,7 @@
-
+
@@ -128,7 +127,7 @@
雷达感应
- {{formData.sta_RadarType==0?'关闭':formData.sta_RadarType+'M'}}
+ {{RadarType}}
@@ -146,17 +145,15 @@
{{formData.sta_InfraRed=='1'?'开启':'关闭'}}
-
-
+
+
-
-
+
+
开机画面
-
+
@@ -173,32 +170,35 @@
单位:
-
-
-
- 部门:
-
姓名:
-
+
+ 部门:
+
+
+
ID:
-
-
-
-
-
-
+
+
+
+
+
@@ -228,7 +228,8 @@
import Common from '@/utils/Common.js';
import BleTool from '@/utils/BleHelper.js'
import BleReceive from '@/utils/BleReceive';
-
+ import SendBatchData from '@/utils/SendBatchData.js';
+ var batchTool = null;
var eventChannel = null;
var these = null;
@@ -262,7 +263,7 @@
},
usrToggle: true,
bleLinkCnt: 0,
- PictureMenu:{
+ PictureMenu: {
show: false,
showHeader: true,
menuItems: [{
@@ -360,17 +361,17 @@
deviceId: "",
bleStatu: false,
- sta_AlarmTime:0,
+ sta_AlarmTime: 0,
sta_PowerPercent: "",
sta_PowerTime: "",
- sta_SOSGrade:0,
+ sta_SOSGrade: 0,
sta_longitude: "",
sta_latitude: "",
sta_system: "", //设备状态,0关机,1仅充电,2开机未充电,3,开机且充电
sta_RadarType: "",
sta_ShakeBit: 0, //报警状态
- sta_InfraRed:0,
- textLines: ['湖北星汉文化', '有限', '公司','12345678']
+ sta_InfraRed: 0,
+ textLines: ['湖北星汉文化', '有限', '公司', '12345678']
},
device: {
id: "",
@@ -393,13 +394,13 @@
},
permissions: [],
-inteval:80
+ inteval: 80
}
},
computed: {
- AlarmTime(){
- if(this.formData.sta_AlarmTime){
- return Common.formatTime(this.formData.sta_AlarmTime,"second");
+ AlarmTime() {
+ if (this.formData.sta_AlarmTime) {
+ return Common.formatTime(this.formData.sta_AlarmTime, "second");
}
return "";
},
@@ -420,8 +421,8 @@ inteval:80
return v == this.formData.sta_ShakeBit;
});
if (f) {
- let str= dic[f]
-
+ let str = dic[f]
+
return str;
}
return "";
@@ -455,6 +456,19 @@ inteval:80
if (this.formData.sta_system == '3') {
return '开机充电中'
}
+ },
+
+ RadarType(){
+
+ let f=this.Status.BottomMenu.menuItems.find(v=>{
+ return v.value==this.formData.sta_RadarType;
+ });
+
+ if(f){
+ return f.text;
+ }
+
+ return '关闭';
}
},
created() {
@@ -564,64 +578,76 @@ inteval:80
},
methods: {
- showAction(type){
- if(type=='BottomMenu'){
- this.Status.BottomMenu.show = true;
- this.Status.PictureMenu.show=false;
- this.Status.BottomMenu.menuItems.find((v,i)=>{
- if(this.formData.sta_RadarType==v.value){
- this.Status.BottomMenu.activeIndex=i;
- return true;
- }
- }) ;
- }else{
- this.Status.PictureMenu.show=true;
+ showAction(type) {
+ if (type == 'BottomMenu') {
+ this.Status.BottomMenu.show = true;
+ this.Status.PictureMenu.show = false;
+ this.Status.BottomMenu.menuItems.find((v, i) => {
+ if (this.formData.sta_RadarType == v.value) {
+ this.Status.BottomMenu.activeIndex = i;
+ return true;
+ }
+ });
+ } else {
+ this.Status.PictureMenu.show = true;
this.Status.BottomMenu.show = false;
+ this.Status.PictureMenu.activeIndex=0;
}
-
+
},
- btnPictureClick(li,i){
+ btnPictureClick(li, i) {
let f = this.getDevice();
if (!f) {
this.showBleUnConnect();
return;
}
this.Status.PictureMenu.show = false;
-
-
- console.log("li=",li)
- if (li.value == 'img') {
- //照片
- these.sendImg();
- } else {
- //视频
- these.checkSendVideo();
+
+ if (!batchTool) {
+ batchTool = new SendBatchData(these, f, ble);
}
+
+ if (li.value == 'img') {
+ // sendImagePackets(index);
+ batchTool.SendImg();
+ } else {
+ // sendVideoPackets(index);
+ batchTool.SendVideo(504);
+ }
+
+ // console.log("li=",li)
+ // if (li.value == 'img') {
+ // //照片
+ // these.sendImg();
+ // } else {
+ // //视频
+ // these.checkSendVideo();
+ // }
},
checkSendVideo() {
-
+
if (!this.permissions.includes('3') && this.Status.apiType !== 'listA') {
-
+
MsgError('无操作权限', '确定', these);
return;
}
-
+
let f = this.getDevice();
-
+
let timeDelayCloseLoading = () => {
setTimeout(() => {
hideLoading(these);
}, 1500);
}
-
-
+
+
let sendVideoPackets = (ReSendNo) => {
console.log("开始发送分片数据");
return new Promise((resolve, reject) => {
if (f) {
// 总数据包数
var totalPackets = 1536; //36;
-
+
let currentPacket = 1;
console.log("发送数据准备中,总共" + totalPackets);
if (ReSendNo) {
@@ -635,7 +661,7 @@ inteval:80
if (currentPacket > totalPackets) {
if (!ReSendNo) {
setTimeout(() => {
-
+
ble.sendString(f.deviceId, "transmit complete", f
.writeServiceId, f.wirteCharactId, 20)
.then(
@@ -645,9 +671,9 @@ inteval:80
console.log("出现异常", ex);
});
}, 500);
-
+
}
-
+
hideLoading(these);
showPop({
showPop: true,
@@ -656,14 +682,14 @@ inteval:80
}, these);
these.videoHexArray = null;
resolve();
-
+
return;
}
-
+
// 计算当前包的数据
let packetSize = 500;
-
-
+
+
// 创建数据包
const startIndex = (currentPacket - 1) * packetSize;
const endIndex = Math.min(startIndex + packetSize, these.videoHexArray
@@ -674,40 +700,40 @@ inteval:80
}
////console.log("111111");
const packetData = these.videoHexArray.slice(startIndex, endIndex);
-
+
// 构建数据包
////console.log("packetData.length"+packetData.length);
const bufferSize = 504; // 头部5字节 + 数据部分
const buffer = new ArrayBuffer(bufferSize);
const dataView = new DataView(buffer);
-
+
let sortNo = currentPacket.toString(16).padStart(4, '0');
-
+
// 填充头部
dataView.setUint8(0, 0x55); // 帧头
dataView.setUint8(1, 0x04); // 帧类型:开机画面
dataView.setUint8(2, '0x' + sortNo.substring(0, 2)); // 包序号
dataView.setUint8(3, '0x' + sortNo.substring(2, 4)); // 包序号
-
+
// dataView.setUint8(4, 0x01);
// dataView.setUint8(5, 0xF4);
-
+
for (let i = 0; i < packetData.length; i++) {
dataView.setUint8(4 + i, '0x' + packetData[i]);
}
-
+
let inteval = 60;
-
+
ble.sendData(f.deviceId, buffer, f.writeServiceId, f
.wirteCharactId, 10).then(() => {
-
+
updateLoading(these, {
text: "正在发送:" + currentPacket + "/" +
totalPackets
});
-
+
currentPacket++;
-
+
// console.log("发送一段成功,发送下一段");
setTimeout(sendNextVideoPacket, inteval);
}).catch(err => {
@@ -717,9 +743,9 @@ inteval:80
currentPacket);
setTimeout(sendNextVideoPacket, 800);
} else {
-
+
hideLoading(these);
-
+
showPop({
showPop: true,
message: err.msg + ",发送失败了",
@@ -732,34 +758,34 @@ inteval:80
these.videoHexArray = null;
return;
}
-
+
});
};
-
-
+
+
sendNextVideoPacket();
-
-
+
+
} else {
console.log("Fail.......")
}
});
}
-
+
var sendVideo = (videoPath) => {
let uploadVideo = () => {
-
+
these.videoHexArray = [];
console.log("开始处理,正在上传");
-
+
showLoading(these, {
text: "上传中"
});
let p1 = new Promise((resolve, reject) => {
-
+
ble.sendString(f.deviceId, "video transmit start", f
.writeServiceId, f.wirteCharactId).then(res => {
-
+
setTimeout(() => {
console.log("握手成功了");
resolve(true);
@@ -768,10 +794,10 @@ inteval:80
reject(ex);
});
});
-
-
+
+
let p2 = new Promise((succ, err) => {
-
+
const token = uni.getStorageSync('token');
const clientid = uni.getStorageSync('clientID');
if (!token) {
@@ -799,26 +825,26 @@ inteval:80
timeout: 600000,
fail: (ex) => {
console.log("上传视频失败" + JSON.stringify(ex));
-
+
err(ex);
},
success: (res) => {
-
+
console.log("上传完成,向蓝牙设备发送");
succ(res);
}
-
+
});
});
-
+
Promise.all([p1, p2]).then((arr) => {
-
- if (arr[0].status == 'rejected') {
- MsgError("设备准备未就绪,请重试",'',these);
+
+ if (arr[0].status == 'rejected') {
+ MsgError("设备准备未就绪,请重试", '', these);
return;
}
- if(arr[1].status== 'rejected'){
- MsgError("读取视频失败",'',these);
+ if (arr[1].status == 'rejected') {
+ MsgError("读取视频失败", '', these);
return;
}
let res = arr[1];
@@ -830,16 +856,16 @@ inteval:80
updateLoading(these, {
text: "正在发送:0/1536"
});
-
-
-
+
+
+
shotVideoClick(res.data);
-
-
+
+
} else {
console.log("服务器未返回正确的数据");
-
-
+
+
showPop({
message: "与服务器连接出现异常,请检查网络设置",
iconUrl: "/static/images/common/uploadErr.png",
@@ -847,7 +873,7 @@ inteval:80
buttonBgColor: "#E03434",
}, these);
}
-
+
}).catch((ex) => {
console.log("出现异常,", ex)
hideLoading(these);
@@ -859,27 +885,27 @@ inteval:80
}, these);
})
}
-
-
-
-
+
+
+
+
let shotVideoClick = () => {
console.log("正在开始发送");
sendVideoPackets().then(() => {
console.log("发送完成");
-
+
}).catch((ex1) => {
//console.log("出现了异常", ex1)
}).finally(() => {
hideLoading(these);
});
}
-
-
+
+
uploadVideo();
-
+
}
-
+
uni.chooseVideo({
sourceType: ['album'],
compressed: false, // 关闭视频压缩,确保上传原始文件
@@ -890,37 +916,37 @@ inteval:80
let width = Math.round(res.width);
let height = Math.round(res.height);
let duration = res.duration;
-
+
// 获取平台信息
const systemInfo = uni.getSystemInfoSync();
const platform = systemInfo.platform;
const isIOS = platform === 'ios';
-
+
console.log("平台:", platform, "uni.chooseVideo返回 - 宽度:", width, "高度:", height,
"时长:", duration);
-
+
// iOS特殊处理:如果返回的是80*40,很可能是160*80的一半(iOS的bug)
if (isIOS && width === 80 && height === 40) {
console.log("检测到iOS特殊情况:返回80*40,实际应该是160*80,进行修正");
width = 160;
height = 80;
}
-
+
// 检查分辨率是否符合要求
let checkResolution = (w, h) => {
// 使用容差比较,允许1像素的误差
return Math.abs(w - 160) <= 1 && Math.abs(h - 80) <= 1;
};
-
+
let err = [];
if (duration < 2) {
err.push("视频时长至少2秒");
}
-
+
if (!checkResolution(width, height)) {
err.push("视频宽高必须是160*80,当前分辨率:" + width + "*" + height);
}
-
+
if (err.length > 0) {
err = err.join(";");
showPop({
@@ -931,41 +957,41 @@ inteval:80
}, these);
return;
}
-
+
showLoading(these, {
text: '正在上传'
});
setTimeout(() => {
sendVideo(path);
}, 0);
-
+
}
});
-
+
},
sendImg() {
if (!this.permissions.includes('3') && this.Status.apiType !== 'listA') {
-
+
MsgError('无操作权限', '确定', these);
return;
}
-
+
let f = this.getDevice();
-
-
+
+
var sendImagePackets = function(ReSendNo) {
-
+
return new Promise((resolve, reject) => {
-
+
// 总数据包数
let totalPackets = 52;
let currentPacket = 1;
-
+
if (ReSendNo) {
totalPackets = ReSendNo;
currentPacket = ReSendNo;
}
-
+
if (f) {
// 发送单个数据包
const sendNextPacket = () => {
@@ -977,18 +1003,18 @@ inteval:80
message: "上传成功",
iconUrl: "/static/images/common/success.png",
});
-
+
setTimeout(() => {
ble.sendString(f.deviceId, "transmit complete", f
.writeServiceId, f
.wirteCharactId);
}, 1000);
-
+
these.rgb565Data = null;
resolve();
return;
}
-
+
// 计算当前包的数据
let packetSize = 250;
// if (currentPacket <= 51) {
@@ -996,7 +1022,7 @@ inteval:80
// } else {
// packetSize = 50; // 最后一个包100字节
// }
-
+
// 创建数据包
const startIndex = (currentPacket - 1) * packetSize;
const endIndex = Math.min(startIndex + packetSize, these.rgb565Data
@@ -1010,37 +1036,37 @@ inteval:80
const bufferSize = 505; // 5 + packetData.length * 2; // 头部5字节 + 数据部分
const buffer = new ArrayBuffer(bufferSize);
const dataView = new DataView(buffer);
-
+
// 填充头部
dataView.setUint8(0, 0x55); // 帧头
dataView.setUint8(1, 0x02); // 帧类型:开机画面
dataView.setUint8(2, '0x' + currentPacket.toString(16).padStart(2,
'0')); // 包序号
-
-
- dataView.setUint16(3, packetData.length*2,false); // 包t长度
-
+
+
+ dataView.setUint16(3, packetData.length * 2, false); // 包t长度
+
// 填充数据(每个RGB565值占2字节)
for (let i = 0; i < packetData.length; i++) {
dataView.setUint16(5 + i * 2, packetData[i], false); // 大端字节序
}
-
-
-
-
-
+
+
+
+
+
//发送数据包
ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId,
10)
.then(() => {
-
-
+
+
updateLoading(these, {
text: "正在发送:" + currentPacket + "/" +
totalPackets
})
currentPacket++;
-
+
setTimeout(sendNextPacket, these.inteval);
}).catch(err => {
console.log("发送数据包失败了" + JSON.stringify(err));
@@ -1060,7 +1086,7 @@ inteval:80
reject(err);
});
}
-
+
if (ReSendNo) {
sendNextPacket(ReSendNo);
return;
@@ -1069,7 +1095,7 @@ inteval:80
ble.sendString(f.deviceId, "picture transmit start", f.writeServiceId,
f.wirteCharactId).then(() => {
setTimeout(sendNextPacket, 120);
-
+
}).catch((err) => {
console.log("握手没有成功");
showPop({
@@ -1084,31 +1110,31 @@ inteval:80
}
});
}
-
-
+
+
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
- sourceType: ['album','camera'],
+ sourceType: ['album', 'camera'],
success: function(res) {
uni.navigateTo({
url: "/pages/common/ImgCrop/ImgCrop",
events: {
ImgCutOver: function(data) {
-
+
showLoading(these, {
text: "正在发送0/52"
});
-
-
+
+
these.rgb565Data = Common.convertToRGB565(data.piexls);
-
+
setTimeout(function() {
sendImagePackets().catch(() => {
-
+
});
}, 0)
-
+
}
},
success(ev) {
@@ -1120,24 +1146,26 @@ inteval:80
console.log("跳转页面失败" + JSON.stringify(ex));
}
});
-
+
}
});
-
+
},
- btnClick(){
- let f = this.getDevice();
+ btnClick() {
+ let f = this.getDevice();
if (!f) {
this.showBleUnConnect();
return;
}
-
+
this.Status.BottomMenu.show = false;
-
- let d=this.Status.BottomMenu.menuItems[this.Status.BottomMenu.activeIndex];
+
+ let d = this.Status.BottomMenu.menuItems[this.Status.BottomMenu.activeIndex];
let bleSend = () => {
- let json = {ins_RadarType:d.value};
-
+ let json = {
+ ins_RadarType: d.value
+ };
+
json = JSON.stringify(json);
if (ble) {
ble.sendString(f.deviceId, json).then(res => {
@@ -1148,23 +1176,23 @@ inteval:80
});
}
}
-
-
+
+
bleSend();
-
-
+
+
},
itemClick(item, index) {
- this.Status.BottomMenu.activeIndex=index;
-
-
+ this.Status.BottomMenu.activeIndex = index;
+
+
},
- itemPictureClick(item,index){
- this.Status.PictureMenu.activeIndex=index;
+ itemPictureClick(item, index) {
+ this.Status.PictureMenu.activeIndex = index;
},
closeActionSheet() {
this.Status.BottomMenu.show = false;
- this.Status.PictureMenu.show=false;
+ this.Status.PictureMenu.show = false;
},
sendUsr() {
if (!this.permissions.includes('4') && this.Status.apiType !== 'listA') {
@@ -1179,186 +1207,195 @@ inteval:80
return;
}
- let toByteValue = (value) => {
- if (typeof value === 'number') {
- return value;
- }
- if (typeof value === 'string') {
- if (value.startsWith('0x') || value.startsWith('0X')) {
- return parseInt(value, 16);
- }
- return parseInt(`0x${value}`, 16);
- }
- return 0;
+ if (!batchTool) {
+ batchTool = new SendBatchData(these, f, ble);
}
+ batchTool.SendUsr(4);
+ return;
+
+
+
+
+ // let toByteValue = (value) => {
+ // if (typeof value === 'number') {
+ // return value;
+ // }
+ // if (typeof value === 'string') {
+ // if (value.startsWith('0x') || value.startsWith('0X')) {
+ // return parseInt(value, 16);
+ // }
+ // return parseInt(`0x${value}`, 16);
+ // }
+ // return 0;
+ // }
- let err = false;
- this.formData.textLines.find((txt) => {
- if (txt.length === 0) {
- console.log("txt=", txt);
- err = true;
- return true;
- }
- return false;
- })
- if (err) {
- MsgError('单位、部门、姓名、ID必须填写', '', these);
- return;
- }
- showLoading(these, {
- text: "请稍候..."
- });
- //握手
- let holdHand = () => {
- return new Promise((resolve, reject) => {
- updateLoading(these, {
- text: '设备准备中...'
- })
- let hexs = 'word transmit start';
- ble.sendString(f.deviceId, hexs, f.writeServiceId, f.wirteCharactId, 10).then(res => {
- setTimeout(() => {
- resolve(res)
- }, 2200);
+ // let err = false;
+ // this.formData.textLines.find((txt) => {
+ // if (txt.length === 0) {
+ // console.log("txt=", txt);
+ // err = true;
+ // return true;
+ // }
+ // return false;
+ // })
+ // if (err) {
+ // MsgError('单位、部门、姓名、ID必须填写', '', these);
+ // return;
+ // }
+ // showLoading(these, {
+ // text: "请稍候..."
+ // });
+ // //握手
+ // let holdHand = () => {
+ // return new Promise((resolve, reject) => {
+ // updateLoading(these, {
+ // text: '设备准备中...'
+ // })
+ // let hexs = 'word transmit start';
+ // ble.sendString(f.deviceId, hexs, f.writeServiceId, f.wirteCharactId, 10).then(res => {
+ // setTimeout(() => {
+ // resolve(res)
+ // }, 2200);
- }).catch(ex => {
- reject(ex)
- });
+ // }).catch(ex => {
+ // reject(ex)
+ // });
- });
- }
- //画图
- let drawText = () => {
- return new Promise((resolve, reject) => {
- this.$refs.textToHex.drawAndGetPixels().then(allPixels => {
- if (!allPixels) {
- reject("文本初始化失败");
- return;
- }
- resolve(allPixels);
- }).catch(compEx => {
- reject(compEx);
- });
+ // });
+ // }
+ // //画图
+ // let drawText = () => {
+ // return new Promise((resolve, reject) => {
+ // this.$refs.textToHex.drawAndGetPixels().then(allPixels => {
+ // if (!allPixels) {
+ // reject("文本初始化失败");
+ // return;
+ // }
+ // resolve(allPixels);
+ // }).catch(compEx => {
+ // reject(compEx);
+ // });
- });
- }
- //发送3个分包的数据
- let task = (allPixels) => {
- try {
- let combinedData = [];
- for (let i = 0; i < this.formData.textLines.length; i++) {
- let linePixels = (allPixels[i] || []).flat(Infinity).map(item =>
- typeof item === 'string' ? toByteValue(item) : item
- );
- for (var j = linePixels.length; j < 256; j++) {
- linePixels.push(0x00);
+ // });
+ // }
+ // //发送3个分包的数据
+ // let task = (allPixels) => {
+ // try {
+ // let combinedData = [];
+ // for (let i = 0; i < this.formData.textLines.length; i++) {
+ // let linePixels = (allPixels[i] || []).flat(Infinity).map(item =>
+ // typeof item === 'string' ? toByteValue(item) : item
+ // );
+ // for (var j = linePixels.length; j < 256; j++) {
+ // linePixels.push(0x00);
- }
- combinedData.push([0xFA, 0x06, i + 1, 1].concat(linePixels.slice(0, 128)));
- combinedData.push([0xFA, 0x06, i + 1, 2].concat(linePixels.slice(128, 256)));
+ // }
+ // combinedData.push([0xFA, 0x06, i + 1, 1].concat(linePixels.slice(0, 128)));
+ // combinedData.push([0xFA, 0x06, i + 1, 2].concat(linePixels.slice(128, 256)));
- }
- combinedData.push([0x74, 0x72, 0x61, 0x6E, 0x73, 0x6D, 0x69, 0x74, 0x20, 0x63, 0x6F, 0x6D,
- 0x70, 0x6C, 0x65, 0x74, 0x65
- ]);
+ // }
+ // combinedData.push([0x74, 0x72, 0x61, 0x6E, 0x73, 0x6D, 0x69, 0x74, 0x20, 0x63, 0x6F, 0x6D,
+ // 0x70, 0x6C, 0x65, 0x74, 0x65
+ // ]);
- let curr = 1;
- let len = combinedData.length;
- console.log(combinedData);
- showLoading(these, {
- text: '正在发送' + (curr - 1) + '/' + len
- });
+ // let curr = 1;
+ // let len = combinedData.length;
+ // console.log(combinedData);
+ // showLoading(these, {
+ // text: '正在发送' + (curr - 1) + '/' + len
+ // });
- //分包发送
- let sendPacket = () => {
+ // //分包发送
+ // let sendPacket = () => {
- if (combinedData.length === curr - 1) {
+ // if (combinedData.length === curr - 1) {
- these.setBleFormData();
+ // these.setBleFormData();
- MsgSuccess("发送成功", '', these);
- let json = {
- deviceId: these.device.id,
- name: these.formData.textLines[1],
- position: these.formData.textLines[0],
- unitName: these.formData.textLines[2],
- code: ""
- };
- usrApi.sendUsr(json);
+ // MsgSuccess("发送成功", '', these);
+ // let json = {
+ // deviceId: these.device.id,
+ // name: these.formData.textLines[1],
+ // position: these.formData.textLines[0],
+ // unitName: these.formData.textLines[2],
+ // code: ""
+ // };
+ // usrApi.sendUsr(json);
- hideLoading(these);
- return;
- }
+ // hideLoading(these);
+ // return;
+ // }
- let array = combinedData[curr - 1];
+ // let array = combinedData[curr - 1];
- ble.sendHexs(f.deviceId, array, f.writeServiceId, f.wirteCharactId, 10).then(
- res => {
+ // ble.sendHexs(f.deviceId, array, f.writeServiceId, f.wirteCharactId, 10).then(
+ // res => {
- updateLoading(these, {
- text: '正在发送' + curr + '/' + len
- });
- curr++;
- setTimeout(sendPacket, 300);
- }).catch(err => {
- if (err.code == '10007') {
+ // updateLoading(these, {
+ // text: '正在发送' + curr + '/' + len
+ // });
+ // curr++;
+ // setTimeout(sendPacket, 300);
+ // }).catch(err => {
+ // if (err.code == '10007') {
- setTimeout(sendPacket, 300);
- } else {
- console.log("err:", err);
- hideLoading(these);
- MsgError("发送失败: " + (err.msg || err.message), '', these)
+ // setTimeout(sendPacket, 300);
+ // } else {
+ // console.log("err:", err);
+ // hideLoading(these);
+ // MsgError("发送失败: " + (err.msg || err.message), '', these)
- }
+ // }
- });
- }
+ // });
+ // }
- setTimeout(sendPacket, 0);
- // 5. 发送成功处理
+ // setTimeout(sendPacket, 0);
+ // // 5. 发送成功处理
- } catch (ex) {
- hideLoading(these);
+ // } catch (ex) {
+ // hideLoading(these);
- MsgError("发送失败: " + (ex.msg || ex.message), '', these);
- }
+ // MsgError("发送失败: " + (ex.msg || ex.message), '', these);
+ // }
- }
+ // }
- setTimeout(() => {
- Promise.allSettled([holdHand(), drawText()]).then(results => {
- console.log("results=", results)
- if (results[0].status == 'rejected') {
- updateLoading(these, {
- text: results[0].reason
- });
- setTimeout(() => {
- hideLoading(these)
- }, 500);
- return;
- }
- if (results[1].status == 'rejected') {
- updateLoading(these, {
- text: results[1].reason
- })
- setTimeout(() => {
- hideLoading(these)
- }, 500);
- return;
- }
+ // setTimeout(() => {
+ // Promise.allSettled([holdHand(), drawText()]).then(results => {
+ // console.log("results=", results)
+ // if (results[0].status == 'rejected') {
+ // updateLoading(these, {
+ // text: results[0].reason
+ // });
+ // setTimeout(() => {
+ // hideLoading(these)
+ // }, 500);
+ // return;
+ // }
+ // if (results[1].status == 'rejected') {
+ // updateLoading(these, {
+ // text: results[1].reason
+ // })
+ // setTimeout(() => {
+ // hideLoading(these)
+ // }, 500);
+ // return;
+ // }
- task(results[1].value);
- })
+ // task(results[1].value);
+ // })
- }, 0);
+ // }, 0);
},
toggleSetting(val, type) {
let f = this.getDevice();
@@ -1397,37 +1434,39 @@ inteval:80
},
- CloseWarn(){
+ CloseWarn() {
let f = this.getDevice();
-
+
// #ifdef APP
if (!f) {
this.showBleUnConnect();
return;
}
// #endif
-
+
// #ifdef WEB
- f={deviceId:12345}
+ f = {
+ deviceId: 12345
+ }
// #endif
-
+
let bleSend = () => {
let json = {
- ins_ShakeBit: 0
+ ins_ShakeBit: 0
};
json = JSON.stringify(json);
if (ble) {
ble.sendString(f.deviceId, json).then(res => {
this.formData.sta_ShakeBit = 0;
- this.formData.sta_InfraRed=0;
+ this.formData.sta_InfraRed = 0;
}).catch(ex => {
this.mqSend(json);
this.formData.sta_ShakeBit = 0;
- this.formData.sta_InfraRed=0;
+ this.formData.sta_InfraRed = 0;
});
}
}
-
+
MsgError('确定解除报警?', '', these, bleSend);
},
sosSetting(val) {
diff --git a/pages/4877/BJQ4877.vue b/pages/4877/BJQ4877.vue
index 03f9bdb..6e2fb1d 100644
--- a/pages/4877/BJQ4877.vue
+++ b/pages/4877/BJQ4877.vue
@@ -10,7 +10,7 @@
+ @click.stop="handleRightClick(item,index)" v-for="item,index in Status.navbar.icons">
{{item.math>9?'9+':item.math}}
@@ -95,13 +95,13 @@
+ :class="{active:formData.sta_SOSType===item.val,marginLeft:index%2==1}"
+ v-on:click.stop="sosSetting(item,index)">
+ :src="item.img" mode="aspectFit">
+ :src="item.activeImg" mode="aspectFit">
{{item['text']}}
@@ -109,7 +109,16 @@
+
+
+
+
+
+ 识别设备
+ 蓝光闪烁中
+
+
@@ -128,8 +137,8 @@
+ :class="{active:item.id==formData.sta_GroupType,marginNoLeft:index%3===0}"
+ @click.stop="groupSetting(item,index)">
@@ -153,7 +162,7 @@
+ :class="formData.sta_ArrowMode=='right_off'?'active':''">
@@ -164,13 +173,13 @@
朝左
+ :class="formData.sta_ArrowMode=='right_on'?'active':''">
+ mode="aspectFit">
朝右
@@ -185,7 +194,7 @@
+ :class="formData.sta_ArrowType=='red_front'?'redactive':''">
红色
@@ -194,7 +203,7 @@
+ :class="formData.sta_ArrowType=='green_back'?'greenactive':''">
绿色
@@ -217,7 +226,7 @@
+ :class="formData.sta_ArrowType=='red_all'?'active':''">
@@ -228,13 +237,13 @@
红色双向
+ :class="formData.sta_ArrowType=='green_all'?'active':''">
+ mode="aspectFit">
绿色双向
@@ -247,16 +256,16 @@
+ :borderColor="Status.Pop.borderColor" :textColor="Status.Pop.textColor"
+ :buttonBgColor="Status.Pop.buttonBgColor" :buttonTextColor="Status.Pop.buttonTextColor"
+ :iconUrl="Status.Pop.iconUrl" :message="Status.Pop.message" :buttonText="Status.Pop.buttonText"
+ @buttonClick="HidePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle"
+ v-model="Status.Pop.modelValue" @closePop="closePop" :buttonCancelText="Status.Pop.buttonCancelText"
+ :showCancel="Status.Pop.showCancel" @cancelPop="closePop" :showSlot="Status.Pop.showSlot">
@@ -285,15 +294,15 @@
} from '@/api/4877/BJQ4877.js';
import MqTool from '@/utils/MqHelper.js'
- import {
- MsgSuccess,
- MsgError,
- MsgClose,
- MsgWarning,
- showPop,
- MsgInfo,
+ import {
+ MsgSuccess,
+ MsgError,
+ MsgClose,
+ MsgWarning,
+ showPop,
+ MsgInfo,
MsgClear
- } from '@/utils/MsgPops.js'
+ } from '@/utils/MsgPops.js'
const pagePath = "/pages/4877/BJQ4877";
var ble = null;
@@ -306,6 +315,7 @@
data() {
return {
Status: {
+ sendDisc: '',
apiType: '',
navbar: {
icons: [{
@@ -398,6 +408,7 @@
groups: [
]
+
},
dic: {
SOS: [{
@@ -563,15 +574,15 @@
},
onShow() {
this.Status.pageHide = false;
-
- let f=this.getDevice();
- if(f){
- these.formData.bleStatu = 'connecting';
- ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => {
- console.log("连接成功")
- these.formData.bleStatu = true;
- });
- }
+
+ let f = this.getDevice();
+ if (f) {
+ these.formData.bleStatu = 'connecting';
+ ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => {
+ console.log("连接成功")
+ these.formData.bleStatu = true;
+ });
+ }
},
computed: {
getbleStatu() {
@@ -707,7 +718,7 @@
buttonBgColor: "#E03434",
okCallback: null,
buttonText: "确定"
- },these)
+ }, these)
return;
}
@@ -738,7 +749,7 @@
cancelCallback: () => {
this.Status.ShowEditChannel = false;
}
- },these);
+ }, these);
},
onChannelChanging() {
let regex = /^(0|([1-9]\d?)|1[01]\d|12[0-5])$/;
@@ -788,7 +799,7 @@
buttonBgColor: "#E03434",
okCallback: null,
buttonText: "确定"
- },these)
+ }, these)
return;
}
@@ -851,7 +862,7 @@
buttonBgColor: "#E03434",
okCallback: null,
buttonText: "确定"
- },these)
+ }, these)
return;
}
uni.navigateTo({
@@ -934,7 +945,7 @@
buttonBgColor: "#E03434",
okCallback: null,
buttonText: "确定"
- },these)
+ }, these)
return;
}
@@ -982,7 +993,45 @@
this.formData.warnTime = 0;
}
},
+ discern() {
+ //识别设备,连续发送20次识别指令
+ let f = this.getDevice();
+ if (!f) {
+ this.showBleUnConnect();
+ return;
+ }
+ var json = {
+ ins_disc: 1
+ }
+ let index = 0;
+ let total = 20;
+
+ console.error("发送识别指令:", json);
+ this.Status.sendDisc = true;
+
+ let sendNextPacket = () => {
+ if(index>total){
+ this.Status.sendDisc = false;
+
+ return;
+ }
+ ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30).then(res => {
+ index++;
+ setTimeout(sendNextPacket,300);
+ }).catch(err => {
+ if (err.code == '10007') {
+ setTimeout(sendNextPacket, 800);
+ return;
+ }
+ if(index==0){
+ MsgError(err.msg,'',these);
+ }
+ this.Status.sendDisc = false;
+ });
+ }
+ sendNextPacket();
+ },
sosSetting(item, index) {
if (!this.permissions.includes('42') && this.Status.apiType !== 'listA') {
@@ -993,7 +1042,7 @@
buttonBgColor: "#E03434",
okCallback: null,
buttonText: "确定"
- },these)
+ }, these)
return;
}
let f = this.getDevice();
@@ -1035,7 +1084,7 @@
buttonText: (this.formData.sta_SOSType === 'sos' ? '关闭' : '开启'),
showCancel: true,
buttonCancelText: '取消'
- },these);
+ }, these);
}
if (item.val === 'sos') {
confirmTask();
@@ -1085,9 +1134,9 @@
// return;
// }
if (res.deviceId == these.formData.deviceId) {
- if(res.device){
+ if (res.device) {
these.formData.bleStatu = 'connecting';
- }else{
+ } else {
this.formData.bleStatu = false;
}
setTimeout(() => {
@@ -1181,7 +1230,7 @@
if (receive.deviceId !== this.formData.deviceId) {
return;
}
-
+
console.log("收到设备的数据", receive)
let data = recei.ReceiveData(receive, device, pagePath, recArr);
console.log("处理后的数据:", data);
@@ -1225,8 +1274,8 @@
},
getDevice: function() {
- // console.log("LinkedList=", ble.data.LinkedList);
- // console.log("formData=", these.formData);
+ console.log("LinkedList=", ble.data.LinkedList);
+ console.log("formData=", these.device);
let f = ble.data.LinkedList.find((v) => {
return v.macAddress == these.device.deviceMac;
});
@@ -1255,7 +1304,7 @@
borderColor: "#e034344d",
buttonBgColor: "#E03434",
buttonText: '去连接',
- buttonTextColor: '#FFFFFFde',
+ buttonTextColor: '#FFFFFFde',
okCallback: function() {
uni.navigateTo({
@@ -1277,10 +1326,10 @@
}
})
}
- },these);
+ }, these);
},
-
+
@@ -1302,62 +1351,61 @@
this.Status.Pop.okCallback();
}
},
- showPop: function (option) {
- hideLoading(this);
- let def = {
- showPop: true, //是否显示弹窗
- popType: 'custom',
- bgColor: '#383934bd',
- borderColor: '#BBE600',
- textColor: '#ffffffde',
- buttonBgColor: '#BBE600',
- buttonTextColor: '#232323DE',
- iconUrl: '',
- message: '',
- buttonText: '确定',
- clickEvt: '',
- visiblePrompt: false,
- promptTitle: '',
- modelValue: '',
- visibleClose: false,
- okCallback: null,
- showSlot: false,
- buttonCancelText: '',
- showCancel: false,
- }
-
- let keys = Object.keys(def);
-
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
- if (key in option) {
- continue;
- }
- this.Status.Pop[key] = def[key];
- }
- if (option) {
- keys = Object.keys(option);
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
-
- this.Status.Pop[key] = option[key];
- }
- }
-
- if (!option.borderColor) {
- option.borderColor = '#BBE600';
- option.buttonBgColor = '#BBE600';
- }
- these.Status.Pop.showPop = true;
- },
-
-
- showMsg(msg, isSucc) {
- if (isSucc) {
- MsgSuccess(msg,'',this);
+ showPop: function(option) {
+ hideLoading(this);
+ let def = {
+ showPop: true, //是否显示弹窗
+ popType: 'custom',
+ bgColor: '#383934bd',
+ borderColor: '#BBE600',
+ textColor: '#ffffffde',
+ buttonBgColor: '#BBE600',
+ buttonTextColor: '#232323DE',
+ iconUrl: '',
+ message: '',
+ buttonText: '确定',
+ clickEvt: '',
+ visiblePrompt: false,
+ promptTitle: '',
+ modelValue: '',
+ visibleClose: false,
+ okCallback: null,
+ showSlot: false,
+ buttonCancelText: '',
+ showCancel: false,
}
- else{
- MsgError(msg,'',this);
+
+ let keys = Object.keys(def);
+
+ for (let i = 0; i < keys.length; i++) {
+ let key = keys[i];
+ if (key in option) {
+ continue;
+ }
+ this.Status.Pop[key] = def[key];
+ }
+ if (option) {
+ keys = Object.keys(option);
+ for (let i = 0; i < keys.length; i++) {
+ let key = keys[i];
+
+ this.Status.Pop[key] = option[key];
+ }
+ }
+
+ if (!option.borderColor) {
+ option.borderColor = '#BBE600';
+ option.buttonBgColor = '#BBE600';
+ }
+ these.Status.Pop.showPop = true;
+ },
+
+
+ showMsg(msg, isSucc) {
+ if (isSucc) {
+ MsgSuccess(msg, '', this);
+ } else {
+ MsgError(msg, '', this);
}
}
}
@@ -1569,7 +1617,7 @@
border-color: #aed600 !important;
}
- .lampMode .mode.active .bigTxt {
+ .lampMode .mode.active .bigTxt,.lampMode .mode.active .smallTxt {
color: #aed600 !important;
}
@@ -1724,7 +1772,7 @@
text-align: left;
}
-
+
.slider-container {
diff --git a/pages/6075J/BJQ6075J.vue b/pages/6075J/BJQ6075J.vue
index 4f10f91..c0d56e3 100644
--- a/pages/6075J/BJQ6075J.vue
+++ b/pages/6075J/BJQ6075J.vue
@@ -276,15 +276,19 @@
import BleTool from '@/utils/BleHelper.js'
import BleReceive from '@/utils/BleReceive';
import MqttClient from '@/utils/mqtt.js';
- import lnglatConvert from '@/utils/wgs84_to_gcj02.js'
+ import lnglatConvert from '@/utils/wgs84_to_gcj02.js';
+ import SendBatchData from '@/utils/SendBatchData.js';
+ var batchTool=null;
var eventChannel = null;
var these = null;
var ble = null;
+
var recei = null;
var mq = null;
var pagePath = "pages/6075J/BJQ6075J";
var brightnessTimer = null;
var reGeoTime=null;
+
export default {
components: {
TextToHexV1
@@ -644,340 +648,15 @@
let f = this.getDevice();
- let timeDelayCloseLoading = () => {
- setTimeout(() => {
- hideLoading(these);
- }, 1500);
+ if(!f){
+ this.showBleUnConnect();
+ return;
}
-
-
- let sendVideoPackets = (ReSendNo) => {
- console.log("开始发送分片数据");
- return new Promise((resolve, reject) => {
- if (f) {
- // 总数据包数
- var totalPackets = 1536; //36;
-
- let currentPacket = 1;
- console.log("发送数据准备中,总共" + totalPackets);
- if (ReSendNo) {
- totalPackets = ReSendNo;
- currentPacket = ReSendNo;
- }
-
- // 发送单个数据包
- const sendNextVideoPacket = () => {
- // console.log("准备发送一段数据");
- if (currentPacket > totalPackets) {
- if (!ReSendNo) {
- setTimeout(() => {
-
- ble.sendString(f.deviceId, "transmit complete", f
- .writeServiceId, f.wirteCharactId, 20)
- .then(
- () => {
- console.log("全部发送完毕")
- }).catch((ex) => {
- console.log("出现异常", ex);
- });
- }, 500);
-
- }
-
- hideLoading(these);
- showPop({
- showPop: true,
- message: "上传成功",
- iconUrl: "/static/images/common/success.png"
- }, these);
- these.videoHexArray = null;
- resolve();
-
- return;
- }
-
- // 计算当前包的数据
- let packetSize = 500;
-
-
- // 创建数据包
- const startIndex = (currentPacket - 1) * packetSize;
- const endIndex = Math.min(startIndex + packetSize, these.videoHexArray
- .length);
- if (startIndex > endIndex) {
- resolve();
- return;
- }
- ////console.log("111111");
- const packetData = these.videoHexArray.slice(startIndex, endIndex);
-
- // 构建数据包
- ////console.log("packetData.length"+packetData.length);
- const bufferSize = 504; // 头部5字节 + 数据部分
- const buffer = new ArrayBuffer(bufferSize);
- const dataView = new DataView(buffer);
-
- let sortNo = currentPacket.toString(16).padStart(4, '0');
-
- // 填充头部
- dataView.setUint8(0, 0x55); // 帧头
- dataView.setUint8(1, 0x04); // 帧类型:开机画面
- dataView.setUint8(2, '0x' + sortNo.substring(0, 2)); // 包序号
- dataView.setUint8(3, '0x' + sortNo.substring(2, 4)); // 包序号
-
- // dataView.setUint8(4, 0x01);
- // dataView.setUint8(5, 0xF4);
-
- for (let i = 0; i < packetData.length; i++) {
- dataView.setUint8(4 + i, '0x' + packetData[i]);
- }
-
- let inteval = 60;
-
- ble.sendData(f.deviceId, buffer, f.writeServiceId, f
- .wirteCharactId, 10).then(() => {
-
- updateLoading(these, {
- text: "正在发送:" + currentPacket + "/" +
- totalPackets
- });
-
- currentPacket++;
-
- // console.log("发送一段成功,发送下一段");
- setTimeout(sendNextVideoPacket, inteval);
- }).catch(err => {
- console.log("发送失败了", err);
- if (err.code == '10007') { //遇到这个错误自动重新发送
- console.log(err.errMsg + ",发送失败了,正在补偿:" +
- currentPacket);
- setTimeout(sendNextVideoPacket, 800);
- } else {
-
- hideLoading(these);
-
- showPop({
- showPop: true,
- message: err.msg + ",发送失败了",
- borderColor: "#e034344d",
- buttonBgColor: "#E03434",
- buttonText: "确定",
- iconUrl: "/static/images/common/uploadErr.png"
- }, these);
- reject(err);
- these.videoHexArray = null;
- return;
- }
-
- });
- };
-
-
- sendNextVideoPacket();
-
-
- } else {
- console.log("Fail.......")
- }
- });
- }
-
- var sendVideo = (videoPath) => {
- let uploadVideo = () => {
-
- these.videoHexArray = [];
- console.log("开始处理,正在上传");
-
- showLoading(these, {
- text: "上传中"
- });
- let p1 = new Promise((resolve, reject) => {
-
- ble.sendString(f.deviceId, "video transmit start", f
- .writeServiceId, f.wirteCharactId).then(res => {
-
- setTimeout(() => {
- console.log("握手成功了");
- resolve(true);
- }, 2200)
- }).catch(ex => {
- reject(ex);
- });
- });
-
-
- let p2 = new Promise((succ, err) => {
-
- const token = uni.getStorageSync('token');
- const clientid = uni.getStorageSync('clientID');
- if (!token) {
- err({
- code: 401,
- msg: "请先登陆后再试"
- });
- hideLoading(these);
- return;
- }
- console.log("baseURL=", baseURL);
- console.log("token", token);
- console.log("clientID", clientid);
- uni.uploadFile({
- // url: 'http://114.55.111.217/video/upload',
- url: baseURL + "/app/video/upload",
- filePath: videoPath,
- name: 'file',
- header: {
- "Method": "POST",
- "Content-Type": "multipart/form-data",
- "Authorization": 'Bearer ' + token,
- "clientid": clientid
- },
- timeout: 600000,
- fail: (ex) => {
- console.log("上传视频失败" + JSON.stringify(ex));
-
- err(ex);
- },
- success: (res) => {
-
- console.log("上传完成,向蓝牙设备发送");
- succ(res);
- }
-
- });
- });
-
- Promise.all([p1, p2]).then((arr) => {
-
- if (arr[0].status == 'rejected') {
- MsgError("设备准备未就绪,请重试",'',these);
- return;
- }
- if(arr[1].status== 'rejected'){
- MsgError("读取视频失败",'',these);
- return;
- }
- let res = arr[1];
- // console.log("11111111111111111111111",res);
- res = JSON.parse(res.data);
- // console.log("22222222222222222222");
- if (res.data) {
- these.videoHexArray = res.data;
- updateLoading(these, {
- text: "正在发送:0/1536"
- });
-
-
-
- shotVideoClick(res.data);
-
-
- } else {
- console.log("服务器未返回正确的数据");
-
-
- showPop({
- message: "与服务器连接出现异常,请检查网络设置",
- iconUrl: "/static/images/common/uploadErr.png",
- borderColor: "#e034344d",
- buttonBgColor: "#E03434",
- }, these);
- }
-
- }).catch((ex) => {
- console.log("出现异常,", ex)
- hideLoading(these);
- showPop({
- message: "出现异常," + ex.msg,
- iconUrl: "/static/images/common/uploadErr.png",
- borderColor: "#e034344d",
- buttonBgColor: "#E03434",
- }, these);
- })
- }
-
-
-
-
- let shotVideoClick = () => {
- console.log("正在开始发送");
- sendVideoPackets().then(() => {
- console.log("发送完成");
-
- }).catch((ex1) => {
- //console.log("出现了异常", ex1)
- }).finally(() => {
- hideLoading(these);
- });
- }
-
-
- uploadVideo();
-
- }
-
- uni.chooseVideo({
- sourceType: ['album'],
- compressed: false, // 关闭视频压缩,确保上传原始文件
- success: function(res) {
- console.log("res=", res);
- let path = res.tempFilePath;
- // iOS可能返回浮点数,需要转换为整数进行比较
- let width = Math.round(res.width);
- let height = Math.round(res.height);
- let duration = res.duration;
-
- // 获取平台信息
- const systemInfo = uni.getSystemInfoSync();
- const platform = systemInfo.platform;
- const isIOS = platform === 'ios';
-
- console.log("平台:", platform, "uni.chooseVideo返回 - 宽度:", width, "高度:", height,
- "时长:", duration);
-
- // iOS特殊处理:如果返回的是80*40,很可能是160*80的一半(iOS的bug)
- if (isIOS && width === 80 && height === 40) {
- console.log("检测到iOS特殊情况:返回80*40,实际应该是160*80,进行修正");
- width = 160;
- height = 80;
- }
-
- // 检查分辨率是否符合要求
- let checkResolution = (w, h) => {
- // 使用容差比较,允许1像素的误差
- return Math.abs(w - 160) <= 1 && Math.abs(h - 80) <= 1;
- };
-
- let err = [];
- if (duration < 2) {
- err.push("视频时长至少2秒");
- }
-
- if (!checkResolution(width, height)) {
- err.push("视频宽高必须是160*80,当前分辨率:" + width + "*" + height);
- }
-
- if (err.length > 0) {
- err = err.join(";");
- showPop({
- message: err,
- iconUrl: "/static/images/common/uploadErr.png",
- borderColor: "#e034344d",
- buttonBgColor: "#E03434",
- }, these);
- return;
- }
-
- showLoading(these, {
- text: '正在上传'
- });
- setTimeout(() => {
- sendVideo(path);
- }, 0);
-
- }
- });
-
+
+ if(!batchTool){
+ batchTool=new SendBatchData(these,f,ble);
+ }
+ batchTool.SendVideo(504);
},
sendImg() {
if (!this.permissions.includes('3') && this.Status.apiType !== 'listA') {
@@ -987,179 +666,20 @@
}
let f = this.getDevice();
-
-
- var sendImagePackets = function(ReSendNo) {
-
- return new Promise((resolve, reject) => {
-
- // 总数据包数
- let totalPackets = 52;
- let currentPacket = 1;
-
- if (ReSendNo) {
- totalPackets = ReSendNo;
- currentPacket = ReSendNo;
- }
-
- if (f) {
- // 发送单个数据包
- const sendNextPacket = () => {
- if (currentPacket > totalPackets) {
- hideLoading(these);
- these.closeAction();
- showPop({
- showPop: true,
- message: "上传成功",
- iconUrl: "/static/images/common/success.png",
- });
-
- setTimeout(() => {
- ble.sendString(f.deviceId, "transmit complete", f
- .writeServiceId, f
- .wirteCharactId);
- }, 1000);
-
- these.rgb565Data = null;
- resolve();
- return;
- }
-
- // 计算当前包的数据
- let packetSize = 250;
- // if (currentPacket <= 51) {
- // packetSize = 250; // 前51个包每个500字节
- // } else {
- // packetSize = 50; // 最后一个包100字节
- // }
-
- // 创建数据包
- const startIndex = (currentPacket - 1) * packetSize;
- const endIndex = Math.min(startIndex + packetSize, these.rgb565Data
- .length);
- if (startIndex > endIndex) {
- return;
- }
- const packetData = these.rgb565Data.slice(startIndex,
- endIndex);
- // 构建数据包
- const bufferSize = 505; // 5 + packetData.length * 2; // 头部5字节 + 数据部分
- const buffer = new ArrayBuffer(bufferSize);
- const dataView = new DataView(buffer);
-
- // 填充头部
- dataView.setUint8(0, 0x55); // 帧头
- dataView.setUint8(1, 0x02); // 帧类型:开机画面
- dataView.setUint8(2, '0x' + currentPacket.toString(16).padStart(2,
- '0')); // 包序号
-
-
- dataView.setUint16(3, packetData.length*2,false); // 包t长度
-
- // 填充数据(每个RGB565值占2字节)
- for (let i = 0; i < packetData.length; i++) {
- dataView.setUint16(5 + i * 2, packetData[i], false); // 大端字节序
- }
-
-
-
-
-
- //发送数据包
- ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId,
- 10)
- .then(() => {
-
-
- updateLoading(these, {
- text: "正在发送:" + currentPacket + "/" +
- totalPackets
- })
- currentPacket++;
-
- setTimeout(sendNextPacket, these.inteval);
- }).catch(err => {
- console.log("发送数据包失败了" + JSON.stringify(err));
- if (err.code == '10007') {
- setTimeout(sendNextPacket, these.inteval);
- return;
- }
- these.closeAction();
- showPop({
- message: err.msg,
- iconUrl: "/static/images/common/uploadErr.png",
- borderColor: "#e034344d",
- buttonBgColor: "#E03434",
- });
- hideLoading(these);
- these.rgb565Data = null;
- reject(err);
- });
- }
-
- if (ReSendNo) {
- sendNextPacket(ReSendNo);
- return;
- }
- // 开始牵手
- ble.sendString(f.deviceId, "picture transmit start", f.writeServiceId,
- f.wirteCharactId).then(() => {
- setTimeout(sendNextPacket, 120);
-
- }).catch((err) => {
- console.log("握手没有成功");
- showPop({
- message: err.msg,
- iconUrl: "/static/images/common/uploadErr.png",
- borderColor: "#e034344d",
- buttonBgColor: "#E03434",
- });
- hideLoading(these);
- reject(err);
- });
- }
- });
+ if(!f){
+ this.showBleUnConnect();
+ return;
}
-
- uni.chooseImage({
- count: 1,
- sizeType: ['original', 'compressed'],
- sourceType: ['album','camera'],
- success: function(res) {
- uni.navigateTo({
- url: "/pages/common/ImgCrop/ImgCrop",
- events: {
- ImgCutOver: function(data) {
-
- showLoading(these, {
- text: "正在发送0/52"
- });
-
-
- these.rgb565Data = Common.convertToRGB565(data.piexls);
-
- setTimeout(function() {
- sendImagePackets().catch(() => {
-
- });
- }, 0)
-
- }
- },
- success(ev) {
- ev.eventChannel.emit('checkImg', {
- data: res.tempFiles[0].path
- })
- },
- fail(ex) {
- console.log("跳转页面失败" + JSON.stringify(ex));
- }
- });
-
- }
- });
-
+ if(!batchTool){
+ batchTool=new SendBatchData(these,f,ble);
+ }
+
+
+ batchTool.SendImg();
+
+ return ;
+
},
sliderChanging(e) {
this.formData.sta_brightness = e.detail.value;
@@ -1508,152 +1028,10 @@
}
- let toByteValue = (value) => {
- if (typeof value === 'number') {
- return value;
- }
- if (typeof value === 'string') {
- if (value.startsWith('0x') || value.startsWith('0X')) {
- return parseInt(value, 16);
- }
- return parseInt(`0x${value}`, 16);
- }
- return 0;
- }
-
-
- this.formData.textLines = [this.formData.company, this.formData.usrname, this.formData.job];
- console.log("data=", this.formData.textLines);
- showLoading(these, {
- text: "发送中"
- });
- //握手
- let holdHand = (hexs, time) => {
- return new Promise((resolve, reject) => {
-
-
- this.sendData(hexs, 'ble', "string").then(res => {
- setTimeout(() => {
- resolve(res)
- }, time);
-
- }).catch(ex => {
- reject(ex)
- });
-
- });
- }
- //画图
- let drawText = () => {
- return new Promise((resolve, reject) => {
- this.$refs.textToHex.drawAndGetPixels().then(allPixels => {
- if (!allPixels) {
- reject("文本初始化失败");
- return;
- }
- console.log("画图成功");
- resolve(allPixels);
- }).catch(compEx => {
- reject(compEx);
- });
-
- });
- }
- //发送3个分包的数据
- let task = (allPixels) => {
- try {
- let combinedData = [];
- for (let i = 0; i < 4; i++) {
- let linePixels = (allPixels[i] || []).flat(Infinity).map(item =>
- typeof item === 'string' ? toByteValue(item) : item
- );
-
- for (var j = linePixels.length; j < 256; j++) {
- linePixels.push(0x00);
- }
- linePixels = [0xFA, 0x06, 0x03, i + 1].concat(linePixels);
-
- linePixels.push(0xFF)
-
- combinedData.push(linePixels);
- }
-
-
- let curr = 1;
- let len = combinedData.length;
-
-
-
- //分包发送
- let sendPacket = () => {
-
- if (combinedData.length === curr - 1) {
- setTimeout(()=>{
- holdHand('transmit complete', 200).then(res => {
- MsgSuccess("人员信息发送成功", "确定", these);
- hideLoading(these);
- this.setBleFormData();
- });
- },300);
-
- hideLoading();
- return;
- }
-
- let array = combinedData[curr - 1];
-
-
- console.log("array=", array);
- ble.sendHexs(f.deviceId, array, null, null, 15).then(
- res => {
- curr++;
- console.log("发送成功", curr);
- updateLoading(these, {
- text: '发送中,' + (curr - 1) + '/' + combinedData.length
- })
- setTimeout(sendPacket, 250);
- }).catch(err => {
- console.err("发送失败", err);
- if (err.code == '10007') {
- setTimeout(sendPacket, 250);
- } else {
- console.log("err:", err);
- MsgError('发送失败' + (err.msg || err.code), '确定', these);
- hideLoading();
- }
-
- });
- }
-
- setTimeout(sendPacket, 0);
- // 5. 发送成功处理
-
-
- } catch (ex) {
- MsgError('发送失败' + (ex.msg || ex.code), '确定', these);
- }
-
-
- }
-
- setTimeout(() => {
- Promise.allSettled([holdHand('word transmit start', 2200), drawText()]).then(results => {
- if (results[0].status == 'rejected') {
- MsgError("与蓝牙设备握手失败,请重试",'',these);
- setTimeout(() => {
- hideLoading(these)
- }, 500);
- return;
- }
- if (results[1].status == 'rejected') {
- MsgError("读取文字点阵失败,请重试",'',these);
- return;
- }
-
- task(results[1].value);
- })
-
- }, 0);
+ if(!batchTool){
+ batchTool=new SendBatchData(these,f,ble);
+ }
+ batchTool.SendUsr(3);
},
sendMsg() {
debugger;
@@ -2038,6 +1416,8 @@
}
if (res.deviceId == these.formData.deviceId) {
this.formData.bleStatu = true;
+
+ batchTool=new SendBatchData(this,res,ble);
setTimeout(() => {
hideLoading(these, 1000);
});
@@ -2053,6 +1433,7 @@
// return;
// }
if (res.deviceId == these.formData.deviceId) {
+ batchTool=null;
if (res.device) {
these.formData.bleStatu = 'connecting';
} else {
diff --git a/pages/650/HBY650.vue b/pages/650/HBY650.vue
index e71eadd..9119aad 100644
--- a/pages/650/HBY650.vue
+++ b/pages/650/HBY650.vue
@@ -113,7 +113,7 @@
-
@@ -166,13 +166,6 @@
-
-
-
-
-
-
-
@@ -202,7 +195,8 @@ import request, { baseURL } from '@/utils/request.js';
MsgInfo
} from '@/utils/MsgPops.js'
const pagePath = "/pages/650/HBY650";
-
+ import SendBatchData from '@/utils/SendBatchData.js';
+ var batchTool=null;
var ble = null;
var these = null;
var recei = null;
@@ -226,16 +220,12 @@ import request, { baseURL } from '@/utils/request.js';
show: false,
showHeader: true,
menuItems: [{
- text: '强光',
- icon: '/static/images/lightImg/qiang.png'
+ text: '照片',
+ value:'img'
},
{
- text: '弱光',
- icon: '/static/images/lightImg/ruo.png'
- },
- {
- text: '爆闪',
- icon: '/static/images/lightImg/shan.png'
+ text: '动画',
+ value:'flash'
}
],
activeIndex: -1,
@@ -864,8 +854,31 @@ import request, { baseURL } from '@/utils/request.js';
},
checkImgUpload: function(type, index) {
- console.log("123213213213");
let f = these.getDevice();
+ if(!f){
+ this.showBleUnConnect();
+ return;
+ }
+
+ if(!batchTool){
+ batchTool=new SendBatchData(these,f,ble);
+ }
+
+
+
+ if (type) {
+ if (type == 'img') {
+ // sendImagePackets(index);
+ batchTool.SendImg();
+ } else{
+ // sendVideoPackets(index);
+ batchTool.SendVideo(506);
+ }
+
+ }
+ return;
+ console.log("123213213213");
+
// 分包发送图片数据
var sendImagePackets = function(ReSendNo) {
@@ -1337,12 +1350,11 @@ import request, { baseURL } from '@/utils/request.js';
},these)
return;
}
- //上传开机画面
- this.Status.BottomMenu.menuItems = [];
+ //上传开机画面
this.Status.BottomMenu.title = "上传开机画面";
this.Status.BottomMenu.type = "checkImg";
this.Status.BottomMenu.show = true;
- this.formData.cMode = "img";
+ this.Status.BottomMenu.activeIndex=0;
},
showMenu(flag) {
@@ -1352,8 +1364,8 @@ import request, { baseURL } from '@/utils/request.js';
this.Status.BottomMenu.show = false;
},
btnClick(item, index) {
-
-
+ this.Status.BottomMenu.show = false;
+ this.checkImgUpload(item.value,index);
},
@@ -1365,14 +1377,7 @@ import request, { baseURL } from '@/utils/request.js';
},
handleItemClick(item, index) {
- switch (this.Status.BottomMenu.type) {
- case "main":
-
- break;
- case "fu":
-
- break;
- }
+
this.Status.BottomMenu.activeIndex = index;
},
diff --git a/pages/670/HBY670.vue b/pages/670/HBY670.vue
index f2fbd45..238bc8f 100644
--- a/pages/670/HBY670.vue
+++ b/pages/670/HBY670.vue
@@ -258,13 +258,7 @@
-
-
-
-
-
-
-
+
@@ -304,6 +298,8 @@
MsgInfo
} from '@/utils/MsgPops.js'
const pagePath = "/pages/670/HBY670";
+ import SendBatchData from '@/utils/SendBatchData.js';
+ var batchTool=null;
var ble = null;
var these = null;
var recei = null;
@@ -358,16 +354,12 @@
show: false,
showHeader: true,
menuItems: [{
- text: '强光',
- icon: '/static/images/lightImg/qiang.png'
+ text: '照片',
+ value:'img'
},
{
- text: '弱光',
- icon: '/static/images/lightImg/ruo.png'
- },
- {
- text: '爆闪',
- icon: '/static/images/lightImg/shan.png'
+ text: '动画',
+ value:'flash'
}
],
activeIndex: -1,
@@ -1694,7 +1686,26 @@
checkImgUpload: function(type, index) {
console.log("123213213213");
let f = these.getDevice();
-
+ if(!f){
+ this.showBleUnConnect();
+ return;
+ }
+
+ if(!batchTool){
+ batchTool=new SendBatchData(these,f,ble);
+ }
+
+ if (type) {
+ if (type == 'img') {
+ // sendImagePackets(index);
+ batchTool.SendImg();
+ } else {
+ // sendVideoPackets(index);
+ batchTool.SendVideo(506);
+ }
+
+ }
+ return;
var sendImgByRequest = () => {
return new Promise((resolve, reject) => {
api.sendPic({
@@ -2208,11 +2219,12 @@
return;
}
//上传开机画面
- this.Status.BottomMenu.menuItems = [];
+
this.Status.BottomMenu.title = "上传开机画面";
this.Status.BottomMenu.type = "checkImg";
this.Status.BottomMenu.show = true;
- this.Status.BottomMenu.showBtn = false;
+ this.Status.BottomMenu.showBtn = true;
+ this.Status.BottomMenu.activeIndex=0;
},
showMenu(flag) {
@@ -2222,10 +2234,8 @@
this.Status.BottomMenu.show = false;
},
btnClick(item, index) {
-
-
-
-
+ this.Status.BottomMenu.show = false;
+ this.checkImgUpload(item.value,index);
},
setMode(mode) {
diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue
index 284c27e..7b0e368 100644
--- a/pages/common/addBLE/addEquip.vue
+++ b/pages/common/addBLE/addEquip.vue
@@ -272,7 +272,7 @@
}
console.log("处理蓝牙不可用");
hideLoading(these);
- console.error("1111111111")
+
these.PairEquip = [];
these.EquipMents = [];
uni.showToast({
@@ -285,13 +285,15 @@
//蓝牙恢复可用的回调
ble.addStateRecoveryCallback(res => {
+ console.log("蓝牙恢复可用");
+ these.Status.BottomMenu.show = false;
+ these.PairEquip = [];
+ these.EquipMents = [];
+
if (these.Status.isPageHidden) {
return;
}
- these.Status.BottomMenu.show = false;
- console.error("1111111111")
- these.PairEquip = [];
- these.EquipMents = [];
+
uni.showToast({
icon: 'fail',
title: '蓝牙恢复可用'
diff --git a/utils/BleHelper.js b/utils/BleHelper.js
index ac81cf9..1a402fa 100644
--- a/utils/BleHelper.js
+++ b/utils/BleHelper.js
@@ -871,7 +871,7 @@ class BleHelper {
if (!state.available) { //蓝牙状态不可用了,将所有设备标记为断开连接
// 系统关蓝牙后原生 BLE 适配器已销毁;若仍认为 isOpenBlue=true,OpenBlue 会跳过重开,
// 再开蓝牙后无法 createBLEConnection / 一直报 10001 适配器不可用
- this.data.isOpenBlue = false;
+ // this.data.isOpenBlue = false;
console.log("蓝牙模块不可用了,将所有设备标记为断开连接");
this.data.connectingDevices = {}; //清空连接锁
this.data.LinkedList.filter((v) => {
diff --git a/utils/SendBatchData.js b/utils/SendBatchData.js
index d940ef5..5ac3943 100644
--- a/utils/SendBatchData.js
+++ b/utils/SendBatchData.js
@@ -1,68 +1,70 @@
import request, {
- baseURL
- } from '@/utils/request.js';
- import {
- showLoading,
- hideLoading,
- updateLoading
- } from '@/utils/loading.js';
+ baseURL
+} from '@/utils/request.js';
+import {
+ showLoading,
+ hideLoading,
+ updateLoading
+} from '@/utils/loading.js';
- import {
- MsgSuccess,
- MsgError,
- MsgClose,
- MsgWarning,
- showPop
- } from '@/utils/MsgPops.js';
- import Common from '@/utils/Common.js';
-
+import {
+ MsgSuccess,
+ MsgError,
+ MsgClose,
+ MsgWarning,
+ showPop
+} from '@/utils/MsgPops.js';
+import Common from '@/utils/Common.js';
-class SendBatchData{
-
- constructor(_these,_f,_ble){
- this.videoHexArray=[];
- this.rgb565Data=[];
- this.these=_these;
- this.f=_f;
- this.ble=_ble;
+
+class SendBatchData {
+
+ constructor(_these, _f, _ble) {
+ this.videoHexArray = [];
+ this.rgb565Data = [];
+ this.these = _these;
+ this.f = _f;
+ this.ble = _ble;
}
-
-
- SendVideo(){
-
- let these=this.these;
- let f=this.f;
- let ble=this.ble;
-
+
+ //发送开机视频
+ SendVideo(bufferSize) {
+
+ let these = this.these;
+ let f = this.f;
+ let ble = this.ble;
+ if (!bufferSize) {
+ bufferSize = 504;
+ }
let timeDelayCloseLoading = () => {
setTimeout(() => {
hideLoading(these);
}, 1500);
}
-
-
-
+
+
+
let sendVideoPackets = (ReSendNo) => {
console.log("开始发送分片数据");
return new Promise((resolve, reject) => {
if (f) {
// 总数据包数
var totalPackets = 1536; //36;
-
+
let currentPacket = 1;
console.log("发送数据准备中,总共" + totalPackets);
if (ReSendNo) {
totalPackets = ReSendNo;
currentPacket = ReSendNo;
}
-
+
// 发送单个数据包
const sendNextVideoPacket = () => {
// console.log("准备发送一段数据");
if (currentPacket > totalPackets) {
if (!ReSendNo) {
setTimeout(() => {
-
+
ble.sendString(f.deviceId, "transmit complete", f
.writeServiceId, f.wirteCharactId, 20)
.then(
@@ -72,9 +74,9 @@ class SendBatchData{
console.log("出现异常", ex);
});
}, 500);
-
+
}
-
+
hideLoading(these);
showPop({
showPop: true,
@@ -83,14 +85,14 @@ class SendBatchData{
}, these);
these.videoHexArray = null;
resolve();
-
+
return;
}
-
+
// 计算当前包的数据
let packetSize = 500;
-
-
+
+
// 创建数据包
const startIndex = (currentPacket - 1) * packetSize;
const endIndex = Math.min(startIndex + packetSize, these.videoHexArray
@@ -101,40 +103,43 @@ class SendBatchData{
}
////console.log("111111");
const packetData = these.videoHexArray.slice(startIndex, endIndex);
-
+
// 构建数据包
////console.log("packetData.length"+packetData.length);
- const bufferSize = 504; // 头部5字节 + 数据部分
+
const buffer = new ArrayBuffer(bufferSize);
const dataView = new DataView(buffer);
-
- let sortNo = currentPacket.toString(16).padStart(4, '0');
-
+
+
+
// 填充头部
dataView.setUint8(0, 0x55); // 帧头
dataView.setUint8(1, 0x04); // 帧类型:开机画面
- dataView.setUint8(2, '0x' + sortNo.substring(0, 2)); // 包序号
- dataView.setUint8(3, '0x' + sortNo.substring(2, 4)); // 包序号
-
- // dataView.setUint8(4, 0x01);
- // dataView.setUint8(5, 0xF4);
-
- for (let i = 0; i < packetData.length; i++) {
- dataView.setUint8(4 + i, '0x' + packetData[i]);
+ dataView.setUint16(2, currentPacket, false); // 包序号
+ let beginIndex = 4;
+ if (bufferSize == 506) {
+ beginIndex = 6;
+ dataView.setUint16(4, packetSize, false); //数据长度
}
-
- let inteval = 60;
-
+
+
+
+ for (let i = 0; i < packetData.length; i++) {
+ dataView.setUint8(beginIndex + i, packetData[i]);
+ }
+
+ let inteval = 80;
+
ble.sendData(f.deviceId, buffer, f.writeServiceId, f
.wirteCharactId, 10).then(() => {
-
+
updateLoading(these, {
text: "正在发送:" + currentPacket + "/" +
totalPackets
});
-
+
currentPacket++;
-
+
// console.log("发送一段成功,发送下一段");
setTimeout(sendNextVideoPacket, inteval);
}).catch(err => {
@@ -144,9 +149,9 @@ class SendBatchData{
currentPacket);
setTimeout(sendNextVideoPacket, 800);
} else {
-
+
hideLoading(these);
-
+
showPop({
showPop: true,
message: err.msg + ",发送失败了",
@@ -159,34 +164,34 @@ class SendBatchData{
these.videoHexArray = null;
return;
}
-
+
});
};
-
-
+
+
sendNextVideoPacket();
-
-
+
+
} else {
console.log("Fail.......")
}
});
}
-
+
var sendVideo = (videoPath) => {
let uploadVideo = () => {
-
+
these.videoHexArray = [];
console.log("开始处理,正在上传");
-
+
showLoading(these, {
text: "上传中"
});
let p1 = new Promise((resolve, reject) => {
-
+
ble.sendString(f.deviceId, "video transmit start", f
.writeServiceId, f.wirteCharactId).then(res => {
-
+
setTimeout(() => {
console.log("握手成功了");
resolve(true);
@@ -195,10 +200,10 @@ class SendBatchData{
reject(ex);
});
});
-
-
+
+
let p2 = new Promise((succ, err) => {
-
+
const token = uni.getStorageSync('token');
const clientid = uni.getStorageSync('clientID');
if (!token) {
@@ -226,26 +231,26 @@ class SendBatchData{
timeout: 600000,
fail: (ex) => {
console.log("上传视频失败" + JSON.stringify(ex));
-
+
err(ex);
},
success: (res) => {
-
+
console.log("上传完成,向蓝牙设备发送");
succ(res);
}
-
+
});
});
-
+
Promise.all([p1, p2]).then((arr) => {
-
- if (arr[0].status == 'rejected') {
- MsgError("设备准备未就绪,请重试",'',these);
+
+ if (arr[0].status == 'rejected') {
+ MsgError("设备准备未就绪,请重试", '', these);
return;
}
- if(arr[1].status== 'rejected'){
- MsgError("读取视频失败",'',these);
+ if (arr[1].status == 'rejected') {
+ MsgError("读取视频失败", '', these);
return;
}
let res = arr[1];
@@ -257,16 +262,16 @@ class SendBatchData{
updateLoading(these, {
text: "正在发送:0/1536"
});
-
-
-
+
+
+
shotVideoClick(res.data);
-
-
+
+
} else {
console.log("服务器未返回正确的数据");
-
-
+
+
showPop({
message: "与服务器连接出现异常,请检查网络设置",
iconUrl: "/static/images/common/uploadErr.png",
@@ -274,7 +279,7 @@ class SendBatchData{
buttonBgColor: "#E03434",
}, these);
}
-
+
}).catch((ex) => {
console.log("出现异常,", ex)
hideLoading(these);
@@ -286,27 +291,27 @@ class SendBatchData{
}, these);
})
}
-
-
-
-
+
+
+
+
let shotVideoClick = () => {
console.log("正在开始发送");
sendVideoPackets().then(() => {
console.log("发送完成");
-
+
}).catch((ex1) => {
//console.log("出现了异常", ex1)
}).finally(() => {
hideLoading(these);
});
}
-
-
+
+
uploadVideo();
-
+
}
-
+
uni.chooseVideo({
sourceType: ['album'],
compressed: false, // 关闭视频压缩,确保上传原始文件
@@ -317,37 +322,37 @@ class SendBatchData{
let width = Math.round(res.width);
let height = Math.round(res.height);
let duration = res.duration;
-
+
// 获取平台信息
const systemInfo = uni.getSystemInfoSync();
const platform = systemInfo.platform;
const isIOS = platform === 'ios';
-
+
console.log("平台:", platform, "uni.chooseVideo返回 - 宽度:", width, "高度:", height,
"时长:", duration);
-
+
// iOS特殊处理:如果返回的是80*40,很可能是160*80的一半(iOS的bug)
if (isIOS && width === 80 && height === 40) {
console.log("检测到iOS特殊情况:返回80*40,实际应该是160*80,进行修正");
width = 160;
height = 80;
}
-
+
// 检查分辨率是否符合要求
let checkResolution = (w, h) => {
// 使用容差比较,允许1像素的误差
return Math.abs(w - 160) <= 1 && Math.abs(h - 80) <= 1;
};
-
+
let err = [];
if (duration < 2) {
err.push("视频时长至少2秒");
}
-
+
if (!checkResolution(width, height)) {
err.push("视频宽高必须是160*80,当前分辨率:" + width + "*" + height);
}
-
+
if (err.length > 0) {
err = err.join(";");
showPop({
@@ -358,59 +363,65 @@ class SendBatchData{
}, these);
return;
}
-
+
showLoading(these, {
text: '正在上传'
});
setTimeout(() => {
sendVideo(path);
}, 0);
-
+
}
});
}
-
- SendImg(){
- let these=this.these;
- let f=this.f;
- let ble=this.ble;
-
+
+
+ //发送图片,
+ SendImg() {
+ let these = this.these;
+ let f = this.f;
+ let ble = this.ble;
+
var sendImagePackets = function(ReSendNo) {
-
+
return new Promise((resolve, reject) => {
-
+
// 总数据包数
let totalPackets = 52;
let currentPacket = 1;
-
+
if (ReSendNo) {
totalPackets = ReSendNo;
currentPacket = ReSendNo;
}
-
+
if (f) {
// 发送单个数据包
const sendNextPacket = () => {
if (currentPacket > totalPackets) {
hideLoading(these);
- these.closeAction();
+ if (these.closeAction) {
+ these.closeAction();
+ }
+
+
showPop({
showPop: true,
message: "上传成功",
iconUrl: "/static/images/common/success.png",
- });
-
+ }, these);
+
setTimeout(() => {
ble.sendString(f.deviceId, "transmit complete", f
.writeServiceId, f
.wirteCharactId);
}, 1000);
-
+
these.rgb565Data = null;
resolve();
return;
}
-
+
// 计算当前包的数据
let packetSize = 250;
// if (currentPacket <= 51) {
@@ -418,7 +429,7 @@ class SendBatchData{
// } else {
// packetSize = 50; // 最后一个包100字节
// }
-
+
// 创建数据包
const startIndex = (currentPacket - 1) * packetSize;
const endIndex = Math.min(startIndex + packetSize, these.rgb565Data
@@ -432,57 +443,54 @@ class SendBatchData{
const bufferSize = 505; // 5 + packetData.length * 2; // 头部5字节 + 数据部分
const buffer = new ArrayBuffer(bufferSize);
const dataView = new DataView(buffer);
-
+
// 填充头部
dataView.setUint8(0, 0x55); // 帧头
dataView.setUint8(1, 0x02); // 帧类型:开机画面
- dataView.setUint8(2, '0x' + currentPacket.toString(16).padStart(2,
- '0')); // 包序号
-
-
- dataView.setUint16(3, packetData.length*2,false); // 包t长度
-
+ dataView.setUint8(2, currentPacket); // 包序号
+
+
+ dataView.setUint16(3, packetData.length * 2, false); // 包t长度
+
// 填充数据(每个RGB565值占2字节)
for (let i = 0; i < packetData.length; i++) {
dataView.setUint16(5 + i * 2, packetData[i], false); // 大端字节序
}
-
-
-
-
-
+
//发送数据包
ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId,
10)
.then(() => {
-
-
+
+
updateLoading(these, {
text: "正在发送:" + currentPacket + "/" +
totalPackets
})
currentPacket++;
-
- setTimeout(sendNextPacket, these.inteval);
+
+ setTimeout(sendNextPacket, these.inteval ? these.inteval : 80);
}).catch(err => {
console.log("发送数据包失败了" + JSON.stringify(err));
if (err.code == '10007') {
- setTimeout(sendNextPacket, these.inteval);
+ setTimeout(sendNextPacket, 800);
return;
}
- these.closeAction();
+ if (these.closeAction) {
+ these.closeAction();
+ }
showPop({
message: err.msg,
iconUrl: "/static/images/common/uploadErr.png",
borderColor: "#e034344d",
buttonBgColor: "#E03434",
- });
+ }, these);
hideLoading(these);
these.rgb565Data = null;
reject(err);
});
}
-
+
if (ReSendNo) {
sendNextPacket(ReSendNo);
return;
@@ -491,7 +499,7 @@ class SendBatchData{
ble.sendString(f.deviceId, "picture transmit start", f.writeServiceId,
f.wirteCharactId).then(() => {
setTimeout(sendNextPacket, 120);
-
+
}).catch((err) => {
console.log("握手没有成功");
showPop({
@@ -499,38 +507,38 @@ class SendBatchData{
iconUrl: "/static/images/common/uploadErr.png",
borderColor: "#e034344d",
buttonBgColor: "#E03434",
- });
+ }, these);
hideLoading(these);
reject(err);
});
}
});
}
-
-
+
+
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
- sourceType: ['album','camera'],
+ sourceType: ['album', 'camera'],
success: function(res) {
uni.navigateTo({
url: "/pages/common/ImgCrop/ImgCrop",
events: {
ImgCutOver: function(data) {
-
+
showLoading(these, {
text: "正在发送0/52"
});
-
-
+
+
these.rgb565Data = Common.convertToRGB565(data.piexls);
-
+
setTimeout(function() {
sendImagePackets().catch(() => {
-
+
});
}, 0)
-
+
}
},
success(ev) {
@@ -542,18 +550,40 @@ class SendBatchData{
console.log("跳转页面失败" + JSON.stringify(ex));
}
});
-
+
}
});
}
-
- SendUsr(){
-
- let these=this.these;
- let f=this.f;
- let ble=this.ble;
-
+
+ //发送人员信息
+ SendUsr(totalRows) {
+
+ let these = this.these;
+ let f = this.f;
+ let ble = this.ble;
+ if (!totalRows) {
+ totalRows = 3;
+ }
+ let toByteValue = (value) => {
+ if (typeof value === 'number') {
+ return value;
+ }
+ if (typeof value === 'string') {
+ if (value.startsWith('0x') || value.startsWith('0X')) {
+ return parseInt(value, 16);
+ }
+ return parseInt(`0x${value}`, 16);
+ }
+ return 0;
+ }
+
+
these.formData.textLines = [these.formData.company, these.formData.usrname, these.formData.job];
+ if (totalRows == 4) {
+ these.formData.textLines.push(these.formData.usrid);
+ }
+
+
console.log("data=", these.formData.textLines);
showLoading(these, {
text: "发送中"
@@ -561,17 +591,18 @@ class SendBatchData{
//握手
let holdHand = (hexs, time) => {
return new Promise((resolve, reject) => {
-
-
+
+
these.sendData(hexs, 'ble', "string").then(res => {
setTimeout(() => {
resolve(res)
}, time);
-
+
}).catch(ex => {
+ console.error("握手失败")
reject(ex)
});
-
+
});
}
//画图
@@ -587,53 +618,53 @@ class SendBatchData{
}).catch(compEx => {
reject(compEx);
});
-
+
});
}
//发送3个分包的数据
let task = (allPixels) => {
try {
let combinedData = [];
- for (let i = 0; i < 4; i++) {
+ for (let i = 0; i < totalRows; i++) {
let linePixels = (allPixels[i] || []).flat(Infinity).map(item =>
typeof item === 'string' ? toByteValue(item) : item
);
-
+
for (var j = linePixels.length; j < 256; j++) {
linePixels.push(0x00);
}
linePixels = [0xFA, 0x06, 0x03, i + 1].concat(linePixels);
-
+
linePixels.push(0xFF)
-
+
combinedData.push(linePixels);
}
-
-
+
+
let curr = 1;
let len = combinedData.length;
-
-
-
+
+
+
//分包发送
let sendPacket = () => {
-
+
if (combinedData.length === curr - 1) {
- setTimeout(()=>{
+ setTimeout(() => {
holdHand('transmit complete', 200).then(res => {
- MsgSuccess("人员信息发送成功", "确定", these);
- hideLoading(these);
- these.setBleFormData();
- });
- },300);
-
- hideLoading();
+ MsgSuccess("人员信息发送成功", "确定", these);
+ hideLoading(these);
+ these.setBleFormData();
+ });
+ }, 300);
+
+ hideLoading(these);
return;
}
-
+
let array = combinedData[curr - 1];
-
-
+
+
console.log("array=", array);
ble.sendHexs(f.deviceId, array, null, null, 15).then(
res => {
@@ -644,47 +675,69 @@ class SendBatchData{
})
setTimeout(sendPacket, 250);
}).catch(err => {
- console.err("发送失败", err);
+
+ console.error("err:", err);
+
if (err.code == '10007') {
setTimeout(sendPacket, 250);
} else {
- console.log("err:", err);
- MsgError('发送失败' + (err.msg || err.code), '确定', these);
- hideLoading();
+ console.error("err:", err);
+ MsgError('发送失败:' + (err.msg || err.code), 'OK', these);
+ hideLoading(these);
}
-
+
});
}
-
+
setTimeout(sendPacket, 0);
// 5. 发送成功处理
-
-
+
+
} catch (ex) {
+ console.error("ex=", ex)
MsgError('发送失败' + (ex.msg || ex.code), '确定', these);
}
-
-
+
+
}
-
+
setTimeout(() => {
Promise.allSettled([holdHand('word transmit start', 2200), drawText()]).then(results => {
if (results[0].status == 'rejected') {
- MsgError("与蓝牙设备握手失败,请重试",'',these);
+ MsgError("与蓝牙设备握手失败,请重试", '', these);
setTimeout(() => {
hideLoading(these)
}, 500);
return;
}
if (results[1].status == 'rejected') {
- MsgError("读取文字点阵失败,请重试",'',these);
+ MsgError("读取文字点阵失败,请重试", '', these);
return;
}
-
+
task(results[1].value);
})
-
+
}, 0);
}
-
-}
\ No newline at end of file
+ //发送识别指令
+ SendDisc() {
+ let these = this.these;
+ let f = this.f;
+ let ble = this.ble;
+
+ var json = {
+ ins_disc: 1
+ }
+
+ ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30).then(res => {
+
+ }).catch(ex => {
+ console.error("蓝牙发送失败", ex);
+ }).finally(() => {
+
+ });
+ }
+}
+
+export default SendBatchData;
\ No newline at end of file