济菏高速业务端
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.

226 lines
4.4 KiB

1 year ago
<template>
<div class="congestion">
<div>
<!-- :style="{ width: dataList.length * 300 }" -->
<div
:class="
selectIndex == index
? selectLine < 1
? 'item action Abefore'
: 'item action Aafter'
: selectIndex + selectLine == index
? selectLine < 1
? 'item action Aafter'
: 'item action Abefore'
: 'item'
"
v-for="(item, index) in dataList"
:key="index"
>
<i class="after" v-if="index === 0"></i>
<i
class="after"
v-else
@click="selectItem(index, -1, dataList[index - 1])"
></i>
<i class="before" v-if="index === dataList.length - 1"></i>
<i class="before" v-else @click="selectItem(index, +1, item)"></i>
<span></span>
<div>{{ item.title }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "ProgressBar",
components: {},
props: {
dataList: {
type: Array,
default: () => {
return [];
},
},
selectIndex: {
type: Number,
default: 1,
},
reset: {
type: Boolean,
default: false,
},
},
data() {
return {
// selectIndex: 0,
selectLine: -1,
};
},
created() {},
watch: {
reset: {
handler(newV) {
if (newV) {
this.selectLine = -1;
}
},
immediate: true,
},
},
methods: {
selectItem(index, num, item) {
// this.selectIndex = index;
this.selectLine = num;
if (item) this.$emit("selectItem", item, index);
},
},
mounted() {},
};
</script>
<style lang="scss" scoped>
.congestion {
width: 100%;
height: 35px;
display: inline-flex;
flex-direction: row;
> div {
position: relative;
width: 100%;
height: 35px;
display: inline-flex;
flex-direction: row;
> .item .after {
position: absolute;
display: inline-flex;
left: 0px;
top: -5px;
width: 45px !important;
height: 35px !important;
background-color: transparent;
cursor: pointer;
}
> .item .after::after {
content: "";
position: absolute;
display: inline-flex;
left: 0px;
top: 8px;
width: 45px !important;
height: 3px !important;
background-color: #c7c7c7;
}
> .item .before {
position: absolute;
display: inline-flex;
right: 0px;
top: -5px;
width: 45px;
height: 35px;
background-color: transparent;
cursor: pointer;
}
> .item .before::after {
content: "";
position: absolute;
display: inline-flex;
left: 0px;
top: 8px;
width: 45px !important;
height: 3px !important;
background-color: #c7c7c7;
}
.item.action .after::after {
background-color: #72fdc9;
}
.item.action.Aafter .after::after {
background-color: #c7c7c7 !important;
}
> .item.action.Aafter .before::after {
background-color: #72fdc9;
}
> .item.action.Abefore .after::after {
background-color: #72fdc9;
}
> .bef::before {
background-color: #72fdc9 !important;
}
> .aft::after {
background-color: #72fdc9 !important;
}
> .item.action span {
background-color: #72fdc9;
cursor: pointer;
}
> .item.action span::after {
border-color: #72fdc9;
}
> .action div {
color: #72fdc9 !important;
}
> .item {
position: relative;
width: 113px;
height: 35px;
display: inline-flex;
flex-direction: column;
justify-items: center;
> span {
position: absolute;
display: inline-flex;
width: 9px;
height: 9px;
background: #c7c7c7;
border-radius: 50%;
opacity: 1;
left: 53px;
}
> div {
font-size: 14px;
position: relative;
display: inline-flex;
width: 100%;
align-items: center;
justify-content: center;
top: 5px;
margin-top: 10px;
color: #c7c7c7;
}
> span::after {
content: "";
position: absolute;
display: inline-flex;
width: 15px;
height: 15px;
border: 1px solid #c7c7c7;
border-radius: 50%;
opacity: 1;
top: -3.5px;
left: -3px;
}
}
}
}
</style>