封装发送照片、视频、文字,各设备调用公共模块
This commit is contained in:
50
App.vue
50
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();
|
||||
|
||||
|
||||
@ -365,7 +365,8 @@
|
||||
"path" : "pages/018A/HBY018A",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "HBY018A"
|
||||
"navigationBarTitleText" : "HBY018A",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@ -37,6 +37,10 @@
|
||||
<text class="lbl">设备名称</text>
|
||||
<text class="value">{{device.deviceName}}</text>
|
||||
</view>
|
||||
<view class="item">
|
||||
<text class="lbl">IMEI</text>
|
||||
<text class="value">{{device.deviceImei}}</text>
|
||||
</view>
|
||||
<view class="item">
|
||||
<text class="lbl">Mac地址</text>
|
||||
<text class="value">{{device.deviceMac}}</text>
|
||||
@ -57,12 +61,12 @@
|
||||
<text class="lbl">定位信息</text>
|
||||
<view class="multiValue" @click.stop="gotoMap()">
|
||||
<view class="valueItem valueFont">
|
||||
{{formData.sta_longitude}}
|
||||
{{formData?formData.sta_longitude:""}}
|
||||
|
||||
</view>
|
||||
<view class="valueItem valueFont">
|
||||
|
||||
{{formData.sta_latitude}}
|
||||
{{formData?formData.sta_latitude:""}}
|
||||
|
||||
</view>
|
||||
<view class="valueItem">
|
||||
@ -70,7 +74,7 @@
|
||||
<view style="width:80%;float: right;text-align: right;" class="valueFont">
|
||||
<uni-icons type="location" size="17" color="rgba(255, 255, 255, 0.8)"
|
||||
style="vertical-align: bottom;" />
|
||||
{{formData.address}}
|
||||
{{formData?formData.address:''}}
|
||||
</view>
|
||||
<view class="clear"></view>
|
||||
</view>
|
||||
@ -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
|
||||
});
|
||||
|
||||
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) {
|
||||
|
||||
@ -118,8 +118,7 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="mode " :class="{active:formData.sta_RadarType!=0}"
|
||||
v-on:click.stop="showAction('BottomMenu')">
|
||||
<view class="mode " :class="{active:formData.sta_RadarType!=0}" v-on:click.stop="showAction('BottomMenu')">
|
||||
<view class="leftImg">
|
||||
<image v-show="formData.sta_RadarType!=0" class="img" src="/static/images/102/redarActive.png"
|
||||
mode="aspectFit"></image>
|
||||
@ -128,7 +127,7 @@
|
||||
</view>
|
||||
<view class="rightTxt">
|
||||
<text class="bigTxt">雷达感应</text>
|
||||
<text class="smallTxt">{{formData.sta_RadarType==0?'关闭':formData.sta_RadarType+'M'}}</text>
|
||||
<text class="smallTxt">{{RadarType}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -147,11 +146,9 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="mode "
|
||||
v-on:click.stop="showAction('PictureMenu')">
|
||||
<view class="mode " v-on:click.stop="showAction('PictureMenu')">
|
||||
<view class="leftImg">
|
||||
<image class="img" src="/static/images/6155/DeviceDetail/open.png"
|
||||
mode="aspectFit"></image>
|
||||
<image class="img" src="/static/images/6155/DeviceDetail/open.png" mode="aspectFit"></image>
|
||||
|
||||
</view>
|
||||
<view class="rightTxt">
|
||||
@ -173,31 +170,34 @@
|
||||
|
||||
<view class="item">
|
||||
<text class="lbl">单位:</text>
|
||||
<input class="value" v-model.trim="formData.textLines[0]" placeholder="请输入单位" maxlength="8"
|
||||
placeholder-class="usrplace" />
|
||||
</view>
|
||||
<view class="item">
|
||||
<text class="lbl">部门:</text>
|
||||
<input class="value" v-model.trim="formData.textLines[1]" placeholder="请输入姓名" maxlength="8"
|
||||
<input class="value" v-model.trim="formData.company" placeholder="请输入单位" maxlength="8"
|
||||
placeholder-class="usrplace" />
|
||||
</view>
|
||||
<view class="item">
|
||||
<text class="lbl">姓名:</text>
|
||||
<input class="value" v-model.trim="formData.textLines[2]" placeholder="请输入职位" maxlength="8"
|
||||
<input class="value" v-model.trim="formData.usrname" placeholder="请输入职位" maxlength="8"
|
||||
placeholder-class="usrplace" />
|
||||
</view>
|
||||
<view class="item">
|
||||
<text class="lbl">部门:</text>
|
||||
<input class="value" v-model.trim="formData.job" placeholder="请输入姓名" maxlength="8"
|
||||
placeholder-class="usrplace" />
|
||||
</view>
|
||||
|
||||
<view class="item">
|
||||
<text class="lbl">ID:</text>
|
||||
<input class="value" v-model.trim="formData.textLines[3]" placeholder="ID" maxlength="16"
|
||||
<input class="value" v-model.trim="formData.usrid" placeholder="ID" maxlength="16"
|
||||
placeholder-class="usrplace" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
<BottomSlideMenuPlus :config="Status.BottomMenu" @btnClick="btnClick" @itemClick="itemClick" @close="closeActionSheet"></BottomSlideMenuPlus>
|
||||
<BottomSlideMenuPlus :config="Status.BottomMenu" @btnClick="btnClick" @itemClick="itemClick"
|
||||
@close="closeActionSheet"></BottomSlideMenuPlus>
|
||||
|
||||
<BottomSlideMenuPlus :config="Status.PictureMenu" @btnClick="btnPictureClick" @itemClick="itemPictureClick" @close="closeActionSheet"></BottomSlideMenuPlus>
|
||||
<BottomSlideMenuPlus :config="Status.PictureMenu" @btnClick="btnPictureClick" @itemClick="itemPictureClick"
|
||||
@close="closeActionSheet"></BottomSlideMenuPlus>
|
||||
|
||||
<ProParams :id="device.id"></ProParams>
|
||||
<MsgBox ref="msgPop" />
|
||||
@ -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,7 +421,7 @@ inteval:80
|
||||
return v == this.formData.sta_ShakeBit;
|
||||
});
|
||||
if (f) {
|
||||
let str= dic[f]
|
||||
let str = dic[f]
|
||||
|
||||
return str;
|
||||
}
|
||||
@ -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,23 +578,24 @@ inteval:80
|
||||
|
||||
},
|
||||
methods: {
|
||||
showAction(type){
|
||||
if(type=='BottomMenu'){
|
||||
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;
|
||||
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;
|
||||
});
|
||||
} 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();
|
||||
@ -588,15 +603,26 @@ inteval:80
|
||||
}
|
||||
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() {
|
||||
|
||||
@ -814,11 +840,11 @@ inteval:80
|
||||
Promise.all([p1, p2]).then((arr) => {
|
||||
|
||||
if (arr[0].status == 'rejected') {
|
||||
MsgError("设备准备未就绪,请重试",'',these);
|
||||
MsgError("设备准备未就绪,请重试", '', these);
|
||||
return;
|
||||
}
|
||||
if(arr[1].status== 'rejected'){
|
||||
MsgError("读取视频失败",'',these);
|
||||
if (arr[1].status == 'rejected') {
|
||||
MsgError("读取视频失败", '', these);
|
||||
return;
|
||||
}
|
||||
let res = arr[1];
|
||||
@ -1018,7 +1044,7 @@ inteval:80
|
||||
'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++) {
|
||||
@ -1089,7 +1115,7 @@ 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",
|
||||
@ -1125,7 +1151,7 @@ inteval:80
|
||||
});
|
||||
|
||||
},
|
||||
btnClick(){
|
||||
btnClick() {
|
||||
let f = this.getDevice();
|
||||
if (!f) {
|
||||
this.showBleUnConnect();
|
||||
@ -1134,9 +1160,11 @@ inteval:80
|
||||
|
||||
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) {
|
||||
@ -1155,16 +1183,16 @@ inteval:80
|
||||
|
||||
},
|
||||
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 (!batchTool) {
|
||||
batchTool = new SendBatchData(these, f, ble);
|
||||
}
|
||||
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);
|
||||
batchTool.SendUsr(4);
|
||||
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)
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
//画图
|
||||
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);
|
||||
|
||||
}
|
||||
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
|
||||
]);
|
||||
// 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);
|
||||
|
||||
// }).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);
|
||||
// });
|
||||
|
||||
// });
|
||||
// }
|
||||
// //发送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)));
|
||||
|
||||
|
||||
|
||||
let curr = 1;
|
||||
let len = combinedData.length;
|
||||
console.log(combinedData);
|
||||
showLoading(these, {
|
||||
text: '正在发送' + (curr - 1) + '/' + len
|
||||
});
|
||||
|
||||
//分包发送
|
||||
let sendPacket = () => {
|
||||
|
||||
if (combinedData.length === curr - 1) {
|
||||
|
||||
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);
|
||||
|
||||
hideLoading(these);
|
||||
return;
|
||||
}
|
||||
|
||||
let array = combinedData[curr - 1];
|
||||
// }
|
||||
// combinedData.push([0x74, 0x72, 0x61, 0x6E, 0x73, 0x6D, 0x69, 0x74, 0x20, 0x63, 0x6F, 0x6D,
|
||||
// 0x70, 0x6C, 0x65, 0x74, 0x65
|
||||
// ]);
|
||||
|
||||
|
||||
ble.sendHexs(f.deviceId, array, f.writeServiceId, f.wirteCharactId, 10).then(
|
||||
res => {
|
||||
|
||||
// let curr = 1;
|
||||
// let len = combinedData.length;
|
||||
// console.log(combinedData);
|
||||
// showLoading(these, {
|
||||
// text: '正在发送' + (curr - 1) + '/' + len
|
||||
// });
|
||||
|
||||
// //分包发送
|
||||
// let sendPacket = () => {
|
||||
|
||||
// if (combinedData.length === curr - 1) {
|
||||
|
||||
// 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);
|
||||
|
||||
// hideLoading(these);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// let array = combinedData[curr - 1];
|
||||
|
||||
|
||||
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, 0);
|
||||
// 5. 发送成功处理
|
||||
// ble.sendHexs(f.deviceId, array, f.writeServiceId, f.wirteCharactId, 10).then(
|
||||
// res => {
|
||||
|
||||
|
||||
} catch (ex) {
|
||||
hideLoading(these);
|
||||
// updateLoading(these, {
|
||||
// text: '正在发送' + curr + '/' + len
|
||||
// });
|
||||
// curr++;
|
||||
// setTimeout(sendPacket, 300);
|
||||
// }).catch(err => {
|
||||
// if (err.code == '10007') {
|
||||
|
||||
MsgError("发送失败: " + (ex.msg || ex.message), '', these);
|
||||
}
|
||||
// setTimeout(sendPacket, 300);
|
||||
// } else {
|
||||
// console.log("err:", err);
|
||||
// hideLoading(these);
|
||||
// MsgError("发送失败: " + (err.msg || err.message), '', these)
|
||||
|
||||
// }
|
||||
|
||||
// });
|
||||
// }
|
||||
|
||||
// setTimeout(sendPacket, 0);
|
||||
// // 5. 发送成功处理
|
||||
|
||||
|
||||
}
|
||||
// } catch (ex) {
|
||||
// hideLoading(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;
|
||||
}
|
||||
// MsgError("发送失败: " + (ex.msg || ex.message), '', these);
|
||||
// }
|
||||
|
||||
task(results[1].value);
|
||||
})
|
||||
|
||||
}, 0);
|
||||
// }
|
||||
|
||||
// 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);
|
||||
// })
|
||||
|
||||
// }, 0);
|
||||
},
|
||||
toggleSetting(val, type) {
|
||||
let f = this.getDevice();
|
||||
@ -1397,7 +1434,7 @@ inteval:80
|
||||
|
||||
|
||||
},
|
||||
CloseWarn(){
|
||||
CloseWarn() {
|
||||
let f = this.getDevice();
|
||||
|
||||
// #ifdef APP
|
||||
@ -1408,7 +1445,9 @@ inteval:80
|
||||
// #endif
|
||||
|
||||
// #ifdef WEB
|
||||
f={deviceId:12345}
|
||||
f = {
|
||||
deviceId: 12345
|
||||
}
|
||||
// #endif
|
||||
|
||||
let bleSend = () => {
|
||||
@ -1419,11 +1458,11 @@ inteval:80
|
||||
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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,7 +109,16 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="mode fleft " :class="{active:Status.sendDisc}" v-on:click.stop="discern()">
|
||||
<view class="leftImg">
|
||||
<image class="img" src="/static/images/common/svg.png" mode="aspectFit"></image>
|
||||
|
||||
</view>
|
||||
<view class="rightTxt">
|
||||
<text class="bigTxt">识别设备</text>
|
||||
<text class="smallTxt" v-show="Status.sendDisc">蓝光闪烁中</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="clear"></view>
|
||||
</view>
|
||||
|
||||
@ -306,6 +315,7 @@
|
||||
data() {
|
||||
return {
|
||||
Status: {
|
||||
sendDisc: '',
|
||||
apiType: '',
|
||||
navbar: {
|
||||
icons: [{
|
||||
@ -398,6 +408,7 @@
|
||||
groups: [
|
||||
|
||||
]
|
||||
|
||||
},
|
||||
dic: {
|
||||
SOS: [{
|
||||
@ -564,8 +575,8 @@
|
||||
onShow() {
|
||||
this.Status.pageHide = false;
|
||||
|
||||
let f=this.getDevice();
|
||||
if(f){
|
||||
let f = this.getDevice();
|
||||
if (f) {
|
||||
these.formData.bleStatu = 'connecting';
|
||||
ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => {
|
||||
console.log("连接成功")
|
||||
@ -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(() => {
|
||||
@ -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;
|
||||
});
|
||||
@ -1277,7 +1326,7 @@
|
||||
}
|
||||
})
|
||||
}
|
||||
},these);
|
||||
}, these);
|
||||
},
|
||||
|
||||
|
||||
@ -1302,7 +1351,7 @@
|
||||
this.Status.Pop.okCallback();
|
||||
}
|
||||
},
|
||||
showPop: function (option) {
|
||||
showPop: function(option) {
|
||||
hideLoading(this);
|
||||
let def = {
|
||||
showPop: true, //是否显示弹窗
|
||||
@ -1354,10 +1403,9 @@
|
||||
|
||||
showMsg(msg, isSucc) {
|
||||
if (isSucc) {
|
||||
MsgSuccess(msg,'',this);
|
||||
}
|
||||
else{
|
||||
MsgError(msg,'',this);
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
|
||||
if(!f){
|
||||
this.showBleUnConnect();
|
||||
return;
|
||||
}
|
||||
|
||||
// 计算当前包的数据
|
||||
let packetSize = 500;
|
||||
|
||||
|
||||
// 创建数据包
|
||||
const startIndex = (currentPacket - 1) * packetSize;
|
||||
const endIndex = Math.min(startIndex + packetSize, these.videoHexArray
|
||||
.length);
|
||||
if (startIndex > endIndex) {
|
||||
resolve();
|
||||
return;
|
||||
if(!batchTool){
|
||||
batchTool=new SendBatchData(these,f,ble);
|
||||
}
|
||||
////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);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
batchTool.SendVideo(504);
|
||||
},
|
||||
sendImg() {
|
||||
if (!this.permissions.includes('3') && this.Status.apiType !== 'listA') {
|
||||
@ -987,178 +666,19 @@
|
||||
}
|
||||
|
||||
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();
|
||||
if(!f){
|
||||
this.showBleUnConnect();
|
||||
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); // 大端字节序
|
||||
if(!batchTool){
|
||||
batchTool=new SendBatchData(these,f,ble);
|
||||
}
|
||||
|
||||
|
||||
batchTool.SendImg();
|
||||
|
||||
|
||||
|
||||
//发送数据包
|
||||
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);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
return ;
|
||||
|
||||
},
|
||||
sliderChanging(e) {
|
||||
@ -1508,152 +1028,10 @@
|
||||
}
|
||||
|
||||
|
||||
let toByteValue = (value) => {
|
||||
if (typeof value === 'number') {
|
||||
return value;
|
||||
if(!batchTool){
|
||||
batchTool=new SendBatchData(these,f,ble);
|
||||
}
|
||||
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);
|
||||
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 {
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="mode marginLeft fleft" :class="formData.cMode=='mode'?'':'active'"
|
||||
<view class="mode marginLeft fleft"
|
||||
v-on:click.stop="ShowUpload()">
|
||||
<view class="leftImg">
|
||||
<image class="img" src="/static/images/6155/DeviceDetail/open.png" mode="aspectFit"></image>
|
||||
@ -166,13 +166,6 @@
|
||||
<!-- 下方菜单 -->
|
||||
<BottomSlideMenuPlus :config="Status.BottomMenu" @close="closeMenu" @itemClick="handleItemClick"
|
||||
@btnClick="btnClick">
|
||||
<view>
|
||||
<view class="addIco">
|
||||
<view class="icoContent center" v-on:click.stop="checkImgUpload()">
|
||||
<image mode="aspectFit" class="img" src="/static/images/6155/DeviceDetail/add.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</BottomSlideMenuPlus>
|
||||
|
||||
<global-loading ref="loading" />
|
||||
@ -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) {
|
||||
|
||||
@ -1338,11 +1351,10 @@ import request, { baseURL } from '@/utils/request.js';
|
||||
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;
|
||||
|
||||
},
|
||||
|
||||
@ -258,13 +258,7 @@
|
||||
<!-- 下方菜单 -->
|
||||
<BottomSlideMenuPlus :config="Status.BottomMenu" @close="closeMenu" @itemClick="handleItemClick"
|
||||
@btnClick="btnClick">
|
||||
<view>
|
||||
<view class="addIco">
|
||||
<view class="icoContent center" v-on:click.stop="checkImgUpload()">
|
||||
<image mode="aspectFit" class="img" src="/static/images/6155/DeviceDetail/add.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</BottomSlideMenuPlus>
|
||||
|
||||
<!-- 弹窗通知 -->
|
||||
@ -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) {
|
||||
|
||||
|
||||
@ -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: '蓝牙恢复可用'
|
||||
|
||||
@ -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) => {
|
||||
|
||||
@ -1,39 +1,41 @@
|
||||
import request, {
|
||||
baseURL
|
||||
} from '@/utils/request.js';
|
||||
import {
|
||||
} from '@/utils/request.js';
|
||||
import {
|
||||
showLoading,
|
||||
hideLoading,
|
||||
updateLoading
|
||||
} from '@/utils/loading.js';
|
||||
} from '@/utils/loading.js';
|
||||
|
||||
import {
|
||||
import {
|
||||
MsgSuccess,
|
||||
MsgError,
|
||||
MsgClose,
|
||||
MsgWarning,
|
||||
showPop
|
||||
} from '@/utils/MsgPops.js';
|
||||
import Common from '@/utils/Common.js';
|
||||
} from '@/utils/MsgPops.js';
|
||||
import Common from '@/utils/Common.js';
|
||||
|
||||
|
||||
class SendBatchData{
|
||||
class SendBatchData {
|
||||
|
||||
constructor(_these,_f,_ble){
|
||||
this.videoHexArray=[];
|
||||
this.rgb565Data=[];
|
||||
this.these=_these;
|
||||
this.f=_f;
|
||||
this.ble=_ble;
|
||||
constructor(_these, _f, _ble) {
|
||||
this.videoHexArray = [];
|
||||
this.rgb565Data = [];
|
||||
this.these = _these;
|
||||
this.f = _f;
|
||||
this.ble = _ble;
|
||||
}
|
||||
|
||||
//发送开机视频
|
||||
SendVideo(bufferSize) {
|
||||
|
||||
SendVideo(){
|
||||
|
||||
let these=this.these;
|
||||
let f=this.f;
|
||||
let ble=this.ble;
|
||||
|
||||
let these = this.these;
|
||||
let f = this.f;
|
||||
let ble = this.ble;
|
||||
if (!bufferSize) {
|
||||
bufferSize = 504;
|
||||
}
|
||||
let timeDelayCloseLoading = () => {
|
||||
setTimeout(() => {
|
||||
hideLoading(these);
|
||||
@ -104,26 +106,29 @@ class SendBatchData{
|
||||
|
||||
// 构建数据包
|
||||
////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(() => {
|
||||
@ -241,11 +246,11 @@ class SendBatchData{
|
||||
Promise.all([p1, p2]).then((arr) => {
|
||||
|
||||
if (arr[0].status == 'rejected') {
|
||||
MsgError("设备准备未就绪,请重试",'',these);
|
||||
MsgError("设备准备未就绪,请重试", '', these);
|
||||
return;
|
||||
}
|
||||
if(arr[1].status== 'rejected'){
|
||||
MsgError("读取视频失败",'',these);
|
||||
if (arr[1].status == 'rejected') {
|
||||
MsgError("读取视频失败", '', these);
|
||||
return;
|
||||
}
|
||||
let res = arr[1];
|
||||
@ -370,10 +375,12 @@ class SendBatchData{
|
||||
});
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@ -393,12 +400,16 @@ class SendBatchData{
|
||||
const sendNextPacket = () => {
|
||||
if (currentPacket > totalPackets) {
|
||||
hideLoading(these);
|
||||
if (these.closeAction) {
|
||||
these.closeAction();
|
||||
}
|
||||
|
||||
|
||||
showPop({
|
||||
showPop: true,
|
||||
message: "上传成功",
|
||||
iconUrl: "/static/images/common/success.png",
|
||||
});
|
||||
}, these);
|
||||
|
||||
setTimeout(() => {
|
||||
ble.sendString(f.deviceId, "transmit complete", f
|
||||
@ -436,21 +447,16 @@ class SendBatchData{
|
||||
// 填充头部
|
||||
dataView.setUint8(0, 0x55); // 帧头
|
||||
dataView.setUint8(1, 0x02); // 帧类型:开机画面
|
||||
dataView.setUint8(2, '0x' + currentPacket.toString(16).padStart(2,
|
||||
'0')); // 包序号
|
||||
dataView.setUint8(2, currentPacket); // 包序号
|
||||
|
||||
|
||||
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)
|
||||
@ -463,20 +469,22 @@ class SendBatchData{
|
||||
})
|
||||
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;
|
||||
}
|
||||
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);
|
||||
@ -499,7 +507,7 @@ class SendBatchData{
|
||||
iconUrl: "/static/images/common/uploadErr.png",
|
||||
borderColor: "#e034344d",
|
||||
buttonBgColor: "#E03434",
|
||||
});
|
||||
}, these);
|
||||
hideLoading(these);
|
||||
reject(err);
|
||||
});
|
||||
@ -511,7 +519,7 @@ class SendBatchData{
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sizeType: ['original', 'compressed'],
|
||||
sourceType: ['album','camera'],
|
||||
sourceType: ['album', 'camera'],
|
||||
success: function(res) {
|
||||
uni.navigateTo({
|
||||
url: "/pages/common/ImgCrop/ImgCrop",
|
||||
@ -547,13 +555,35 @@ class SendBatchData{
|
||||
});
|
||||
}
|
||||
|
||||
SendUsr(){
|
||||
//发送人员信息
|
||||
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;
|
||||
}
|
||||
|
||||
let these=this.these;
|
||||
let f=this.f;
|
||||
let ble=this.ble;
|
||||
|
||||
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: "发送中"
|
||||
@ -569,6 +599,7 @@ class SendBatchData{
|
||||
}, time);
|
||||
|
||||
}).catch(ex => {
|
||||
console.error("握手失败")
|
||||
reject(ex)
|
||||
});
|
||||
|
||||
@ -594,7 +625,7 @@ class SendBatchData{
|
||||
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
|
||||
);
|
||||
@ -619,15 +650,15 @@ class SendBatchData{
|
||||
let sendPacket = () => {
|
||||
|
||||
if (combinedData.length === curr - 1) {
|
||||
setTimeout(()=>{
|
||||
setTimeout(() => {
|
||||
holdHand('transmit complete', 200).then(res => {
|
||||
MsgSuccess("人员信息发送成功", "确定", these);
|
||||
hideLoading(these);
|
||||
these.setBleFormData();
|
||||
});
|
||||
},300);
|
||||
}, 300);
|
||||
|
||||
hideLoading();
|
||||
hideLoading(these);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -644,13 +675,15 @@ 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);
|
||||
}
|
||||
|
||||
});
|
||||
@ -661,6 +694,7 @@ class SendBatchData{
|
||||
|
||||
|
||||
} catch (ex) {
|
||||
console.error("ex=", ex)
|
||||
MsgError('发送失败' + (ex.msg || ex.code), '确定', these);
|
||||
}
|
||||
|
||||
@ -670,14 +704,14 @@ class SendBatchData{
|
||||
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;
|
||||
}
|
||||
|
||||
@ -686,5 +720,24 @@ class SendBatchData{
|
||||
|
||||
}, 0);
|
||||
}
|
||||
//发送识别指令
|
||||
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;
|
||||
Reference in New Issue
Block a user