diff --git a/src/api/mall/trade/delivery/pickUpStore/index.ts b/src/api/mall/trade/delivery/pickUpStore/index.ts index c3175021..01e59522 100644 --- a/src/api/mall/trade/delivery/pickUpStore/index.ts +++ b/src/api/mall/trade/delivery/pickUpStore/index.ts @@ -44,3 +44,13 @@ export const updateDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => export const deleteDeliveryPickUpStore = async (id: number) => { return await request.delete({ url: '/trade/delivery/pick-up-store/delete?id=' + id }) } + +//绑定自提店员 +export const bindStoreStaffId = async (data: any) => { + return await request.post({ url: '/trade/delivery/pick-up-store/bind', data }) +} + +//查询门店绑定情况 +export const getDeliveryPickUpStoreStaff = async (id: number) => { + return await request.get({ url: '/trade/delivery/pick-up-store/get-store-staff?id=' + id }) +} diff --git a/src/views/mall/trade/delivery/pickUpOrder/index.vue b/src/views/mall/trade/delivery/pickUpOrder/index.vue index e52a3e3f..06ec835b 100644 --- a/src/views/mall/trade/delivery/pickUpOrder/index.vue +++ b/src/views/mall/trade/delivery/pickUpOrder/index.vue @@ -26,9 +26,8 @@ 重置 - + 核销 + + 连接扫描枪 + + + 断开扫描枪 + @@ -216,6 +221,12 @@ import { DeliveryTypeEnum } from '@/utils/constants' import { TradeOrderSummaryRespVO } from '@/api/mall/trade/order' import { DeliveryPickUpStoreVO } from '@/api/mall/trade/delivery/pickUpStore' import OrderPickUpForm from '@/views/mall/trade/order/form/OrderPickUpForm.vue' +import { ref, onMounted } from "vue"; +const message = useMessage() // 消息弹窗 + +const port = ref(""); +const ports = ref([]); +const reader = ref(""); defineOptions({ name: 'PickUpOrder' }) @@ -227,6 +238,8 @@ const total = ref(2) const list = ref([]) // 搜索的表单 const queryFormRef = ref() +const serialPort = ref(false) +const isUse = ref(true) // 初始表单参数 const INIT_QUERY_PARAMS = { // 页数 @@ -240,6 +253,7 @@ const INIT_QUERY_PARAMS = { // 自提门店 pickUpStoreId: undefined } + // 表单搜索 const queryParams = ref({ ...INIT_QUERY_PARAMS }) // 订单搜索类型 queryParam @@ -294,6 +308,9 @@ const handleQuery = async () => { const resetQuery = () => { queryFormRef.value?.resetFields() queryParams.value = { ...INIT_QUERY_PARAMS } + if(pickUpStoreList.value.length > 0) { + queryParams.value.pickUpStoreId = pickUpStoreList.value[0].id + } handleQuery() } @@ -309,10 +326,89 @@ const handlePickup = () => { pickUpForm.value.open() } +/** 连接扫码枪 */ +const connectToSerialPort = async () => { + try { + // 判断浏览器支持串口通信 + if ("serial" in navigator && navigator.serial != null && typeof navigator.serial === 'object' && "requestPort" in navigator.serial) { + // 提示用户选择一个串口 + port.value = await navigator.serial.requestPort(); + } else { + message.error("浏览器不支持扫码枪连接,请更换浏览器重试") + return + } + + // 获取用户之前授予该网站访问权限的所有串口。 + ports.value = await navigator.serial.getPorts(); + + // console.log(port.value, ports.value); + console.log(port.value); + // 等待串口打开 + await port.value.open({ baudRate: 9600 , dataBits: 8 , stopBits: 2}); + + // console.log(typeof port.value); + message.success("成功连接扫码枪") + serialPort.value = true; + // readData(port.value); + readData(); + } catch (error) { + // 处理连接串口出错的情况 + console.log("Error connecting to serial port:", error); + } +}; + +/** 监听扫码枪输入 */ +const readData = async () => { + reader.value = port.value.readable.getReader(); + let data = ""; //扫码数据 + // 监听来自串口的数据 + while (true) { + const { value, done } = await reader.value.read(); + if (done) { + // 允许稍后关闭串口 + reader.value.releaseLock(); + break; + } + // 获取发送的数据 + const serialData = new TextDecoder().decode(value); + data = `${data}${serialData}`; + if (serialData.includes("\r")) { + //读取结束 + let codeData = data.replace("\r",""); + data = ""; //清空下次读取不会叠加 + console.log(`二维码数据:${codeData}`); + //处理拿到数据逻辑 + pickUpForm.value.open(codeData) + } + } +}; + +/** 断开扫码枪 */ +const cutPort = async () => { + if (port.value !== "") { + await reader.value.cancel(); + await port.value.close(); + port.value = ""; + console.log("断开扫码枪连接"); + message.success("已成功断开扫码枪连接") + serialPort.value = false; + } else { + message.warning("请先连接或打开扫码枪") + } +}; + /** 初始化 **/ -onMounted(() => { - getList() - getPickUpStoreList() +onMounted(async () => { + await getPickUpStoreList() + if(pickUpStoreList.value.length > 0){ + queryParams.value.pickUpStoreId = pickUpStoreList.value[0].id + isUse.value = false + await getList() + }else{ + message.error("当前登录人没绑定任何自提点") + loading.value = false + isUse.value = true + } })