通过伪元素,实现这个和step长得差不多的样式

<template>
<el-select
v-model="value"
placeholder="请选择提报单位"
style="width: 430px"
>
<el-option
v-for="(item, i) in officeList"
:class="'el-option ' + getClass(i)"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
value: "",
officeList: [],
};
},
created() {
this.officeList = [
{
value: "选项1",
label: "黄金糕",
},
{
value: "选项2",
label: "双皮奶",
},
{
value: "选项3",
label: "蚵仔煎",
},
{
value: "选项4",
label: "龙须面",
},
{
value: "选项5",
label: "北京烤鸭",
},
];
},
methods: {
getClass(i) {
if (i === 0) {
if (this.officeList.length > 1) return "el-option-start";
else return "";
} else if (i === this.officeList.length - 1) {
return "el-option-end";
} else {
return "el-option-center";
}
},
},
};
</script>
<style lang="scss" scoped>
.el-option {
width: 430px;
--round-color: #bebfc2;
}
.el-option:hover {
color: #1e7e73;
font-weight: 600;
background-color: #e9f7f7;
--round-color: #1e7e73;
}
.el-option-start::before {
content: "";
position: absolute;
top: 50%;
left: 10px;
height: 50%;
border-left: 1px dashed var(--round-color);
}
.el-option-center::before {
content: "";
position: absolute;
top: 0;
left: 10px;
height: 100%;
border-left: 1px dashed var(--round-color);
}
.el-option-end::before {
content: "";
position: absolute;
top: 0;
left: 10px;
height: 50%;
border-left: 1px dashed var(--round-color);
}
.el-option::after {
content: "";
position: absolute;
top: 50%;
left: 10px;
transform: translate(-40%, -50%);
width: 8px;
height: 8px;
border-radius: 50%;
border: 1px solid var(--round-color);
background: #fff;
}
</style>