You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
frontend/src/views/components/carouselChart.vue

273 lines
6.9 KiB
Vue

2 years ago
<template>
<div class="thumb-example">
<!-- swiper1 -->
<swiper
class="swiper gallery-top"
:options="swiperOptionTop"
ref="swiperTop"
>
<swiper-slide
class="slide-1"
2 years ago
v-for="(item, index) in terminalPhoto"
:key="item.id"
>
2 years ago
<viewer class="bigimg" v-if="item.path.indexOf('nopic') == -1">
<!-- <img :src="item.path + '!1280x720'" alt="" /> -->
<img v-if="index == 0" :src="item.path + '!1280x720'" />
2 years ago
<img
2 years ago
v-else
2 years ago
src="../../assets/img/loading.jpg"
:data-src="item.path + '!1280x720'"
2 years ago
class="swiper-lazy"
/>
</viewer>
2 years ago
<div class="bigimg" v-else>
<img :src="item.path" alt="" />
</div>
</swiper-slide>
<div
class="swiper-button-next swiper-button-white"
slot="button-next"
></div>
<div
class="swiper-button-prev swiper-button-white"
slot="button-prev"
></div>
</swiper>
<!-- swiper2 Thumbs -->
<swiper
class="swiper gallery-thumbs"
:options="swiperOptionThumbs"
ref="swiperThumbs"
>
<swiper-slide
class="slide"
v-for="(item, index) in terminalPhoto"
:key="item.id"
>
2 years ago
<div class="bigimg" v-if="item.path.indexOf('nopic') == -1">
<!-- <img :src="item.path + '!1280x720'" alt="" /> -->
2 years ago
<img v-if="index == 0" :src="item.path + '!260x160'" />
<img
v-else
src="../../assets/img/loading.jpg"
:data-src="item.path + '!260x160'"
class="swiper-lazy"
/>
</div>
<div class="bigimg" v-else>
<img :src="item.path" alt="" />
</div>
<!-- <img v-if="index == 0" :src="item.path + '!1280x720'" />
2 years ago
2 years ago
<img
2 years ago
src="item.path + '!260x160'"
2 years ago
alt=""
2 years ago
:data-src="item.path + '!260x160'"
class="swiper-lazy"
v-else-if="item.path.indexOf('nopic') == -1"
2 years ago
/>
2 years ago
<img :src="item.path" alt="" v-else /> -->
2 years ago
<p class="timeInfo" v-if="item.path.indexOf('nopic') == -1">
2 years ago
<el-tooltip
class="item"
effect="dark"
content="拍照时间"
placement="top-start"
>
<span>{{ $moment(item.photoTime).format("HH:mm:ss") }}</span>
</el-tooltip>
(
<el-tooltip
class="item"
effect="dark"
content="图片上传时间"
placement="top-start"
>
<span> {{ $moment(item.recvTime).format("HH:mm:ss") }}</span>
</el-tooltip>
)
2 years ago
<span>--通道{{ item.channelId }}</span>
2 years ago
</p>
</swiper-slide>
</swiper>
</div>
2 years ago
</template>
<script>
2 years ago
import { Swiper, SwiperSlide } from "vue-awesome-swiper";
import "swiper/css/swiper.css";
2 years ago
export default {
2 years ago
components: {
Swiper,
SwiperSlide,
},
props: {
terminalPhoto: {
type: Array,
default: () => [],
},
},
data() {
return {
swiperOptionTop: {
2 years ago
spaceBetween: 10,
2 years ago
//loop: true,
freeMode: true,
2 years ago
// loopedSlides: 1,
2 years ago
lazy: {
loadPrevNext: true,
2 years ago
loadPrevNextAmount: 1,
2 years ago
loadOnTransitionStart: true,
},
2 years ago
// lazyLoading: true, //懒加载开启
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
2 years ago
observer: true, //修改swiper自己或子元素时自动初始化swiper
observeParents: true, //修改swiper的父元素时自动初始化swiper
onSlideChangeEnd: function (swiper) {
swiper.update();
},
},
swiperOptionThumbs: {
spaceBetween: 10,
2 years ago
centeredSlides: true,
slidesPerView: "auto",
2 years ago
touchRatio: 0.2,
2 years ago
lazyLoading: true, //懒加载开启
slideToClickedSlide: true,
2 years ago
lazy: {
loadPrevNext: true,
loadPrevNextAmount: 5,
2 years ago
loadOnTransitionStart: true,
//loadOnTransitionStart: true,
},
observer: true, //修改swiper自己或子元素时自动初始化swiper
observeParents: true, //修改swiper的父元素时自动初始化swiper
onSlideChangeEnd: function (swiper) {
swiper.update();
},
2 years ago
//loop: true,
2 years ago
//loopedSlides: 4,
},
};
},
2 years ago
mounted() {
this.$nextTick(() => {
const swiperTop = this.$refs.swiperTop.$swiper;
const swiperThumbs = this.$refs.swiperThumbs.$swiper;
swiperTop.controller.control = swiperThumbs;
swiperThumbs.controller.control = swiperTop;
});
},
2 years ago
methods: {},
2 years ago
};
</script>
<style lang="less">
2 years ago
.thumb-example {
width: 100%;
display: flex;
flex-direction: column;
2 years ago
height: calc(100% - 26px);
box-sizing: border-box;
.gallery-top {
//background: #fcc;
2 years ago
width: 100%;
height: 80%;
overflow: hidden;
2 years ago
margin-bottom: 4px;
//border: 3px solid transparent;
.slide-1 {
width: 100%;
overflow: hidden;
.bigimg {
width: 100%;
height: 100%;
2 years ago
display: flex;
align-items: center;
2 years ago
justify-content: center;
}
img {
2 years ago
width: 100%;
height: 100%;
object-fit: fill;
}
}
2 years ago
.swiper-button-prev.swiper-button-disabled,
.swiper-button-next.swiper-button-disabled {
opacity: 0.35;
cursor: auto;
pointer-events: none;
display: none !important;
}
}
.gallery-thumbs {
width: 100%;
height: 18%;
.slide {
width: 20%;
border: 3px solid transparent;
overflow: hidden;
box-sizing: border-box;
display: flex;
align-items: center;
2 years ago
justify-content: center;
2 years ago
.bigimg {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
img {
2 years ago
//width: 100%;
height: 100%;
2 years ago
object-fit: fill;
}
2 years ago
}
.timeInfo {
position: absolute;
bottom: 0px;
width: 100%;
background: #f0f0f0;
padding: 8px 0px;
2 years ago
font-size: 12px;
text-align: center;
2 years ago
color: #333;
}
}
.swiper-button-next.swiper-button-white,
.swiper-container-rtl .swiper-button-prev.swiper-button-white,
.swiper-button-prev.swiper-button-white,
.swiper-container-rtl .swiper-button-next.swiper-button-white {
width: 40px;
height: 40px;
border-radius: 30px;
position: absolute;
top: 50%;
transform: translateY(-50%);
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
color: #fff;
text-align: center;
line-height: 60px;
}
2 years ago
.swiper-button-next:after,
.swiper-container-rtl .swiper-button-prev:after,
.swiper-button-prev:after,
.swiper-container-rtl .swiper-button-next:after {
transform: scale(0.5);
}
2 years ago
}
</style>