weipengfei 16fa02aadf 1
2024-04-20 09:54:56 +08:00

134 lines
3.0 KiB
Vue

<script setup>
import { ref, watch, onMounted, onUnmounted, nextTick } from "vue";
import { merchantCategoryListApi } from "@/api/shop.js";
const emit = defineEmits(["getStoreList"]);
const categoryList = ref([]);
const active = ref(-1);
const cactive = ref(-1);
const sactive = ref(-1);
const show = ref(false);
const getCategoryList = () => {
merchantCategoryListApi(259).then((res) => {
categoryList.value = res.data;
active.value = -1;
});
};
getCategoryList();
const changeActive = (index=-1, idnexc=-1) => {
sactive.value = index;
active.value = index;
cactive.value = idnexc;
console.log(index, idnexc);
show.value = true;
let mer_cate_id = '';
if(index>=0 &&idnexc>=0) mer_cate_id = categoryList.value[index].children[idnexc].store_category_id;
else if(index>=0) mer_cate_id = categoryList.value[index].store_category_id;
emit("getStoreList", {
mer_cate_id: mer_cate_id,
}, true);
};
</script>
<template>
<div class="classify" @mouseout="show?show=false:show=true">
<div
class="itemP"
:class="{ 'itemP-active': -1 == active }"
@click="changeActive(-1)"
>
{{ '全部' }}
</div>
<el-popover
placement="left"
width="20rem"
trigger="click"
v-for="(item, index) in categoryList"
:key="index"
:visible="index==active && sactive==index"
>
<template #reference>
<div
class="itemP"
:class="{ 'itemP-active': index == active }"
@click="changeActive(index)"
@mousemove="sactive=index"
>
{{ item.cate_name }}
</div>
</template>
<div class="active-card"
@mouseout="sactive=-1" @mousemove="sactive=index">
<div class="title">{{ item.cate_name }}</div>
<div class="list">
<div
:class="{ 'list-active': indexc == cactive }"
link
type="primary"
v-for="(chil, indexc) in item.children"
:key="indexc"
@click="changeActive(index, indexc)"
>
{{ chil.cate_name }}
</div>
</div>
</div>
</el-popover>
</div>
</template>
<style scoped lang="scss">
.classify {
height: 100%;
width: 8rem;
background-color: #fff;
border-radius: 1.2rem;
font-size: 1rem;
color: #333;
overflow-y: scroll;
.itemP {
width: 4rem;
margin: 1rem;
padding: 0.5rem 1rem;
text-align: center;
border-radius: 3rem;
cursor: pointer;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden;
text-overflow: ellipsis; /* 多余文本使用省略号显示 */
}
.itemP-active {
background-color: #1890ff;
color: #fff;
}
}
.active-card {
.title {
font-size: 1.1rem;
font-weight: bold;
color: #333;
}
.list {
display: flex;
div {
margin-right: 1rem;
margin-top: 0.5rem;
cursor: pointer;
color: #333;
}
.list-active {
color: #1890ff;
}
}
}
/* 修改滚动条的样式 */
::-webkit-scrollbar {
display: none;
}
</style>