wansfa hace 1 año
padre
commit
8fd812de49

+ 11 - 0
src/api/qw/im.js

@@ -54,3 +54,14 @@ export function sendTextMsg(data) {
 
 
 
+// 发送文本消息
+export function sendImageMsg(data) {
+  return request({
+    url: '/qw/message/image',
+    method: 'post',
+    data: data
+  })
+}
+
+
+

+ 4 - 3
src/components/LemonUI/components/editor.vue

@@ -278,9 +278,10 @@ export default {
       this._checkSubmitDisabled();
     },
     async selectFile(accept) {
-      this.accept = accept;
-      await this.$nextTick();
-      this.$refs.fileInput.click();
+      // this.accept = accept;
+      // await this.$nextTick();
+      // this.$refs.fileInput.click();
+      this.$emit("pickImg", this.clipboardBlob);
     },
     _handlePaste(e) {
       e.preventDefault();

+ 23 - 0
src/components/LemonUI/components/index.vue

@@ -271,6 +271,28 @@ export default {
         },
         file,
       );
+    },
+     _handleRemoteImage(url) {
+        let joinMessage = {
+            type: "image",
+            content: url,
+          };
+        const message = this._createMessage(joinMessage);
+        this.appendMessage(message, true);
+        this._emitSend(
+          message,
+          () => {
+            this.updateContact({
+              id: message.toContactId,
+              lastContent: this.lastContentRender(message),
+              lastSendTime: message.sendTime,
+            });
+          },
+          null,
+        );
+    },
+    _pickImg(){
+        this.$emit("pick-image");
     },
     _emitPullMessages(next) {
       //console.log("qxj currentContact:"+JSON.stringify(this.currentContact));
@@ -538,6 +560,7 @@ export default {
                 wrapKey={this.wrapKey}
                 onSend={this._handleSend}
                 onUpload={this._handleUpload}
+                onPickImg={this._pickImg}
               />
             </div>
             <div class="lemon-vessel__right">

+ 23 - 17
src/components/Material/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div v-if="type == 'image'">
-    <ul v-for="(item,index) in value" :key="index" class="el-upload-list el-upload-list--picture-card">
+
+    <!-- <ul v-for="(item,index) in value" :key="index" class="el-upload-list el-upload-list--picture-card">
       <li tabindex="0" class="el-upload-list__item is-ready" :style="'width: '+width+'px;height: '+height+'px'">
         <div>
           <img :src="item" alt="" class="el-upload-list__item-thumbnail">
@@ -23,14 +24,15 @@
     </ul>
     <div v-if="num > value.length" tabindex="0" class="el-upload el-upload--picture-card" :style="'width: '+width+'px;height: '+height+'px;'+'line-height:'+height+'px;'" @click="toSeleteMaterial">
       <i class="el-icon-plus" />
-    </div>
+    </div> -->
+
+
     <!-- 查看 -->
     <el-dialog
       append-to-body
       :visible.sync="dialogVisible"
-      width="35%"
-    >
-      <img :src="url" alt="" style="width: 100%">
+      width="35%">
+       <img :src="url" alt="" style="width: 100%">
     </el-dialog>
     <!-- 素材列表 -->
     <el-dialog
@@ -45,8 +47,7 @@
             <el-button
               class="el-icon-plus"
               size="small"
-              @click="materialgroupAdd()"
-            >
+              @click="materialgroupAdd()">
               添加分组
             </el-button>
           </div>
@@ -93,15 +94,14 @@
               />
               <el-row :gutter="5">
                 <el-checkbox-group v-model="urls" :max="num - value.length">
-                  <el-col v-for="(item,index) in tableData" :key="index" :span="4">
+                  <el-col v-for="(item,index) in tableData" :key="index" :span="4" >
                     <el-card :body-style="{ padding: '5px' }">
                       <el-image
                         style="width: 100%;height: 100px"
                         :src="item.url"
                         fit="contain"
                         :preview-src-list="[item.url]"
-                        :z-index="9999"
-                      />
+                        :z-index="9999" />
                       <div>
                         <el-checkbox class="material-name" :label="item.url">
                           选择
@@ -122,8 +122,7 @@
                   :total="total"
                   :page.sync="queryParams.pageNum"
                   :limit.sync="queryParams.pageSize"
-                  @pagination="getMaterialList"
-                />
+                  @pagination="getMaterialList"/>
                
             </div>
           </el-card>
@@ -178,7 +177,7 @@ export default {
   },
   data() {
     return {
-      multipartFile:{deviceId:"4eea1292408044beb49c02d3197871b0"},
+      multipartFile:{},
       uploadUrl:process.env.VUE_APP_BASE_API+"/common/qwUploadOSS",
       dialogVisible: false,
       url: '',
@@ -207,6 +206,11 @@ export default {
     this.getAllMaterialGroup();
   },
   methods: {
+    openMaterial(deviceid){
+       var mpartFile={deviceId:deviceid};
+       this.multipartFile=mpartFile;
+       this.toSeleteMaterial();
+    },
     selectGroup(item){
       this.materialGroup=item;
       this.queryParams.groupId=item.groupId;
@@ -356,10 +360,12 @@ export default {
       return isPic && isLt2M
     },
     submit() {
-      this.urls.forEach(item => {
-        this.$set(this.value, this.value.length, item)
-      })
-      this.listDialogVisible = false
+      //console.log("qxj urls :"+JSON.stringify(this.urls));
+      //console.log("qxj tableData:"+JSON.stringify(this.tableData));    
+      var data=this.tableData.find(item =>  item.url == this.urls) || {};
+      this.$emit('pickImageData', data);
+      this.listDialogVisible = false;
+      this.urls=null;
     }
   }
 }

+ 4 - 6
src/components/Material/single.vue

@@ -30,16 +30,14 @@
       title="图片素材库"
       append-to-body
       :visible.sync="listDialogVisible"
-      width="70%"
-    >
+      width="70%">
       <el-container>
         <el-aside width="unset">
           <div style="margin-bottom: 10px">
             <el-button
               class="el-icon-plus"
               size="small"
-              @click="materialgroupAdd()"
-            >
+              @click="materialgroupAdd()">
               添加分组
             </el-button>
           </div>
@@ -68,8 +66,7 @@
                     :before-upload="beforeUpload"
                     :on-success="handleSuccess"
                     :data="{type: 1}"
-                    multiple
-                  >
+                    multiple>
                     <el-button size="small" type="primary">批量上传</el-button>
                   </el-upload>
                 </el-col>
@@ -335,6 +332,7 @@ export default {
       return isPic && isLt2M
     },
     submit() {
+    
       this.myValue = this.urls[0]
       this.$emit('input', this.urls[0])
       this.listDialogVisible = false

+ 52 - 8
src/views/qw/qwChat/qq.vue

@@ -19,6 +19,7 @@
           @change-contact="handleChangeContact"
           @message-click="handleMessageClick"
           @menu-avatar-click="handleMenuAvatarClick"
+          @pick-image="handleImageClick"
           @send="handleSend">
           <template #cover>
                 <div class="cover">
@@ -99,6 +100,8 @@
          <img width="100%" :src="dialogImageUrl" alt="">
       </el-dialog>
 
+       <Material ref="material" @pickImageData="handlePickImageDone"  v-model="imageArr" type="image" :num="1" :width="150" :height="150" />
+
 
   </div>
 </template>
@@ -109,16 +112,20 @@ import store from "@/store";
 import { getQrCode } from '@/api/qw/login';
 import { getDeviceId} from '@/api/qw/account';
 import LemonMessageVoice from "@/components/LemonUI/components/message/voice";
-import { getContactsByUser,getConversations,getMessageList,getConversation,sendTextMsg} from '@/api/qw/im';
+import { getContactsByUser,getConversations,getMessageList,getConversation,sendTextMsg,sendImageMsg} from '@/api/qw/im';
 import ContactsData from "@/components/LemonUI/database/contacts";
 import MessagesData from "@/components/LemonUI/database/messages";
 import Conversations from "@/components/LemonUI/database/conversations";
 import EmojiData from "@/components/LemonUI/database/emoji";
 import '@/components/LemonUI/index.css';
+import Material from '@/components/Material/index'
+
 let pages = {};
 export default {
   name: "qqChat",
-  components: {  },
+  components: {   
+    Material,
+  },
   data() {
     return {
       theme: "default",
@@ -261,6 +268,8 @@ export default {
       isFromLogin:false,
       dialogImageUrl: '',
       dialogVisible: false,
+      imageArr:[],
+      pickUploadImgData:null,
       windowWidth: document.documentElement.clientWidth*0.65,  //实时屏幕宽度
       windowHeight: document.documentElement.clientHeight*0.7,   //实时屏幕高度
       queryParams: {
@@ -290,6 +299,7 @@ export default {
     if(!this.qwIm.hasLogin){
         this.initSocket(this.qwUser.deviceId);
     }
+    this.deviceId=this.qwUser.deviceId;
     this.UserData.id=this.qwUser.userId;
     this.UserData.displayName=this.qwUser.nickName;
     this.UserData.avatar=this.qwUser.avatar;
@@ -554,9 +564,10 @@ export default {
         //instance.updateContact(contact);
         instance.closeDrawer();
     },
-
-     appendMessageAction(msgData){
-          if(msgData.type=="text"){   //文本   text  image  video voice 
+    
+    //收到消息后添加消息显示
+    appendMessageAction(msgData){
+          if(msgData.type=="text"){   //文本   text  image  video  voice 
               const message = {
                     id: msgData.id,
                     status: msgData.status,
@@ -577,8 +588,18 @@ export default {
                     type: msgData.type,
                     sendTime: msgData.sendTime,
                     content: msgData.content,
-                    params1: "1",
-                    params2: "2",
+                    toContactId: msgData.toContactId,
+                    fromUser: msgData.fromUser,
+              };
+              this.appendRemoteMessage(message);
+           }
+           if(msgData.type=="voice"){   //音频
+              const message = {
+                    id: msgData.id,
+                    status: msgData.status,
+                    type: msgData.type,
+                    sendTime: msgData.sendTime,
+                    url: msgData.content,
                     toContactId: msgData.toContactId,
                     fromUser: msgData.fromUser,
               };
@@ -598,9 +619,20 @@ export default {
                   var conversation=IMUI.findConversations(message.toContactId);
                   conversation.lastSendTime=message.sendTime;
                   conversation.lastContent=message.content;
+                  IMUI.topPopConversations(conversation);
                   next();
-                  console.log("qxj conversation:"+JSON.stringify(conversation));
+              }
+          });
+      }
+      if(message.type=="image"){
+          params={"conversationId":message.toContactId,"deviceId":this.qwUser.deviceId,"userId":this.qwUser.userId,"materialId":this.pickUploadImgData.id};
+          sendImageMsg(params).then(response => {
+              if(response.code==200){
+                  var conversation=IMUI.findConversations(message.toContactId);
+                  conversation.lastSendTime=message.sendTime;
+                  conversation.lastContent="[图片]";
                   IMUI.topPopConversations(conversation);
+                  next();
               }
           });
       }
@@ -612,7 +644,19 @@ export default {
     handleMenuAvatarClick() {
       console.log("Event:menu-avatar-click");
     },
+    //聊天工具栏点击图片
+    handleImageClick() {
+      this.$refs.material.openMaterial(this.qwUser.deviceId);
+      console.log("Event:handleImageClick");
+    },
+    //选择图片框确定按钮回调
+    handlePickImageDone(data){
+        console.log("handlePickImageDone:"+JSON.stringify(data));
+        this.pickUploadImgData=data;
+        const IMUI = this.$refs.IMUI;
+        IMUI._handleRemoteImage(data.url);
 
+    },
     handleMessageClick(e, key, message, instance) {
       console.log("点击了消息", e, key, message);
       console.log("qxj message:"+JSON.stringify(message));