Files
zsw-jx-store/src/App.ts
2025-12-29 10:54:25 +08:00

266 lines
9.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 全局文件配置
*/
import { store } from '@/store'
import { setStorage, getStorage } from "@/utils/storage";
import Bluetooth from '@/utils/bluetoothPrinter/bluetooth'
import useGlobalFunc from './composables/useGlobalFunc';
import { onShow } from '@dcloudio/uni-app';
import useOrderInfo from './composables/useOrderInfo';
import util from '@/utils/bluetoothPrinter/util'
function App() {
const bluetooth = new Bluetooth()
const { setPrinterStatus } = useGlobalFunc()
const { bluetoothPrinter,orderDetail } = useOrderInfo()
/*************************************************
* 页面出现
*/
let reconnectTime1: any = null
onShow(async () => {
if (getStorage('deviceName')) {
reconnectTime1 = setTimeout(async () => {
await bluetooth.reconnect()
clearTimeout(reconnectTime1)
}, 1000)
}
})
/**
* 获取设备信息
*/
async function SystemInfo() {
uni.getSystemInfo({
success(res) {
setStorage('brand', res.brand || 'pc')
// 保存本机系统信息
// 详细字段信息参考 https://uniapp.dcloud.net.cn/api/system/info.html#%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF%E7%9A%84%E6%A6%82%E5%BF%B5
store.commit('serveInfo/setSystemInfo', JSON.stringify(res))
},
})
}
/*************************************************
* 监听网络类型
*/
function onNetWorkStatusChange() {
uni.onNetworkStatusChange((res) => {
if (res.isConnected == false) {
uni.createPushMessage({
title: '网络提示',
content: '网络被断开,请检查网络设置'
})
} else {
plus.push.clear()
}
store.commit('serveInfo/setIsNetWorkS', res.isConnected)
})
}
/*************************************************
* 应用保活常驻通知栏
*/
function appKeepAlive() {
let port = uni.getSystemInfoSync()
switch (port.platform) {
case 'android':
const JModule = uni.requireNativePlugin('J-FrontService')
JModule.startFrontService({
title: '京西到家',
content: '京西到家正在运行',
})
// 设置oppo通道
if (port.brand == 'oppo' || port.brand == 'oneplus' || port.brand == 'pacm00') {
const plugin = uni.requireNativePlugin("DCloud-PushSound")
plugin.setCustomPushChannel({
soundName: "neworder",
channelId: "10110",
channelDesc: "订单类通知提醒",
enableLights: true,
enableVibration: true,
importance: 4,
lockscreenVisibility: 1
});
plugin.setCustomPushChannel({
soundName: "msg",
channelId: "10111",
channelDesc: "顾客IM信息提示",
enableLights: true,
enableVibration: true,
importance: 4,
lockscreenVisibility: 1
});
}
case 'ios':
console.log('iOS不支持此功能')
break
}
}
/*************************************************
* 监听穿透消息
*/
// const playVoid = uni.createInnerAudioContext()
function vendorName(text:string) {
switch (text) {
case '京东到家':
return 0
case '美团外卖':
return 1
// case '淘宝闪购':
// return 2
case '淘宝闪购新零售':
return 3
case '京东商城':
return 5
case '京西到家':
return 9
case '微盟':
return 11
case '抖音小时购':
return 14
// case '淘鲜达':
// return 16
default:
return -1
}
}
let orderList:Array<AnyObject> = [] // 20s之内没有新订单置空
function listenMsg() {
// 获取cid
plus.push.getClientInfoAsync((info) => {
let cid = info["clientid"]
setStorage('cid', cid)
}, () => { })
uni.onPushMessage((res) => {
// 监听通知信息/
if (res.type == 'receive') {
let newData: any = res.data.payload
if (newData.store_title == getStorage("storeName")) orderList.push(newData)
if (newData.msg_type == 'newOrder') {
let data: any = getStorage('commitBTDevCharact')
util.notifyBLEState(data.deviceId, data.serviceId, data.uuid).then((res: any) => {
if (res == 12) {
if (newData.store_title != getStorage("storeName")) return
bluetoothPrinter(newData.vendor_order_id)
}
})
}
// 创建通知
if (newData.store_title != getStorage("storeName")) return
if (newData.msg_type == 'newImMsg') {
store.commit('storeInfo/setImMessage', newData.context)
uni.createPushMessage({
title: newData.store_title,
content: '有新的顾客信息,请及时查看',
icon:'./static/image/global/message.png',
payload:{
page: '/pages/message/index', // 目标页面路径
storeID:newData.store_id,
storeName:newData.store_title,
type:'message'
}
})
uni.showTabBarRedDot({index:2})
} else {
store.commit('serveInfo/setUpdateOrder', Date.now())
uni.createPushMessage({
title: newData.store_title,
content: `${newData.context}${newData.vendor_name}#${newData.order_sqs}号订单)`,
icon:'./static/image/global/newOrder.png',
payload:{
page: '/subPages/orderChild/orderDetail/orderDetail', // 目标页面路径
vendorOrderID: '' + newData.vendor_order_id, // 订单id
vendorID:vendorName(newData.vendor_name),
type:'order'
}
})
}
if(+getStorage('defaultOrderReminder') === 1 || getStorage('defaultOrderReminder') === '' ){
let src = `/static/audio/${newData.msg_type}.mp3`
watchAudio(src) // findIndex
}
}
// 监听通知栏点击
if (res.type == 'click') {
let currentOrder:any = res.data.payload
if(currentOrder.type === 'order') orderDetail(currentOrder.vendorOrderID, currentOrder.vendorID)
else if(currentOrder.storeID) {
setStorage("storeID", currentOrder.storeID)
setStorage('storeName', currentOrder.storeName)
setStorage('storeMessge', 'message')
uni.switchTab({ url: currentOrder.page })
}
}
})
}
/**
* 监听音频播放事件 音频播放结束事件,通知完毕,清除 orderList中的数据 findIndex:number
*/
let isWait = false
const watchAudio = (newData:string) => {
// console.log(isWait,'isWait',newData)
if(isWait) return // 阻止多个音频同时播放
if(newData){
const playVoid = uni.createInnerAudioContext()
playVoid.src = newData
playVoid.volume = 1
isWait = true
playVoid.play()
playVoid.onEnded(() => {
isWait = false
orderList.shift() // 头部删除
// console.log('音频播放结束事件,依次播放,判断是否还有订单',orderList)
// `/static/audio/${newData.msg_type}.mp3`
// if(orderList.length>0) watchAudio(orderList[0].msg_type)
if(orderList.length>0) watchAudio(`/static/audio/${orderList[0].msg_type}.mp3`)
})
}
// 20s之后
}
/*************************************************
* 打印机检测
*/
let reconnectTime: any = null
async function onPrinterChange() {
if (getStorage('deviceName')) {
setPrinterStatus()
reconnectTime = setTimeout(async () => {
await bluetooth.reconnect()
clearTimeout(reconnectTime)
}, 1000)
}
}
return {
SystemInfo, // 获取本机系统信息
onNetWorkStatusChange, // 监听网络状态
appKeepAlive, // 安卓应用保活
listenMsg, // 监听消息
onPrinterChange, // 监听打印机状态
}
}
export default App