vue3 +vant4 实现楼梯效果

 数据接口node.js

router.get('/city', async function (req, res, next) {
  let adList=await cityModel.find().lean()
  let jsonAd={}
  let data=[]
  adList.forEach(item=>{
    jsonAd[item.code]=item
  })
  adList.forEach(item=>{
    if(!item["superior"]){
      data.push(item)
    }else{
      if(!jsonAd[item["superior"]]["children"]){
        jsonAd[item["superior"]]["children"]=[]
      }
      jsonAd[item["superior"]]["children"].push(item)
    }
  })
  // const data = await cityModel.find()
  res.send({
    code: 200,
    data
  });
});

 

<template>
    <div class="city">
        <van-index-bar>
            <div v-for="item in cityList" :key="item.type">
                <van-index-anchor :index="item.type" />
                <van-cell v-for="(item1, index) in item.list" :title="item1.name" :key="item1._id"
                    @click="handleChangePage(item1)" />
            </div>
        </van-index-bar>
    </div>
</template>

<script setup>
import pinyin from 'js-pinyin'
import { ref, inject, onMounted, reactive,computed,nextTick } from "vue"

let axios = inject("$axios")


let cityList =ref([])
let inCity = ref(null)

let getCity = async () => {
    let { data } = await axios.get("http://localhost:3000/city")
    nextTick(()=>{
    cityList.value = handleCityData(data.data)
    })
    
}

onMounted(() => {
    getCity()
})
let handleCityData = (cities) => {
    let letterArr = []
    let newCities = []
    for (let code = 65; code < 91; code++) {
        letterArr.push(String.fromCharCode(code))
    }
    letterArr.forEach((letter) => {
        let list = cities.filter(item => {
            return pinyin.getFullChars(item.name).substring(0, 1).toUpperCase() === letter
        })
        // if (list.length > 0) {
        newCities.push({
            type: letter,
            list: list
        })
        // }
    })
    return newCities
}

let handleChangePage = (index) => {

    console.log(index);
    sessionStorage.setItem("cityName",JSON.stringify(index))
}



</script>

<style lang="scss" scoped>
.city {
    width: 100%;
    height: 100%;
}
</style>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值