|
|
|
@ -1,20 +1,36 @@ |
|
|
|
<template> |
|
|
|
<div class="home app_content"> |
|
|
|
<Loading class="loading-div" type="spinner" v-show="isLoading" color="#1989fa" /> |
|
|
|
<div class="home app_content" v-if="!isLoading"> |
|
|
|
<!-- 导航栏 --> |
|
|
|
<!-- <div class="header_body"> |
|
|
|
<header-nav :leftArrow="false" titelText="执法监督码"></header-nav> |
|
|
|
</div> --> |
|
|
|
|
|
|
|
<!-- 中间 --> |
|
|
|
<div class="warp_body"> |
|
|
|
|
|
|
|
<div class="warp_body" > |
|
|
|
<div class="logobox"></div> |
|
|
|
<div class="streamer" @click=""> |
|
|
|
<!-- <div class="streamer" @click=""> |
|
|
|
<i></i> |
|
|
|
<span class="marquee" :key="freshMap.key"> |
|
|
|
<span class="scroll-text" v-for="(item, index) in carouselList">{{ item.planName }}</span> |
|
|
|
</span> |
|
|
|
<span class="scroll-text" v-for="(item, index) in carouselList">{{ item.planName }}</span> |
|
|
|
</span> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> --> |
|
|
|
<van-notice-bar |
|
|
|
:text="noticeStr" |
|
|
|
:key="freshMap.key" |
|
|
|
left-icon="volume-o" |
|
|
|
scrollable |
|
|
|
:speed="100" |
|
|
|
class="streamer" |
|
|
|
/> |
|
|
|
|
|
|
|
<!-- <div class="container streamer" id="notification-container":key="freshMap.key"> |
|
|
|
<div class="notification" id="notification"> |
|
|
|
{{ notificationtext }} |
|
|
|
</div> |
|
|
|
</div> --> |
|
|
|
<div class="noticbox" @click="toNoticeView"><i></i><span class="new"></span>通知</div> |
|
|
|
<!-- <refresh-list v-model:freshMap="freshMap" @refresh="onRefresh" @onLoad="onLoad"> --> |
|
|
|
<div class="carousel_box" @onLoad="onLoad"> |
|
|
|
@ -56,9 +72,10 @@ |
|
|
|
|
|
|
|
<script setup name="Home"> |
|
|
|
import Vconsolefrom from 'vconsole'; |
|
|
|
import { Loading } from 'vant'; |
|
|
|
import {getEnterpriseMerchantAuthorization, getSzyptLoginAuth} from '../api/Home'; |
|
|
|
import {queryEnforcementInspectionProgramListNoPermission} from "@/api/enforce"; |
|
|
|
|
|
|
|
const isLoading = ref(true); |
|
|
|
const {useCommon} = $globalStore; |
|
|
|
const router = useRouter(); |
|
|
|
const route = useRoute(); |
|
|
|
@ -71,6 +88,29 @@ |
|
|
|
listFinished: false, // 是否加载完成标识 |
|
|
|
key: 0, |
|
|
|
}); |
|
|
|
// 模拟异步数据加载 |
|
|
|
// setTimeout(() => { |
|
|
|
|
|
|
|
// // 如果不是执法用户 则跳转 |
|
|
|
// router.push( |
|
|
|
// { |
|
|
|
// path: "/noAccess" |
|
|
|
// }); |
|
|
|
// isLoading.value = false; |
|
|
|
|
|
|
|
// }, 3000); |
|
|
|
|
|
|
|
//定时器 |
|
|
|
let noticeObj = reactive({ |
|
|
|
noticeList: [], |
|
|
|
notificationtext: "", |
|
|
|
noticeTimer: null, |
|
|
|
itemWidth: 0, |
|
|
|
offset: 0, |
|
|
|
step: 3, |
|
|
|
speed: 20, |
|
|
|
}); |
|
|
|
|
|
|
|
const data = reactive({}); |
|
|
|
const adviceList = reactive([]); |
|
|
|
const boutiqueAttr = reactive({ |
|
|
|
@ -94,6 +134,7 @@ |
|
|
|
// boutique = res?.data; |
|
|
|
// } |
|
|
|
}; |
|
|
|
var noticeStr = reactive(""); |
|
|
|
|
|
|
|
/**扫码入企 */ |
|
|
|
const toScanCodeView = async () => { |
|
|
|
@ -124,18 +165,39 @@ |
|
|
|
queryEnforcementInspectionProgramListNoPermission({},success =>{ |
|
|
|
console.log(success) |
|
|
|
if(success.data.length > 4 ){ |
|
|
|
for (let i = 0; i <= 3; i++) { |
|
|
|
for (let i = 0; i < 1; i++) { |
|
|
|
carouselList.push(success.data[i]); |
|
|
|
noticeObj.noticeList.push(success.data[i].planName) |
|
|
|
// noticeStr += success.data[i].planName + " "; |
|
|
|
// noticeStr += success.data[i].planName != null ?success.data[i].planName + "":""; |
|
|
|
} |
|
|
|
noticeStr += success.data[0].planName != null ?success.data[0].planName + "":""; |
|
|
|
}else{ |
|
|
|
carouselList = success.data; |
|
|
|
|
|
|
|
for (let i = 0; i <= success.data.length; i++) { |
|
|
|
// carouselList.push(success.data[i]); |
|
|
|
noticeObj.noticeList.push(success.data[i].planName); |
|
|
|
} |
|
|
|
noticeStr += success.data[0].planName != null ?success.data[0].planName + "":""; |
|
|
|
} |
|
|
|
freshMap.key = 1 |
|
|
|
console.log(carouselList) |
|
|
|
console.log(carouselList); |
|
|
|
// timerObj.timer = setInterval(flushMessage, 4000); |
|
|
|
setNotificationMove(); |
|
|
|
},error =>{ |
|
|
|
|
|
|
|
}) |
|
|
|
} |
|
|
|
const flushMessage =() =>{ |
|
|
|
timerObj.value++; |
|
|
|
freshMap.key = timerObj.value; |
|
|
|
if(carouselList.length == timerObj.value){ |
|
|
|
timerObj.value = 0; |
|
|
|
} |
|
|
|
freshMap.key = timerObj.value; |
|
|
|
noticeStr = carouselList[timerObj.value].planName |
|
|
|
} |
|
|
|
|
|
|
|
//下拉刷新 |
|
|
|
const onRefresh = () => { |
|
|
|
@ -167,6 +229,7 @@ |
|
|
|
// { |
|
|
|
// path: "/noAccess" |
|
|
|
// }); |
|
|
|
// isLoading.value = false; |
|
|
|
// } |
|
|
|
}, error => { |
|
|
|
|
|
|
|
@ -178,7 +241,54 @@ |
|
|
|
}, error => { |
|
|
|
}) |
|
|
|
queryList(); |
|
|
|
|
|
|
|
}); |
|
|
|
const setNotificationMove =()=>{ |
|
|
|
// 清除定时器 |
|
|
|
clearInterval(noticeObj.noticeTimer); |
|
|
|
const notificationContainer = document.getElementById( |
|
|
|
"notification-container" |
|
|
|
); |
|
|
|
const notificationWidth = notificationContainer.offsetWidth; |
|
|
|
let index = 0; |
|
|
|
// 播报内容赋值 |
|
|
|
noticeObj.notificationtext = noticeObj.noticeList[index]; |
|
|
|
const notification = document.getElementById("notification"); |
|
|
|
noticeObj.offset = notificationWidth; |
|
|
|
// 初始化x轴平移距离 |
|
|
|
notification.style.transform = `translateX(${noticeObj.offset}px)`; |
|
|
|
// 当前通知的宽度 |
|
|
|
noticeObj.itemWidth = noticeObj.notificationtext.length * 20; |
|
|
|
noticeObj.noticeTimer = setInterval(() => { |
|
|
|
noticeObj.offset -= noticeObj.step; |
|
|
|
if (noticeObj.offset < -noticeObj.itemWidth) { |
|
|
|
noticeObj.offset = notificationWidth; |
|
|
|
if (index >= noticeObj.noticeList.length - 1) { |
|
|
|
index = 0; |
|
|
|
} else { |
|
|
|
index++; |
|
|
|
} |
|
|
|
noticeObj.notificationtext = noticeObj.noticeList[index]; |
|
|
|
noticeObj.itemWidth = noticeObj.notificationtext.length * 20; |
|
|
|
} |
|
|
|
notification.style.transform = `translateX(${noticeObj.offset}px)`; |
|
|
|
}, noticeObj.speed); |
|
|
|
} |
|
|
|
const delayNoticeMove = () =>{ |
|
|
|
const notification = document.getElementById("notification"); |
|
|
|
let currentOffset = notification.style.transform; |
|
|
|
if (currentOffset) { |
|
|
|
currentOffset = currentOffset.split("(")[1]; |
|
|
|
currentOffset = currentOffset.substring(0, currentOffset.indexOf("px")); |
|
|
|
let duration = ((Number(currentOffset) + noticeObj.itemWidth) / noticeObj.step) * noticeObj.speed; |
|
|
|
// 判断当前还有多久滚动完毕 添加一个setTimeout等待滚动结束后重新计时 |
|
|
|
setTimeout(() => { |
|
|
|
this.setNotificationMove(); |
|
|
|
}, duration); |
|
|
|
} else { |
|
|
|
this.setNotificationMove(); |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<style lang="less" scoped> |
|
|
|
@ -192,9 +302,9 @@ |
|
|
|
.warp_body { |
|
|
|
position: relative; |
|
|
|
background: #c6e6ff url("../assets/images/bg_el.jpg") no-repeat top; |
|
|
|
background-size: auto 100%; |
|
|
|
background-size: 100% auto; |
|
|
|
overflow-x: hidden; |
|
|
|
|
|
|
|
margin-top: 0%; |
|
|
|
.carousel_box { |
|
|
|
height: 150px; |
|
|
|
width: 100%; |
|
|
|
@ -226,7 +336,7 @@ |
|
|
|
.box-qr-code-text { |
|
|
|
position: absolute; |
|
|
|
z-index: 10; |
|
|
|
top: 0.35rem; |
|
|
|
top: 10%; |
|
|
|
right: 0.35rem; |
|
|
|
display: block; |
|
|
|
font-size: 0.5rem; |
|
|
|
@ -270,7 +380,7 @@ |
|
|
|
.box-info-text { |
|
|
|
position: absolute; |
|
|
|
z-index: 10; |
|
|
|
top: 0.35rem; |
|
|
|
top: 10%; |
|
|
|
right: 0.35rem; |
|
|
|
display: block; |
|
|
|
font-size: 0.5rem; |
|
|
|
@ -314,7 +424,7 @@ |
|
|
|
.box-complaint-text { |
|
|
|
position: absolute; |
|
|
|
z-index: 10; |
|
|
|
top: 0.35rem; |
|
|
|
top: 10%; |
|
|
|
right: 0.35rem; |
|
|
|
display: block; |
|
|
|
font-size: 0.5rem; |
|
|
|
@ -356,7 +466,25 @@ |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.streamer, .noticbox { |
|
|
|
.streamer { |
|
|
|
display: flex; |
|
|
|
position: absolute; |
|
|
|
top: calc(1% + 10vh); |
|
|
|
right: 3%; |
|
|
|
z-index: 999; |
|
|
|
padding: 0 0.25rem; |
|
|
|
width: 90%; |
|
|
|
min-height: 1rem; |
|
|
|
background-color: rgba(249, 238, 219, .9); |
|
|
|
border-radius: 0.5rem; |
|
|
|
color: #c35b01; |
|
|
|
// font-size: 0.45rem; |
|
|
|
line-height: 1.0rem; |
|
|
|
white-space: nowrap; |
|
|
|
box-sizing: content-box; |
|
|
|
} |
|
|
|
|
|
|
|
.noticbox { |
|
|
|
display: flex; |
|
|
|
position: absolute; |
|
|
|
top: calc(1% + 10vh); |
|
|
|
@ -450,4 +578,22 @@ |
|
|
|
background: url("../assets/images/logo.png") no-repeat; |
|
|
|
background-size: 100% auto; |
|
|
|
} |
|
|
|
.loading-div{ |
|
|
|
position: absolute; |
|
|
|
top: 45%; |
|
|
|
left: 48%; |
|
|
|
} |
|
|
|
.notice-bar-container { |
|
|
|
margin-bottom: 10px; |
|
|
|
} |
|
|
|
.notice-bar-container:last-child { |
|
|
|
margin-bottom: 0; |
|
|
|
} |
|
|
|
// .notification{ |
|
|
|
// height: 100%; |
|
|
|
// font-size: 10px; |
|
|
|
// z-index: 9999; |
|
|
|
// width: 100%; |
|
|
|
// color: black; |
|
|
|
// } |
|
|
|
</style> |
|
|
|
|