You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.3 KiB
175 lines
4.3 KiB
<template>
|
|
<div id="app" :class="{ 'screen-route-app': isScreenRoute }">
|
|
<div v-if="isScreenRoute" class="screen-route-shell">
|
|
<div class="screen-route-scale" :style="screenScaleStyle">
|
|
<transition name="fade" mode="out-in">
|
|
<router-view></router-view>
|
|
</transition>
|
|
</div>
|
|
</div>
|
|
<transition v-else name="fade" mode="out-in">
|
|
<router-view></router-view>
|
|
</transition>
|
|
|
|
<!-- 全局审批通知管理器 -->
|
|
<approval-notification-manager v-if="!isScreenRoute" ref="approvalNotificationManager"></approval-notification-manager>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import ApprovalNotificationManager from '@/components/ApprovalNotificationManager.vue'
|
|
import { SCREEN_DESIGN_HEIGHT, SCREEN_DESIGN_WIDTH, setScreenScale } from '@/utils/screenAdapt'
|
|
|
|
export default {
|
|
name: 'App',
|
|
|
|
components: {
|
|
ApprovalNotificationManager
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
query: {},
|
|
version: '1.3.3',
|
|
isScreenRoute: false,
|
|
screenScale: 1
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
screenScaleStyle() {
|
|
const scale = this.screenScale > 0 ? this.screenScale : 1
|
|
const percent = `${100 / scale}%`
|
|
return {
|
|
width: percent,
|
|
height: percent,
|
|
transform: `scale(${scale})`,
|
|
transformOrigin: 'left top'
|
|
}
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
'$route.path': {
|
|
immediate: true,
|
|
handler() {
|
|
this.syncScreenRouteMode()
|
|
}
|
|
}
|
|
},
|
|
|
|
created () {
|
|
this.versionReload()
|
|
},
|
|
|
|
mounted() {
|
|
window.addEventListener('resize', this.handleWindowResize)
|
|
this.syncScreenRouteMode()
|
|
},
|
|
|
|
beforeDestroy() {
|
|
window.removeEventListener('resize', this.handleWindowResize)
|
|
document.body.classList.remove('screen-route-body')
|
|
setScreenScale(1)
|
|
},
|
|
|
|
methods: {
|
|
/**
|
|
* 版本检查及自动刷新
|
|
*/
|
|
versionReload(){
|
|
let version = this.version //版本号(每次上线前需要更新下版本号)
|
|
console.log('最新系统版本: ',version)
|
|
console.log('当前系统版本: ',this.version)
|
|
let versionLocal = localStorage.getItem('_version_');
|
|
if(version!=versionLocal){
|
|
localStorage.setItem('_version_',version);
|
|
this.version=versionLocal;
|
|
location.reload();
|
|
}
|
|
},
|
|
isScreenPath(path) {
|
|
return /^\/screen-/.test(String(path || ''))
|
|
},
|
|
syncScreenRouteMode() {
|
|
this.isScreenRoute = this.isScreenPath(this.$route && this.$route.path)
|
|
this.updateScreenBodyClass()
|
|
this.updateScreenScale()
|
|
},
|
|
updateScreenBodyClass() {
|
|
if (this.isScreenRoute) {
|
|
document.body.classList.add('screen-route-body')
|
|
} else {
|
|
document.body.classList.remove('screen-route-body')
|
|
}
|
|
},
|
|
handleWindowResize() {
|
|
this.updateScreenScale()
|
|
},
|
|
updateScreenScale() {
|
|
if (!this.isScreenRoute) {
|
|
this.screenScale = 1
|
|
setScreenScale(1)
|
|
return
|
|
}
|
|
const width = window.innerWidth || document.documentElement.clientWidth || SCREEN_DESIGN_WIDTH
|
|
const height = window.innerHeight || document.documentElement.clientHeight || SCREEN_DESIGN_HEIGHT
|
|
const scaleX = width / SCREEN_DESIGN_WIDTH
|
|
const scaleY = height / SCREEN_DESIGN_HEIGHT
|
|
const scale = Math.min(scaleX, scaleY)
|
|
this.screenScale = scale > 0 ? Number(scale.toFixed(6)) : 1
|
|
setScreenScale(this.screenScale)
|
|
},
|
|
|
|
/**
|
|
* 手动触发审批通知检查(供外部调用)
|
|
*/
|
|
checkApprovalNotifications() {
|
|
if (this.$refs.approvalNotificationManager) {
|
|
this.$refs.approvalNotificationManager.manualCheck()
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 清除指定申请单的通知记录(审批完成后调用)
|
|
* @param {string} applyNo - 申请单号
|
|
*/
|
|
clearApprovalNotification(applyNo) {
|
|
if (this.$refs.approvalNotificationManager) {
|
|
this.$refs.approvalNotificationManager.clearNotification(applyNo)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
body.screen-route-body {
|
|
overflow: hidden;
|
|
background: #000;
|
|
}
|
|
|
|
#app.screen-route-app {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.screen-route-shell {
|
|
width: 100%;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.screen-route-scale {
|
|
width: 100%;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
will-change: transform;
|
|
}
|
|
|
|
.screen-route-scale > * {
|
|
width: 100% !important;
|
|
height: 100% !important;
|
|
}
|
|
</style>
|