Files
dy_app/src/pages/clockInPage/components/Timeline.vue

152 lines
3.6 KiB
Vue
Raw Normal View History

2025-09-07 21:33:05 +08:00
<template>
<div class="info-container">
<div class="title">时间轴</div>
<template v-for="(item, index) in data" :key="index">
<div :class="['item', { 'disabled': !item?.dkKsSj }]">
<div class="point"></div>
<div class="info-right">
<div class="name">{{ `${item?.count}次打卡 开始` }}</div>
<div v-if="item?.dkKsSj" class="time">打卡时间<text>{{ handleTime(item?.dkKsSj) }}</text></div>
2025-09-07 21:33:05 +08:00
<div v-if="item?.imgUrlDkKsFj" class="image">
<van-image width="80px" :src="item?.imgUrlDkKsFj" @click="onClickImg(item?.imgUrlDkKsFj)" style="flex: 1">
<template v-slot:loading>
<van-loading type="spinner" size="20" />
</template>
</van-image>
</div>
<!-- <div class="address">-->
<!-- <van-icon name="location-o" color="#1DB1FF" />-->
<!-- <div class="name">四川省成都市</div>-->
<!-- </div>-->
</div>
</div>
<div :class="['item', { 'disabled': !item?.dkJsSj }]">
<div class="point"></div>
<div class="info-right">
<div class="name">{{ `${item?.count}次打卡 离开` }}</div>
<div v-if="item?.dkJsSj" class="time">打卡时间<text>{{ handleTime(item?.dkJsSj) }}</text></div>
<div v-if="item?.imgUrlDkJsFj" class="image">
<van-image width="80px" :src="item?.imgUrlDkJsFj" @click="onClickImg(item?.imgUrlDkJsFj)" style="flex: 1">
<template v-slot:loading>
<van-loading type="spinner" size="20" />
</template>
</van-image>
</div>
2025-09-07 21:33:05 +08:00
<!-- <div class="address">-->
<!-- <van-icon name="location-o" color="#1DB1FF" />-->
<!-- <div class="name">四川省成都市</div>-->
<!-- </div>-->
2025-09-07 21:33:05 +08:00
</div>
</div>
</template>
2025-09-07 21:33:05 +08:00
</div>
</template>
<script setup>
import {ImagePreview} from "vant";
2025-09-07 21:33:05 +08:00
const props = defineProps({
data: {
type: Array,
default: []
}
})
//预览图片
function onClickImg(url) {
ImagePreview([url]);
}
const handleTime = (time) => {
if (time) return time?.split(' ')[1]
}
2025-09-07 21:33:05 +08:00
</script>
<style lang="scss" scoped>
.info-container {
padding: 0 2.67vw;
margin-top: 4vw;
.title {
color: #707070;
font-size: 3.73vw;
margin-bottom: 4vw;
}
2025-09-07 21:33:05 +08:00
.item {
color: #666;
display: flex;
align-content: center;
position: relative;
height: auto;
border-left: 0.53vw dashed #1DB1FF;
max-height: 46.93vw;
padding-bottom: 8vw;
2025-09-07 21:33:05 +08:00
.point {
position: absolute;
width: 3.2vw;
height: 3.2vw;
background: #1DB1FF;
border-radius: 50%;
flex-shrink: 0;
left: -1.665vw;
}
.info-right {
margin-left: 5.33vw;
font-family: PingFang HK, PingFang HK;
margin-top: -1.33vw;
2025-09-07 21:33:05 +08:00
.name {
font-weight: 400;
font-size: 3.73vw;
color: #707070;
}
.image {
margin-top: 2.13vw;
width: 33.87vw;
height: 18.67vw;
}
.time {
margin-top: 2.13vw;
font-size: 3.73vw;
2025-09-07 21:33:05 +08:00
text {
color: #0386FB;
}
}
.address {
margin-top: 2.13vw;
display: flex;
align-items: center;
color: #75787F;
div {
font-size: 2.67vw;
}
.name {
margin-left: 1.33vw;
}
}
}
}
.disabled {
border-left: 0.53vw dashed #EDEDED !important;
.point {
background: #EDEDED !important;
}
}
2025-09-07 21:33:05 +08:00
}
</style>