<template> <view> <cu-custom bgColor="bg-blue"> <block slot="content">通讯录</block> </cu-custom> <u-sticky> <view style="padding: 20upx; background-color: white;"> <u-search placeholder="输入搜索的关键词" :clearabled="true" :showAction="false" v-model="searchUserName"></u-search> </view> </u-sticky> <view> <u-index-list :indexList="indexList"> <template v-for="(item, index) in list"> <!-- #ifdef APP-NVUE --> <u-index-anchor :text="list[index].letter" :key="index"></u-index-anchor> <!-- #endif --> <u-index-item :key="index"> <!-- #ifndef APP-NVUE --> <u-index-anchor :text="list[index].letter"></u-index-anchor> <!-- #endif --> <view class="list" v-for="(user, index1) in list[index].data" :key="index1"> <view class="list__item"> <u-avatar shape="square" size="35" icon="account-fill" fontSize="26" randomBgColor></u-avatar> <!-- <view class="cu-avatar round " :style="'background-image:url('+(user.photo?user.photo:'/h5/static/user/flat-avatar.png')+');'"></view> --> <text class="list__item__user-name">{{user.name}}</text> </view> <u-line></u-line> </view> </u-index-item> </template> <view style="font-size: 15px; color: gray; text-align: center; margin-top: 15px;">共{{total}}位好友</view> </u-index-list> <u-gap height="100" bgColor="#fff"></u-gap> </view> </view> </template> <script> import userService from '@/api/sys/userService' export default { data() { return { indexList: [], userList: [], total: 0, searchUserName: '' } }, created() { userService.list({current: 1, size: 10000}).then((data)=>{ this.userList = data.records this.total = data.total }).catch((e)=>{ throw e }) }, computed: { list () { let resultList = this.userList.filter((item)=>{ if(item.name.indexOf(this.searchUserName) >= 0){ return true } }) return this.pySegSort(resultList) } }, methods: { // 排序 pySegSort(arr) { if(!String.prototype.localeCompare) return null; var letters = "0abcdefghjklmnopqrstwxyz".split(''); var zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split(''); var segs = []; var curr; letters.forEach((item,i) => { curr = {letter: item, data:[]}; arr.forEach((item2) => { if((!zh[i-1] || zh[i-1].localeCompare(item2.name) <= 0) && item2.name.localeCompare(zh[i]) == -1) { curr.data.push(item2); } }); if(curr.data.length) { segs.push(curr); this.indexList.push(curr.letter) curr.data.sort((a,b)=>{ return a.name.localeCompare(b.name); }); } }); return segs; } } } </script> <style lang="scss"> .list { &__item { @include flex; padding: 6px 12px; align-items: center; &__avatar { height: 35px; width: 35px; border-radius: 3px; } &__user-name { font-size: 16px; margin-left: 10px; color: $u-main-color; } } &__footer { color: $u-tips-color; font-size: 14px; text-align: center; margin: 15px 0; } } </style>