开源一套vue+koa2高颜值实时聊天简易版QQ

技术栈

vue+vuex+vue-router+better-scroll+socket.io+koa2+mongodb+pm2自动化部署+图灵机器人+nginx+linux部署

功能清单

1、注册登录选择头像功能(canvas压缩大图片);

2、即时查看在线离线人员;

3、对聊、下拉加载更多信息、点击查看高清大图可左右滑动

4、群聊、下拉加载更多信息、点击查看高清大图可左右滑动

5、智能机器人对聊、下拉加载更多信息、点击查看高清大图可左右滑动

6、点击头像查看用户信息、可看关注、聊天、查看高清大图;

7、查看文章,支持上拉加载下拉刷新、评论、收藏、关注;

8、进入文章可以评论、回复、收藏、喜欢、点赞;

9、搜索、搜索用户姓名和文章、热门搜索、历史搜索;

10、我的个人中心、查看我的发布、收藏、喜欢的文章;

11、我的个人中心、我的关注、粉丝、评论、回复
私聊

项目目录

E:.
│   .babelrc
│   .editorconfig
│   .gitignore
│   .postcssrc.js
│   index.html
│   package-lock.json
│   package.json
│   README.md
│       
├───build
│       
├───config      
│                      
│           
├───src
│   │   App.vue
│   │   main.js
│   │   
│   ├───assets
│   │   ├───css
│   │   │       base.less
│   │   │       icon.less
│   │   │       index.less
│   │   │       mixin.less
│   │   │       reset.less
│   │   │       variable.less
│   │   │       
│   │   ├───fonts
│   │   │       icomoon.eot
│   │   │       icomoon.svg
│   │   │       icomoon.ttf
│   │   │       icomoon.woff
│   │   │       
│   │   ├───image
│   │   │       logo.png
│   │   │       
│   │   └───js
│   │           appback.js
│   │           history.js
│   │           mixin.js
│   │           util.js
│   │           
│   ├───base
│   │       bubble.vue
│   │       comment.vue
│   │       err.vue
│   │       evaluate.vue
│   │       fileup.vue
│   │       follow.vue
│   │       historyItem.vue
│   │       loading.vue
│   │       message.vue
│   │       nocomment.vue
│   │       nolist.vue
│   │       picture.vue
│   │       return.vue
│   │       scroll.vue
│   │       send.vue
│   │       slider.vue
│   │       toast.vue
│   │       updown.vue
│   │       upload.vue
│   │       vialogList.vue
│   │       
│   ├───components
│   │   │   bgImg.vue
│   │   │   groupItem.vue
│   │   │   listItem.vue
│   │   │   personItem.vue
│   │   │   personlist.vue
│   │   │   search.vue
│   │   │   tab.vue
│   │   │   tbsm.vue
│   │   │   vInput.vue
│   │   │   
│   │   └───messageBox
│   │       │   index.js
│   │       │   message.vue
│   │       │   
│   │       └───assets
│   │               error.svg
│   │               info.svg
│   │               success.svg
│   │               warning.svg
│   │               
│   ├───pages
│   │       article.vue
│   │       common.vue
│   │       dynamic.vue
│   │       fans.vue
│   │       follow.vue
│   │       group.vue
│   │       groupRoom.vue
│   │       login.vue
│   │       me.vue
│   │       message.vue
│   │       myperson.vue
│   │       news.vue
│   │       person.vue
│   │       personal.vue
│   │       photo.vue
│   │       pllist.vue
│   │       replay.vue
│   │       resign.vue
│   │       robot.vue
│   │       room.vue
│   │       searchList.vue
│   │       upUser.vue
│   │       val.vue
│   │       
│   ├───router
│   │       index.js
│   │       
│   └───store
│           actions.js
│           getters.js
│           index.js
│           mutations.js
│           state.js
│           
├───static
│   │   .gitkeep
│   │   
│   └───image
│           006.jpg
│           err.png
│           group.jpg
│           loading.gif
│           loginbg.jpg
│           loginbg1.jpg
│           me.png
│           news.png
│           nocomment.png
│           noList.png
│           preloading.jpg
│           robot.jpg
│           
└───uu
        

该项目基础组件20个公共组件10个页面组件23个总共43个组件;

图灵机器人接入

在线离线发送消息使用socket.io实时推送给所有客户端

前端一键打包图片同步到七牛cdn并上传到服务器的实现

server端的pm2自动部署

移动端(微信)访问

二维码

app下载

微信扫码之后请选择在浏览器打开,更好体验请选择下载app体验

app

后端的代码暂时不开放出来,因为涉及到很多个人的配置数据,如果实在需要可以加我qq 384434682

部分代码

客户端 main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'
import 'babel-polyfill'
import store from './store'
import VMessage from './components/messageBox'
import './assets/css/index.less'
import FastClick from 'fastclick'
FastClick.attach(document.body)
import VueLoay from 'vue-lazyload';
import Mui from 'vue-awesome-mui'
Vue.use(VueLoay, {
  loading: "/static/image/preloading.jpg",
  error:"/static/image/preloading.jpg",
  try: 3 // default 1
})

Vue.use(VMessage)
Vue.use(Mui)
axios.defaults.baseURL = '/xxxxx';
axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem("token");
    if (token) {
      // Bearer是JWT的认证头部信息
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 404:
          store.commit('set_isToken',true)
          break;
        case 401:
          store.commit('set_isToken', true)
          break;
      }
    }
    return Promise.reject(error.response)
  });
  // import Vconsole from 'vconsole';
  // let vConsole=new Vconsole();
  // export default vConsole
Vue.prototype.$http = axios;
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: {
    App
  },
  template: '<App/>'
})

server端 app.js

const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const jwt=require("koa-jwt");
const tokenError = require('./public/js/tokenErr');
const index = require('./routes/index')
const config=require("./public/js/config")
const path=require("path")

// error handler
onerror(app)

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))

app.use(json())
app.use(logger())

app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {
  extension: 'pug'
}))
app.use(tokenError());
// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

app.use(jwt({
    secret: config.fixedVal
}).unless({
    path: [/^\/api\/login/,/^\/api\/userPwd/,/^\/api\/uploadImg/]
}));

// routes
app.use(index.routes(), index.allowedMethods())
// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app

项目概况

注册

登录

页面

发送消息

聊天群

朋友圈

搜索

我的

返回

github地址欢迎给个star

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 每个周一的幼儿园门口,都会出现一拨人,又可以说是两拨人。因为都是迟到被困在门口的学生以及陪同的家长。为什么又是两拨...
    家语幼学阅读 317评论 0 0
  • 序言:亲爱的单身余们,单身久了会不会产生幻觉,有没有那么一瞬间觉得身边的某个帅哥,某个美女在看你,然而看的...
    麦荼阅读 330评论 0 0
  • 1 我还在老家镇子上念小学的时候,唯一让我开心的是出门直走的十字路口有个小卖铺,里面东西不多,除了烟和酒以外只有少...
    芥末思茶暖阅读 677评论 0 3
  • 又是一年一度的龙抬头日,二月二,是汉族民间传统的节日,流行于全国各地区,由于 在这个节日活动较多,故而又...
    爱你的贝贝阅读 114评论 0 2
  • 讲故事更有代入感,而且以前的你可能就是现在的别人,这会让别人不自觉的对你产生亲近感,所以会说故事这也是一个技术活儿。
    可爱鱼鱼阅读 104评论 0 0