基於vue2.0+vue-cli+vuex+vue-router+webpack+es6+wcPop等技術開發的仿微信聊天界面|仿微信聊天室vue-chatRoom,實現了微信聊天功能,新增了消息下拉刷新,消息表情發送,圖片、視頻預覽,打賞、紅包等功能。css
/*
* 主頁面js
*/
import Vue from 'vue'
import App from './App.vue'
// >>>引入js
import $ from 'jquery'
import fontsize from './assets/js/fontsize'
// >>>引入彈窗插件
import wcPop from './assets/js/wcPop/wcPop'
import './assets/js/wcPop/skin/wcPop.css'
// >>>引入餓了麼移動端vue組件庫
import MintUI, { Loadmore } from 'mint-ui'
import 'mint-ui/lib/style.css'
Vue.component(Loadmore.name, Loadmore)
Vue.use(MintUI)
// >>>引入圖片預覽插件
import photoPreview from 'vue-photo-preview'
import 'vue-photo-preview/dist/skin.css'
Vue.use(photoPreview, {
loop: false,
fullscreenEl: false, //是否全屏
arrowEl: false, //左右按鈕
})
// >>>引入地址路由
import router from './router'
import store from './vuex'
複製代碼
/*
* 頁面地址路由js
*/
import Vue from 'vue'
import _router from 'vue-router'
import store from '../vuex'
Vue.use(_router) //應用路由
const router = new _router({
routes: [
// 登陸、註冊
{
path: '/login',
component: resolve => require(['../views/auth/login'], resolve),
},
{
path: '/register',
component: resolve => require(['../views/auth/register'], resolve),
},
// 首頁、通信錄、我
{
path: '/',
component: resolve => require(['../views/index'], resolve),
meta: { showHeader: true, showTabBar: true, requireAuth: true }
},
{
path: '/contact',
component: resolve => require(['../views/contact'], resolve),
meta: { showHeader: true, showTabBar: true, requireAuth: true },
},
{
path: '/contact/uinfo',
component: resolve => require(['../views/contact/uinfo'], resolve),
},
{
path: '/ucenter',
component: resolve => require(['../views/ucenter'], resolve),
meta: { showHeader: true, showTabBar: true, requireAuth: true }
},
// 聊天頁面
{
path: '/chat/group-chat',
component: resolve => require(['../views/chat/group-chat'], resolve),
meta: { requireAuth: true }
},
{
path: '/chat/single-chat',
component: resolve => require(['../views/chat/single-chat'], resolve),
meta: { requireAuth: true }
},
{
path: '/chat/group-info',
component: resolve => require(['../views/chat/group-info'], resolve),
meta: { requireAuth: true }
}
// ...
]
})
// 註冊全局鉤子攔截登陸狀態
const that = this
router.beforeEach((to, from, next) => {
const token = store.state.token
// 判斷該路由地址是否須要登陸權限
if(to.meta.requireAuth){
// 經過vuex state獲取當前token是否存在
if(token){
next()
}else{
// console.log('還未登陸受權!')
next()
wcPop({
content: '還未登陸受權!', style: 'background:#e03b30;color:#fff;', time: 2,
end: function(){
next({ path: '/login' })
}
});
}
}else{
next()
}
})
export default router
複製代碼
<template>
<div class="weChatIM__panel clearfix">
<div class="we__chatIM-wrapper flexbox flex__direction-column">
<!-- //頂部 -->
<header-bar :class="{'topfixed': isTopFixed}"></header-bar>
<!-- //主頁面 -->
<div class="wcim__container flex1">
<keep-alive><router-view></router-view></keep-alive>
</div>
<!-- //底部tab -->
<tab-bar></tab-bar>
</div>
</div>
</template>
<script>
import headerBar from './components/header'
import tabBar from './components/footer'
export default {
name: 'app',
data () {
return {
isTopFixed: true
}
},
components: {
headerBar,
tabBar
}
}
</script>
<style>
/* 引入公共樣式 */
@import './assets/fonts/iconfont.css';
@import './assets/css/reset.css';
@import './assets/css/layout.css';
</style>
複製代碼