项目背景

公司平台要做一个通讯系统,本来是java 来做的后面改前端+PHP来做,所以就用VUE来做这个了。

github

github地址
新人求star

技术栈

vue-axios
vuex
websocket
sass
css3
等...

已经完成进度

  • 整体结构已经完成
  • 好友列表完成
  • 好友添加拒绝完成
  • 好友列表发起聊天完成
  • 聊天页面点击聊天完成
  • 发送聊天完成
  • 点击聊天列表清除未读消息完成
  • 实时消息通知完成
  • 好友动态上下线完成
  • 实时加好友通知完成
  • 优化发送文字长度
  • 聊天记录本地储存 如果页面不刷新 则不会丢失
  • 与后端已经联调完成,一期已经上线

部分代码

  1. 添加好友代码
  2. <div class="AddContacts" id="AddContacts">
  3. <navBar></navBar>
  4. <div class="AddContactsBox">
  5. <h3>添加好友</h3>
  6. <div class="AddContactsSerchBox">
  7. <input type="text" placeholder="请输入用户名/好友昵称..." id="serchInput" @focus="delStatus" @keydown.13="enter($event)"/>
  8. <span @click="serchBtn">搜索</span>
  9. <p v-if="status">{{statusMessage}}</p>
  10. </div>
  11. <div class="AddContactsSerchListBox">
  12. <h4>搜索结果 <a href="javascript:;" v-if="false"> <查看推荐好友</a></h4>
  13. <ul>
  14. <li v-for="(list,index) in data.list" :id="list.aid" :ueraid="list.aid" v-if="(list.status != 2) && (list.aid != isselfAid)" :aa="isselfAid">
  15. <div class="imgHd"><img :src="list.avatar"/></div>
  16. <div class="userInfo">
  17. <p>{{list.nickname}} <i :class="list.sex" v-if="false"></i></p>
  18. <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>
  19. </div>
  20. </li>
  21. </ul>
  22. </div>
  23. </div>

  1. 公共弹窗代码
  2. <div class="RulePop" id="RulePop">
  3. <div class="pop">
  4. <h3>提示<span class="close" @click="$store.commit('rulestate',{type:'',status:false,data:{}})"></span></h3>
  5. <div class="cont">
  6. <div :class="['contMessage',type]">
  7. <i></i>
  8. <span>{{type === 'del' ? '确定要移除 '+ delInfo.name +' 吗?' : message[type]}}</span>
  9. </div>
  10. <div class="box" v-show="type === 'del'">
  11. <a href="javascript:;" @click="delFriends()">确定</a>
  12. <a href="javascript:;" @click="$store.commit('rulestate',{type:'',status:false,data:{}})">取消</a>
  13. </div>
  14. </div>
  15. </div>
  16. <div class="divMask"></div>
  17. </div>

  1. 好友模块相关代码
  2. <div class="Contacts" id="Contacts">
  3. <div class="ContactsBox">
  4. <div class="ChatSerch">
  5. <input type="text" class="ChatSerchInput" placeholder="搜索..."/>
  6. </div>
  7. <div class="ChatList clearfix">
  8. <div class="addContacts">
  9. <div class="title addContactsTitle titleB" :data-num="data[1].ApplyList.length">
  10. 好友申请&nbsp;[{{data[1].ApplyList.length}}]
  11. </div>
  12. <div class="addContactsList overflow" v-if="data[1].ApplyList.length">
  13. <div class="ulwrapper">
  14. <ul>
  15. <li v-for="(list,index) in data[1].ApplyList" @click="mFadd(list.aid,list.id,true)" :useraid="list.aid" :userid="list.id">
  16. <div class="userHd">
  17. <div class="userHdImg"><img :src="list.avatar"/></div>
  18. </div>
  19. <div class="userInfo">
  20. <div class="userInfoA">
  21. <span class="name textHidden">{{list.nickname}}</span>
  22. </div>
  23. <div class="userInfoB">
  24. <span class="oneMessage textHidden">申请加我为好友</span>
  25. </div>
  26. </div>
  27. </li>
  28. </ul>
  29. </div>
  30. </div>
  31. </div>
  32. <div class="myFriends">
  33. <div class="title myFriendsTitle titleB" >
  34. 我的好友&nbsp;[{{data[0].onlineNum}}/{{data[0].friendsList.length}}]
  35. </div>
  36. <div class="myFriendsList overflow">
  37. <div class="ulwrapper">
  38. <ul>
  39. <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)">
  40. <vue-context-menu :contextMenuData="contextMenuData" :transferIndex="transferIndex" @savedata="savedata(list.aid,list.id,false)" @newdata="newdata(list)"></vue-context-menu>
  41. <div class="userHd">
  42. <div class="userHdImg"><img :src="list.avatar"/></div>
  43. <span class="onlineState online_game" v-if="false"></span>
  44. </div>
  45. <div class="userInfo">
  46. <div class="userInfoA">
  47. <span class="name textHidden">{{list.nickname}}</span>
  48. </div>
  49. </div>
  50. </li>
  51. </ul>
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <ContactsView :currentData.sync="currentData" :type.sync="type" :isDefault.sync="isDefault"></ContactsView>
  58. </div>

  1. 聊天模块相关代码
  2. <div class="Chat clearfix" id="Chat">
  3. <div class="ChatBox">
  4. <div class="ChatSerch">
  5. <input type="text" class="ChatSerchInput" placeholder="搜索..."/>
  6. </div>
  7. <div class="ChatList clearfix">
  8. <div class="ulwrapper">
  9. <ul>
  10. <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">
  11. <div :class="[list.is_online == 0 ? 'offline':'']">
  12. <div class="userHd">
  13. <div class="userHdImg"><img :src="list.avatar"/></div>
  14. <span class="onlineState online_game" v-if="list.playing_status != 0">
  15. <em><i></i>正在玩{{list.playing_game_info.name}}</em>
  16. </span>
  17. </div>
  18. <div class="userInfo">
  19. <div class="userInfoA">
  20. <span class="name textHidden">{{list.nickname}}</span>
  21. <span class="userMessageNum textHidden" v-if="list.message_count > 0" :num="list.message_count">{{list.message_count > 99 ? '99+': list.message_count}}</span>
  22. </div>
  23. <div class="userInfoB">
  24. <span class="oneMessage textHidden">{{list.last_message}}</span>
  25. <span class="userInfoTime textHidden">{{list.last_send_at}}</span>
  26. </div>
  27. </div>
  28. </div>
  29. </li>
  30. </ul>
  31. </div>
  32. </div>
  33. </div>
  34. <ChatView :chatData.sync="chatData" :isDefault.sync="isDefault" :sendMsg.sync="sendMsg"></ChatView>
  35. </div>`

项目截图

基于VUE多人聊天项目的更多相关文章

  1. 基于@vue/cli 的构建项目(3.0)

    1.检测node的版本号 注意:1.Vue CLI需要Node.js的版本 8.9+(推荐8.11.0+) 所以在安装Vue CLI之前先看下node的版本 node -v 2.安装@vue/cli ...

  2. 基于Vue 和 webpack的项目实现

    Vue.js 是一款极简的 mvvm 框架,如果让我用一个词来形容它,就是 “轻·巧” .如果用一句话来描述它,它能够集众多优秀逐流的前端框架之大成,但同时保持简单易用.废话不多说,来看几个例子: & ...

  3. 基于vue现有项目的服务器端渲染SSR改造

    前面的话 不论是官网教程,还是官方DEMO,都是从0开始的服务端渲染配置.对于现有项目的服务器端渲染SSR改造,特别是基于vue cli生成的项目,没有特别提及.本文就小火柴的前端小站这个前台项目进行 ...

  4. [译]基于Vue.js的10个最佳UI框架,用于构建移动应用程序

    原文查看10 Best Vue.js based UI Frameworks for Building Mobile Apps 如果您期待使用Vue.js构建移动应用程序,那么您可以选择许多可用的UI ...

  5. 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

    原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  6. 基于Vue.js的大型报告页项目实现过程及问题总结(一)

    今年5月份的时候做了一个测评报告项目,需要在网页正常显示的同时且可打印为pdf,当时的技术方案采用jquery+template的方式,因为是固定模板所以并没有考虑报告的模块化区分,九月底产品提出新的 ...

  7. 基于Vue.js 2.0 + Vuex打造微信项目

    一.项目简介 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面,实现了微信聊天.搜索.点赞.通讯录(快速导航).个人中心.模拟对话.朋友圈.设置等功能. 二. ...

  8. 基于VUE开发项目

    前言 最近由于公司需要,需要写一个相对来说比较大型的后台管理系统.为了保证管理系统操作体验较为舒适并且项目后期益于维护,最后决定基于VUE全家桶来开发一个高度组件化的单页SPA应用. 技术选型 vue ...

  9. 基于 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 时代,包括其插件在需要时就引 ...

随机推荐

  1. 五大好用的开源MySQL管理工具推荐

    众所周知,对于数据库管理工作者(DBA)来说,保持数据正常运行在最佳状态需要具备敏捷.专注.冷静和快速的反应能力.因为数据库几乎是所有应用程序成功运行的核心,由于DBA负责组织数据,因此寻找可靠的工具 ...

  2. 安装mysql数据库要注意的

    只安装基本功能即可,以后要的话可以加 需要配置环境变量 最好不要将数据存放在c盘,默认在  C:\ProgramData\MySQL\MySQL Server 5.6  里面存放建的表和存放的数据

  3. Mac上的应用,例如Xcode需要输入原始下载账号才能更新问题

    为了免下载安装Xcode,安装时使用了别人提供的Xcode.dmg安装,或者公司接管上任同事使用的Mac时,上面的应用都是用别人的账号购买下载的,而非使用自己账号在AppStore下载的. 这样的安装 ...

  4. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_4 Mybatis的CRUD-查询一个和模糊查询

    模糊查询 测试的时候需要提供百分号的模糊查询.传入的参数提供百分号 所有包含王字的就都查询出来了.

  5. 阶段3 1.Mybatis_03.自定义Mybatis框架_5.自定义Mybatis的编码-创建两个默认实现类并分析类之间的关系

    把XMLConfigBuilder的包名补全 这样我们就可以调用里面的loadConfiguration方法了 创建工厂实现类 实现SqlSessionFactory的接口 实现接口里面的方法 把cf ...

  6. 函数传参和firture传参数request

    前言 为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数.比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行.但 ...

  7. Spring MVC集成Swagger2.0

    在集成Swagger之前,得先说说什么是Swagger,它是用来做什么的,然后再讲讲怎么集成,怎么使用,当然,在这之前,需要了解一下OpenAPI. OpenAPI OpenAPI 3.0规范定义了一 ...

  8. java 发送 http post 和 get 请求(利用unirest)

    调用服务器端的接口在前端调用,但是我们也会经常遇到在服务器后端调用接口的情况,网上的例子大部分都是用 jdk 原生的 URL realUrl = new URL(url); URLConnection ...

  9. opencv.js小项目demo

    1.博客连接 https://blog.csdn.net/weixin_38361925/article/details/82528529 2.demo连接 https://github.com/mt ...

  10. vue引入query

    1 首先先安装query.(cnpm install query --save-dev)或者 在package.json里的dependencies加入"jquery" : &qu ...