317 lines
6.0 KiB
Vue
317 lines
6.0 KiB
Vue
|
|
<template>
|
|||
|
|
<view>
|
|||
|
|
<uni-nav-bar fixed statusBar right-text="取消" :border="false" background-color="#FFFFFF" @clickRight="cancel"
|
|||
|
|
:showMenuButtonWidth="true">
|
|||
|
|
<template v-slot:left>
|
|||
|
|
<view class="fa">
|
|||
|
|
<image class="left_return" @click="back" src="/static/images/return.png" mode="widthFix">
|
|||
|
|
</image>
|
|||
|
|
<view class="input-view">
|
|||
|
|
<uni-icons class="input-uni-icon" type="search" size="18" color="#999" />
|
|||
|
|
<input confirm-type="search" class="nav-bar-input" type="text" placeholder="输入ID或名称"
|
|||
|
|
v-model="form.search" @confirm="confirm" />
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
</uni-nav-bar>
|
|||
|
|
<view class="body">
|
|||
|
|
<view class="list">
|
|||
|
|
<view class="list_content fa sb" v-for="(item, index) in friendList" :key="index">
|
|||
|
|
<view class="list_module fa f1">
|
|||
|
|
<image :src="item.avatar ? item.avatar : ''" mode="aspectFill"></image>
|
|||
|
|
<view class="list_detail f1">
|
|||
|
|
<view class="list_name h1">{{ item.nickname ? item.nickname : '' }}</view>
|
|||
|
|
<view class="list_id h1">ID:{{ item.user_number ? item.user_number : '' }}</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="list_add fa" @click="addClick(item.id)">
|
|||
|
|
<image src="/static/images/search_add.png" mode="widthFix"></image>添加
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="not" v-if="friendList.length == 0">
|
|||
|
|
<image
|
|||
|
|
src="https://nvlovers.oss-cn-qingdao.aliyuncs.com/uploads/20251226/3df8bbb66033583f5f4d9fa92f50ee6d.png"
|
|||
|
|
mode="widthFix"></image>
|
|||
|
|
<view class="not_title">暂无好友</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import {
|
|||
|
|
FriendSearch,
|
|||
|
|
FriendApply
|
|||
|
|
} from '@/utils/api.js'
|
|||
|
|
import notHave from '@/components/not-have.vue';
|
|||
|
|
import topSafety from '@/components/top-safety.vue';
|
|||
|
|
import tabBar from '@/components/tab-bar.vue';
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
notHave,
|
|||
|
|
topSafety,
|
|||
|
|
tabBar,
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
form: {
|
|||
|
|
search: '',
|
|||
|
|
page: 1,
|
|||
|
|
},
|
|||
|
|
addfriend: {
|
|||
|
|
friend_id: '',
|
|||
|
|
message: '',
|
|||
|
|
},
|
|||
|
|
friendList: [],
|
|||
|
|
getMenuInfoList: '',
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onLoad() {
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
onShow() {
|
|||
|
|
// #ifdef MP-WEIXIN
|
|||
|
|
this.getMenuInfo()
|
|||
|
|
// #endif
|
|||
|
|
},
|
|||
|
|
onReachBottom() {
|
|||
|
|
++this.form.page
|
|||
|
|
this.friendSearch()
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
friendSearch() {
|
|||
|
|
FriendSearch(this.form).then(res => {
|
|||
|
|
if (res.code == 1) {
|
|||
|
|
this.friendList.push(...res.data.data)
|
|||
|
|
console.log(this.friendList)
|
|||
|
|
} else {
|
|||
|
|
uni.showToast({
|
|||
|
|
title: res.msg,
|
|||
|
|
icon: 'none',
|
|||
|
|
position: 'top'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
friendApply() {
|
|||
|
|
FriendApply(this.addfriend).then(res => {
|
|||
|
|
if (res.code == 1) {
|
|||
|
|
uni.showToast({
|
|||
|
|
title: res.msg,
|
|||
|
|
icon: 'none',
|
|||
|
|
position: 'top'
|
|||
|
|
})
|
|||
|
|
} else {
|
|||
|
|
uni.showToast({
|
|||
|
|
title: res.msg,
|
|||
|
|
icon: 'none',
|
|||
|
|
position: 'top'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
addClick(id) {
|
|||
|
|
this.addfriend.friend_id = id
|
|||
|
|
console.log(this.addfriend)
|
|||
|
|
console.log(this.addfriend.friend_id)
|
|||
|
|
this.friendApply()
|
|||
|
|
},
|
|||
|
|
confirm(e) {
|
|||
|
|
this.form.page = 1
|
|||
|
|
this.friendList = []
|
|||
|
|
this.form.search = e.detail.value;
|
|||
|
|
// 执行搜索逻辑
|
|||
|
|
console.log('搜索关键词:', this.form);
|
|||
|
|
this.friendSearch()
|
|||
|
|
},
|
|||
|
|
clearSearch() {
|
|||
|
|
this.searchValue = '';
|
|||
|
|
},
|
|||
|
|
back() {
|
|||
|
|
uni.navigateBack({
|
|||
|
|
delta: 1,
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
cancel() {
|
|||
|
|
uni.navigateBack({
|
|||
|
|
delta: 1,
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
getMenuInfo() {
|
|||
|
|
const menuButtonInfo = uni.getMenuButtonBoundingClientRect();
|
|||
|
|
const systemInfo = uni.getSystemInfoSync();
|
|||
|
|
|
|||
|
|
console.log('胶囊信息:', menuButtonInfo);
|
|||
|
|
|
|||
|
|
// 胶囊宽度
|
|||
|
|
const capsuleWidth = menuButtonInfo.width;
|
|||
|
|
|
|||
|
|
// 胶囊距离右侧的距离 = 屏幕宽度 - 胶囊右边界的x坐标
|
|||
|
|
const distanceFromRight = systemInfo.windowWidth - menuButtonInfo.right;
|
|||
|
|
|
|||
|
|
console.log('胶囊宽度:', capsuleWidth);
|
|||
|
|
console.log('胶囊距离右侧的距离:', distanceFromRight);
|
|||
|
|
|
|||
|
|
this.getMenuInfoList = capsuleWidth + distanceFromRight;
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
width: capsuleWidth,
|
|||
|
|
distanceFromRight: distanceFromRight,
|
|||
|
|
menuButtonInfo: menuButtonInfo
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style>
|
|||
|
|
page {
|
|||
|
|
background: #F6F8FA;
|
|||
|
|
}
|
|||
|
|
.uni-navbar__header-btns-left {
|
|||
|
|
width: 100% !important;
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
<style scoped>
|
|||
|
|
.input-view {
|
|||
|
|
flex: 1;
|
|||
|
|
display: flex;
|
|||
|
|
flex-direction: row;
|
|||
|
|
align-items: center;
|
|||
|
|
padding: 0 20rpx;
|
|||
|
|
height: 72rpx;
|
|||
|
|
background: #F8F9FA;
|
|||
|
|
border-radius: 36rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.input-uni-icon {
|
|||
|
|
margin-right: 10rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.nav-bar-input {
|
|||
|
|
flex: 1;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
color: #333;
|
|||
|
|
background-color: transparent;
|
|||
|
|
border: none;
|
|||
|
|
outline: none;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.uni-navbar__header-btns-left{
|
|||
|
|
width: 60rpx !important;
|
|||
|
|
height: 88rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.uni-navbar__header-btns-right{
|
|||
|
|
width: 60rpx !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.uni-navbar__header-container {
|
|||
|
|
padding: 0 !important;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.left_return {
|
|||
|
|
width: 48rpx;
|
|||
|
|
height: 48rpx;
|
|||
|
|
margin-right: 20rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.body {
|
|||
|
|
position: relative;
|
|||
|
|
padding: 30rpx 60rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list {
|
|||
|
|
position: relative;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_content {
|
|||
|
|
position: relative;
|
|||
|
|
margin: 0 0 30rpx 0;
|
|||
|
|
padding: 40rpx 30rpx;
|
|||
|
|
background: #FFFFFF;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_module {
|
|||
|
|
position: relative;
|
|||
|
|
overflow: hidden;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_module image {
|
|||
|
|
width: 80rpx;
|
|||
|
|
height: 80rpx;
|
|||
|
|
display: block;
|
|||
|
|
flex-shrink: 0;
|
|||
|
|
border-radius: 100rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_detail {
|
|||
|
|
position: relative;
|
|||
|
|
margin: 0 0 0 22rpx;
|
|||
|
|
overflow: hidden;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_name {
|
|||
|
|
font-weight: 500;
|
|||
|
|
font-size: 30rpx;
|
|||
|
|
color: #222222;
|
|||
|
|
line-height: 50rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_id {
|
|||
|
|
font-weight: 400;
|
|||
|
|
font-size: 26rpx;
|
|||
|
|
color: #DCDCDC;
|
|||
|
|
line-height: 30rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_add {
|
|||
|
|
position: relative;
|
|||
|
|
padding: 5rpx 22rpx;
|
|||
|
|
font-weight: 400;
|
|||
|
|
font-size: 26rpx;
|
|||
|
|
color: #222222;
|
|||
|
|
line-height: 50rpx;
|
|||
|
|
border-radius: 226rpx;
|
|||
|
|
border: 1rpx solid #DCDCDC;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.list_add image {
|
|||
|
|
margin: 0 5rpx 0 0;
|
|||
|
|
width: 30rpx;
|
|||
|
|
height: 30rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.not {
|
|||
|
|
position: relative;
|
|||
|
|
margin: 94rpx 0 0 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.not image {
|
|||
|
|
width: 344rpx;
|
|||
|
|
display: block;
|
|||
|
|
margin: 0 auto;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.not_title {
|
|||
|
|
margin: 14rpx 0 0 0;
|
|||
|
|
font-weight: 400;
|
|||
|
|
font-size: 30rpx;
|
|||
|
|
color: #9E9E9E;
|
|||
|
|
line-height: 50rpx;
|
|||
|
|
text-align: center;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.uni-navbar__header-btns-right {
|
|||
|
|
padding-right: var(--right-padding, 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.uni-navbar__header-btns-right.data-v-26544265 {
|
|||
|
|
width: 60rpx !important;
|
|||
|
|
}
|
|||
|
|
</style>
|