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.
225 lines
4.4 KiB
225 lines
4.4 KiB
<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>
|
|
|