From 47e64721f825322d3627ba8bb3e8c722204006f2 Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Tue, 22 Jun 2021 14:47:37 +0800
Subject: [PATCH] 聊天功能完善

---
 pages/groupChat/chating.vue   |  242 +++++++++++++++++++++++++++++++----------------
 pages/groupChat/groupChat.vue |    6 +
 2 files changed, 163 insertions(+), 85 deletions(-)

diff --git a/pages/groupChat/chating.vue b/pages/groupChat/chating.vue
index 10737b0..ba56471 100644
--- a/pages/groupChat/chating.vue
+++ b/pages/groupChat/chating.vue
@@ -9,11 +9,11 @@
 			</view>
 		</view>
 		<view class="top-bar-center title">
-			<text>水原希子kiko</text>
+			<text>{{ recName }}</text>
 		</view>
 		<view class="top-bar-right search pice">
 			<view class="group-img">
-				<image src="@/static/images/index/friend-list/kiko.jpg"
+				<image :src=recAvatar
 							 mode=""/>
 			</view>
 		</view>
@@ -36,40 +36,40 @@
 			<view class="chat-ls" v-for="(item, index) in msgs"
 													  :key="index"
 														:id="'msg' + item.tip">
-				<view class="chat-time" v-if="item.time != ''">{{ item.time | Msgdate }}</view>
+				<view class="chat-time" v-if="item.postTime != ''">{{ item.postTime | Msgdate }}</view>
 				
-				<view class="msg-m msg-left" v-if="item.id != 1">
-					<image :src="item.imgUrl" 
+				<view class="msg-m msg-left" v-if="item.senderId != senId">
+					<image :src= recAvatar 
 								 mode=""
 								 class="user-img" />
 					<!-- text -->
-					<view class="message" v-if="item.types == 0">
-						<view class="msg-text">{{ item.message }}</view>
+					<view class="message" v-if="item.messageType == 0">
+						<view class="msg-text">{{ item.postMessage }}</view>
 					</view>
 					<!-- image -->
-					<view class="message" v-if="item.types == 1">
-						<image :src="item.message" 
+					<view class="message" v-if="item.messageType == 1">
+						<image :src="item.postMessage" 
 									 class="msg-img"
 									 mode="widthFix"
-									 @tap="previewImage(item.message)"/>
+									 @tap="previewImage(item.postMessage)"/>
 					</view>
 					<!-- voice -->
-					<view class="message" v-if="item.types == 2">
+					<view class="message" v-if="item.messageType == 2">
 						<view class="msg-text voice"
-									:style="{width:item.message.time * 4 + 'px'}"
-									@tap="playVoice(item.message.voice)">
+									:style="{width:item.postMessage.time * 4 + 'px'}"
+									@tap="playVoice(item.postMessage.voice)">
 							<image src="../../static/images/chatroom/sound.png" 
 										 mode=""
 										 class="voice-img"/>
-							{{ item.message.time }} "
+							{{ item.postMessage.time }} "
 						</view>
 					</view>
 					<!-- location -->
-					<view class="message" v-if="item.types == 3">
+					<view class="message" v-if="item.messageType == 3">
 						<view class="msg-map"
-									@tap="openLocation(item.message)">
-							<view class="map-name">{{ item.message.name }}</view>
-							<view class="map-address">{{ item.message.address }}</view>
+									@tap="openLocation(item.postMessage)">
+							<view class="map-name">{{ item.postMessage.name }}</view>
+							<view class="map-address">{{ item.postMessage.address }}</view>
 							<image src="../../static/images/chatroom/map.jpg" 
 										 mode="aspectFit" 
 										 class="map-img"/>
@@ -78,40 +78,40 @@
 					
 				</view>
 				
-				<view class="msg-m msg-right" v-if="item.id == 1">
-					<image :src="item.imgUrl" 
+				<view class="msg-m msg-right" v-if="item.senderId == senId">
+					<image :src= senAvatar 
 								 mode=""
 								 class="user-img" />
-					<view class="message" v-if="item.types == 0">
-						<view class="msg-text">{{ item.message }}</view>
+					<view class="message" v-if="item.messageType == 0">
+						<view class="msg-text">{{ item.postMessage }}</view>
 					</view>
-					<view class="message" v-if="item.types == 1">
-						<image :src="item.message" 
+					<view class="message" v-if="item.messageType == 1">
+						<image :src="item.postMessage" 
 									 class="msg-img"
 									 mode="widthFix"
-									 @tap="previewImage(item.message)"/>
+									 @tap="previewImage(item.postMessage)"/>
 					</view>
 					<!-- voice -->
-					<view class="message" v-if="item.types == 2">
+					<view class="message" v-if="item.messageType == 2">
 						<view class="msg-text voice"
-									:style="{width:item.message.time * 4 + 'px'}"
-									@tap="playVoice(item.message.voice)">
-							{{ item.message.time }} "
+									:style="{width:item.postMessage.time * 4 + 'px'}"
+									@tap="playVoice(item.postMessage.voice)">
+							{{ item.postMessage.time }} "
 							<image src="@/static/images/chatroom/sound.png"
 										 mode=""
 										 class="voice-img"/>
 						</view>
 					</view>
 					<!-- location -->
-					<view class="message" v-if="item.types == 3">
+					<view class="message" v-if="item.messageType == 3">
 						<view class="msg-map"
-									@tap="openLocation(item.message)">
-							<view class="map-name">{{ item.message.name }}</view>
-							<view class="map-address">{{ item.message.address }}</view>
+									@tap="openLocation(item.postMessage)">
+							<view class="map-name">{{ item.postMessage.name }}</view>
+							<view class="map-address">{{ item.postMessage.address }}</view>
 							<!-- <map class="map"
-									 :latitude="item.message.latitude"
-									 :longitude="item.message.longitude"
-									 :markers="covers(item.message)"/> -->
+									 :latitude="item.postMessage.latitude"
+									 :longitude="item.postMessage.longitude"
+									 :markers="covers(item.postMessage)"/> -->
 							<image src="../../static/images/chatroom/map.jpg"
 										 mode="aspectFit" 
 										 class="map-img"/>
@@ -134,7 +134,7 @@
 	import datas from  '@/debugdate/debugdate.js'
 	import filter from '@/config/filter.js'
 	import submit from '@/components/submit/submit.vue'
-	
+	import WxStorage from "../../static/lib/wxStorage.js"
 	const innerAudioContext = uni.createInnerAudioContext()
 	
 	export default {
@@ -144,7 +144,12 @@
 				imgMsg: [],
 				oldTime: new Date(),
 				scrollToView: '',
-				inputh: '72',                 
+				inputh: '72',   
+				recipientId: null,//接收者id
+				recAvatar: null,//接收者头像
+				recName: null,//接收者姓名
+				senAvatar:null,//发送者头像
+				senId: null,//接收者id
 				animationData: {},            // 动画
 				nowpage: 0,                   // 页码
 				loading: '',                  // 滚动事件
@@ -156,7 +161,8 @@
 		components:{
 			submit,
 		},
-		onLoad() {
+		onLoad(option) {
+			this.recipientId = option.chatID;
 			this._getMsg(this.nowpage)
 			// this.nextPage()
 		},
@@ -169,7 +175,6 @@
 			},
 			// 滚动顶部加载上一页
 			nextPage() {
-				
 				if(this.nowpage > 0 && this.begainloading) {
 					// 出现loading icon
 					this.isload = false
@@ -200,47 +205,77 @@
 			},
 			// 获取聊天数据
 			_getMsg(page) {
-				// 页数加1
-				let msg = datas.message()			
-				let maxpages = msg.length
 				
-				if(msg.length > (page + 1) * 10) {
-					maxpages = (page + 1) * 10
-					this.nowpage++
-				}else {
-					// 数据获取完毕
-					this.nowpage = -1
-				}
-				
-				// 数据分页加载 每十条为一页
-				for(var i = page * 10; i < maxpages; i++){
-					msg[i].imgUrl = '../../static/images/index/friend-list/'+msg[i].imgUrl
-					// 时间间隔
-					if(i < msg.length-1){
-						let t = filter.spaceTime(this.oldTime, msg[i].time)
-						if(t){
-							this.oldTime = t
+				var that = this;
+				that.senId = WxStorage.get("ids");
+				uni.request({
+					url:"http://s16s652780.51mypc.cn/api/blade-jfpts/chat-records/getSingleMessagePage",
+					method:"get",
+					data:{
+						senderId: that.senId,
+						// recipientId: that.recipientId
+						recipientId: "1370571848600920066"
+					},
+					success:(res)=> {
+						// recAvatar: null,//接收者头像
+						// senAvatar:null,//发送者头像
+						var resdata = res.data.data.user;
+						for (var i = 0; i < resdata.length; i++) {
+							if(resdata[i].avatar == null || resdata[i].avatar == ""){
+								resdata[i].avatar = "http://s16s652780.51mypc.cn/img/bg/img-logo.png";
+							}
+							
+							if(resdata[i].id == that.senId){
+								that.senAvatar = resdata[i].avatar;
+							}else{
+								that.recAvatar = resdata[i].avatar;
+								that.recName = resdata[i].realName;
+							}
 						}
-						msg[i].time = t
+						let msg = res.data.data.chatRecordsIPage
+						// 页数加1
+						//let msg = datas.message()			
+						let maxpages = msg.length
+						if(msg.length > (page + 1) * 10) {
+							maxpages = (page + 1) * 10
+							that.nowpage++
+						}else {
+							// 数据获取完毕
+							that.nowpage = -1
+						}
+						// 数据分页加载 每十条为一页
+						for(var i = page * 10; i < maxpages; i++){
+							msg[i].imgUrl = '../../static/images/index/friend-list/'+msg[i].imgUrl
+							// 时间间隔
+							if(i < msg.length-1){
+								let t = filter.spaceTime(that.oldTime, msg[i].postTime)
+								if(t){
+									that.oldTime = t
+								}
+								msg[i].postTime = t
+							}
+							// 补充图片地址
+							if(msg[i].types == 1){
+								msg[i].message = '../../static/images/index/friend-list/'+msg[i].message
+								that.imgMsg.unshift(msg[i].message)
+							}
+							that.msgs.unshift(msg[i])
+						}
+						
+						that.$nextTick(() => {
+							that.isanimation = false
+							that.scrollToView = 'msg' + that.msgs[maxpages - page * 10 - 1].tip
+						})
+						// 数据加载完毕关闭动画,停止数据加载
+						clearInterval(this.loading)
+						// 关闭loading icon
+						this.isload = true
+						// 开启加载
+						this.begainloading = true
+						
 					}
-					// 补充图片地址
-					if(msg[i].types == 1){
-						msg[i].message = '../../static/images/index/friend-list/'+msg[i].message
-						this.imgMsg.unshift(msg[i].message)
-					}
-					this.msgs.unshift(msg[i])
-				}
-				
-				this.$nextTick(() => {
-					this.isanimation = false
-					this.scrollToView = 'msg' + this.msgs[maxpages - page * 10 - 1].tip
 				})
-				// 数据加载完毕关闭动画,停止数据加载
-				clearInterval(this.loading)
-				// 关闭loading icon
-				this.isload = true
-				// 开启加载
-				this.begainloading = true
+				
 			},
 			// 预览图片
 			previewImage(e) {
@@ -273,22 +308,41 @@
 			},
 			// 接收输入内容
 			inputs(e) {
+				var that = this;
 				this.isanimation = true
 				let len = this.msgs.length -1				
-				let nowTime = new Date()				
+				let nowTime = new Date();	
+				var sentTime = that.dateFormat("YYYY-mm-dd HH:MM:SS", nowTime);
 				let t = filter.spaceTime(this.oldTime, nowTime)
 				if(t){
 					this.oldTime = t
 				}
 				nowTime = t
 				let sendMsg = {
-					id: 1,
-					imgUrl: '../../static/images/index/friend-list/me.jpg',
-					message: e.message,
-					types: e.types,
-					time: nowTime,
-					tip: len
+					senderId: that.senId,
+					recipientId: that.recipientId,
+					postMessage: e.message,
+					messageType: 0,
+					status: 0,
+					postTime: nowTime,
 				}
+				
+				uni.request({
+					url:"http://s16s652780.51mypc.cn/api/blade-jfpts/chat-records/insertSingleChat",
+					method:"post",
+					data:{
+						senderId: that.senId,
+						recipientId: that.recipientId,
+						postMessage: e.message,
+						messageType: 0,
+						status: 0,
+						postTime: sentTime,
+					},
+					success:(res)=> {
+						
+					}
+				});
+				
 				this.msgs.push(sendMsg)
 				this.$nextTick(() => {
 					this.scrollToView = 'msg' + len
@@ -335,6 +389,26 @@
 					}
 				})
 			},
+			//时间格式化
+			dateFormat(fmt, date) {
+			    let ret;
+			    const opt = {
+			        "Y+": date.getFullYear().toString(),        // 年
+			        "m+": (date.getMonth() + 1).toString(),     // 月
+			        "d+": date.getDate().toString(),            // 日
+			        "H+": date.getHours().toString(),           // 时
+			        "M+": date.getMinutes().toString(),         // 分
+			        "S+": date.getSeconds().toString()          // 秒
+			        // 有其他格式化字符需求可以继续添加,必须转化成字符串
+			    };
+			    for (let k in opt) {
+			        ret = new RegExp("(" + k + ")").exec(fmt);
+			        if (ret) {
+			            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
+			        };
+			    };
+			    return fmt;
+			}
 		},
 		filters:{
 			Msgdate(time) {
diff --git a/pages/groupChat/groupChat.vue b/pages/groupChat/groupChat.vue
index f1cd09e..e6af889 100644
--- a/pages/groupChat/groupChat.vue
+++ b/pages/groupChat/groupChat.vue
@@ -41,6 +41,10 @@
 				userName: '',
 			}
 		},
+		activated(){
+		      this.beginObj();
+		      this.ingss();
+		    },
 		methods: {
 			beginObj() {
 				this.titleTop = '2.6rem';
@@ -76,7 +80,7 @@
 						senderId: WxStorage.get("ids")
 					},
 					success:(res)=> {
-						var resdata = res.data.data.records;
+						var resdata = res.data.data;
 						for (var i = 0; i < resdata.length; i++) {
 							if(resdata[i].avatar == null || resdata[i].avatar == ""){
 								resdata[i].avatar = "http://s16s652780.51mypc.cn/img/bg/img-logo.png";

--
Gitblit v1.9.3