vue聊天功能模块(十二)消息转发

效果

在这里插入图片描述
在这里插入图片描述

1、右击弹出列表,同时保存消息id
2、选择转发成员,转发即可
注意:转发对象可为当前聊天对象,转发成功后需判断是否是存在转发当前聊天,是的话把消息数据显示

右击事件处理

在这里插入图片描述

 //右击事件处理
      rightMessageClick(e, msgId, uid) {
        console.log('右击事件');
        this.withdrawMessageSmgId = msgId; //保存消息id
        this.withdrawMessageuid = uid; //保存消息id
        this.withdrawMessageShowDropdown = true;
        this.MsgcontextmenuRight(e);
      },
      MsgcontextmenuRight(event) {
        event.preventDefault();
        this.$refs.contentMenuMessageRight.$refs.reference = event.target;
       
        this.$refs.contentMenuMessageRight.currentVisible = !this.$refs.contentMenuMessageRight.currentVisible;
      },

转发右击列表

 <Dropdown style="z-index:9999999!important;" ref="contentMenuMessageRight"
                                          trigger="click"
                                          v-show="withdrawMessageShowDropdown"
@on-click="(name) => dblclickRihtMsgListCommand(name)">
<DropdownMenu style="z-index:9999999!important;" slot="list">
   <template>
       <template v-if="user.userId ==withdrawMessageuid">
           <DropdownItem name="withdrawMessage">撤回</DropdownItem>
       </template>
       <DropdownItem id="handleOutOtherId" name="handleOutOther">转发</DropdownItem>
       <DropdownItem name="delMsg">删除</DropdownItem>
   </template>
   <DropdownItem name="cancelBack">取消</DropdownItem>
</DropdownMenu>
</Dropdown>

转发弹框

<!--转发选人弹框-->
                <div v-show="forwardObj.showForwardObjDialog" class="msgHandleOutCtl">
                    <div id="msgHandleOutBoxMoveId" class="msgHandleOutBoxMove">

                    </div>
                    <div id="msgHandleOutBoxId" class="msgHandleOutBox">

                        <div class="msgHandleOutBox-left">
                            <div class="msgHandleOutBox-left-up">
                                <div class="msgHandleOutBox-left-upBox">
                                    <el-input placeholder="请输入搜索内容" v-model="forwardObj.conversationName">
                                        <el-button slot="append" icon="el-icon-search"
                                                   @click="handleStartOutMsgqueryConversationRecordList"></el-button>
                                    </el-input>
                                </div>

                            </div>
                            <div class="msgHandleOutBox-left-down">
                                <div class="msgHandleOutBox-left-downContainer">
                                    <div class="msgHandleOutBox-left-downItem"
                                         v-for="(item,index) in forwardObj.forwardConversationRecordList" :key="index">
                                        <div class="msgHandleOutBox-left-downItem01">
                                            <div class="msgHandleOutBox-left-downItem01Box">
                                                <div class="msgHandleOutBox-left-downItem01BoxCtl">
                                                    <template
                                                            v-if="item.conversationType ===1 ||item.conversationType ===0">
                                                        <img class="msgHandleOutBox-right-centerItem01BoxImg"
                                                             src="@/assets/icons/messages/memberLeft.png"
                                                             alt="">
                                                    </template>
                                                    <template
                                                            v-if="item.conversationType ===2 || item.conversationType ===3">
                                                        <img class="msgHandleOutBox-right-centerItem01BoxImg"
                                                             src="@/assets/icons/messages/groupLeft.png"
                                                             alt="">
                                                    </template>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="msgHandleOutBox-left-downItem02">
                                            <div class="msgHandleOutBox-left-downItem02Box">
                                                <div class="msgHandleOutBox-left-downItem02BoxCtl">
                                                    <span class="msgHandleOutBox-left-downItem02BoxCtlText">{{item.name}}</span>
                                                </div>
                                            </div>

                                        </div>
                                        <div class="msgHandleOutBox-left-downItem03">
                                            <div class="msgHandleOutBox-left-downItem03Box">
                                                <div class="msgHandleOutBox-left-downItem03BoxCtl">
                                                    <!-- <el-button size="mini"
                                                                class="msgHandleOutBox-left-downItem03BoxCtlBtn"
                                                                type="primary"
                                                                @click="handleChooseConversationRecordList(item.conversationId,item)">
                                                         添加
                                                     </el-button>-->
                                                    <template v-if="item.chooseStatus ==1">
                                                        <img @click="handleChooseConversationRecordList(item.conversationId,item)"
                                                             class="msgHandleOutBox-hanChooseBoxImg"
                                                             src="@/assets/icons/messages/hanChoose.png"
                                                             alt="">
                                                    </template>
                                                    <template v-else>
                                                        <img @click="handleChooseConversationRecordList(item.conversationId,item)"
                                                             class="msgHandleOutBox-hanChooseBoxImg"
                                                             src="@/assets/icons/messages/noChoose.png"
                                                             alt="">
                                                    </template>
                                                </div>
                                            </div>

                                        </div>

                                    </div>
                                </div>
                            </div>
                        </div>
                        <div id="msgHandleOutBoxRightId" class="msgHandleOutBox-right">
                            <div class="msgHandleOutBox-right-up">
                                <div class="msgHandleOutBox-right-upOne">
                                    <div class="msgHandleOutBox-right-upOne-img" @click="closeShowForwardObjDialog">
                                        <img class="msgHandleOutBox-right-upOne-imgStyle"
                                             src="@/assets/icons/messages/handleOutMsg/shoutRight.png" alt="">
                                    </div>

                                </div>
                                <div class="msgHandleOutBox-right-upTwo">
                                    <div class="msgHandleOutBox-right-one">
                                        <span class="msgHandleOutBox-right-oneText">分别转发给:</span>
                                    </div>
                                    <div class="msgHandleOutBox-right-two">
                                        <span v-if="forwardObj.chooseConversationRecordList.length ===0"
                                              class="msgHandleOutBox-right-twoText">未选择聊天</span>
                                        <span v-else class="msgHandleOutBox-right-twoText">已选择{{forwardObj.chooseConversationRecordList.length}}个聊天</span>
                                    </div>
                                </div>
                            </div>
                            <div class="msgHandleOutBox-right-center">
                                <div class="msgHandleOutBox-right-center-Container">
                                    <div class="msgHandleOutBox-right-centerItem"
                                         v-for="(item,index) in forwardObj.chooseConversationRecordList" :key="index">
                                        <div class="msgHandleOutBox-right-centerItem01">
                                            <div class="msgHandleOutBox-right-centerItem01Box">
                                                <div class="msgHandleOutBox-right-centerItem01BoxCtl">
                                                    <template
                                                            v-if="item.conversationType ===1 ||item.conversationType ===0">
                                                        <img class="msgHandleOutBox-right-centerItem01BoxImg"
                                                             src="@/assets/icons/messages/memberLeft.png"
                                                             alt="">
                                                    </template>
                                                    <template
                                                            v-if="item.conversationType ===2 || item.conversationType ===3">
                                                        <img class="msgHandleOutBox-right-centerItem01BoxImg"
                                                             src="@/assets/icons/messages/groupLeft.png"
                                                             alt="">
                                                    </template>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="msgHandleOutBox-right-centerItem02">
                                            <div class="msgHandleOutBox-right-centerItem02Box">
                                                <div class="msgHandleOutBox-right-centerItem02BoxName">
                                                    <span class="msgHandleOutBox-right-centerItem02BoxNameText">{{item.name}}</span>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="msgHandleOutBox-right-centerItem03">
                                            <div id="handleDeleteConversationRecordListId"
                                                 class="msgHandleOutBox-right-centerItem03Box"
                                                 @click="handleDeleteConversationRecordList(item.conversationId)">
                                                <div class="msgHandleOutBox-right-centerItem03BoxCtl"><img
                                                        class="msgHandleOutBox-right-centerItem03BoxImg"
                                                        src="@/assets/icons/messages/handleOutMsg/shoutRight.png"
                                                        alt="">
                                                </div>
                                            </div>
                                        </div>

                                    </div>
                                </div>
                            </div>
                            <div class="msgHandleOutBox-right-down">
                                <div class="msgHandleOutBox-right-downOne">
                                    <template v-if="forwardObj.chooseConversationRecordList ==0">
                                        <div class="msgHandleOutBox-right-downOneBtnNoDatas">
                                            <span class="msgHandleOutBox-right-downOneBtnText">发送</span>
                                        </div>
                                    </template>
                                    <template v-else>
                                        <div class="msgHandleOutBox-right-downOneBtn" @click="handleSendForward">
                                            <span class="msgHandleOutBox-right-downOneBtnText">发送</span>
                                        </div>
                                    </template>


                                </div>
                                <div class="msgHandleOutBox-right-downTwo">
                                    <div class="msgHandleOutBox-right-downTwoBtn" @click="closeShowForwardObjDialog">
                                        <span class="msgHandleOutBox-right-downTwoBtnText">取消</span>
                                    </div>
                                </div>
                            </div>
                        </div>

                    </div>
                </div>

右击确认

dblclickRihtMsgListCommand(name) {
        let msgId = this.withdrawMessageSmgId;
        switch (name) {
          case 'withdrawMessage'://撤回
            this.withdrawMessage(msgId);
            break;
          case 'handleOutOther'://转发
            this.handleStartOutMsg(msgId);
            break;
          case 'delMsg'://删除
            this.delMsg(msgId);
            break;
          case 'cancelBack'://取消
            this.withdrawMessageShowDropdown = false;
            break;
        }
      },

转发弹框,支持拖动

 //转发消息
      handleStartOutMsg(msgId) {
        this.handleStartOutMsgqueryConversationRecordList();
        this.forwardObj.showForwardObjDialog = true;
        $('.msgHandleOutCtl').Tdrag(
            {
              // scope: '#app',
              handle: '#msgHandleOutBoxMoveId',
            },
        );
        if (msgId != null && msgId != '') {
          console.log('当前选中消息对象' + msgId);
          let MesDatas = this.showMesDatas;
          for (let i = 0; i < MesDatas.length; i++) {
            if (JSON.stringify(MesDatas[i]).indexOf(JSON.stringify(msgId)) != -1) {
              this.forwardObj.saveCourentMsgDataObj = MesDatas[i];//保存消息数据
              break;
            }
          }
        }
      },

获取转发弹框会话列表

 //获取转发弹框会话列表
      handleStartOutMsgqueryConversationRecordList(params) {
        params = params || null;
        MessageApi.queryConversationRecordList({
          userId: this.user.userId,//
          userType: 0,
          conversationName: this.forwardObj.conversationName
          ,
        }).then(res => {
          // 返回数据

          //定义保存会话数组对象
          let newConversationRecordList = res.obj;
          let choose = this.forwardObj.chooseConversationRecordList;
          // this.forwardObj.forwardConversationRecordList = res.obj;
          if (this.forwardObj.forwardConversationRecordList.length <= 0 && choose.length == 0) {
            for (let a = 0; a < newConversationRecordList.length; a++) {
              newConversationRecordList[a]['chooseStatus'] = 0;
            }

          } else {
            //原来保存的会话列表,有的可能有勾选
            // let oldConversationRecordList = this.forwardObj.forwardConversationRecordList;
            let oldConversationRecordList = choose;
            for (let a = 0; a < newConversationRecordList.length; a++) {
              //两者相对比,重置状态
              for (let i = 0; i < oldConversationRecordList.length; i++) {
                if (oldConversationRecordList[i].conversationId == newConversationRecordList[a].conversationId) {
                  newConversationRecordList[a]['chooseStatus'] = 1;
                } else {
                  newConversationRecordList[a]['chooseStatus'] = 0;
                }
              }
            }
          }
          this.forwardObj.forwardConversationRecordList = newConversationRecordList;
        }).catch(err => {
          // 异常情况
        });
      },

添加和删除转发对象

 //添加到转发
      handleChooseConversationRecordList(conversationId, item) {
        // 检测数组
        function isHasObj(arr, val) {
          var flag = false; // true为有 false为没有
          for (var i = 0; i < arr.length; i++) {
            if (JSON.stringify(arr[i]).indexOf(JSON.stringify(val)) != -1) {
              flag = true;
            }
          }
          return flag;
        }

        /* var keyIndex = isHasObj(this.forwardObj.chooseConversationRecordList, conversationId);
         if (keyIndex) {
           this.$message('已经存在');
         } else {
           this.forwardObj.chooseConversationRecordList.push(item);
         }*/
        let choose = this.forwardObj.chooseConversationRecordList;
        for (let i = 0; i < this.forwardObj.forwardConversationRecordList.length; i++) {
          if (this.forwardObj.forwardConversationRecordList[i].conversationId == conversationId) {
            if (this.forwardObj.forwardConversationRecordList[i].chooseStatus == 1) {
              this.forwardObj.forwardConversationRecordList[i].chooseStatus = 0;
              for (let j = 0; j < choose.length; j++) {
                if (choose[j].conversationId == conversationId) {
                  choose.splice(j, 1);
                }
              }
            } else {
              this.forwardObj.forwardConversationRecordList[i].chooseStatus = 1;
              this.forwardObj.chooseConversationRecordList.push(item);
            }
          }
        }
        this.forwardObj.chooseConversationRecordList = choose;

      },
      handleDeleteConversationRecordList(conversationId) {
        let choose = this.forwardObj.chooseConversationRecordList;
        for (let i = 0; i < this.forwardObj.forwardConversationRecordList.length; i++) {
          if (this.forwardObj.forwardConversationRecordList[i].conversationId == conversationId) {
            if (this.forwardObj.forwardConversationRecordList[i].chooseStatus == 1) {
              this.forwardObj.forwardConversationRecordList[i].chooseStatus = 0;
              for (let j = 0; j < choose.length; j++) {
                if (choose[j].conversationId == conversationId) {
                  choose.splice(j, 1);
                }
              }
            } else {
              this.forwardObj.forwardConversationRecordList[i].chooseStatus = 1;
            }
          }
        }
        this.forwardObj.chooseConversationRecordList = choose;
      },

转发开始

支持转发文字、表情、图片、文件、视频、语音

//转发消息开始
      handleSendForward() {
        let forwardDatas = this.forwardObj.chooseConversationRecordList;
        if (forwardDatas.length === 0) {
          this.$message.error('未选择转发对象');
          return;
        }
        // this.forwardObj.forwardObjSelfStatus = false;
        let msgData = this.forwardObj.saveCourentMsgDataObj;
        console.log('消息数据msgdata');
        console.log(msgData);
        //type:0:文字;1:图片;3:视频;5:文件
        //发送文字
        // this.forwardSendMessage()
        //发送图片
        // this.sendPhoto(res.obj.relativeUrl);

        //发送文件
        // this.sendfile(res.obj.relativeUrl, messageFilesPostArray[i].name);
        // this.forwardSendMessage(msgData);
        for (let i = 0; i < forwardDatas.length; i++) {
          let conObj = {};
          conObj.conversationId = forwardDatas[i].conversationId;
          conObj.conversationName = forwardDatas[i].name;
          conObj.conversationNumber = forwardDatas[i].number;
          conObj.conversationType = forwardDatas[i].conversationType;
          switch (msgData.type) {
            case 0: //文字
              console.log('转发文字');
              this.forwardSendMessage(conObj, msgData);
              this.closeShowForwardObjDialog();
              break;
            case 1: //图片
              console.log('转发图片');
              this.forwardSendPhoto(conObj, msgData.url);
              this.closeShowForwardObjDialog();
              break;
            case 5: //文件
              console.log('转发文件');
              let name = msgData.mss;
              this.forwardSendfile(conObj, msgData.url, name);
              this.closeShowForwardObjDialog();
              break;
            case 2: //语音信息
              console.log('转发语音信息');
              let currentUrlY = msgData.url;
              let nameY = '语音文件';
              this.forwardSendyuyin(conObj, currentUrlY, nameY);
              this.closeShowForwardObjDialog();
              break;

            case 3: //视频
              console.log('转发视频');
              break;
          }
        }

      },
      //转发---发送文本数据
      forwardSendMessage(conObj, msgObj) {
        if (conObj.conversationId === '' || conObj.conversationId === null || conObj.conversationId === undefined) {
          this.$Message.error('请先选择会话组');
          return;
        } else {
          var obj = {
            //conversationId  0:调度员 ;1:终端;2:群组 、会话组
            conversationId: conObj.conversationId,
            name: conObj.conversationName,
            number: conObj.conversationNumber,
            conversationType: conObj.conversationType,
          };
          let msgstring = msgObj.mss;
          let user_id = this.user.userId;
          if (obj.conversationType === 0) { //调度员         1:终端,-1:调度员,>1:群组
            obj.conversationType = -1;
            DispatchmessageCtrl.sendMessage(obj, msgstring, user_id);
          }
          if (obj.conversationType == 1) {//终端
            obj.conversationType = 1;
            DispatchmessageCtrl.sendMessage(obj, msgstring, user_id);
          } else if (obj.conversationType == 2) {//固定组
            obj.conversationType = 2;
            DispatchmessageCtrl.sendMessage(obj, msgstring, user_id);
          } else if (obj.conversationType == 3) {//会话组
            obj.conversationType = 2;
            MessageApi.queryNickname({
              conversationId: conObj.conversationId,
              member_id: this.user.userId,
            }).then(res => {
              // 返回数据
              if (res.success) {
                if (res.obj) {
                  obj.NickName = res.obj;
                }
                console.log('发送检查22obj');
                console.log(obj);
                let msgstring = msgObj.mss;
                console.log(msgstring);
                if (msgstring.length >= 512) {
                  this.$Message.error('发送的消息过长');
                  return;
                } else if (msgstring.trim() == '') {
                  this.$Message.warning('请不要发送空白消息');
                  return;
                } else {
                  let user_id = this.user.userId;
                  DispatchmessageCtrl.sendMessage(obj, msgstring, user_id);
                }
              }
            }).catch(err => {
              // 异常情况
              // this.$Message.error('');
            });
          }
        }

      },
      //转发---发送图片数据
      forwardSendPhoto(conObj, url) {
        let obj = {
          conversationId: conObj.conversationId,
          name: conObj.conversationName,
          number: conObj.conversationNumber,
          conversationType: conObj.conversationType,
        };

        let user_id = this.user.userId;
        if (obj.conversationType === 0) { //调度员         1:终端,-1:调度员,>1:群组
          obj.conversationType = -1;
          DispatchmessageCtrl.sendPhoto(obj, url, user_id);
        }
        if (obj.conversationType == 1) {//终端
          obj.conversationType = 1;
          DispatchmessageCtrl.sendPhoto(obj, url, user_id);
        } else if (obj.conversationType == 2) {
          obj.conversationType = 2;
          DispatchmessageCtrl.sendPhoto(obj, url, user_id);
        } else if (obj.conversationType == 3) {
          obj.conversationType = 2;
          MessageApi.queryNickname({
            conversationId: conObj.conversationId,
            member_id: this.user.userId,
          }).then(res => {
            // 返回数据
            if (res.success) {
              if (res.obj) {
                obj.NickName = res.obj;
              }
              DispatchmessageCtrl.sendPhoto(obj, url, user_id);
            }
          }).catch(err => {
            // 异常情况
            // this.$Message.error('');
          });
        }
      },
      //转发---发送文件数据
      forwardSendfile(conObj, url, name) {
        console.log('转发---发送文件数据');
        let obj = {
          conversationId: conObj.conversationId,
          name: conObj.conversationName,
          number: conObj.conversationNumber,
          conversationType: conObj.conversationType,
        };
        let fileName = name;
        let user_id = this.user.userId;
        if (obj.conversationType === 0) { //调度员         1:终端,-1:调度员,>1:群组
          obj.conversationType = -1;
          DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);
        }
        if (obj.conversationType == 1) {//终端
          obj.conversationType = 1;
          DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);
        } else if (obj.conversationType == 2) {
          obj.conversationType = 2;
          DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);
        } else if (obj.conversationType == 3) {
          obj.conversationType = 2;
          MessageApi.queryNickname({
            conversationId: conObj.conversationId,
            member_id: this.user.userId,
          }).then(res => {
            // 返回数据
            if (res.success) {
              if (res.obj) {
                obj.NickName = res.obj;
              }

              function getFileName(fileName) {
                // var fileName = 20190522163922.png;
                let first = fileName.lastIndexOf('.');//取到文件名开始到最后一个点的长度
                let namelength = fileName.length;//取到文件名长度
                let name = fileName.substring(0, first);//截取获得后缀名
                return name;
              }

              // let fileName = getFileName(name);
              DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);

            }
          }).catch(err => {
            // 异常情况
            // this.$Message.error('');
          });
        }

      },
      //转发---发送语音数据
      forwardSendyuyin(conObj, url, name) {
        console.log('转发---发送语音数据');
        console.log(url);
        let obj = {
          conversationId: conObj.conversationId,
          name: conObj.conversationName,
          number: conObj.conversationNumber,
          conversationType: conObj.conversationType,
        };
        let fileName = name;
        let user_id = this.user.userId;
        if (obj.conversationType === 0) { //调度员         1:终端,-1:调度员,>1:群组
          obj.conversationType = -1;
          DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);
        }
        if (obj.conversationType == 1) {//终端
          obj.conversationType = 1;
          DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);
        } else if (obj.conversationType == 2) {
          obj.conversationType = 2;
          DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);
        } else if (obj.conversationType == 3) {
          obj.conversationType = 2;
          MessageApi.queryNickname({
            conversationId: conObj.conversationId,
            member_id: this.user.userId,
          }).then(res => {
            // 返回数据
            if (res.success) {
              if (res.obj) {
                obj.NickName = res.obj;
              }

              function getFileName(fileName) {
                // var fileName = 20190522163922.png;
                let first = fileName.lastIndexOf('.');//取到文件名开始到最后一个点的长度
                let namelength = fileName.length;//取到文件名长度
                let name = fileName.substring(0, first);//截取获得后缀名
                return name;
              }

              // let fileName = getFileName(name);
              DispatchmessageCtrl.sendfile(fileName, url, obj, user_id);

            }
          }).catch(err => {
            // 异常情况
            // this.$Message.error('');
          });
        }

      },
      //关闭转发弹框
      closeShowForwardObjDialog() {
        this.forwardObj.showForwardObjDialog = false;
        this.forwardObj.chooseConversationRecordList = [];
      },
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值