Browse Source

Merge branch 'v_1.1.0' of https://gitee.com/bluexsx/box-im into v_1.1.0

master
xie.bx 3 years ago
parent
commit
575a7be37c
  1. 4
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java
  2. 4
      im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java
  3. 2
      im-platform/src/main/resources/application.yml
  4. 30
      im-ui/src/components/chat/ChatBox.vue
  5. 4
      im-ui/src/components/group/AddGroupMember.vue
  6. 2
      im-ui/src/components/setting/Setting.vue
  7. 8
      im-ui/src/view/Group.vue
  8. 3
      im-ui/src/view/Register.vue

4
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@ -16,6 +16,7 @@ import com.bx.implatform.service.IGroupMessageService;
import com.bx.implatform.service.IGroupService; import com.bx.implatform.service.IGroupService;
import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.SessionContext;
import com.bx.implatform.vo.GroupMessageVO; import com.bx.implatform.vo.GroupMessageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -24,7 +25,7 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j
@Service @Service
public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, GroupMessage> implements IGroupMessageService { public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, GroupMessage> implements IGroupMessageService {
@ -86,6 +87,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
String key = RedisKey.IM_UNREAD_GROUP_MESSAGE +entry.getKey(); String key = RedisKey.IM_UNREAD_GROUP_MESSAGE +entry.getKey();
redisTemplate.opsForList().rightPush(key,msgInfo); redisTemplate.opsForList().rightPush(key,msgInfo);
} }
log.info("发送群聊消息,发送id:{},群聊id:{}",userId,vo.getGroupId());
} }
/** /**

4
im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

@ -14,6 +14,7 @@ import com.bx.implatform.service.IFriendService;
import com.bx.implatform.service.IPrivateMessageService; import com.bx.implatform.service.IPrivateMessageService;
import com.bx.implatform.session.SessionContext; import com.bx.implatform.session.SessionContext;
import com.bx.implatform.vo.PrivateMessageVO; import com.bx.implatform.vo.PrivateMessageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -22,7 +23,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j
@Service @Service
public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper, PrivateMessage> implements IPrivateMessageService { public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper, PrivateMessage> implements IPrivateMessageService {
@ -59,6 +60,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
PrivateMessageInfo msgInfo = BeanUtils.copyProperties(msg, PrivateMessageInfo.class); PrivateMessageInfo msgInfo = BeanUtils.copyProperties(msg, PrivateMessageInfo.class);
redisTemplate.opsForList().rightPush(sendKey,msgInfo); redisTemplate.opsForList().rightPush(sendKey,msgInfo);
} }
log.info("发送私聊消息,发送id:{},接收id:{}",userId,vo.getRecvId());
} }
/** /**

2
im-platform/src/main/resources/application.yml

@ -5,7 +5,7 @@ server:
spring: spring:
datasource: datasource:
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/box-im?useSSL=false&useUnicode=true&characterEncoding=utf-8 url: jdbc:mysql://localhost:3306/box-im?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
username: root username: root
password: root password: root

30
im-ui/src/components/chat/ChatBox.vue

@ -2,34 +2,37 @@
<el-container class="chat-box"> <el-container class="chat-box">
<el-header height="60px"> <el-header height="60px">
<span>{{title}}</span> <span>{{title}}</span>
<span title="群聊信息" v-show="this.chat.type=='GROUP'" class="btn-side el-icon-more" @click="showSide=!showSide"></span> <span title="群聊信息" v-show="this.chat.type=='GROUP'" class="btn-side el-icon-more"
@click="showSide=!showSide"></span>
</el-header> </el-header>
<el-main style="padding: 0;">
<el-container> <el-container>
<el-container class="content-box"> <el-container class="content-box">
<el-main class="im-chat-main" id="chatScrollBox"> <el-main class="im-chat-main" id="chatScrollBox">
<div class="im-chat-box"> <div class="im-chat-box">
<ul> <ul>
<li v-for="(msgInfo,idx) in chat.messages" :key="idx"> <li v-for="(msgInfo,idx) in chat.messages" :key="idx">
<message-item :mine="msgInfo.sendId == mine.id" :headImage="headImage(msgInfo)" :showName="showName(msgInfo)" <message-item :mine="msgInfo.sendId == mine.id" :headImage="headImage(msgInfo)"
:msgInfo="msgInfo"> :showName="showName(msgInfo)" :msgInfo="msgInfo">
</message-item> </message-item>
</li> </li>
</ul> </ul>
</div> </div>
</el-main> </el-main>
<el-footer height="25%" class="im-chat-footer"> <el-footer height="200px" class="im-chat-footer">
<div class="chat-tool-bar"> <div class="chat-tool-bar">
<div title="表情" class="el-icon-eleme" ref="emotion" @click="switchEmotionBox()"> <div title="表情" class="el-icon-eleme" ref="emotion" @click="switchEmotionBox()">
</div> </div>
<div title="发送图片"> <div title="发送图片">
<file-upload :action="imageAction" :maxSize="5*1024*1024" :fileTypes="['image/jpeg', 'image/png', 'image/jpg', 'image/webp','image/gif']" <file-upload :action="imageAction" :maxSize="5*1024*1024"
:fileTypes="['image/jpeg', 'image/png', 'image/jpg', 'image/webp','image/gif']"
@before="handleImageBefore" @success="handleImageSuccess" @fail="handleImageFail"> @before="handleImageBefore" @success="handleImageSuccess" @fail="handleImageFail">
<i class="el-icon-picture-outline"></i> <i class="el-icon-picture-outline"></i>
</file-upload> </file-upload>
</div> </div>
<div title="发送文件"> <div title="发送文件">
<file-upload :action="fileAction" :maxSize="10*1024*1024" @before="handleFileBefore" @success="handleFileSuccess" <file-upload :action="fileAction" :maxSize="10*1024*1024" @before="handleFileBefore"
@fail="handleFileFail"> @success="handleFileSuccess" @fail="handleFileFail">
<i class="el-icon-wallet"></i> <i class="el-icon-wallet"></i>
</file-upload> </file-upload>
</div> </div>
@ -37,16 +40,19 @@
</div> </div>
<div title="聊天记录" class="el-icon-chat-dot-round"></div> <div title="聊天记录" class="el-icon-chat-dot-round"></div>
</div> </div>
<textarea v-model="sendText" ref="sendBox" class="send-text-area" @keydown.enter="sendTextMessage()"></textarea> <textarea v-model="sendText" ref="sendBox" class="send-text-area"
@keydown.enter="sendTextMessage()"></textarea>
<div class="im-chat-send"> <div class="im-chat-send">
<el-button type="primary" @click="sendTextMessage()">发送</el-button> <el-button type="primary" @click="sendTextMessage()">发送</el-button>
</div> </div>
</el-footer> </el-footer>
</el-container> </el-container>
<el-aside class="chat-group-side-box" width="20%" v-show="showSide"> <el-aside class="chat-group-side-box" width="300px" v-show="showSide">
<chat-group-side :group="group" :groupMembers="groupMembers" @reload="loadGroup(group.id)"></chat-group-side> <chat-group-side :group="group" :groupMembers="groupMembers" @reload="loadGroup(group.id)">
</chat-group-side>
</el-aside> </el-aside>
</el-container> </el-container>
</el-main>
<emotion v-show="showEmotion" :pos="emoBoxPos" @emotion="handleEmotion"></Emotion> <emotion v-show="showEmotion" :pos="emoBoxPos" @emotion="handleEmotion"></Emotion>
<chat-voice :visible="showVoice" @close="closeVoiceBox" @send="handleSendVoice"></chat-voice> <chat-voice :visible="showVoice" @close="closeVoiceBox" @send="handleSendVoice"></chat-voice>
</el-container> </el-container>
@ -328,7 +334,7 @@
}) })
}, },
showName(msgInfo) { showName(msgInfo) {
if (this.chat.type == 'Group') { if (this.chat.type == 'GROUP') {
let member = this.groupMembers.find((m) => m.userId == msgInfo.sendId); let member = this.groupMembers.find((m) => m.userId == msgInfo.sendId);
return member ? member.aliasName : ""; return member ? member.aliasName : "";
} else { } else {
@ -337,7 +343,7 @@
}, },
headImage(msgInfo) { headImage(msgInfo) {
if (this.chat.type == 'Group') { if (this.chat.type == 'GROUP') {
let member = this.groupMembers.find((m) => m.userId == msgInfo.sendId); let member = this.groupMembers.find((m) => m.userId == msgInfo.sendId);
return member ? member.headImage : ""; return member ? member.headImage : "";
} else { } else {

4
im-ui/src/components/group/AddGroupMember.vue

@ -5,7 +5,7 @@
<el-input width="200px" placeholder="搜索好友" class="input-with-select" v-model="searchText" @keyup.enter.native="handleSearch()"> <el-input width="200px" placeholder="搜索好友" class="input-with-select" v-model="searchText" @keyup.enter.native="handleSearch()">
<el-button slot="append" icon="el-icon-search" @click="handleSearch()"></el-button> <el-button slot="append" icon="el-icon-search" @click="handleSearch()"></el-button>
</el-input> </el-input>
<el-scrollbar style="height:500px;"> <el-scrollbar style="height:400px;">
<div v-for="(friend,index) in friends" :key="friend.id"> <div v-for="(friend,index) in friends" :key="friend.id">
<friend-item v-show="friend.nickName.startsWith(searchText)" :showDelete="false" @click.native="handleSwitchCheck(friend)" <friend-item v-show="friend.nickName.startsWith(searchText)" :showDelete="false" @click.native="handleSwitchCheck(friend)"
:friend="friend" :index="index" :active="index === activeIndex"> :friend="friend" :index="index" :active="index === activeIndex">
@ -17,7 +17,7 @@
</div> </div>
<div class="agm-r-box"> <div class="agm-r-box">
<div class="agm-select-tip"> 已勾选{{checkCount}}位好友</div> <div class="agm-select-tip"> 已勾选{{checkCount}}位好友</div>
<el-scrollbar style="height:500px;"> <el-scrollbar style="height:400px;">
<div v-for="(friend,index) in friends" :key="friend.id"> <div v-for="(friend,index) in friends" :key="friend.id">
<friend-item v-if="friend.isCheck && !friend.disabled" :friend="friend" :index="index" :active="false" @del="handleRemoveFriend(friend,index)"> <friend-item v-if="friend.isCheck && !friend.disabled" :friend="friend" :index="index" :active="false" @del="handleRemoveFriend(friend,index)">
</friend-item> </friend-item>

2
im-ui/src/components/setting/Setting.vue

@ -1,5 +1,5 @@
<template> <template>
<el-dialog class="setting" title="设置" :visible.sync="visible" width="30%" :before-close="handleClose"> <el-dialog class="setting" title="设置" :visible.sync="visible" width="500px" :before-close="handleClose">
<el-form :model="userInfo" label-width="80px" :rules="rules" ref="settingForm"> <el-form :model="userInfo" label-width="80px" :rules="rules" ref="settingForm">
<el-form-item label="头像"> <el-form-item label="头像">
<file-upload class="avatar-uploader" <file-upload class="avatar-uploader"

8
im-ui/src/view/Group.vue

@ -22,7 +22,7 @@
<div class="r-group-header" v-show="activeGroup.id"> <div class="r-group-header" v-show="activeGroup.id">
{{activeGroup.remark}}({{groupMembers.length}}) {{activeGroup.remark}}({{groupMembers.length}})
</div> </div>
<div class="r-group-container"> <el-scrollbar class="r-group-container">
<div v-show="activeGroup.id"> <div v-show="activeGroup.id">
<div class="r-group-info"> <div class="r-group-info">
<div> <div>
@ -74,7 +74,7 @@
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
</div> </el-scrollbar>
</el-container> </el-container>
</el-container> </el-container>
</template> </template>
@ -306,7 +306,7 @@
.r-group-info { .r-group-info {
display: flex; display: flex;
padding: 20px; padding: 5px 20px;
.r-group-form { .r-group-form {
flex: 1; flex: 1;
@ -351,7 +351,7 @@
} }
.r-group-member-list { .r-group-member-list {
padding: 20px; padding: 5px 20px;
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;

3
im-ui/src/view/Register.vue

@ -3,7 +3,7 @@
<div> <div>
<el-form :model="registerForm" status-icon :rules="rules" ref="registerForm" label-width="80px" class="web-ruleForm"> <el-form :model="registerForm" status-icon :rules="rules" ref="registerForm" label-width="80px" class="web-ruleForm">
<div class="register-brand">欢迎注册成为FLY CHAT用户</div> <div class="register-brand">欢迎注册</div>
<el-form-item label="用户名" prop="userName"> <el-form-item label="用户名" prop="userName">
<el-input type="userName" v-model="registerForm.userName" autocomplete="off"></el-input> <el-input type="userName" v-model="registerForm.userName" autocomplete="off"></el-input>
</el-form-item> </el-form-item>
@ -142,6 +142,7 @@
font-size: 22px; font-size: 22px;
font-weight: 600; font-weight: 600;
letter-spacing: 2px; letter-spacing: 2px;
text-align: center;
text-transform: uppercase; text-transform: uppercase;
} }

Loading…
Cancel
Save