Files
ZangShiQi/addon/cashier/source/os/App.vue
2026-04-04 17:27:12 +08:00

256 lines
6.8 KiB
Vue
Executable File
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.
<script>
import {checkPageAuth,getOrderRemind,pushBind,getPushStatus} from '@/api/config.js';
import {mapGetters} from 'vuex';
import config from 'common/js/config.js';
export default {
onLaunch: function (option) {
// #ifdef APP-PLUS
uni.getSystemInfo({
success: res => {
let fontsize = ((res.windowWidth * 16) / 1200) * 5.5 + 'px';
this.$store.commit('app/setRootSize', fontsize);
}
});
// #endif
if (uni.getStorageSync('globalStoreInfo')) {
this.$store.commit('app/setGlobalStoreInfo', uni.getStorageSync('globalStoreInfo'));
}
if (uni.getStorageSync('globalStoreId')) {
this.$store.commit('app/setGlobalStoreId', uni.getStorageSync('globalStoreId'));
}
if (uni.getStorageSync('defaultImg')) {
this.$store.commit('app/setDefaultImg', uni.getStorageSync('defaultImg'));
}
if (uni.getStorageSync('addon')) {
this.$store.commit('app/setAddon', uni.getStorageSync('addon'));
}
if (uni.getStorageSync('themeConfig')) {
this.$store.commit('app/setThemeConfig', uni.getStorageSync('themeConfig'));
}
this.$store.dispatch('app/getAddonIsExistFn');
this.$store.dispatch('app/getDefaultImgFn');
this.$store.dispatch('app/getThemeConfigFn');
this.$store.dispatch('app/getMemberSearchWayConfigFn');
if (uni.getStorageSync('cashierToken')) {
this.$store.dispatch('app/getStoreInfoFn');
this.$store.dispatch('app/getUserInfoFn');
this.$store.dispatch('app/getUserGroupFn');
}
this.$store.commit('app/setCurrRoute', '/' + option.path);
// #ifdef APP-PLUS
plus.webview.open(this.$config.baseUrl + '/cashier/pages/index/loading', 'loading');
uni.switchTab({
url: '/pages/reserve/index',
success: () => {
uni.switchTab({
url: '/pages/recharge/index',
success: () => {
uni.switchTab({
url: '/pages/verify/index',
success: () => {
if (!uni.getStorageSync('cashierToken')) {
uni.navigateTo({url: '/pages/login/login'});
} else {
uni.switchTab({url: '/pages/billing/index'});
}
plus.webview.close('loading');
}
});
}
});
}
});
// #endif
this.getOrderRemindFn()
this.getPushStatusFn()
this.initSocket()
},
onShow: function () {
if (!uni.getStorageSync('cashierToken')) {
// #ifdef H5
if (location.href.indexOf('pages/index/loading') == -1) {
this.$util.redirectTo('/pages/login/login', {}, 'redirectTo');
}
// #endif
// #ifndef H5
this.$util.redirectTo('/pages/login/login', {}, 'redirectTo');
// #endif
}
// this.$nextTick(()=>{
// window.addEventListener('beforeunload', this.handleBeforeUnload);
// })
},
methods: {
// handleBeforeUnload(e){
// // 提示用户确认
// e.preventDefault();
// },
getOrderRemindFn(){
getOrderRemind().then(res=>{
if(res.code>=0){
this.$store.dispatch('app/initOverallAudio',res.data);
}
})
},
getPushStatusFn(){
getPushStatus().then(res=>{
if(res.code>=0){
this.$store.dispatch('app/setIsSocketConnect',true)
}
})
},
initSocket(){
// 心跳机制
// 可自定义成你的模式,这里只做基本处理
let linkNumber = 1
let socketInterval=setInterval(()=>{
let token = uni.getStorageSync('cashierToken');
try{
if(token&&this.isSocketConnect){
if(linkNumber>3){
this.$util.showToast({
title: 'webSocket连接异常请联系管理员'
});
if(this.overallAudioIsPlay) this.$store.dispatch('app/setOverallAudioIsPlay',false);
this.$store.dispatch('app/setIsSocketConnect',false)
linkNumber = 1
return false
}
uni.sendSocketMessage({
data: 'ping',
success: (res) => {
linkNumber = 1
},
fail: (e) => {
linkNumber++
uni.connectSocket({
url:config.webSocket,
complete: (res) => {
},
fail: (connectE) => {
// console.log(e)
}
})
}
});
}
}catch(e){
//TODO handle the exception
}
},1000)
uni.onSocketMessage((res)=>{
var data = JSON.parse(res.data);
let token = uni.getStorageSync('cashierToken');
switch(data.type){
case 'init':
if(token){
this.$store.dispatch('app/setOverallAudioBindClientId',data.data.client_id)
pushBind({client_id:data.data.client_id})
}
break;
case 'ping':
uni.sendSocketMessage({
data: 'ping',
});
break;
default:
this.$store.dispatch('app/overallAudioPlay',data.data.audio);
}
});
},
initRoute(route) {
const search = function (menu, route, arr = []) {
menu.find((item, index) => {
if (item.path == route) {
arr.push(index);
return true;
} else if (item.children) {
arr = search(item.children, route, arr);
if (arr.length) {
arr.push(index);
return true;
} else {
return false;
}
}
return false;
});
return arr;
};
let menuIndex = search(this.menu, route).reverse();
this.$store.commit('app/setMenuIndex', {level: 'firstMenuIndex', index: menuIndex[0]});
this.$store.commit('app/setMenuIndex', {level: 'secondMenuIndex', index: menuIndex[1] ?? -1});
this.$store.commit('app/setMenuIndex', {level: 'thirdMenuIndex', index: menuIndex[2] ?? -1});
},
/**
* 检测页面是否有权限
*/
checkPageAuthFn() {
checkPageAuth(this.currRoute).then(res => {
if (res.code && res.code == -10012) {
this.$util.redirectTo('/pages/index/no_permission', {}, 'redirectTo');
}
});
}
},
computed: {
menu() {
let menu = require('@/common/menu/store.js');
return menu.default ?? [];
},
isSocketConnect(){
return this.$store.state.app.isSocketConnect
},
overallAudioIsPlay(){
return this.$store.state.app.overallAudioIsPlay
},
...mapGetters(['currRoute'])
},
watch: {
currRoute: function (nVal, oVal) {
if (nVal) {
this.initRoute(nVal);
this.checkPageAuthFn();
}
},
menu: function (nVal) {
if (nVal.length) {
this.initRoute(this.currRoute);
}
}
}
};
</script>
<style lang="scss">
/*每个页面公共css */
@import url('/common/css/iconfont.css');
@import '/common/css/common.scss';
@import '/common/css/form.scss';
uni-toast .uni-toast__content {
font-size: 0.16rem !important;
}
</style>