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.
168 lines
5.6 KiB
168 lines
5.6 KiB
import { FetchInitScreenData } from '@/api/library'
|
|
import { mapGetters } from 'vuex'
|
|
export const pageCrud = {
|
|
// 组件共用属性
|
|
data() {
|
|
return {
|
|
headerTitle: '数字智慧大屏',
|
|
baseSetting: {},
|
|
currentIndex: 0, // 当前显示的页面索引
|
|
currentPage: null, // 当前显示的页面数据
|
|
pageData: [
|
|
{ id: 1, title: 'PageOne', delayed: 20, isShow: false },
|
|
{ id: 2, title: 'PageTwo', delayed: 20, isShow: false },
|
|
{ id: 3, title: 'PageThree', delayed: 20, isShow: false },
|
|
{ id: 4, title: 'PageFour', delayed: 20, isShow: false },
|
|
{ id: 5, title: 'PageFive', delayed: 20, isShow: false }
|
|
],
|
|
wecharQrCodeSrc: null,
|
|
intervalId: null,
|
|
orderIds: [],
|
|
updateTime: '',
|
|
oldUpdateTime: JSON.parse(localStorage.getItem('updateTime')) || '',
|
|
welcomeData: []
|
|
}
|
|
},
|
|
computed: {
|
|
...mapGetters(['libcode']),
|
|
shouldCacheComponent() {
|
|
if (this.currentPage) {
|
|
switch (this.currentPage.title) {
|
|
case 'PageOne':
|
|
return 'PageOne'
|
|
case 'PageFour':
|
|
return 'PageFour'
|
|
case 'PageFive':
|
|
return 'PageFive'
|
|
default:
|
|
return null
|
|
}
|
|
}
|
|
return null
|
|
},
|
|
currentPageComponent() {
|
|
if (this.currentPage) {
|
|
switch (this.currentPage.title) {
|
|
case 'PageTwo':
|
|
return 'PageTwo'
|
|
case 'PageThree':
|
|
return 'PageThree'
|
|
default:
|
|
return null
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
},
|
|
created() {
|
|
this.getInitSetting()
|
|
},
|
|
activated() {
|
|
// this.getInitSetting()
|
|
},
|
|
beforeDestroy() {
|
|
// this.stopAutoSwitch()
|
|
},
|
|
// 组件挂载时的共用方法
|
|
mounted() {
|
|
// this.useLibcode()
|
|
},
|
|
// 组件共用方法
|
|
methods: {
|
|
useLibcode() {
|
|
console.log('当前馆代码:', this.currentLibcode)
|
|
},
|
|
getInitSetting() {
|
|
// const linkSrc = process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API
|
|
const doorCodes = this.$route.query.doorCodes
|
|
console.log('doorCodes:', doorCodes)
|
|
FetchInitScreenData({ 'libcode': this.libcode, 'doorCodes': doorCodes || null }).then(res => {
|
|
const result = res.data.settings
|
|
this.baseSetting = res.data.settings
|
|
this.welcomeData = res.data.screenWelcomePromotions
|
|
// this.wecharQrCodeSrc = linkSrc + '/downloadFile' + result.wecharQrCode
|
|
this.wecharQrCodeSrc = result.wechar_qr_code.context
|
|
localStorage.setItem('wecharQrCodeSrc', this.wecharQrCodeSrc)
|
|
|
|
this.headerTitle = result.screen_title.context
|
|
|
|
const selectorder = result.show_screen.context
|
|
const showDurations = { 1: result.show1.context, 2: result.show2.context, 3: result.show3.context, 4: result.show4.context, 5: result.show5.context }
|
|
this.orderIds = selectorder.split(',').map(id => parseInt(id.trim()))
|
|
this.updateTime = res.data.updateTime
|
|
|
|
if (this.updateTime !== this.oldUpdateTime) {
|
|
this.oldUpdateTime = this.updateTime
|
|
localStorage.setItem('updateTime', JSON.stringify(this.oldUpdateTime))
|
|
this.refreshPageWhenChanged()
|
|
} else {
|
|
this.updatePageData(showDurations)
|
|
}
|
|
}).catch(error => {
|
|
console.error('Error', error)
|
|
setTimeout(() => {
|
|
this.reload()
|
|
}, 5000)
|
|
})
|
|
},
|
|
refreshPageWhenChanged() {
|
|
window.location.reload()
|
|
},
|
|
updatePageData(showDurations) {
|
|
const updatedPageData = this.orderIds.map((id) => {
|
|
const pageIndex = this.pageData.findIndex(item => item.id === id)
|
|
if (pageIndex !== -1) {
|
|
return {
|
|
...this.pageData[pageIndex],
|
|
isShow: true,
|
|
delayed: showDurations[id]
|
|
}
|
|
} else {
|
|
console.log(`ID 为 ${id} 的页面未找到。`)
|
|
return null
|
|
}
|
|
}).filter(item => item !== null)
|
|
|
|
this.pageData = updatedPageData
|
|
if (this.pageData.length) { // 确保有页面数据
|
|
this.currentIndex = 0 // 重置索引
|
|
this.currentPage = this.pageData[this.currentIndex]
|
|
this.startPageSwitch() // 启动切换
|
|
}
|
|
},
|
|
startPageSwitch() {
|
|
// 清除可能存在的旧定时器
|
|
this.stopAutoSwitch()
|
|
|
|
if (!this.pageData.length) return // 无页面数据则退出
|
|
|
|
// 获取当前页面的延迟时间
|
|
const currentDelay = parseInt(this.pageData[this.currentIndex].delayed) * 1000
|
|
console.log(`当前页面[${this.currentIndex}]延迟:`, currentDelay)
|
|
|
|
// 使用setTimeout递归调用,每次切换都重新计算延迟
|
|
this.timeoutId = setTimeout(() => {
|
|
// 更新索引(循环切换)
|
|
this.currentIndex = (this.currentIndex + 1) % this.pageData.length
|
|
this.currentPage = this.pageData[this.currentIndex]
|
|
|
|
// 检查是否需要刷新页面
|
|
if (this.updateTime !== this.oldUpdateTime) {
|
|
this.oldUpdateTime = this.updateTime
|
|
localStorage.setItem('updateTime', JSON.stringify(this.oldUpdateTime))
|
|
this.refreshPageWhenChanged()
|
|
} else {
|
|
// 继续下一次切换
|
|
this.startPageSwitch()
|
|
}
|
|
}, currentDelay)
|
|
},
|
|
stopAutoSwitch() {
|
|
// 清除定时器(注意变量名从intervalId改为timeoutId)
|
|
if (this.timeoutId) {
|
|
clearTimeout(this.timeoutId)
|
|
this.timeoutId = null
|
|
}
|
|
}
|
|
}
|
|
}
|