|
|
<template>
|
|
|
<transition name="fade">
|
|
|
<div v-show="value" class="img-preview">
|
|
|
<i class="el-icon-close close" @click="$emit('input',false)"></i>
|
|
|
<div class="mask" @click.prevent.stop="$emit('input',false)"></div>
|
|
|
<div class="img-container">
|
|
|
<div style="background: #0d2067;height: 100%;width: 100%;display: flex;justify-content: space-evenly;align-items: center;flex-direction: column;">
|
|
|
<div class="label">{{ label }}</div>
|
|
|
|
|
|
<carousel-3d :key="key" :autoplay="true" :autoplay-timeout="5000" :display="3" :perspective="40" :width="660" :height="460" :controlsVisible="true">
|
|
|
<slide v-for="(img, i) in data.files ? data.files.map(i => i.url) : myFiles" :index="i">
|
|
|
<img style="width: 100%;height: 100%;object-fit: cover;" :src="img" alt="">
|
|
|
</slide>
|
|
|
</carousel-3d>
|
|
|
|
|
|
<div class="label">
|
|
|
<template v-if="data.customer">
|
|
|
<span>被护理人:{{ data.customer.name }}</span>
|
|
|
</template>
|
|
|
<template v-if="data.nurse">
|
|
|
<span>护理人:{{ data.nurse.name }}</span>
|
|
|
</template>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</transition>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import { scheduleLog } from "@/api/schedule"
|
|
|
import { Carousel3d, Slide } from 'vue-carousel-3d';
|
|
|
export default {
|
|
|
components: {
|
|
|
Carousel3d,
|
|
|
Slide,
|
|
|
},
|
|
|
props: {
|
|
|
value: {
|
|
|
type: Boolean,
|
|
|
default: false,
|
|
|
required: true
|
|
|
},
|
|
|
data: {
|
|
|
type: Object,
|
|
|
default: () => ({})
|
|
|
},
|
|
|
label: String
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
key: 0,
|
|
|
myFiles: []
|
|
|
}
|
|
|
},
|
|
|
methods: {},
|
|
|
computed: {},
|
|
|
watch: {
|
|
|
data(newv) {
|
|
|
if(!newv.hasOwnProperty('files')) {
|
|
|
scheduleLog({
|
|
|
id: newv.id
|
|
|
},false).then(res => {
|
|
|
this.myFiles = res?.map(i => i.upload_list)?.flat()?.map(i => i.upload?.url) || []
|
|
|
++this.key
|
|
|
})
|
|
|
}
|
|
|
//每次都重新渲染 处理样式问题
|
|
|
++this.key
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
.img-preview {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
position: fixed;
|
|
|
z-index: 999;
|
|
|
inset: 0 0 0 0;
|
|
|
|
|
|
.close {
|
|
|
padding: 10px;
|
|
|
font-size: 45px;
|
|
|
width: 65px;
|
|
|
height: 65px;
|
|
|
color: #fff;
|
|
|
position: absolute;
|
|
|
right: 120px;
|
|
|
top: 120px;
|
|
|
border-radius: 100%;
|
|
|
background-color: #5ec9ea;
|
|
|
}
|
|
|
.mask {
|
|
|
background: #00000033;
|
|
|
position: fixed;
|
|
|
z-index: 999;
|
|
|
inset: 0 0 0 0;
|
|
|
transform: scale(2, 2);
|
|
|
}
|
|
|
.img-container {
|
|
|
width: 1517px;
|
|
|
height: 839px;
|
|
|
border-radius: 10px;
|
|
|
box-sizing: border-box;
|
|
|
background: conic-gradient(
|
|
|
#de8d51,
|
|
|
#90b0b0,
|
|
|
#b9723d,
|
|
|
#7ac5e3
|
|
|
);
|
|
|
position: relative;
|
|
|
z-index: 1000;
|
|
|
padding: 5px;
|
|
|
|
|
|
.label {
|
|
|
font-size: 32px;
|
|
|
color: #aaddff;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
::v-deep .carousel-3d-container {
|
|
|
//margin: auto;
|
|
|
}
|
|
|
::v-deep .carousel-3d-controls .next,::v-deep .carousel-3d-controls .prev {
|
|
|
color: #fff;
|
|
|
font-size: 120px;
|
|
|
}
|
|
|
::v-deep .carousel-3d-controls .next {
|
|
|
right: 180px;
|
|
|
}
|
|
|
::v-deep .carousel-3d-controls .prev {
|
|
|
left: 180px;
|
|
|
}
|
|
|
</style>
|