基于VUE多人聊天项目
项目背景
公司平台要做一个通讯系统,本来是java 来做的后面改前端+PHP来做,所以就用VUE来做这个了。
github
github地址
新人求star
技术栈
vue-axios
vuex
websocket
sass
css3
等...
已经完成进度
- 整体结构已经完成
- 好友列表完成
- 好友添加拒绝完成
- 好友列表发起聊天完成
- 聊天页面点击聊天完成
- 发送聊天完成
- 点击聊天列表清除未读消息完成
- 实时消息通知完成
- 好友动态上下线完成
- 实时加好友通知完成
- 优化发送文字长度
- 聊天记录本地储存 如果页面不刷新 则不会丢失
- 与后端已经联调完成,一期已经上线
部分代码
添加好友代码
<div class="AddContacts" id="AddContacts">
<navBar></navBar>
<div class="AddContactsBox">
<h3>添加好友</h3>
<div class="AddContactsSerchBox">
<input type="text" placeholder="请输入用户名/好友昵称..." id="serchInput" @focus="delStatus" @keydown.13="enter($event)"/>
<span @click="serchBtn">搜索</span>
<p v-if="status">{{statusMessage}}</p>
</div>
<div class="AddContactsSerchListBox">
<h4>搜索结果 <a href="javascript:;" v-if="false"> <查看推荐好友</a></h4>
<ul>
<li v-for="(list,index) in data.list" :id="list.aid" :ueraid="list.aid" v-if="(list.status != 2) && (list.aid != isselfAid)" :aa="isselfAid">
<div class="imgHd"><img :src="list.avatar"/></div>
<div class="userInfo">
<p>{{list.nickname}} <i :class="list.sex" v-if="false"></i></p>
<span :class="list.status === 0 ? 'addFriends':'addProving'" @click="addFriend(list.status,list.aid,index)"><img src="../images/addFriends.png" v-if="list.status === 0"/>{{list.status === 0 ? '好友':'待验证'}}</span>
</div>
</li>
</ul>
</div>
</div>
公共弹窗代码
<div class="RulePop" id="RulePop">
<div class="pop">
<h3>提示<span class="close" @click="$store.commit('rulestate',{type:'',status:false,data:{}})"></span></h3>
<div class="cont">
<div :class="['contMessage',type]">
<i></i>
<span>{{type === 'del' ? '确定要移除 '+ delInfo.name +' 吗?' : message[type]}}</span>
</div>
<div class="box" v-show="type === 'del'">
<a href="javascript:;" @click="delFriends()">确定</a>
<a href="javascript:;" @click="$store.commit('rulestate',{type:'',status:false,data:{}})">取消</a>
</div>
</div>
</div>
<div class="divMask"></div>
</div>
好友模块相关代码
<div class="Contacts" id="Contacts">
<div class="ContactsBox">
<div class="ChatSerch">
<input type="text" class="ChatSerchInput" placeholder="搜索..."/>
</div>
<div class="ChatList clearfix">
<div class="addContacts">
<div class="title addContactsTitle titleB" :data-num="data[1].ApplyList.length">
好友申请 [{{data[1].ApplyList.length}}]
</div>
<div class="addContactsList overflow" v-if="data[1].ApplyList.length">
<div class="ulwrapper">
<ul>
<li v-for="(list,index) in data[1].ApplyList" @click="mFadd(list.aid,list.id,true)" :useraid="list.aid" :userid="list.id">
<div class="userHd">
<div class="userHdImg"><img :src="list.avatar"/></div>
</div>
<div class="userInfo">
<div class="userInfoA">
<span class="name textHidden">{{list.nickname}}</span>
</div>
<div class="userInfoB">
<span class="oneMessage textHidden">申请加我为好友</span>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="myFriends">
<div class="title myFriendsTitle titleB" >
我的好友 [{{data[0].onlineNum}}/{{data[0].friendsList.length}}]
</div>
<div class="myFriendsList overflow">
<div class="ulwrapper">
<ul>
<li v-for="(list,index) in data[0].friendsList" :key="index" :useraid="list.aid" :class="['',{'offline':list.is_online == 0}]" @contextmenu="showMenu(index)" :state="list.is_online" @click="mFadd(list.aid,list.id,false)">
<vue-context-menu :contextMenuData="contextMenuData" :transferIndex="transferIndex" @savedata="savedata(list.aid,list.id,false)" @newdata="newdata(list)"></vue-context-menu>
<div class="userHd">
<div class="userHdImg"><img :src="list.avatar"/></div>
<span class="onlineState online_game" v-if="false"></span>
</div>
<div class="userInfo">
<div class="userInfoA">
<span class="name textHidden">{{list.nickname}}</span>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<ContactsView :currentData.sync="currentData" :type.sync="type" :isDefault.sync="isDefault"></ContactsView>
</div>
聊天模块相关代码
<div class="Chat clearfix" id="Chat">
<div class="ChatBox">
<div class="ChatSerch">
<input type="text" class="ChatSerchInput" placeholder="搜索..."/>
</div>
<div class="ChatList clearfix">
<div class="ulwrapper">
<ul>
<li v-for="(list,index) in data.offlinelist" :class="[list.current === 'current' ? 'current':'']" :index="index" :current= "list.current" @click="adclick(list,index)" :useraid="list.aid" :sessionid="list.session_id" :id="list.aid">
<div :class="[list.is_online == 0 ? 'offline':'']">
<div class="userHd">
<div class="userHdImg"><img :src="list.avatar"/></div>
<span class="onlineState online_game" v-if="list.playing_status != 0">
<em><i></i>正在玩{{list.playing_game_info.name}}</em>
</span>
</div>
<div class="userInfo">
<div class="userInfoA">
<span class="name textHidden">{{list.nickname}}</span>
<span class="userMessageNum textHidden" v-if="list.message_count > 0" :num="list.message_count">{{list.message_count > 99 ? '99+': list.message_count}}</span>
</div>
<div class="userInfoB">
<span class="oneMessage textHidden">{{list.last_message}}</span>
<span class="userInfoTime textHidden">{{list.last_send_at}}</span>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<ChatView :chatData.sync="chatData" :isDefault.sync="isDefault" :sendMsg.sync="sendMsg"></ChatView>
</div>`
项目截图
基于VUE多人聊天项目的更多相关文章
- 基于@vue/cli 的构建项目(3.0)
1.检测node的版本号 注意:1.Vue CLI需要Node.js的版本 8.9+(推荐8.11.0+) 所以在安装Vue CLI之前先看下node的版本 node -v 2.安装@vue/cli ...
- 基于Vue 和 webpack的项目实现
Vue.js 是一款极简的 mvvm 框架,如果让我用一个词来形容它,就是 “轻·巧” .如果用一句话来描述它,它能够集众多优秀逐流的前端框架之大成,但同时保持简单易用.废话不多说,来看几个例子: & ...
- 基于vue现有项目的服务器端渲染SSR改造
前面的话 不论是官网教程,还是官方DEMO,都是从0开始的服务端渲染配置.对于现有项目的服务器端渲染SSR改造,特别是基于vue cli生成的项目,没有特别提及.本文就小火柴的前端小站这个前台项目进行 ...
- [译]基于Vue.js的10个最佳UI框架,用于构建移动应用程序
原文查看10 Best Vue.js based UI Frameworks for Building Mobile Apps 如果您期待使用Vue.js构建移动应用程序,那么您可以选择许多可用的UI ...
- 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室
原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...
- 基于Vue.js的大型报告页项目实现过程及问题总结(一)
今年5月份的时候做了一个测评报告项目,需要在网页正常显示的同时且可打印为pdf,当时的技术方案采用jquery+template的方式,因为是固定模板所以并没有考虑报告的模块化区分,九月底产品提出新的 ...
- 基于Vue.js 2.0 + Vuex打造微信项目
一.项目简介 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面,实现了微信聊天.搜索.点赞.通讯录(快速导航).个人中心.模拟对话.朋友圈.设置等功能. 二. ...
- 基于VUE开发项目
前言 最近由于公司需要,需要写一个相对来说比较大型的后台管理系统.为了保证管理系统操作体验较为舒适并且项目后期益于维护,最后决定基于VUE全家桶来开发一个高度组件化的单页SPA应用. 技术选型 vue ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
随机推荐
- 转 HTTP请求报文格式 GET和POST
https://blog.csdn.net/h517604180/article/details/79802914 最近在做安卓客户端图片上传插件功能,供后台调用.其中涉及到了拼接HTTP请求报文,所 ...
- 自建 CA 中心并签发 CA 证书
目录 文章目录 目录 CA 认证原理浅析 基本概念 PKI CA 认证中心(证书签发) X.509 标准 证书 证书的签发过程 自建 CA 签发证书并认证 HTTPS 网站的过程 使用 OpenSSL ...
- OpenStack Nova Placement API 统一资源管理接口的未来
目录 目录 Placement API 为何称之为 "未来" 操作对象基本概念 数据库操作样例 Placement API 在创建虚拟机时的调度过程 Placement REST ...
- spotlight监控mysql性能
spotlight可以监控mysql性能,同监控linux一样配置 目录 1.安装spotlight 2.参数认识 1.安装spotlight spotlight不仅仅只是监控mysql,还可以完成数 ...
- oracle-不完全数据库恢复-被动恢复-RMAN-06025/ORA-01190
不完全数据库恢复 到目前为止,前面讨论的都是完全恢复数据库,这是recover database\recover tablespace\recover datafile默认的行为特征. 所谓完全恢复指 ...
- Matlab 文件格式化/Matlab Source File Formattor
由于需要使用到别人编写的Matlab代码文件,但是呢不同的人有不同的风格,有的写得就比较糟糕了. 为了更好地理解代码的内容,一个比较美观的代码会让人身心愉悦. 但是在网上并没有找到一个比较好的实现,此 ...
- 索尼A6300
1. 开机提示的NTSC NTSC和PAL,是两种不同视频录制标准,也就是说拍摄视频的时候才有用. a6300 1080P下,最大可以以 每秒 120p(ntsc下)或者 100p(pal下)录制.播 ...
- Ubuntu新建用户以及安装pytorch
环境:Ubuntu18,Python3.6 首先登录服务器 ssh username@xx.xx.xx.xxx #登录一个已有的username 新建用户 sudo adduser username ...
- AngularJS——基础小知识(一)
$time0ut :定时器 $rootscope :全局的 $scope : 局部的作用域: 它下面的方法: $scope.$watch $scope.$apply 1)$scope.$wat ...
- 正反向代理、负载均衡、Nginx配置实现
一.正反向代理 1.前提 我们曾经使用翻墙软件,访问google:使用了代理软件时,需要在浏览器选项中配置代理的地址,我们仅仅有代理这个概念,并不清楚代理还有正向和反向之分. 2.正向代理(代替客户端 ...