var vm = new Vue({
|
el: '#app',
|
data: function () {
|
return {
|
isLoading: false,
|
textInput: '',
|
scanWorkstation: '',
|
html5QrCode: null,
|
pendingCallbacks: {} // 存储回调函数
|
}
|
},
|
mounted() {
|
// 初始化消息监听
|
window.addEventListener('message', this.handleH5Response);
|
},
|
beforeDestroy() {
|
// 清理事件监听
|
window.removeEventListener('message', this.handleH5Response);
|
},
|
methods: {
|
// 处理H5的响应
|
handleH5Response(event) {
|
try {
|
const data = JSON.parse(event.data);
|
if (data.RequestId && typeof data.returnValue !== 'undefined') {
|
const callback = this.pendingCallbacks[data.RequestId];
|
if (callback) {
|
callback(data.returnValue);
|
delete this.pendingCallbacks[data.RequestId];
|
}
|
}
|
} catch (e) {
|
console.error('解析响应失败:', e);
|
}
|
},
|
|
// 启动扫描测试
|
startScanTest() {
|
const requestId = Date.now().toString(); // 生成唯一请求ID
|
const sendData = {
|
Type: 'Scan',
|
Barcode: 'TM250304-000104-2',
|
Detail: 'detail info',
|
Ip: '192.168.38.135',
|
Port: '9100',
|
RequestId: requestId // 添加请求标识
|
};
|
|
// 创建Promise等待响应
|
new Promise((resolve) => {
|
this.pendingCallbacks[requestId] = resolve;
|
|
// 发送消息
|
var result = uni.webView.postMessage({
|
data: JSON.stringify(sendData)
|
});
|
alert(result);
|
//// 设置超时处理
|
//setTimeout(() => {
|
// if (this.pendingCallbacks[requestId]) {
|
// delete this.pendingCallbacks[requestId];
|
// console.error('请求超时');
|
// resolve(-1); // 返回超时状态
|
// }
|
//}, 5000); // 5秒超时
|
}).then(result => {
|
console.log('操作结果:', result);
|
// 这里处理返回结果
|
if (result === 0) {
|
alert('操作成功!');
|
} else {
|
alert('操作失败,错误码: ' + result);
|
}
|
});
|
}
|
}
|
});
|