xiaokuaisong-shopapp/uniapp05/pages/distribution/distribution.vue

148 lines
4.4 KiB
Vue
Raw Normal View History

2024-10-31 10:56:04 +00:00
22.42
2024-10-18 08:05:19 +00:00
<template>
<view>
2024-10-31 10:56:04 +00:00
<button @click="startPrinting">打印订单</button>
2024-10-18 08:05:19 +00:00
</view>
</template>
<script setup>
import { ref, onMounted } from 'vue';
2024-10-31 10:56:04 +00:00
// 定义响应式变量
const deviceId = ref(uni.getStorageSync('deviceId')); // 从存储中获取设备ID
const serviceId = ref(uni.getStorageSync('serviceId')); // 打印机服务ID
const characteristicId = ref(uni.getStorageSync('characteristicId')); // 特征值ID
2024-10-18 08:05:19 +00:00
2024-10-31 10:56:04 +00:00
// 开始打印的方法
const startPrinting = () => {
if (!characteristicId.value) {
console.error('请先获取特征值ID');
return;
2024-10-18 08:05:19 +00:00
}
2024-10-31 10:56:04 +00:00
const orderNumber = '123456'; // 示例订单编号
const itemName = '麻辣烫'; // 示例商品名称
const price = '10.00'; // 示例价格
sendPrintCommand(orderNumber, itemName, price);
2024-10-18 08:05:19 +00:00
};
2024-10-31 10:56:04 +00:00
// 生成打印数据
const generatePrintData = (orderNumber, itemName, price) => {
try {
let priceString;
2024-10-18 08:05:19 +00:00
2024-10-31 10:56:04 +00:00
// 如果价格是负数,则添加负号
if (price < 0) {
priceString = (-Math.abs(price)).toFixed(2);
} else {
priceString = (price).toFixed(2);
}
const bufferLength = orderNumber.length + itemName.length + priceString.length + 7; // 包含额外的控制字符
const buffer = new ArrayBuffer(bufferLength);
const dataView = new DataView(buffer);
// 设置初始化指令
dataView.setUint8(0, 0x1B);
dataView.setUint8(1, 0x40);
// 设置订单编号
dataView.setUint8(2, 0x1B);
dataView.setUint8(3, 0x21);
dataView.setUint8(4, orderNumber.length);
for (let i = 0; i < orderNumber.length; i++) {
dataView.setUint8(i + 5, orderNumber.charCodeAt(i));
}
// 设置商品名称
dataView.setUint8(orderNumber.length + 5, 0x1B);
dataView.setUint8(orderNumber.length + 6, 0x29);
dataView.setUint8(orderNumber.length + 7, itemName.length);
for (let i = 0; i < itemName.length; i++) {
dataView.setUint8(i + orderNumber.length + 8, itemName.charCodeAt(i));
}
// 设置价格
dataView.setUint8(itemName.length + orderNumber.length + 8, 0x1B);
dataView.setUint8(itemName.length + orderNumber.length + 9, 0x2A);
dataView.setUint8(itemName.length + orderNumber.length + 10, priceString.length);
for (let i = 0; i < priceString.length; i++) {
dataView.setUint8(i + itemName.length + orderNumber.length + 10, priceString.charCodeAt(i));
}
return buffer;
} catch (error) {
console.error('生成打印数据出错', error);
return null;
2024-10-18 08:05:19 +00:00
}
2024-10-31 10:56:04 +00:00
};
2024-10-18 08:05:19 +00:00
2024-10-31 10:56:04 +00:00
// 发送打印指令
const sendPrintCommand = (orderNumber, itemName, price) => {
try {
const buffer = generatePrintData(orderNumber, itemName, price);
if (!buffer) {
return;
}
2024-10-18 08:05:19 +00:00
2024-10-31 10:56:04 +00:00
const dataView = new DataView(buffer);
2024-10-18 08:05:19 +00:00
2024-10-31 10:56:04 +00:00
uni.writeBLECharacteristicValue({
deviceId: deviceId.value,
serviceId: serviceId.value,
characteristicId: characteristicId.value, // 使用正确的变量名
value: Array.from(new Uint8Array(buffer)),
success: (res) => {
console.log('发送打印指令成功', res);
},
fail: (err) => {
console.error('发送打印指令失败', err);
}
});
} catch (error) {
console.error('发送打印指令出错', error);
}
2024-10-18 08:05:19 +00:00
};
2024-10-31 10:56:04 +00:00
// 获取特征值ID
const getCharacteristicId = async () => {
try {
await uni.getBLEDeviceCharacteristics({
deviceId: deviceId.value,
serviceId: serviceId.value,
success: (res) => {
const characteristics = res.characteristics;
for (let i = 0; i < characteristics.length; i++) {
// 假设你知道哪个特征值用于打印
if (characteristics[i].uuid === '已知的特征值UUID') {
characteristicId.value = characteristics[i].uuid;
console.log('找到特征值ID:', characteristicId.value);
// 获取到特征值后发送打印指令
sendPrintCommand(); // 使用正确的变量名
break;
}
}
},
fail: (err) => {
console.error('获取特征值失败', err);
}
});
} catch (error) {
console.error('获取特征值出错', error);
}
};
// 页面加载时尝试连接设备
onMounted(async () => {
if (deviceId.value && serviceId.value) {
// 如果已经知道特征值ID可以直接设置
if (characteristicId.value) {
console.log('已知特征值ID:', characteristicId.value);
} else {
// 否则获取特征值ID
await getCharacteristicId();
}
}
});
2024-10-18 08:05:19 +00:00
</script>