247 lines
5.4 KiB
Vue
247 lines
5.4 KiB
Vue
<script setup>
|
|
/**
|
|
* 添加朋友
|
|
*/
|
|
|
|
// 工具库
|
|
import util from '@/common/js/util';
|
|
// api
|
|
import api from '@/api/index.js'
|
|
import {
|
|
useStore,
|
|
} from 'vuex'
|
|
import {
|
|
ref,
|
|
reactive,
|
|
computed,
|
|
getCurrentInstance
|
|
} from 'vue'
|
|
import {
|
|
onLoad,
|
|
onReady,
|
|
onReachBottom,
|
|
onPullDownRefresh
|
|
} from '@dcloudio/uni-app'
|
|
// 代理
|
|
const {
|
|
proxy
|
|
} = getCurrentInstance()
|
|
// vuex
|
|
const store = useStore()
|
|
// 用户信息
|
|
const userinfo = computed(() => {
|
|
let result = store.state.userinfo
|
|
return result
|
|
})
|
|
// 用户列表
|
|
const userList = reactive({
|
|
data: [],
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
total: 0,
|
|
})
|
|
const keyword = ref('')
|
|
// 表单
|
|
const form = reactive({
|
|
Remark: '',
|
|
AddWording: '',
|
|
})
|
|
// 朋友
|
|
const friend = ref({})
|
|
|
|
onLoad((option) => {
|
|
if (option.account) {
|
|
keyword.value = option.account
|
|
refreshFriendList()
|
|
}
|
|
})
|
|
|
|
onReady(() => {
|
|
// proxy.$refs.friendRef.open()
|
|
})
|
|
|
|
onReachBottom(() => {
|
|
// 获取更多列表
|
|
getMoreFriendList()
|
|
})
|
|
|
|
onPullDownRefresh(() => {
|
|
refreshFriendList()
|
|
})
|
|
|
|
// 获取朋友列表
|
|
function getSearchFriendList() {
|
|
if (!keyword.value) {
|
|
util.alert('请输入你想搜索的内容')
|
|
return
|
|
}
|
|
|
|
api.news.searchUsers({
|
|
query: {
|
|
searchValue: keyword.value,
|
|
pageNum: userList.pageNum,
|
|
pageSize: userList.pageSize,
|
|
}
|
|
}).then(rs => {
|
|
if (rs.code == 200) {
|
|
const result = rs.data
|
|
if (userList.pageNum) userList.data.length = 0
|
|
// 追加朋友列表
|
|
userList.data.push(...result.rows.map(item => {
|
|
item.format_userPortrait = util.format_url(item.userPortrait, 'img')
|
|
return item
|
|
}))
|
|
// 视频列表
|
|
userList.total = rs.total
|
|
return
|
|
}
|
|
util.alert({
|
|
content: rs.msg,
|
|
showCancel: false,
|
|
})
|
|
}).finally(() => {
|
|
uni.stopPullDownRefresh()
|
|
})
|
|
}
|
|
|
|
// 重载朋友列表
|
|
function refreshFriendList() {
|
|
userList.pageNum = 1
|
|
userList.total = 0
|
|
getSearchFriendList()
|
|
}
|
|
|
|
// 获取更多朋友列表
|
|
function getMoreFriendList() {
|
|
if (userList.data.length >= userList.total) return
|
|
userList.pageNum++
|
|
getSearchFriendList()
|
|
}
|
|
|
|
// 点击用户
|
|
function handleUser(item) {
|
|
uni.navigateTo({
|
|
url: util.setUrl('/pages/index/videoHome', {
|
|
userId: item.userId,
|
|
})
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 添加好友
|
|
* @param {Object} item 用户信息
|
|
*/
|
|
function handleAdd(item) {
|
|
friend.value.userId = item.userId
|
|
friend.value.userName = item.userName
|
|
friend.value.AddWording = `你好,我是${userinfo.value.userNickname}`
|
|
proxy.$refs.friendRef.open()
|
|
}
|
|
|
|
// 填入对方昵称
|
|
function pushNickname() {
|
|
friend.value.Remark = friend.value.userName
|
|
}
|
|
|
|
// 发送好友申请
|
|
function addFriendConfirm() {
|
|
api.news.addFriend({
|
|
data: [{
|
|
toAccount: friend.value.userId,
|
|
addWording: friend.value.AddWording,
|
|
remark: friend.value.Remark,
|
|
}],
|
|
}).then(rs => {
|
|
if (rs.code == 200) {
|
|
util.alert('已发送好友申请,请等待对方同意')
|
|
proxy.$refs.friendRef.close()
|
|
return
|
|
}
|
|
util.alert({
|
|
content: rs.msg,
|
|
showCancel: false,
|
|
})
|
|
})
|
|
}
|
|
</script>
|
|
<template>
|
|
<view class="app">
|
|
<view class="searchBox ptb20 bfff">
|
|
<view class="search rows mlr20 ptb10 plr30 bar">
|
|
<uni-icons type="search" />
|
|
<input type="text" focus="true" v-model="keyword" placeholder="输入手机号/账号" class="f1 ml10"
|
|
confirm-type="search" />
|
|
<view class="btn bar sm colourful w120" @click="refreshFriendList">搜索</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="listArea plr30 bfff">
|
|
<view class="item rows ptb30 c333 f32" v-for="(item, index) in userList.data" :key="index"
|
|
@click="handleUser(item)">
|
|
<view class="avatar fs0">
|
|
<image class="wh100 cir" :src="item.imageUrl" mode="aspectFill" />
|
|
</view>
|
|
|
|
<view class="content f1 mlr20">
|
|
<view class="name">{{ item.userName }}</view>
|
|
<!-- <view class="time c999 f22">{{item.createTime}}</view> -->
|
|
</view>
|
|
|
|
<template v-if="0">
|
|
<view class="btns rows fs0" v-if="item.friendState == 1">
|
|
<view class="btn black plr20" @click.stop="">同意</view>
|
|
<view class="btn cancel plr20 ml20" @click.stop="">拒绝</view>
|
|
</view>
|
|
|
|
<view class="result fs0 c999" v-else-if="item.friendState == 2">已拒绝</view>
|
|
<view class="result fs0 c999" v-else-if="item.friendState == 3">已同意</view>
|
|
</template>
|
|
<template v-else>
|
|
<view class="btn black plr20" @click.stop="handleAdd(item)">添加好友</view>
|
|
</template>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 填充 -->
|
|
<view class="fill" style="height: 60rpx;"></view>
|
|
</view>
|
|
|
|
<!-- 设置备注 -->
|
|
<uni-popup ref="friendRef" type="bottom">
|
|
<view class="friendAlt popBot plr20 bfff">
|
|
<view class="header rows ptb30 f32">
|
|
<view class="">发送好友申请</view>
|
|
<uni-icons type="closeempty" @click="$refs.friendRef.close()" />
|
|
</view>
|
|
|
|
<view class="main mlr30">
|
|
<view class="txtplus inputBox mtb30 ptb20 plr20 br10">
|
|
<input type="text" v-model="friend.AddWording" placeholder="填写招呼语" />
|
|
</view>
|
|
|
|
<view class="txtplus inputBox mtb30 ptb20 plr20 br10">
|
|
<input type="text" v-model="friend.Remark" placeholder="设置备注" />
|
|
</view>
|
|
<view class=" mt10 c666 f28" @click="pushNickname">
|
|
<text class="push">填入</text>
|
|
<text>对方昵称</text>
|
|
</view>
|
|
|
|
<view class="btn lg bar black mtb30" @click="addFriendConfirm">确定</view>
|
|
</view>
|
|
</view>
|
|
</uni-popup>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.search {
|
|
background-color: #eaeaea;
|
|
}
|
|
|
|
//
|
|
.listArea {
|
|
.item+.item {
|
|
border-top: 1rpx solid #ddd;
|
|
}
|
|
}
|
|
</style> |