uni-app 137删除好友功能

Posted 2019ab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uni-app 137删除好友功能相关的知识,希望对你有一定的参考价值。

后端

router.js

 // 删除好友
  router.post('/friend/destroy',controller.friend.destroy);

app/controller/friend.js

'use strict';

const Controller = require('egg').Controller;
const SortWord = require('sort-word');
class FriendController extends Controller 
     // 通讯录
    async list() 
        const  ctx, app  = this;
        let current_user_id = ctx.authUser.id;
        // 获取并统计我的好友
        let friends = await app.model.Friend.findAndCountAll(
            where: 
                user_id: current_user_id
            ,
            include: [
                model: app.model.User,
                as: "friendInfo",
                attributes: ['id', 'username', 'nickname', 'avatar']
            ]
        );

        let res = friends.rows.map(item => 
            let name = item.friendInfo.nickname ? item.friendInfo.nickname : item.friendInfo.username;
            if (item.nickname) 
                name = item.nickname
            
            return 
                id: item.id,
                user_id: item.friendInfo.id,
                name,
                username: item.friendInfo.username,
                avatar: item.friendInfo.avatar
            
        );

        // 排序
        if (res.length > 0) 
            friends.rows = new SortWord(res, 'name');
        

        ctx.apiSuccess(friends);
    
    //通讯录
//   async list() 
//     const  ctx,app  = this;
//     let current_user_id = ctx.authUser.id;
//     // 获取并统计我的好友
//     let friends = await app.model.Friend.findAndCountAll(
//         where:
//             user_id:current_user_id
//         ,
//         include:[
//             as:"friendInfo",
//             model:app.model.User,
//             attributes:['id','username','nickname','avatar']
//         ]
//     );
//     let res = friends.rows.map(item=>
//         let name = item.friendInfo.nickname ? item.friendInfo.nickname : item.friendInfo.username;
//         if(item.nickname)
//             name = item.nickname
//         
//         return 
//             id:item.id,
//             user_id:item.friendInfo.id,
//             name,
//             username:item.friendInfo.username,
//             avatar:item.friendInfo.avatar
//         
//     );
//     // 排序
//     if(res.length > 0)
//         friends.res = new SortWord(res,'name');
//     
    
//     ctx.apiSuccess(friends);
//   
  // 查看用户资料
    async read() 
        const  ctx, app  = this;
        let current_user_id = ctx.authUser.id;

        let user_id = ctx.params.id ? parseInt(ctx.params.id) : 0;

        let user = await app.model.User.findOne(
            where: 
                id: user_id,
                status: 1
            ,
            attributes: 
                exclude: ['password']
            
            // include: [
            //     model: app.model.Moment,
            //     order: [
            //         ['id', 'desc']
            //     ],
            //     limit: 1
            // ]
        );

        if (!user) 
            ctx.throw(400, '用户不存在');
        


        let res = 
            id: user.id,
            username: user.username,
            nickname: user.nickname ? user.nickname : user.username,
            avatar: user.avatar,
            sex: user.sex,
            sign: user.sign,
            area: user.area,
            friend: false
        

        let friend = await app.model.Friend.findOne(
            where: 
                friend_id: user_id,
                user_id: current_user_id
            ,
            include: [
                model: app.model.Tag,
                attributes: ['name']
            ]
        );

        if (friend) 
            res.friend = true
            if (friend.nickname) 
                res.nickname = friend.nickname;
            
            res = 
                ...res,
                lookme: friend.lookme,
                lookhim: friend.lookhim,
                star: friend.star,
                isblack: friend.isblack,
                tags: friend.tags.map(item => item.name),
                moments: user.moments
            ;
        

        ctx.apiSuccess(res);
    
    
  // 移入/移除黑名单
  async setblack() 
    const  ctx, app  = this;
    let current_user_id = ctx.authUser.id;
    let id = ctx.params.id ? parseInt(ctx.params.id) : 0;
    // 参数验证
    ctx.validate(
        isblack: 
            type: 'int',
            range: 
                in: [0, 1]
            ,
            required: true,
            desc: '移入/移除黑名单'
        ,
    );

    let friend = await app.model.Friend.findOne(
        where: 
            friend_id: id,
            user_id: current_user_id
        
    );
    if (!friend) 
        ctx.throw(400, '该记录不存在');
    

    friend.isblack = ctx.request.body.isblack;
    await friend.save();

    ctx.apiSuccess('ok');

  // 设置/取消星标好友
  async setstar() 
        const  ctx, app  = this;
        let current_user_id = ctx.authUser.id;
        let id = ctx.params.id ? parseInt(ctx.params.id) : 0;
        // 参数验证
        ctx.validate(
            star: 
                type: 'int',
                range: 
                    in: [0, 1]
                ,
                required: true,
                desc: '设置/取消星标好友'
            ,
        );

        let friend = await app.model.Friend.findOne(
            where: 
                friend_id: id,
                user_id: current_user_id,
                isblack: 0
            
        );

        if (!friend) 
            ctx.throw(400, '该记录不存在');
        

        friend.star = ctx.request.body.star;
        await friend.save();

        ctx.apiSuccess('ok');
     
  // 设置朋友圈权限
  async setMomentAuth() 
        const  ctx, app  = this;
        let current_user_id = ctx.authUser.id;
        let id = ctx.params.id ? parseInt(ctx.params.id) : 0;

        // 参数验证
        ctx.validate(
            lookme: 
                type: 'int',
                range: 
                    in: [0, 1]
                ,
                required: true
            ,
            lookhim: 
                type: 'int',
                range: 
                    in: [0, 1]
                ,
                required: true
            ,
        );

        let friend = await app.model.Friend.findOne(
            where: 
                user_id: current_user_id,
                friend_id: id,
                isblack: 0
            
        );
        if (!friend) 
            ctx.throw(400, '该记录不存在');
        
        let  lookme, lookhim  = ctx.request.body;
        friend.lookhim = lookhim;
        friend.lookme = lookme;

        await friend.save();

        ctx.apiSuccess('ok');
    
    
  // 设置备注和标签
  async setremarkTag()
      const  ctx, app  = this;
        let current_user_id = ctx.authUser.id;
        let id = ctx.params.id ? parseInt(ctx.params.id) : 0;
        // 参数验证
        ctx.validate(
            nickname: 
                type: 'string',
                required: false,
                desc: "昵称"
            ,
            tags: 
                type: 'string',
                required: true,
                desc: "标签"
            ,
        );
        // 查看该好友是否存在
        let friend = await app.model.Friend.findOne(
            where: 
                user_id: current_user_id,
                friend_id: id,
                isblack: 0
            ,
            include: [
                model: app.model.Tag
            ]
        );
        if (!friend) 
            ctx.throw(400, '该记录不存在');
        

        let  tags, nickname  = ctx.request.body;
        // // 设置备注
        friend.nickname = nickname;
        await friend.save();

        // 获取当前用户所有标签
        let allTags = await app.model.Tag.findAll(
            where: 
                user_id: current_user_id
            
        );

        let allTagsName = allTags.map(item => item.name);

        // 新标签
        let newTags = tags.split(',');

        // 需要添加的标签
        let addTags = newTags.filter(item => !allTagsName.includes(item));
        addTags = addTags.map(name => 
            return 
                name,
                user_id: current_user_id
            
        );
        // 写入tag表
        let resAddTags = await app.model.Tag.bulkCreate(addTags);

        // 找到新标签的id
        newTags = await app.model.Tag.findAll(
            where: 
                user_id: current_user_id,
                name: newTags
            
        );

        let oldTagsIds = friend.tags.map(item => item.id);
        let newTagsIds = newTags.map(item => item.id);

        let addTagsIds = newTagsIds.filter(id => !oldTagsIds.includes(id));
        let delTagsIds = oldTagsIds.filter(id => !newTagsIds.includes(id));

        // 添加关联关系
        addTagsIds = addTagsIds.map(tag_id => 
            return 
                tag_id,
                friend_id: friend.id
            
        );

        app.model.FriendTag.bulkCreate(addTagsIds);

        // 删除关联关系
        app.model.FriendTag.destroy(
            where: 
                tag_id: delTagsIds,
                friend_id: friend.id
            
        );

        ctx.apiSuccess('ok');
  
  // 删除好友
  async destroy()
      const  ctx,app  = this;
      let current_user_id = ctx.authUser.id;
      ctx.validate(
          friend_id:
              type:'int',
              required:true,
              desc:'好友id'
          
      );
      let friend_id = ctx.request.body;
      await app.model.Friend.destroy(
          where:
              user_id:current_user_id,
              friend_id
          
      );
      
      app.model.Friend.destroy(
          where:
              user_id:friend_id,
              friend_id:current_user_id
          
      );
      return ctx.apiSuccess('ok');
  


module.exports = FriendController;

前端

/pages/mail/user-base/user-base.vue

<template>
	<view class="page">
		<!-- 导航栏 -->
		<free-nav-bar showBack :showRight="detail.friend" bgColor="bg-white">
			<free-icon-button slot="right" v-if="detail.friend"><text class="iconfont font-md"
					@click="openAction">&#xe6fd;</text></free-icon-button>
		</free-nav-bar>
		<view class="px-3 py-4 flex align-center bg-white border-bottom">
			<free-avatar :src="detail.avatar" size="120"></free-avatar>

			<view class="flex flex-column ml-3 flex-1">
				<view class="font-lg font-weight-bold flex justify-between">
					<text class="font-lg font-weight-bold mb-1">detail.nickname</text>
					<image v-if="detail.star" src="/static/images/star.png" style="width: 40rpx;height: 40rpx;"></image>
				</view>
				<text class="font-md text-light-muted mb-1">账号:detail.username</text>
				<!-- <text class="font-md text-light-muted">地区:广东广州</text> -->
			</view>
		</view>

		<free-list-item v-if="detail.friend" showRight :showLeftIcon="false" @click="navigate(tagPath)">
			<view class="flex align-center">
				<text class="font-md text-dark mr-3">标签</text>
				<text class="font-md text-light-muted mr-2" v-for="(item,index) in detail.tags"
					:key="index">item</text>
			</view>
		</free-list-item>
		<free-divider></free-divider>
		<free-list-item v-if="detail.friend" showRight :showLeftIcon="false"以上是关于uni-app 137删除好友功能的主要内容,如果未能解决你的问题,请参考以下文章

uni-app 180查看好友朋友圈完善

uni-app 133好友申请实时通知

uni-app 134同意添加好友实时通知

uni-app 181查看好友朋友圈完善

uni-app 182查看好友朋友圈完善

uni-app 105删除指定会话功能