From 9e9d12683f3b4bcce2f58bc49c17f10c683a2b64 Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Thu, 17 Jun 2021 14:23:42 +0800
Subject: [PATCH] 聊天功能完善

---
 static/images/index/friend-list/kiko.jpg   |    0 
 static/images/search/searchresultImg2.jpg  |    0 
 static/images/chatroom/photo.png           |    0 
 static/images/friendrequest/Forbes.jpg     |    0 
 static/images/chatroom/add.png             |    0 
 static/images/chatroom/emoji.png           |    0 
 static/images/index/top-bar/add.png        |    0 
 static/images/userhome/gender.png          |    0 
 static/images/search/search.png            |    0 
 config/filter.js                           |   93 ++
 static/images/common/back.png              |    0 
 static/images/index/friend-list/xiedi.jpg  |    0 
 static/images/login/biyan.png              |    0 
 static/images/chatroom/file.png            |    0 
 static/lib/axios.js                        |    3 
 static/tabbar/investigation.png            |    0 
 static/images/search/searchresultImg1.jpg  |    0 
 static/images/chatroom/vedio.png           |    0 
 static/images/chatroom/sound.png           |    0 
 static/chat.json                           |   25 
 static/images/login/look.png               |    0 
 pages.json                                 |   41 
 static/tabbar/article.png                  |    0 
 static/images/search/searchresultImg4.jpg  |    0 
 static/images/search/searchresultImg3.jpg  |    0 
 static/tabbar/investigationH.png           |    0 
 static/images/index/friend-list/me.jpg     |    0 
 static/images/userdetails/right-arrow.png  |    0 
 static/tabbar/user.png                     |    0 
 static/images/chatroom/location.png        |    0 
 static/images/index/top-bar/search.png     |    0 
 components/submit/submit.vue               |  447 ++++++++++++
 components/submit/emoji/emoji.vue          |   75 ++
 static/images/index/friend-list/apply.png  |    0 
 pages/groupChat/groupChat.vue              |  199 +++++
 static/images/search/searchresultImg6.jpg  |    0 
 components/contacts/contacts.vue           |  231 ++++++
 static/images/chatroom/voice.png           |    0 
 static/images/chatroom/load.png            |    0 
 static/images/userhome/more.png            |    0 
 pages/groupChat/chating.vue                |  560 +++++++++++++++
 static/images/search/searchresultImg5.jpg  |    0 
 static/images/userhome/famale.png          |    0 
 static/scss/index.scss                     |  108 +++
 static/images/userhome/male.png            |    0 
 static/images/chatroom/placeholder-b.png   |    0 
 static/images/friendrequest/evanyou.jpg    |    0 
 static/images/search/searchresultImg8.jpg  |    0 
 debugdate/debugdate.js                     |  357 +++++++++
 static/images/index/friend-list/mengzi.jpg |    0 
 manifest.json                              |    4 
 static/images/chatroom/camera.png          |    0 
 static/images/login/right1.png             |    0 
 static/images/chatroom/map.jpg             |    0 
 static/images/index/top-bar/me.jpg         |    0 
 static/images/search/searchresultImg7.jpg  |    0 
 static/images/chatroom/placeholder-r.png   |    0 
 static/images/friendrequest/mayun.jpg      |    0 
 58 files changed, 2,134 insertions(+), 9 deletions(-)

diff --git a/components/contacts/contacts.vue b/components/contacts/contacts.vue
new file mode 100644
index 0000000..d2f3bad
--- /dev/null
+++ b/components/contacts/contacts.vue
@@ -0,0 +1,231 @@
+<template>
+	<view class="pColumn">
+		<view class="inPColumn" >
+			<view class="left" @click="chating">
+				<view class="top">
+					<view class="userImg">
+						<img class="img" :src="require('../../static/images/index/friend-list/kiko.jpg')">
+					</view>
+					<view class="t-type">{{Pdata.name}}</view>
+					<view class="t-id">{{Pdata.lastTime}}</view>
+				</view>
+				<view class="bottom">{{Pdata.LastMessage}}</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: ['fromW', 'Pdata'],
+		data() {
+			return {
+				popuShow: false,
+				bmainb: ''
+			}
+		},
+		methods: {
+			beginObj() {
+				this.bmainb = '3rem';
+				//#ifdef MP-WEIXIN
+				this.bmainb = '0';
+				//#endif
+			},
+			receives() {
+				var url = this.$store.state.piAPI + "blade-jfpts/alarm/alarm/APP-setAlarm",
+					Pid = this.Pdata.id,
+					id = this.$store.state.puserID, //警察id
+					name = this.$store.state.puserName, //警察id
+					data = {
+						id: Pid,
+						securityId: id,
+						alarmPeople: name
+					},
+					that = this;
+				// console.log(data);
+				wx.request({
+					url: url,
+					data: data,
+					header: {
+						"content-type": "application/x-www-form-urlencoded"
+					},
+					method: 'POST',
+					success(res) {
+						// console.log(res.data.msg);
+					}
+				})
+			},
+			chating(){
+			//发起聊天
+			var datas = this.Pdata;
+			//alert(datas.name)
+			uni.navigateTo({
+			    url: '/pages/groupChat/chating?'
+			});
+			},
+			onClose() { //触摸遮罩事件
+				this.setData({
+					popuShow: false
+				});
+			},
+			popupBY() {
+				this.receives();
+				// console.log('接收成功');
+				this.$emit('refreshTask', this.fromW)
+				// this.triggerEvent('myevent', this.data.fromW);
+				this.popuShow = false;
+			},
+			popupBN() {
+				// console.log('接收取消');
+				this.popuShow = false;
+			}
+		},
+		mounted() {
+			this.beginObj();
+		}
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	/* components/pColumn/pColumn.wxss */
+	.pColumn,
+	.inPColumn,
+	.left,
+	.right,
+	.top {
+		display: flex;
+	}
+
+	.userImg {
+		// border: 1px solid #007AFF;
+
+		.img {
+			width: 100rpx;
+			height: 100rpx;
+			border-radius: 100rpx;
+			// border: 1px solid #007AFF;
+		}
+	}
+
+	.pColumn {
+		width: 100%;
+		align-items: center;
+		justify-content: center;
+		padding-top: 0.5rem;
+
+		.inPColumn {
+			margin: 0.2rem 0 0.4rem 0;
+			width: 95%;
+			height: 4rem;
+			border-bottom: 1px rgb(207, 207, 207) solid;
+			align-items: center;
+			justify-content: space-between;
+
+			.left {
+				width: 80%;
+				/* border: 1px rgb(114, 250, 159) solid; */
+				flex-direction: column;
+
+				.top {
+					.t-type {
+						padding-left: 0.7rem;
+						font-size: 1.1rem;
+						color: #000000;
+					}
+
+					.t-id {
+						color: #8b8b8b;
+						font-size: 0.8rem;
+						line-height: 1.6rem;
+						position: absolute;
+						right: 1.2rem;
+					}
+				}
+
+				.bottom {
+					color: #8b8b8b;
+					font-size: 0.9rem;
+					position: relative;
+					bottom: 1rem;
+					left: 4rem;
+				}
+			}
+
+			.right {
+				width: 20%;
+				/* border: 1px rgb(143, 114, 250) solid; */
+				justify-content: space-around;
+
+				/* align-items: center; */
+				.butPopup {
+					z-index: 4;
+					position: fixed;
+					top: 0;
+					left: 0;
+					width: 100%;
+					height: 100%;
+					background-color: rgba($color: #000000, $alpha: 0.5);
+
+					.b-main {
+						position: absolute;
+						z-index: 2;
+						// bottom: 3rem;//小程序不兼容
+						width: 100%;
+						// border: 1px solid #007AFF;
+						border-radius: 1.5rem;
+						background-color: #fff;
+
+						// height: 20rem;
+						.b-m-title {
+							display: flex;
+							align-items: center;
+							justify-content: center;
+							width: 100%;
+							height: 2.8rem;
+						}
+
+						.b-m-Y,
+						.b-m-N {
+							color: #fff;
+							border-radius: 0;
+						}
+
+						.b-m-Y {
+							background-color: #07C160 !important;
+						}
+
+						.b-m-Y-hove {
+							background-color: #048c44 !important;
+						}
+
+						.b-m-N {
+							background-color: #FF976A !important;
+						}
+
+						.b-m-N-hove {
+							background-color: #e1855d !important;
+						}
+					}
+				}
+			}
+		}
+	}
+
+
+
+
+	// .buttitle {
+	// 	display: flex;
+	// 	align-items: center;
+	// 	justify-content: center;
+	// 	width: 100%;
+	// 	height: 2.8rem;
+	// }
+
+	// .popups {
+	// 	width: 100%;
+	// 	padding-bottom: 0 !important;
+	// 	/* border: 1px solid seagreen; */
+	// }
+</style>
diff --git a/components/submit/emoji/emoji.vue b/components/submit/emoji/emoji.vue
new file mode 100644
index 0000000..f9970d0
--- /dev/null
+++ b/components/submit/emoji/emoji.vue
@@ -0,0 +1,75 @@
+<template>
+	<view class="emoji"
+				:style="{height:height + 'px'}">
+		<view class="emoji-line"
+					v-for="(line, i) in emoji"
+					:key="i">
+			<view class="emoji-line-item"
+						v-for="(item, index) in line"
+						:key="index"
+						@tap="clickEmoji(item)">
+				{{ item }}		
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props:{
+			height: {
+				type: Number,
+				default: 260
+			}
+		},
+		data() {
+			return {
+				emoji:[
+					['😀', '😁', '😂', '🤣', '😃', '😅'],
+					['😆', '😉', '😊', '😋', '😎', '😍'],
+					['😘', '😗', '😙', '😚', '🙂', '🤗'],
+					['🤔', '😐', '😑', '😶', '🙄', '😏'],
+					['😣', '😥', '😮', '🤐', '😯', '😪'],
+					['😫', '😴', '😌', '😛', '😜', '😝'],
+					['🤤', '😓', '😔', '😕', '🙃', '🤑'],
+					['😲', '🙁', '😖', '😞', '😟', '😤'],
+					['😢', '😭', '😦', '😧', '😨', '😩'],
+					['😬', '😱', '😳', '😵', '😳', '😵'],
+					['💼', '🌂', '💍', '💄', '⛑', '🎓'],
+					['👒', '🎩', '👑', '👢', '👡', '👠'],
+					['👟', '👞', '👝', '👜', '👛', '👚'],
+					['🍇', '🍈', '🍉', '🍊', '🍌', '🍒'],
+					['☠', '🛀', '💣', '⏰', '🎎', '📻'],
+					['💘', '❤', '💔', '💢', '💮', '🕜'],
+				]
+			};
+		},
+		methods: {
+			clickEmoji(e) {
+				this.$emit('emotion', e)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.emoji{
+		width: 100%;
+		padding: 16rpx 10rpx 180rpx 10rpx;
+		box-sizing: border-box;
+		overflow: hidden;
+		overflow-y: auto;
+		
+		.emoji-line {
+			display: flex;
+			
+			.emoji-line-item {
+				flex: 1;
+				text-align: center;
+				font-size: 52rpx;
+				line-height: 80rpx;
+			}
+		}
+	}
+
+</style>
diff --git a/components/submit/submit.vue b/components/submit/submit.vue
new file mode 100644
index 0000000..1098c75
--- /dev/null
+++ b/components/submit/submit.vue
@@ -0,0 +1,447 @@
+<template>
+	<view>
+		<view class="submit">
+			<view class="submit-chat">
+				<view class="bt-img">
+					<image src="../../static/images/chatroom/voice.png" 
+								 mode=""
+								 @tap="records"/>
+				</view>
+				<textarea auto-height="true" 
+									class="chat-send btn" 
+									:class="{displaynone: isrecord}"
+									@input="inputs"
+									v-model="msg"
+									@focus="focus"/>
+				<view class="record btn"
+							:class="{displaynone: !isrecord}"
+							@touchstart="touchstart"
+							@touchend="touchend"
+							@touchmove="touchmove"
+							>
+					按住说话
+				</view>
+				<view class="bt-img">
+					<image src="../../static/images/chatroom/emoji.png" 
+								 mode=""
+								 @tap="emoji"/>
+				</view>
+				<view class="bt-img">
+					<image src="../../static/images/chatroom/add.png" 
+								 mode=""
+								 @tap="more"/>
+				</view>
+			</view>
+			<view class="emoji"
+						:class="{ displaynone: !isemoji }">
+				<view class="emoji-send">
+					<view class="emoji-send-del"
+								@tap="emojiBack">
+								删除
+					</view>
+					<view class="emoji-send-bt"
+								@tap="emojiSend">
+								发送
+					</view>
+				</view>
+				<emoji @emotion="emotion"
+							 :height="260" />
+			</view>
+			
+			<view class="more"
+						:class="{ displaynone: !ismore }">
+				<view class="more-list" 
+							@tap="sendImg('album')">
+					<image src="../../static/images/chatroom/photo.png"/>
+					<text class="more-list-title">图片</text>
+				</view>
+				<view class="more-list"
+							@tap="sendImg('camera')">
+					<image src="../../static/images/chatroom/camera.png"/>
+					<text class="more-list-title">拍照</text>
+				</view>
+				<view class="more-list">
+					<image src="../../static/images/chatroom/file.png"/>
+					<text class="more-list-title">文件</text>
+				</view>
+				<view class="more-list"
+							@tap="chooseLocation()">
+					<image src="../../static/images/chatroom/location.png"/>
+					<text class="more-list-title">位置</text>
+				</view>
+				<view class="more-list">
+					<image src="../../static/images/chatroom/vedio.png"/>
+					<text class="more-list-title">视频</text>
+				</view>
+			</view>
+		</view>
+		
+		<!-- 录制语音遮罩 -->
+		<view class="voice-bg"
+					:class="{displaynone: !voicebg}">
+			<view class="voice-bg-len">
+				<view class="voice-bg-time"
+							:style="{width:vlength/0.6 + '%'}">
+					{{ vlength }} "
+				</view>
+			</view>
+			<view class="voice-del">上滑取消取消录音</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import emoji from './emoji/emoji.vue'
+	
+	const recorderManager = uni.getRecorderManager()
+	
+	export default {
+		data() {
+			return {
+				isrecord: false,
+				isemoji: false,
+				ismore: false,
+				voicebg: false,
+				msg: '',
+				timer: '',
+				vlength: 0,
+				pageY: 0,
+			};
+		},
+		components:{
+			emoji,
+		},
+		methods:{
+			// 获取高度
+			_getElementHeight() {
+				const query = uni.createSelectorQuery().in(this);
+				query.select('.submit').boundingClientRect(data => {
+					this.$emit('heights', data.height)
+				}).exec();
+			},
+			// 点击切换音频
+			records() {
+				this.isrecord = !this.isrecord
+				this.isemoji = false
+				this.ismore = false
+				setTimeout(() => {
+					this._getElementHeight()
+				}, 10)
+			},
+			// 点击弹出表情
+			emoji() {
+				this.isemoji = !this.isemoji
+				this.ismore = false
+				this.isrecord = false
+				setTimeout(() => {
+					this._getElementHeight()
+				}, 10)
+			},
+			// 点击弹出更多
+			more() {
+				this.ismore = !this.ismore
+				this.isemoji = false
+				this.isrecord = false
+				setTimeout(() => {
+					this._getElementHeight()
+				}, 10)
+			},
+			// 接收表情
+			emotion(e) {
+				this.msg = this.msg + e
+			},
+			// 文字发送
+			inputs(e) {
+				let chatm = e.detail.value
+				let pos = chatm.indexOf('\n')
+				if(pos != -1 && chatm.length > 1) {
+					this.send(this.msg,0)
+				}
+				setTimeout(() => {
+					this._getElementHeight()
+				},10)
+			},
+			// 输入框聚焦
+			focus(){
+				this.isemoji = false;
+				this.ismore = false;
+				setTimeout(() => {
+					this._getElementHeight()
+				},10)
+			},
+			// 表情内发送
+			emojiSend() {
+				if(this.msg.length > 0) {
+					this.send(this.msg, 0)
+				}
+				setTimeout(() => {
+					this._getElementHeight()
+				},10)
+			},
+			// 表情退格
+			emojiBack() {
+				if(this.msg.length > 0){
+					this.msg = this.msg.substring(0, this.msg.length-1)
+				}
+			},
+			// 发送消息
+			send(msg, type) {
+				let data = {
+					message: msg,
+					types: type
+				}
+				this.$emit('inputs', data)
+				setTimeout(() => {
+					this.msg = ''
+				}, 0)
+				setTimeout(() => {
+					this._getElementHeight()
+				},10)
+			},
+			// 发送图片
+			sendImg(e) {
+				let count = 9;
+				if(e == 'album') {
+					count = 9
+				}else {
+					count = 1
+				}
+				uni.chooseImage({
+					count: count,
+					sizeType: ['original', 'comperssed'],
+					sourceType: [e],
+					success: (res) => {
+						const filePath = res.tempFilePaths
+						for (let i in filePath){
+							this.send(filePath[i], 1)
+						}
+					}
+				})
+				setTimeout(() => {
+					this._getElementHeight()
+				},10)
+			},
+			// 音频处理
+			touchstart(e) {
+				// 此时的Y轴位置
+				this.pageY = e.changedTouches[0].pageY
+				let startIndex = 1
+				this.voicebg = true
+				this.timer = setInterval(() => {
+					this.vlength = startIndex
+					startIndex++
+					if(startIndex > 60) {
+						clearInterval(this.timer)
+						this.touchend();
+					}
+				}, 1000)
+				recorderManager.start()
+			},
+			touchend() {
+				clearInterval(this.timer)
+				recorderManager.stop()
+				recorderManager.onStop((res) => {
+					let data = {
+						voice: res.tempFilePath,
+						time: this.vlength
+					}
+					if(this.voicebg){
+						this.send(data, 2);
+					}					
+					this.vlength = 0
+					this.voicebg = false
+				})
+			},
+			touchmove(e) {
+				if(this.pageY - e.changedTouches[0].pageY > 200) {
+					this.voicebg = false
+				}
+			},
+			// 定位
+			chooseLocation() {
+				uni.chooseLocation({
+					success: (res) => {
+						let data = {
+							name: res.name,
+							address: res.address,
+							latitude: res.latitude,
+							longitude: res.longitude
+						}
+						this.send(data, 3)
+						console.log('位置名称' + res.name)
+						console.log('详细地址' + res.address)
+						console.log('维度' + res.latitude)
+						console.log('经度' + res.longitude)
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.submit {
+		background-color: rgba(244, 244, 244, .96);
+		border-top: 1px solid $uni-border-color;
+		width: 100%;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		z-index: 1002;
+		padding-bottom: env(safe-area-inset-bottom);
+	}
+	
+	.submit-chat {
+		width: 100%;
+		display: flex;
+		align-items: flex-end;
+		box-sizing: border-box;
+		padding: 14rpx 10rpx;
+		
+		image {
+			width: 56rpx;
+			height: 56rpx;
+			margin: 0 10rpx;
+			flex: auto;
+		}
+		
+		.btn {
+			flex: auto;
+			background-color: #fff;
+			border-radius: 10rpx;
+			padding: 20rpx;
+			max-height: 160rpx;
+			margin: 0 10rpx;
+		}
+		
+		.chat-send {
+			line-height: 44rpx !important;
+		}
+		
+		.record {
+			text-align: center;
+			font-size: $uni-font-size-lg;
+			color: $uni-text-color-grey;
+			font-weight: bold;
+		}
+		
+	}
+	.displaynone {
+		display: none;
+	}
+	
+	.emoji {
+		width: 100%;
+		height: 460rpx;
+		background: rgba(236, 237, 238, 1);
+		box-shadow: 0 -1rpx 0 0 rgba(0, 0, 0, 1);
+		
+		.emoji-send {
+			width: 260rpx;
+			height: 104rpx;
+			background: rgba(236, 237, 238, .9);
+			position: fixed;
+			bottom: env(safe-area-inset-bottom);
+			right: 0;
+			padding-top: 24rpx;
+			display: flex;
+			
+			.emoji-send-bt {
+				flex: 1;
+				height: 80rpx;
+				margin: 0 32rpx 0 20rpx;
+				background: rgba(255, 228, 49 ,1);
+				border-radius: 240rpx;
+				font-size: 32rpx;
+				text-align: center;
+				line-height: 80rpx;
+				border-radius: 12rpx;
+			}
+			
+			.emoji-send-del {
+				flex: 1;
+				height: 80rpx;
+				background: #fff;
+				border-radius: 240rpx;
+				font-size: 32rpx;
+				text-align: center;
+				line-height: 80rpx;
+				border-radius: 12rpx;
+				margin-left: 24rpx;
+			}
+		}
+	}
+	.more {
+		width: 100%;
+		height: 436rpx;
+		background: rgba(236, 237, 238, 1);
+		box-shadow: rgba(0, 0, 0, .1);
+		bottom: env(safe-area-inset-bottom);
+		padding: 0 20rpx;
+		box-sizing: border-box;
+		
+		.more-list {
+			width: 25%;
+			text-align: center;
+			float: left;
+			margin-top: 32rpx;
+
+			image {
+				width: 72rpx;
+				height: 72rpx;
+				padding: 24rpx;
+				background: rgba(255, 255, 255, 1);
+				border-radius: 24rpx;
+			}
+			
+			.more-list-title {
+				color: rgba(30, 40, 50, .5);
+				line-height: 34rpx;
+				font-size: 24rpx;
+				display: block;
+			}
+		}
+	}
+	
+	.voice-bg {
+		height: 100%;
+		width: 100%;
+		background: rgba(0, 0, 0, .3);
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		z-index: 1001;
+		// position: relative;
+		
+		.voice-bg-len {
+			height: 84rpx;
+			width: 600rpx;
+			position: absolute;
+			top: 0;
+			left: 0;
+			bottom: 0;
+			right: 0;
+			margin: auto;
+			background: rgba(255, 255, 255, .2);
+			border-radius: 42rpx;
+			text-align: center;
+			.voice-bg-time {
+				display: inline-block;
+				line-height: 84rpx;
+				background-color: $uni-color-primary;
+				border-radius: 42rpx;
+				min-width: 120rpx;
+			}
+		}
+		
+		.voice-del {
+			position: absolute;
+			bottom: 148rpx;
+			margin-bottom: env(safe-area-inset-bottom);
+			width: 100%;
+			text-align: center;
+			 color: #fff;
+			 font-size: $uni-font-size-base;
+		}
+	}
+</style>
diff --git a/config/filter.js b/config/filter.js
new file mode 100644
index 0000000..8ea2527
--- /dev/null
+++ b/config/filter.js
@@ -0,0 +1,93 @@
+// tip值>99显示99+
+import Vue from 'vue'
+// tip值>99显示99+
+Vue.filter('tip', function (tip) {
+  if (tip > 99) {
+    return '99+'
+  }
+  return tip
+})
+
+
+
+export default {
+	date(time){
+		let oldDate = new Date(time)
+		let newDate = new Date()
+		var dayNum = "";
+		var getTime = (newDate.getTime() - oldDate.getTime())/1000;
+	
+		if(getTime < 60*5){
+				dayNum = "刚刚";
+		}else if(getTime >= 60*5 && getTime < 60*60){
+				dayNum = parseInt(getTime / 60) + "分钟前";
+		}else if(getTime >= 3600 && getTime < 3600*24){
+				dayNum = parseInt(getTime / 3600) + "小时前";
+		}else if(getTime >= 3600 * 24 && getTime < 3600 * 24 * 30){
+				dayNum = parseInt(getTime / 3600 / 24 ) + "天前";
+		}else if(getTime >= 3600 * 24 * 30 && getTime < 3600 * 24 * 30 * 12){
+				dayNum = parseInt(getTime / 3600 / 24 / 30 ) + "个月前";  
+		}else if(time >= 3600 * 24 * 30 * 12){
+				dayNum = parseInt(getTime / 3600 / 24 / 30 / 12 ) + "年前";  
+		}
+	
+		let year   = oldDate.getFullYear();
+		let month  = oldDate.getMonth()+1;
+		let day    = oldDate.getDate();
+		let hour   = oldDate.getHours(); 
+		let minute = oldDate.getMinutes(); 
+		let second = oldDate.getSeconds(); 
+		if(getTime < 60 * 5) {
+			return dayNum+" "+hour+":"+minute;
+		}else {
+			return dayNum+" "+year+"-"+month+"-"+day+" "+hour+":"+minute;
+		}
+	},
+	
+	Msgdate(time){
+		let oldDate = new Date(time)
+		let newDate = new Date()
+		var dayNum = "";
+		var getTime = (newDate.getTime() - oldDate.getTime())/1000;
+	
+		if(getTime < 60*5){
+				dayNum = "刚刚";
+		}else if(getTime >= 60*5 && getTime < 60*60){
+				dayNum = parseInt(getTime / 60) + "分钟前";
+		}else if(getTime >= 3600 && getTime < 3600*24){
+				dayNum = parseInt(getTime / 3600) + "小时前";
+		}else if(getTime >= 3600 * 24 && getTime < 3600 * 24 * 30){
+				dayNum = parseInt(getTime / 3600 / 24 ) + "天前";
+		}else if(getTime >= 3600 * 24 * 30 && getTime < 3600 * 24 * 30 * 12){
+				dayNum = parseInt(getTime / 3600 / 24 / 30 ) + "个月前";  
+		}else if(time >= 3600 * 24 * 30 * 12){
+				dayNum = parseInt(getTime / 3600 / 24 / 30 / 12 ) + "年前";  
+		}
+	
+		let year   = oldDate.getFullYear();
+		let month  = oldDate.getMonth()+1;
+		let day    = oldDate.getDate();
+		let hour   = oldDate.getHours(); 
+		let minute = oldDate.getMinutes(); 
+		let second = oldDate.getSeconds(); 
+		if(getTime < 60 * 60 * 12) {
+			return dayNum;
+		}else if(getTime < 60 * 60 * 24){
+			return "昨天" + " " + hour + ":" +minute;
+		}else{
+			return dayNum+" "+year+"-"+month+"-"+day+" "+hour+":"+minute;
+		}
+	},
+	spaceTime(old, now) {
+		old = new Date(old)
+		now = new Date(now)
+		let told = old.getTime()
+		let tnow = now.getTime()
+		if(told > (tnow + 1000 * 60 * 5)) {
+			return now
+		}else {
+			return ''
+		}
+	}
+}
+
diff --git a/debugdate/debugdate.js b/debugdate/debugdate.js
new file mode 100644
index 0000000..b22430e
--- /dev/null
+++ b/debugdate/debugdate.js
@@ -0,0 +1,357 @@
+export default {
+	friends() {
+		let friendArr = [
+			{
+				id: 1,
+				name: '王野未',
+				head: require('@/static/images/index/top-bar/me.jpg'),
+				mess: '做个好梦',
+				data: new Date(),
+				tip: 1,
+				email: 'wangyewei1@foxmail.com',
+				intro: '求知若渴,虚心若愚',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			},
+			{
+				id: 2,
+				name: '孟子',
+				head: require('@/static/images/index/friend-list/mengzi.jpg'),
+				mess: '所以我也想不通我要睡啥子觉,为了他们晓得',
+				data: new Date(),
+				tip: 0,
+				email: 'mengzi@163.com',
+				intro: '我的身体还有我的灵魂都没法知足,所以我也想不通我要睡啥子觉,为了他们晓得,为了妈跟老汉儿,如果我起不来就该被驾驶骂',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			},
+			{
+				id: 3,
+				name: '谢帝',
+				head: require('@/static/images/index/friend-list/xiedi.jpg'),
+				mess: '是学校的赘肉,试卷上躺了我的遗骸,我拿起笔来',
+				data: new Date(),
+				tip: 2,
+				email: 'xiedi@163.com',
+				intro: '说唱在我心中还是一如既往的根本不用去想的去讲的保持一贯风靡',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			},
+			{
+				id: 4,
+				name: '水原希子',
+				head: require('@/static/images/index/friend-list/kiko.jpg'),
+				mess: '早点休息哦宝贝',
+				data: new Date(),
+				tip: 208,
+				email: 'kiko@163.com',
+				intro: '水原希子(Mizuhara Kiko),1990年10月15日出生于美国德克萨斯州达拉斯。演员、模特。曾是日本杂志《ViVi》及日版《Seventeen》的专属模特',
+				sex: 'famale',
+				sexImg: require('@/static/images/userhome/famale.png')
+			},
+			{
+				id: 5,
+				mess: '吃点串呀',
+				data: new Date(),
+				tip: 1,
+				name: '撸串研究生',
+				email: 'luchuanyanjiusheng@foxmail.com',
+				head: require('@/static/images/search/searchresultImg1.jpg'),
+				intro: '我爱吃串',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			},
+			{
+				id: 6,
+				mess: '你发现我了呀',
+				data: new Date(),
+				tip: 1,
+				name: '港城宝藏女孩',
+				email: 'gangchengbaozangnvhai@foxmail.com',
+				head: require('@/static/images/search/searchresultImg2.jpg'),
+				intro: '你在看我主页吗?',
+				sex: 'famale',
+				sexImg: require('@/static/images/userhome/famale.png')
+			},
+			{
+				id: 7,
+				mess: '哦',
+				data: new Date(),
+				tip: 1,
+				name: '不解风情的老妖怪',
+				email: 'yimiwuxiaokeai@foxmail.com',
+				head: require('@/static/images/search/searchresultImg3.jpg'),
+				intro: '为什么给我分配一些情侣头像啊',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			},
+			{
+				id: 8,
+				mess: '晚上好呀~',
+				data: new Date(),
+				tip: 1,
+				name: '一米五的小可爱',
+				email: 'bujiefengqinglaotaoguai@foxmail.com',
+				head: require('@/static/images/search/searchresultImg4.jpg'),
+				intro: '个子矮矮,可可爱爱',
+				sex: 'famale',
+				sexImg: require('@/static/images/userhome/famale.png')
+			},
+			{
+				id: 9,
+				mess: '没钱还花呗了呀',
+				data: new Date(),
+				tip: 5,
+				name: '马云背后的女人',
+				email: 'ziwofoudingxianquzhe@foxmail.com',
+				head: require('@/static/images/search/searchresultImg5.jpg'),
+				intro: '马云靠我养',
+				sex: 'famale',
+				sexImg: require('@/static/images/userhome/famale.png')
+			},
+			{
+				id: 10,
+				mess: '我不行',
+				data: new Date(),
+				tip: 1,
+				name: '自我否定先驱者',
+				email: 'mayunbeihoudenvren@foxmail.com',
+				head: require('@/static/images/search/searchresultImg6.jpg'),
+				intro: '国际一级退堂鼓演奏家',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			},
+			{
+				id: 11,
+				mess: '乖哦~',
+				data: new Date(),
+				tip: 5,
+				name: '联合国认证小可爱',
+				email: 'guojiatejibubaohudongwu@foxmail.com',
+				head: require('@/static/images/search/searchresultImg7.jpg'),
+				sex: 'famale',
+				sexImg: require('@/static/images/userhome/famale.png')
+			},
+			{
+				id: 12,
+				mess: '我又被打了',
+				data: new Date(),
+				tip: 20,
+				name: '国家特级不保护动物',
+				email: 'lianheguorenzhengxiaokeai@foxmail.com',
+				head: require('@/static/images/search/searchresultImg8.jpg'),
+				intro: '针对我?',
+				sex: 'male',
+				sexImg: require('@/static/images/userhome/male.png')
+			}
+			
+			
+		]
+		return friendArr
+	},
+	applys(){
+		let applyArr = [
+			{
+				name:'好友申请',
+				head: require('@/static/images/index/friend-list/apply.png'),
+				mess: '若人生只如初见~',
+				tip: '3'
+			}
+		]
+		return applyArr
+	},
+	isFriend(){
+		let isfriend = [
+			{
+				userid:1,
+				friend:2
+			},
+			{
+				userid:1,
+				friend:3
+			},
+			{
+				userid:1,
+				friend:4
+			},
+			{
+				userid:1,
+				friend:5
+			},
+			{
+				userid:1,
+				friend:9
+			},
+			{
+				userid:1,
+				friend:1,
+			}
+		]
+		return isfriend
+	},
+	firendsRequest(){
+		let friendRequests = [
+			{
+				name: '马云',
+				head: require('@/static/images/friendrequest/mayun.jpg'),
+				message: '王总您好,我是阿里巴巴马云,刚才有跟你致电。',
+				date: new Date()
+			},
+			{
+				name: '尤雨溪 Evan You',
+				head: require('@/static/images/friendrequest/evanyou.jpg'),
+				message: '我是Vue.js尤雨溪',
+				date: new Date()
+			},
+			{
+				name: '福布斯·中国',
+				head: require('@/static/images/friendrequest/Forbes.jpg'),
+				message: '王总您好,恭喜您入围2020福布斯富豪排行榜',
+				date: new Date()
+			}
+		]
+		return friendRequests
+	},
+	// 聊天消息
+	message(){
+		let msgs = [
+			// {
+			// 	id: 1,
+			// 	imgUrl; 'me.jpg',
+			// 	message: 'I miss u TaoXingyu',
+			// 	types: 0,
+			// 	time: new Date(),
+			// 	tip: ''
+			// },
+			{
+				id: 4,
+				imgUrl: 'kiko.jpg',
+				message: '增加数据条数',
+				types: 0,
+				time: new Date(),
+				tip: 13
+			},
+			{
+				id: 4,
+				imgUrl: 'kiko.jpg',
+				message: '开始写分页加载 2020/8/24',
+				types: 0,
+				time: new Date(),
+				tip: 12
+			},
+			{
+				id: 4,
+				imgUrl: 'kiko.jpg',
+				message: {
+					name: 'Komehyo',
+					address: '〒104-0061 東京都中央区銀座5丁目6−12 1F~4F みゆきビル',
+					latitude: '35.40159',
+					longitude: '139.45488'
+				},
+				types:3,
+				time:new Date(),
+				tip: 11
+			},
+			{
+				id: 1,
+				imgUrl: 'me.jpg',
+				message: {
+					name: '春熙路',
+					address: '四川省成都市锦江区春熙路',
+					latitude: '30.65331',
+					longitude: '104.07775'
+				},
+				types:3,
+				time:new Date(),
+				tip: 10
+			},
+			{
+				id: 1,
+				message: {
+					voice: 'b',
+					time: 5
+				},
+				imgUrl: 'me.jpg',
+				types: 2,
+				time: new Date(),
+				tip: 9
+			},
+			{
+				id: 4,
+				message: {
+					voice: 'a',
+					time: 60
+				},
+				imgUrl: 'kiko.jpg',
+				types: 2,
+				time: new Date(),
+				tip: 8
+			},
+			{
+				id: 1,
+				message: '我在写BUG',
+				imgUrl: 'me.jpg',
+				types: 0,
+				time: new Date() - 1000 * 60 * 10,
+				tip: 7
+			},
+			{
+				id: 4,
+				message: '你还在写代码吗?',
+				imgUrl: 'kiko.jpg',
+				types: 0,
+				time: new Date() - 1000 * 60 * 10,
+				tip: 6
+			},
+			{
+				id: 1,
+				message: '你每天都好看',
+				imgUrl: 'me.jpg',
+				types: 0,
+				time: new Date() - 1000,
+				tip: 5
+			},
+			{
+				id: 4,
+				message: 'kiko.jpg',
+				imgUrl: 'kiko.jpg',
+				types: 1,
+				time: new Date() - 1000,
+				tip: 4
+			},
+			{
+				id: 4,
+				message: '嘻嘻,你看我今天好不好看',
+				imgUrl: 'kiko.jpg',
+				types: 0,
+				time: new Date() - 1000 * 60 * 60,
+				tip: 3
+			},
+			{
+				id: 1,
+				message: '傻瓜,端午要说安康哦',
+				imgUrl: 'me.jpg',
+				types: 0,
+				time: new Date() - 1000 * 60 * 60,
+				tip: 2
+			},
+			{
+				id: 4,
+				message: '今天是端午节哦,端午节快乐',
+				imgUrl: 'kiko.jpg',
+				types: 0,
+				time: new Date() - 1000 * 60 * 600 ,
+				tip: 1
+			},
+			{
+				id: 4,
+				message: '早哦,宝贝',
+				imgUrl: 'kiko.jpg',
+				types: 0,
+				time: new Date() - 1000 * 60 * 600,
+				tip: 0
+			},
+		]
+		return msgs
+	}
+}
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index 7138e21..a6cb4a6 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,6 +1,6 @@
 {
     "name" : "jfpt",
-    "appid" : "__UNI__88EDF2B",
+    "appid" : "__UNI__1A57486",
     "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",
@@ -42,7 +42,7 @@
                     "<uses-feature android:name=\"android.hardware.camera\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                 ],
-                "abiFilters" : [ "armeabi-v7a" ]
+                "abiFilters" : [ "armeabi-v7a", "x86" ]
             },
             /* ios打包配置 */
             "ios" : {},
diff --git a/pages.json b/pages.json
index ccdf632..390288a 100644
--- a/pages.json
+++ b/pages.json
@@ -99,6 +99,28 @@
 			}
 		},
 		{
+			"path": "pages/groupChat/groupChat",
+			"name": "groupChat",
+			"style": {
+				"navigationBarTitleText": "聊天室"
+			}
+		},
+		{
+		    "path" : "components/submit/submit",
+		    "style" : {}
+		},
+		{
+			"path": "pages/groupChat/chating",
+			"name": "chating",
+			"style": {
+				"navigationBarTitleText": "聊天室2",
+				"navigationStyle":"custom",
+				"app-plus":{
+					"titleNView":false
+				}
+			}
+		},
+		{
 			"path": "pages/infoRegistration/infoRegistration",
 			"name": "infoRegistration",
 			"style": {
@@ -240,7 +262,7 @@
 				"selectedIconPath": "static/tabbar/businessH.png"
 			}, {
 
-				"pagePath": "pages/investigation/investigation",
+				"pagePath": "pages/groupChat/groupChat",
 				"text": "我要说",
 				"iconPath": "static/tabbar/investigation.png",
 				"selectedIconPath": "static/tabbar/investigationH.png"
@@ -253,10 +275,15 @@
 
 		]
 	},
-	"globalStyle": {
-		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#F8F8F8",
-		"backgroundColor": "#F8F8F8"
-	}
+	"globalStyle": { // 不能在globalStyle中设置隐藏头部导航栏,否则聊天页面的头部栏会不显示,在pages中设置titleNView为false就可以隐藏头部导航栏了
+	        "navigationBarTextStyle": "black",
+	        "navigationBarTitleText": "hello",
+	        "navigationBarBackgroundColor": "#fff",
+	        "backgroundColor": "#f7f7f7",
+	        "backgroundTextStyle":"light",
+	        "pageOrientation":"portrait", //横屏配置,屏幕旋转设置
+	        "app-plus": {
+	            "bounce": "none"
+	        }
+	    }
 }
diff --git a/pages/groupChat/chating.vue b/pages/groupChat/chating.vue
new file mode 100644
index 0000000..10737b0
--- /dev/null
+++ b/pages/groupChat/chating.vue
@@ -0,0 +1,560 @@
+<template>
+	<view class="content">
+	
+	<!-- 头部 -->
+	<view class="top-bar">
+		<view class="top-bar-left" @tap="backOne()">
+			<view class="back-img">
+				<image src="@/static/images/common/back.png" />
+			</view>
+		</view>
+		<view class="top-bar-center title">
+			<text>水原希子kiko</text>
+		</view>
+		<view class="top-bar-right search pice">
+			<view class="group-img">
+				<image src="@/static/images/index/friend-list/kiko.jpg"
+							 mode=""/>
+			</view>
+		</view>
+	</view>
+	
+	<scroll-view scroll-y="true"
+							 class="chat"
+							 scroll-with-animation="isanimation"
+							 :scroll-into-view="scrollToView"
+							 @scrolltoupper="nextPage">
+		<view class="chat-main"
+					:style="{paddingBottom:inputh + 'px'}">
+			<view class="loading"
+						:class="{displaynone:isload}">
+				<image src="@/static/images/chatroom/load.png" 
+							 mode=""
+							 class="loading-img"
+							 :animation="animationData"/>
+			</view>
+			<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="msg-m msg-left" v-if="item.id != 1">
+					<image :src="item.imgUrl" 
+								 mode=""
+								 class="user-img" />
+					<!-- text -->
+					<view class="message" v-if="item.types == 0">
+						<view class="msg-text">{{ item.message }}</view>
+					</view>
+					<!-- image -->
+					<view class="message" v-if="item.types == 1">
+						<image :src="item.message" 
+									 class="msg-img"
+									 mode="widthFix"
+									 @tap="previewImage(item.message)"/>
+					</view>
+					<!-- voice -->
+					<view class="message" v-if="item.types == 2">
+						<view class="msg-text voice"
+									:style="{width:item.message.time * 4 + 'px'}"
+									@tap="playVoice(item.message.voice)">
+							<image src="../../static/images/chatroom/sound.png" 
+										 mode=""
+										 class="voice-img"/>
+							{{ item.message.time }} "
+						</view>
+					</view>
+					<!-- location -->
+					<view class="message" v-if="item.types == 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>
+							<image src="../../static/images/chatroom/map.jpg" 
+										 mode="aspectFit" 
+										 class="map-img"/>
+						</view>
+					</view>
+					
+				</view>
+				
+				<view class="msg-m msg-right" v-if="item.id == 1">
+					<image :src="item.imgUrl" 
+								 mode=""
+								 class="user-img" />
+					<view class="message" v-if="item.types == 0">
+						<view class="msg-text">{{ item.message }}</view>
+					</view>
+					<view class="message" v-if="item.types == 1">
+						<image :src="item.message" 
+									 class="msg-img"
+									 mode="widthFix"
+									 @tap="previewImage(item.message)"/>
+					</view>
+					<!-- voice -->
+					<view class="message" v-if="item.types == 2">
+						<view class="msg-text voice"
+									:style="{width:item.message.time * 4 + 'px'}"
+									@tap="playVoice(item.message.voice)">
+							{{ item.message.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="msg-map"
+									@tap="openLocation(item.message)">
+							<view class="map-name">{{ item.message.name }}</view>
+							<view class="map-address">{{ item.message.address }}</view>
+							<!-- <map class="map"
+									 :latitude="item.message.latitude"
+									 :longitude="item.message.longitude"
+									 :markers="covers(item.message)"/> -->
+							<image src="../../static/images/chatroom/map.jpg"
+										 mode="aspectFit" 
+										 class="map-img"/>
+						</view>
+					</view>
+				</view>
+				
+				
+			</view>
+			
+		</view>
+		<!-- <view class="padbt"></view> -->
+	</scroll-view>
+	<submit @inputs="inputs" 
+					@heights="heights"/>
+	</view>
+</template>
+
+<script>
+	import datas from  '@/debugdate/debugdate.js'
+	import filter from '@/config/filter.js'
+	import submit from '@/components/submit/submit.vue'
+	
+	const innerAudioContext = uni.createInnerAudioContext()
+	
+	export default {
+		data() {
+			return {
+				msgs: [],
+				imgMsg: [],
+				oldTime: new Date(),
+				scrollToView: '',
+				inputh: '72',                 
+				animationData: {},            // 动画
+				nowpage: 0,                   // 页码
+				loading: '',                  // 滚动事件
+				isload: true,
+				isanimation: true,
+				begainloading: true
+			};
+		},
+		components:{
+			submit,
+		},
+		onLoad() {
+			this._getMsg(this.nowpage)
+			// this.nextPage()
+		},
+		methods:{
+			// 返回键
+			backOne() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 滚动顶部加载上一页
+			nextPage() {
+				
+				if(this.nowpage > 0 && this.begainloading) {
+					// 出现loading icon
+					this.isload = false
+					this.begainloading = false
+					
+					var animation = uni.createAnimation({
+						duration: 1000,
+						timingFunction: 'step-start'
+					})
+					
+					this.animation = animation
+					
+					
+					let i = 1
+					this.loading = setInterval(function() {
+						animation.rotate(i * 30).step()
+						this.animationData = animation.export()
+						i++
+						// 滑动加载数据
+						if(i > 40) {
+							this._getMsg(this.nowpage)
+						}
+						
+					}.bind(this), 100)
+				}
+				
+				
+			},
+			// 获取聊天数据
+			_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
+						}
+						msg[i].time = t
+					}
+					// 补充图片地址
+					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) {
+				
+				let index = 0
+				for(var i =0; i < this.imgMsg.length; i++){
+					if(this.imgMsg[i] == e) {
+						index = i
+					}
+				}
+				uni.previewImage({
+					current: index,
+					urls: this.imgMsg,
+					longPressActions: {
+						itemList: ['发送给朋友', '保存图片', '收藏'],
+						success: function(data) {
+							console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
+						},
+						fail: function(err) {
+							console.log(err.errMsg);
+						}
+					}
+				});
+			},
+			// 音频播放
+			playVoice(e) {
+				console.log('ok')
+				innerAudioContext.src = e
+				innerAudioContext.play()
+			},
+			// 接收输入内容
+			inputs(e) {
+				this.isanimation = true
+				let len = this.msgs.length -1				
+				let nowTime = new Date()				
+				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
+				}
+				this.msgs.push(sendMsg)
+				this.$nextTick(() => {
+					this.scrollToView = 'msg' + len
+				})
+				if(e.types == 1) {
+					this.imgMsg.push(e.message)
+				}
+			},
+			// 输入框高度
+			heights(e) {
+				this.inputh = e
+				this.goBottom()
+				// console.log('高度' + e)
+			},
+			// 滚动到底部
+			goBottom() {
+				this.isanimation = true
+				this.scrollToView = ''
+				this.$nextTick(() => {
+					let len = this.msgs.length -1
+					this.scrollToView = 'msg' + this.msgs[len].tip
+				})
+			},
+			// 地图定位
+			covers(e) {
+				let map = [
+					{
+						latitude: e.latitude,
+						longitude: e.longitude,
+						iconPath: '../../static/images/chatroom/placeholder-r.png'
+					}
+				]
+				return (map)
+			},
+			// 导航
+			openLocation(e) {
+				uni.openLocation({
+					latitude: e.latitude,
+					longitude: e.longitude,
+					name: e.name,
+					address: e.address,
+					success: () => {
+						console.log('success')
+					}
+				})
+			},
+		},
+		filters:{
+			Msgdate(time) {
+			 return	filter.Msgdate(time)
+			}
+		}
+	}
+	
+</script>
+
+<style lang="scss">	
+	@import '../../static/scss/index.scss';
+	.padbt {
+		height: var(--status-bar-height);
+		width: 100%;
+	}
+	page {
+		height: 100%;
+	}
+	.content {
+		height: 100%;
+		background: rgba(244, 244, 244, 1);
+		// background: #2C405A;
+	}
+	
+	.top-bar {
+		background: rgba(244, 244, 244, .96);
+		// box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, .1);
+		border-bottom: 1px solid $uni-border-color;
+		
+		.group-img {
+			image{
+				position: absolute;
+				bottom: 10rpx;
+				right: $uni-spacing-col-base;
+				width: 68rpx;
+				height: 68rpx;
+				border-radius: 16rpx;
+				// justify-content: center;
+			}
+		}
+	}
+
+	.chat {
+		height: 100%;
+		
+		.chat-main {
+			padding-left: $uni-spacing-col-base;
+			padding-right: $uni-spacing-col-base;
+			padding-top: 100rpx;
+			// padding-bottom: 120rpx;
+			display: flex;
+			flex-direction: column;
+			
+			.loading {
+				text-align: center;
+				
+				.loading-img {
+					width: 60rpx;
+					height: 60rpx;
+				}
+			}
+		}
+		
+		.chat-ls {
+			
+			.chat-time {
+				font-size: $uni-font-size-base;
+				color: rgba(39, 40, 50, .6);
+				line-height: 34rpx;
+				padding: 20rpx 0;
+				text-align: center;
+			}
+			
+			.msg-m {
+				display: flex;
+				padding: 20rpx 0;
+				
+				.user-img {
+					flex: none;
+					width: 88upx;;
+					height: 88upx;;
+					border-radius: $uni-border-radius-base;
+				}
+				
+				.message {
+					flex: none;
+					max-width: 480rpx;
+					
+				}
+				
+				.msg-text {
+					font-size: $uni-font-size-lg;
+					color: $uni-text-color;
+					line-height: 44rpx;
+					padding: 18rpx 34rpx;
+				}
+				
+				.msg-img {
+					border-radius: $uni-border-radius-base;
+					max-width: 400rpx;
+				}
+				
+				.voice {
+					width: 200rpx;
+					min-width: 110rpx;
+					max-width: 400rpx;
+					
+					.voice-img {
+						width: 20px;
+						height: 40rpx;
+						top: 2rpx;
+						// padding-top: -8rpx;
+					}
+					
+				}
+				// 陶 我想你
+				.msg-map {
+					background: #fff;
+					width: 464rpx;
+					height: 284rpx;
+					overflow: hidden;
+					
+					.map-name {
+						font-size: $uni-font-size-lg;
+						color: $uni-text-color;
+						line-height: 44rpx;
+						padding: 18rpx 24rpx 0 24rpx;
+						display: -webkit-box;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 1;
+						overflow: hidden;
+					}
+					
+					.map-address {
+						font-size: $uni-font-size-sm;
+						color: $uni-text-color-disable;
+						padding: 0rpx 24rpx;
+						display: -webkit-box;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 1;
+						overflow: hidden;
+					}
+					
+					// .map {
+					// 	padding-top: 8rpx;
+					// 	width: 464rpx;
+					// 	height: 190rpx;
+					// 	overflow: hidden;
+					// }
+					
+					.map-img {
+						width: 464rpx;
+						// padding-top: 8rpx;
+						height: 310rpx;
+						// top: -70rpx;
+					}
+				}
+				
+			}
+			.msg-left {
+				flex-direction: row;
+				.msg-text {
+					margin-left: 16rpx;
+					background-color: #fff;
+					border-radius: 0 20rpx 20rpx 20rpx;
+				}
+				
+				.msg-img {
+					padding-left: 16rpx;
+				}
+				
+				.msg-map {
+					margin-left: 16rpx;
+					border-radius: 0 20rpx 20rpx 20rpx;
+				}
+				
+				.voice {
+					text-align: right;
+					
+					.voice-img {
+						float: left;			
+					}
+					
+				}
+				
+			}
+			
+			.msg-right {
+				flex-direction: row-reverse;
+				.msg-text {
+					margin-right: 16rpx;
+					background-color: rgba(255, 228, 49, .8);
+					border-radius: 20rpx 0rpx 20rpx 20rpx;
+				}
+				
+				.msg-img {
+					padding-right: 16rpx;
+				}
+				
+				.msg-map {
+					margin-right: 16rpx;
+					border-radius: 20rpx 0rpx 20rpx 20rpx;
+				}
+				
+				.voice {
+					text-align: left;
+					
+					.voice-img {
+						float: right;
+						transform: rotate(180deg);					
+					}
+					
+				}
+				
+			}
+		}
+		
+	}
+	.displaynone {
+		display: none;
+	}
+</style>
diff --git a/pages/groupChat/groupChat.vue b/pages/groupChat/groupChat.vue
new file mode 100644
index 0000000..0fd8d26
--- /dev/null
+++ b/pages/groupChat/groupChat.vue
@@ -0,0 +1,199 @@
+<!-- 工作台 -->
+<template>
+	<view class="work">
+		<view class="main">
+			<div>
+				<div class="m-main">
+					<!-- <view class="inTitle">{{Task}}</view> -->
+					<view class="inTmain">
+						<contacts v-for="(item,index) in dataListP" :key="index" :Pdata="item" :fromW="fromW"
+							@refreshTask="refreshTask"></contacts>
+					</view>
+				</div>
+			</div>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import WxStorage from "../../static/lib/wxStorage.js"
+	import axios from '../../static/lib/axios.js'
+	import contacts from '../../components/contacts/contacts.vue'
+	export default {
+		components: {
+			contacts
+		},
+		data() {
+			return {
+				zhanwei: '', //因为小程序中底部和顶部栏占位置,uniapp中不占位置
+				ingsDB: '#00d1ff 2px solid',
+				candoDB: '#fff 2px solid',
+				Task: '当前已接任务',
+				show: true,
+				dataListP: [],
+				fromW: '',
+				onTop: false, //是否吸顶
+				rect: '', //页面滚动距离
+				menutop: '', //组件距离顶部的距离
+				titleTop: '', //
+				hello: false,
+				userName: '',
+			}
+		},
+		methods: {
+			beginObj() {
+				this.titleTop = '2.6rem';
+				this.zhanwei = '3rem';
+				//#ifdef MP-WEIXIN
+				console.log('uni-app小程序中')
+				this.titleTop = '0';
+				this.zhanwei = '0';
+				//#endif
+			},
+			onClick(e) {
+				console.log(e, 777878)
+			},
+			ingss() {
+				this.ingsDB = '#00d1ff 2px solid';
+				this.candoDB = '#fff 2px solid';
+				this.Task = '当前已接任务';
+				this.getdataList(0);
+			},
+			candos() {
+				this.candoDB = '#00d1ff 2px solid';
+				this.ingsDB = '#fff 2px solid';
+				this.Task = '当前可接任务';
+				this.getdataList(1);
+			},
+			getdataList(need) {
+				this.fromW = need;
+				var that = this;
+				
+				uni.request({
+					url:"http://s16s652780.51mypc.cn/map/chat.json",
+					method:"get",
+					data:{
+					},
+					success:(res)=> {
+						that.dataListP = res.data.contacts
+					}
+				})
+				
+				
+			},
+			refreshTask() {
+				this.getdataList(1);
+			},
+			
+		},
+		mounted() {
+			this.beginObj();
+			this.ingss();
+		},
+		onPageScroll(e) {
+			// console.log(e.scrollTop, 'pingmu')
+			this.rect = e.scrollTop
+		},
+		watch: {
+			rect() {
+				if (this.rect >= this.menutop) {
+					this.onTop = true
+				} else {
+					this.onTop = false
+				}
+			}
+		},
+		onLoad: function(options) {
+			this.userName = options.login
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	.work {
+		width: 100%;
+		height: 100%;
+		padding: 0.625rem 2.5% 3rem 2.5%;
+		box-sizing: border-box;
+
+		.hello {
+			position: absolute;
+			top: 0;
+			left: 25%;
+			width: 50%;
+			height: 2rem;
+			border-radius: 20rem;
+			color: #fff;
+			background-color: rgba($color: #000000, $alpha: 0.5);
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+
+		.center {
+			padding-top: 0.5rem;
+			display: flex;
+			align-items: center;
+			justify-content: space-around;
+
+			.left,
+			.right {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex-direction: column;
+
+				image {
+					width: 4rem;
+					height: 4rem;
+				}
+			}
+		}
+
+		.main {
+			.m-title {
+				width: 100%;
+				height: 2rem;
+				display: flex;
+				align-items: center;
+				justify-content: space-around;
+				padding-top: 0.8rem;
+				padding-bottom: 0.5rem;
+				// border: 1px solid #B3E19D;
+				box-sizing: border-box;
+
+				.m-t {
+					padding-bottom: 0.5rem;
+					box-sizing: border-box;
+				}
+			}
+
+			.m-titletop {
+				width: 95%;
+				height: 2.2rem;
+				display: flex;
+				align-items: center;
+				justify-content: space-around;
+				padding-top: 0.8rem;
+				padding-bottom: 0.5rem;
+				// border: 1px solid #B3E19D;
+				box-sizing: border-box;
+				position: fixed;
+				background-color: #fff;
+				z-index: 3;
+				border-bottom: 1px solid rgba($color: #000000, $alpha: 0.3);
+
+				.m-t {
+					padding-bottom: 0.5rem;
+					box-sizing: border-box;
+				}
+			}
+
+			.m-main {
+				box-sizing: border-box;
+			}
+		}
+	}
+</style>
diff --git a/static/chat.json b/static/chat.json
new file mode 100644
index 0000000..5cbb272
--- /dev/null
+++ b/static/chat.json
@@ -0,0 +1,25 @@
+{
+    "contacts": [
+        {
+            "name":"王一平",
+            "id":"123",
+            "sex":1,
+            "lastTime":"2021-6-17 8:59:25",
+            "LastMessage":"等下吃啥"
+        },
+        {
+            "name":"查干",
+            "id":"456",
+            "sex":1,
+            "lastTime":"2021-6-17 9:42:25",
+            "LastMessage":"测试信息"
+        },
+        {
+            "name":"王秋娇",
+            "id":"789",
+            "sex":1,
+            "lastTime":"2021-6-17 8:25:17",
+            "LastMessage":"巡逻点有问题"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/static/images/chatroom/add.png b/static/images/chatroom/add.png
new file mode 100644
index 0000000..c23c2aa
--- /dev/null
+++ b/static/images/chatroom/add.png
Binary files differ
diff --git a/static/images/chatroom/camera.png b/static/images/chatroom/camera.png
new file mode 100644
index 0000000..e6f2e3c
--- /dev/null
+++ b/static/images/chatroom/camera.png
Binary files differ
diff --git a/static/images/chatroom/emoji.png b/static/images/chatroom/emoji.png
new file mode 100644
index 0000000..f185ca5
--- /dev/null
+++ b/static/images/chatroom/emoji.png
Binary files differ
diff --git a/static/images/chatroom/file.png b/static/images/chatroom/file.png
new file mode 100644
index 0000000..294822d
--- /dev/null
+++ b/static/images/chatroom/file.png
Binary files differ
diff --git a/static/images/chatroom/load.png b/static/images/chatroom/load.png
new file mode 100644
index 0000000..092d727
--- /dev/null
+++ b/static/images/chatroom/load.png
Binary files differ
diff --git a/static/images/chatroom/location.png b/static/images/chatroom/location.png
new file mode 100644
index 0000000..3c29740
--- /dev/null
+++ b/static/images/chatroom/location.png
Binary files differ
diff --git a/static/images/chatroom/map.jpg b/static/images/chatroom/map.jpg
new file mode 100644
index 0000000..c138282
--- /dev/null
+++ b/static/images/chatroom/map.jpg
Binary files differ
diff --git a/static/images/chatroom/photo.png b/static/images/chatroom/photo.png
new file mode 100644
index 0000000..8811ac2
--- /dev/null
+++ b/static/images/chatroom/photo.png
Binary files differ
diff --git a/static/images/chatroom/placeholder-b.png b/static/images/chatroom/placeholder-b.png
new file mode 100644
index 0000000..6c1a4d8
--- /dev/null
+++ b/static/images/chatroom/placeholder-b.png
Binary files differ
diff --git a/static/images/chatroom/placeholder-r.png b/static/images/chatroom/placeholder-r.png
new file mode 100644
index 0000000..afdde32
--- /dev/null
+++ b/static/images/chatroom/placeholder-r.png
Binary files differ
diff --git a/static/images/chatroom/sound.png b/static/images/chatroom/sound.png
new file mode 100644
index 0000000..2e2f3e9
--- /dev/null
+++ b/static/images/chatroom/sound.png
Binary files differ
diff --git a/static/images/chatroom/vedio.png b/static/images/chatroom/vedio.png
new file mode 100644
index 0000000..b8a0cf1
--- /dev/null
+++ b/static/images/chatroom/vedio.png
Binary files differ
diff --git a/static/images/chatroom/voice.png b/static/images/chatroom/voice.png
new file mode 100644
index 0000000..0e0e918
--- /dev/null
+++ b/static/images/chatroom/voice.png
Binary files differ
diff --git a/static/images/common/back.png b/static/images/common/back.png
new file mode 100644
index 0000000..57c1793
--- /dev/null
+++ b/static/images/common/back.png
Binary files differ
diff --git a/static/images/friendrequest/Forbes.jpg b/static/images/friendrequest/Forbes.jpg
new file mode 100644
index 0000000..78c0f07
--- /dev/null
+++ b/static/images/friendrequest/Forbes.jpg
Binary files differ
diff --git a/static/images/friendrequest/evanyou.jpg b/static/images/friendrequest/evanyou.jpg
new file mode 100644
index 0000000..8b8540d
--- /dev/null
+++ b/static/images/friendrequest/evanyou.jpg
Binary files differ
diff --git a/static/images/friendrequest/mayun.jpg b/static/images/friendrequest/mayun.jpg
new file mode 100644
index 0000000..ce3082c
--- /dev/null
+++ b/static/images/friendrequest/mayun.jpg
Binary files differ
diff --git a/static/images/index/friend-list/apply.png b/static/images/index/friend-list/apply.png
new file mode 100644
index 0000000..d02cf2d
--- /dev/null
+++ b/static/images/index/friend-list/apply.png
Binary files differ
diff --git a/static/images/index/friend-list/kiko.jpg b/static/images/index/friend-list/kiko.jpg
new file mode 100644
index 0000000..3081f49
--- /dev/null
+++ b/static/images/index/friend-list/kiko.jpg
Binary files differ
diff --git a/static/images/index/friend-list/me.jpg b/static/images/index/friend-list/me.jpg
new file mode 100644
index 0000000..c9413d4
--- /dev/null
+++ b/static/images/index/friend-list/me.jpg
Binary files differ
diff --git a/static/images/index/friend-list/mengzi.jpg b/static/images/index/friend-list/mengzi.jpg
new file mode 100644
index 0000000..866385c
--- /dev/null
+++ b/static/images/index/friend-list/mengzi.jpg
Binary files differ
diff --git a/static/images/index/friend-list/xiedi.jpg b/static/images/index/friend-list/xiedi.jpg
new file mode 100644
index 0000000..361b340
--- /dev/null
+++ b/static/images/index/friend-list/xiedi.jpg
Binary files differ
diff --git a/static/images/index/top-bar/add.png b/static/images/index/top-bar/add.png
new file mode 100644
index 0000000..9479fec
--- /dev/null
+++ b/static/images/index/top-bar/add.png
Binary files differ
diff --git a/static/images/index/top-bar/me.jpg b/static/images/index/top-bar/me.jpg
new file mode 100644
index 0000000..c9413d4
--- /dev/null
+++ b/static/images/index/top-bar/me.jpg
Binary files differ
diff --git a/static/images/index/top-bar/search.png b/static/images/index/top-bar/search.png
new file mode 100644
index 0000000..35a377d
--- /dev/null
+++ b/static/images/index/top-bar/search.png
Binary files differ
diff --git a/static/images/login/biyan.png b/static/images/login/biyan.png
new file mode 100644
index 0000000..2ab7e3a
--- /dev/null
+++ b/static/images/login/biyan.png
Binary files differ
diff --git a/static/images/login/look.png b/static/images/login/look.png
new file mode 100644
index 0000000..5641c39
--- /dev/null
+++ b/static/images/login/look.png
Binary files differ
diff --git a/static/images/login/right1.png b/static/images/login/right1.png
new file mode 100644
index 0000000..dbc6d36
--- /dev/null
+++ b/static/images/login/right1.png
Binary files differ
diff --git a/static/images/search/search.png b/static/images/search/search.png
new file mode 100644
index 0000000..3dcc60e
--- /dev/null
+++ b/static/images/search/search.png
Binary files differ
diff --git a/static/images/search/searchresultImg1.jpg b/static/images/search/searchresultImg1.jpg
new file mode 100644
index 0000000..f351583
--- /dev/null
+++ b/static/images/search/searchresultImg1.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg2.jpg b/static/images/search/searchresultImg2.jpg
new file mode 100644
index 0000000..8c389cb
--- /dev/null
+++ b/static/images/search/searchresultImg2.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg3.jpg b/static/images/search/searchresultImg3.jpg
new file mode 100644
index 0000000..18dd4fe
--- /dev/null
+++ b/static/images/search/searchresultImg3.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg4.jpg b/static/images/search/searchresultImg4.jpg
new file mode 100644
index 0000000..6c00205
--- /dev/null
+++ b/static/images/search/searchresultImg4.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg5.jpg b/static/images/search/searchresultImg5.jpg
new file mode 100644
index 0000000..2ee8db5
--- /dev/null
+++ b/static/images/search/searchresultImg5.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg6.jpg b/static/images/search/searchresultImg6.jpg
new file mode 100644
index 0000000..1df7a18
--- /dev/null
+++ b/static/images/search/searchresultImg6.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg7.jpg b/static/images/search/searchresultImg7.jpg
new file mode 100644
index 0000000..dd9deff
--- /dev/null
+++ b/static/images/search/searchresultImg7.jpg
Binary files differ
diff --git a/static/images/search/searchresultImg8.jpg b/static/images/search/searchresultImg8.jpg
new file mode 100644
index 0000000..69588bc
--- /dev/null
+++ b/static/images/search/searchresultImg8.jpg
Binary files differ
diff --git a/static/images/userdetails/right-arrow.png b/static/images/userdetails/right-arrow.png
new file mode 100644
index 0000000..9f13d2a
--- /dev/null
+++ b/static/images/userdetails/right-arrow.png
Binary files differ
diff --git a/static/images/userhome/famale.png b/static/images/userhome/famale.png
new file mode 100644
index 0000000..e4814d7
--- /dev/null
+++ b/static/images/userhome/famale.png
Binary files differ
diff --git a/static/images/userhome/gender.png b/static/images/userhome/gender.png
new file mode 100644
index 0000000..6d6719e
--- /dev/null
+++ b/static/images/userhome/gender.png
Binary files differ
diff --git a/static/images/userhome/male.png b/static/images/userhome/male.png
new file mode 100644
index 0000000..285cf30
--- /dev/null
+++ b/static/images/userhome/male.png
Binary files differ
diff --git a/static/images/userhome/more.png b/static/images/userhome/more.png
new file mode 100644
index 0000000..46d7f77
--- /dev/null
+++ b/static/images/userhome/more.png
Binary files differ
diff --git a/static/lib/axios.js b/static/lib/axios.js
new file mode 100644
index 0000000..fc6c8b6
--- /dev/null
+++ b/static/lib/axios.js
@@ -0,0 +1,3 @@
+/* axios v0.21.1 | (c) 2020 by Matt Zabriskie */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new i(e),n=s(i.prototype.request,t);return o.extend(n,i.prototype,t),o.extend(n,t),n}var o=n(2),s=n(3),i=n(4),a=n(22),u=n(10),c=r(u);c.Axios=i,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),c.isAxiosError=n(26),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"undefined"==typeof e}function s(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function i(e){return"[object ArrayBuffer]"===R.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){if("[object Object]"!==R.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Date]"===R.call(e)}function h(e){return"[object File]"===R.call(e)}function m(e){return"[object Blob]"===R.call(e)}function y(e){return"[object Function]"===R.call(e)}function g(e){return p(e)&&y(e.pipe)}function v(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function w(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&t.call(null,e[s],s,e)}function E(){function e(e,n){d(t[n])&&d(e)?t[n]=E(t[n],e):d(e)?t[n]=E({},e):r(e)?t[n]=e.slice():t[n]=e}for(var t={},n=0,o=arguments.length;n<o;n++)b(arguments[n],e);return t}function j(e,t,n){return b(t,function(t,r){n&&"function"==typeof t?e[r]=S(t,n):e[r]=t}),e}function C(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}var S=n(3),R=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:i,isBuffer:s,isFormData:a,isArrayBufferView:u,isString:c,isNumber:f,isObject:p,isPlainObject:d,isUndefined:o,isDate:l,isFile:h,isBlob:m,isFunction:y,isStream:g,isURLSearchParams:v,isStandardBrowserEnv:w,forEach:b,merge:E,extend:j,trim:x,stripBOM:C}},function(e,t){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){"use strict";function r(e){this.defaults=e,this.interceptors={request:new i,response:new i}}var o=n(2),s=n(5),i=n(6),a=n(7),u=n(22);r.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{},e.url=arguments[0]):e=e||{},e=u(this.defaults,e),e.method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},r.prototype.getUri=function(e){return e=u(this.defaults,e),s(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},o.forEach(["delete","get","head","options"],function(e){r.prototype[e]=function(t,n){return this.request(u(n||{},{method:e,url:t,data:(n||{}).data}))}}),o.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(u(r||{},{method:e,url:t,data:n}))}}),e.exports=r},function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=n(2);e.exports=function(e,t,n){if(!t)return e;var s;if(n)s=n(t);else if(o.isURLSearchParams(t))s=t.toString();else{var i=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)?t+="[]":e=[e],o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),i.push(r(t)+"="+r(e))}))}),s=i.join("&")}if(s){var a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+s}return e}},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(2);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t,n){"use strict";function r(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var o=n(2),s=n(8),i=n(9),a=n(10);e.exports=function(e){r(e),e.headers=e.headers||{},e.data=s(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||a.adapter;return t(e).then(function(t){return r(e),t.data=s(t.data,t.headers,e.transformResponse),t},function(t){return i(t)||(r(e),t&&t.response&&(t.response.data=s(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){"use strict";function r(e,t){!s.isUndefined(e)&&s.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function o(){var e;return"undefined"!=typeof XMLHttpRequest?e=n(12):"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process)&&(e=n(12)),e}var s=n(2),i=n(11),a={"Content-Type":"application/x-www-form-urlencoded"},u={adapter:o(),transformRequest:[function(e,t){return i(t,"Accept"),i(t,"Content-Type"),s.isFormData(e)||s.isArrayBuffer(e)||s.isBuffer(e)||s.isStream(e)||s.isFile(e)||s.isBlob(e)?e:s.isArrayBufferView(e)?e.buffer:s.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):s.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},s.forEach(["delete","get","head"],function(e){u.headers[e]={}}),s.forEach(["post","put","patch"],function(e){u.headers[e]=s.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),s=n(16),i=n(5),a=n(17),u=n(20),c=n(21),f=n(14);e.exports=function(e){return new Promise(function(t,n){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic "+btoa(h+":"+m)}var y=a(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),i(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in l?u(l.getAllResponseHeaders()):null,s=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:s,status:l.status,statusText:l.statusText,headers:r,config:e,request:l};o(t,n,i),l=null}},l.onabort=function(){l&&(n(f("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(f("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||c(y))&&e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),n(e),l=null)}),p||(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,s){var i=new Error(e);return r(i,t,n,o,s)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,s,i){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(s)&&a.push("domain="+s),i===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(18),o=n(19);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,s,i={};return e?(r.forEach(e.split("\n"),function(e){if(s=e.indexOf(":"),t=r.trim(e.substr(0,s)).toLowerCase(),n=r.trim(e.substr(s+1)),t){if(i[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i[t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t]+", "+n:n}}),i):i}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){function n(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function o(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(e[o],t[o])}t=t||{};var s={},i=["url","method","data"],a=["headers","auth","proxy","params"],u=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],c=["validateStatus"];r.forEach(i,function(e){r.isUndefined(t[e])||(s[e]=n(void 0,t[e]))}),r.forEach(a,o),r.forEach(u,function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(void 0,t[o])}),r.forEach(c,function(r){r in t?s[r]=n(e[r],t[r]):r in e&&(s[r]=n(void 0,e[r]))});var f=i.concat(a).concat(u).concat(c),p=Object.keys(e).concat(Object.keys(t)).filter(function(e){return f.indexOf(e)===-1});return r.forEach(p,o),s}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t){"use strict";e.exports=function(e){return"object"==typeof e&&e.isAxiosError===!0}}])});
+//# sourceMappingURL=axios.min.map
\ No newline at end of file
diff --git a/static/scss/index.scss b/static/scss/index.scss
new file mode 100644
index 0000000..cc368cc
--- /dev/null
+++ b/static/scss/index.scss
@@ -0,0 +1,108 @@
+// 页面开头公共样式
+.content {
+	padding-top: var(--status-bar-height);
+	}
+
+
+// 头部公共样式
+.top-bar {
+			height: 88rpx;
+			position: fixed;
+			left: 0;
+			top: 0;
+			width: 100%;			
+			display: flex;
+			align-items: center;
+			z-index: 999;
+			padding-top: var(--status-bar-height);
+
+			
+			.top-bar-left {
+				margin-left: 32rpx;
+				justify-content: left;
+				flex: 1;
+							
+				image {
+					width: 68rpx;
+					height: 68rpx;
+					border-radius: 16rpx;
+				}
+								
+				.back-img {
+					left: 0;
+					width: 88rpx;
+					height : 88rpx;
+					
+					image {
+						width: 26rpx;
+						height: 45rpx;
+						margin-top: 22rpx;
+					}
+				}
+
+			}
+			.top-bar-center {
+				
+				.logo {
+					font-weight: bold;
+					color: grey;
+				}
+			}
+			
+			.top-bar-right {
+				margin-right: 32rpx;
+				flex: 1;
+				text-align: right;
+				justify-content: right;
+				
+				image {
+					width: 52rpx;
+					height: 52rpx;
+					margin-left: 52rpx;
+				}
+				
+				.text {
+					font-size: $uni-font-size-lg;
+					font-weight: 500;
+					color: $uni-text-color;
+				}
+				
+				.more-img {
+					padding-right: $uni-spacing-col-base;
+					position: relative;
+					
+					image {
+						width: 52rpx;
+						height: 12rpx;
+						top: 0;
+						right: 0;
+						position: absolute;
+					}
+				}
+			}
+		}
+		
+		// 底部样式
+		.bottom-bar {
+			position: fixed;
+			bottom: 0;
+			height: 90rpx;
+			width: 100%;
+			// padding: 12rpx $uni-spacing-col-base;
+			padding-top: 10rpx;
+			padding-bottom: var(--status-bar-height);
+				
+		}
+		
+		// 按钮公共样式1
+		.btn1 {
+			margin: 0 $uni-spacing-col-base;
+			line-height: 80rpx;			
+			height: 80rpx;
+			border-radius: $uni-border-radius-sm;
+			font-size: 32rpx;
+			color: $uni-text-color;
+			text-align: center;
+		}
+		
+		
\ No newline at end of file
diff --git a/static/tabbar/article.png b/static/tabbar/article.png
index 26618b3..d22eb75 100644
--- a/static/tabbar/article.png
+++ b/static/tabbar/article.png
Binary files differ
diff --git a/static/tabbar/investigation.png b/static/tabbar/investigation.png
index 42ec163..d5e1102 100644
--- a/static/tabbar/investigation.png
+++ b/static/tabbar/investigation.png
Binary files differ
diff --git a/static/tabbar/investigationH.png b/static/tabbar/investigationH.png
index c30ae0c..f983dfb 100644
--- a/static/tabbar/investigationH.png
+++ b/static/tabbar/investigationH.png
Binary files differ
diff --git a/static/tabbar/user.png b/static/tabbar/user.png
index 44d8a60..609bb1a 100644
--- a/static/tabbar/user.png
+++ b/static/tabbar/user.png
Binary files differ

--
Gitblit v1.9.3