AdminLTE与php,如何使用Vue整合AdminLTE模板

这次给大家带来如何使用Vue整合AdminLTE模板,使用Vue整合AdminLTE模板的注意事项有哪些,下面就是实战案例,一起来看一下。

上一次搞定了登录验证和跳转的问题,不过存在一处bug。在Vue的main.js中,使用了Vue-router的路由钩子来判断是否可以访问受保护的资源,问题就出在这里,先修复上次的bug。/*

全局路由钩子

访问资源时需要验证localStorage中是否存在token

以及token是否过期

验证成功可以继续跳转

失败返回登录页重新登录

*/

router.beforeEach((to, from, next) => {

if(localStorage.token && new Date().getTime() < localStorage.tokenExpired){

next()

}

else{

next('/login')

}

})

代码中有一个问题,就是在没有token时如果直接访问/login会产生死循环导致溢出。修改后代码如下/*

全局路由钩子

访问资源时需要验证localStorage中是否存在token

以及token是否过期

验证成功可以继续跳转

失败返回登录页重新登录

*/

router.beforeEach((to, from, next) => {

if(to.path == '/login'){

next()

}

if(localStorage.token && new Date().getTime() < localStorage.tokenExpired){

next()

}

else{

next('/login')

}

})

好了,进入正题。先说AdminLTE,这是一个基于bootstrap的后台管理模板,对于我这种排版、设计很渣但又需要一个人搞定所有事的来说确实是个救星。先看看它的效果。

17817ed612a2e4b70413d6f7ff621808.png

可以看到效果非常棒。其本身还包含了各种各样的jquery插件,map、fullcalendar、datapicker、charts等等。不过这里我们主要用到侧边的导航和头部样式。

第一步,我们创建一个index.vue用作整个系统的主界面,然后把AdminLTE的index文件中的html复制到index.vue的template中。在没有任何设置的情况想效果是这样的。

6a7f17e51b759dddabc62c3e0dedc323.png

好吧,辣眼睛。之所以这样是因为我们没有在页面中导入各种css文件。

第二步,导入bootstrap的css文件。如果你是要Vue-cli创建的项目,那么项目中应该已经包含了bootstrap(在node_modules文件夹中)。接下来只要在main.js中引入就可以了。import Vue from 'vue'

import VueRouter from 'vue-router'

import VueResource from 'vue-resource'

import store from './store/store'

import 'bootstrap/dist/css/bootstrap.css'

引入后的效果是这样的

d0a4e8c42d1e99029adabc4a6d53bfba.png

稍微正常了一些,下一步我们需要引入AdminLTE相关的css文件,如果你有AdminLTE的文件应该能在dist中找到css、img、js三个文件夹。把这三个文件夹复制到我们Vue项目的assets中吧。引入的方法还是在main.js中添加。'import Vue from 'vue'

import VueRouter from 'vue-router'

import VueResource from 'vue-resource'

import store from './store/store'

import 'bootstrap/dist/css/bootstrap.css'

//AdminLTE

import './assets/css/skins/_all-skins.min.css'

import './assets/css/AdminLTE.min.css'

引入后的效果

ea98b85f10fe6d787454a7000436e405.png

头部似乎正常了,但是body的内容都没有显示出来。原因是AdminLTE是基于bootstrap的,而bootstrap又是需要jquery的。此时我们只引入了css文件,而还没引入所需的js文件。但是此时引入js文件会因为没有jquery而导致引入的文件无法起作用。所以先解决Vue中使用jquery的问题。首先需要通过npm下载jquery到项目中(这里最好和AdminLTE中使用的jquery版本一致,我这里是2.2.3)。打开shell导航到我们项目所在的文件夹使用npm install来安装jquery。

a3566ea1b1583af9d448609564d0973f.png

安装好之后应该能在项目的node_modules文件夹中找到jquery文件夹,并且package.json中也记录了项目引用的jquery版本。

cb5339ab6b52e9d1365dc77ca582d6b2.png

接下来要修改项目的webpack配置文件。文件位于项目的build文件夹下,文件名是webpack.base.conf.js。需要在这个文件中新增2处配置。

e803c42130afa619e2a3779e3bf06e79.png

引入了jquery之后,我们就可以在main.js中继续引入bootstrap和AdminLTE的js文件了。import Vue from 'vue'

import VueRouter from 'vue-router'

import VueResource from 'vue-resource'

import store from './store/store'

//bootstrap

import 'bootstrap/dist/css/bootstrap.css'

import 'bootstrap/dist/js/bootstrap.min.js'

//AdminLTE

import './assets/css/skins/_all-skins.min.css'

import './assets/css/AdminLTE.min.css'

import './assets/js/app.min.js'

引入之后再看一下效果

2def71bb2b653b2ab57c5bcc46823e4b.png

总算看起来好一些了,但是我们发现图标都没有显示出来,这是因为AdminLTE还使用了font-awesome。我们还需要再使用npm在项目中安装font-awesome,之后在main.js中导入font-awesome的css文件(这次只需要安装,不需要修改webpack的配置文件了)。

68f8790447bd9324e0339d94958feb19.png//bootstrap

import 'bootstrap/dist/css/bootstrap.css'

import 'bootstrap/dist/js/bootstrap.min.js'

//AdminLTE

import './assets/css/skins/_all-skins.min.css'

import './assets/css/AdminLTE.min.css'

import './assets/js/app.min.js'

//font-awesome

import 'font-awesome/css/font-awesome.min.css'

导入后效果

a8fb80c6f6171eb5b075458cfc942edc.png

还差一点完成了,我们还要处理一下Vue路由,使得我们在点击左侧导航时,需要显示的内容会出现在图中红框区域内。对应设备目录管理我们新建一个catalog.vue文件,先简单的包含一行内容即可。

catalog

在main.js中引入catalog并新增一条路由规则。注意这里我们使用了vue-router的嵌套路由,因为我们需要catalog.vue的内容嵌套在index.vue中显示。//compinents

import App from './App'

import Login from './components/login'

import Index from './components/index'

import DeviceCatalog from './components/deviceCatalog'

Vue.use(VueRouter)

Vue.use(VueResource)

Vue.http.options.emulateJSON = true;

const routes = [

{

path: '/login',

component : Login

},{

path: '/index',

component: Index,

children: [

{

path: '/deviceCatalog',

component: DeviceCatalog

}

]

},

]

在index.vue中创建导航和路由出口(即catalog.vue要被放置的红色区域)

设备目录管理

点击设备目录管理,catalog.vue的内容就会出现在红色框区域内了

dff392ba6d0be0c12c63e472f17d3cfc.png

最后一步,我们需要一个退出功能,上一篇中我们把认证凭证放在了localStorage中,那么在退出时我们就需要删除localStorage中的信息,并且返回到登录页。我们在退出按钮上绑定一个logout方法实现这个功能。

退出

export default {

// name: 'app',

data() {

return {

displayName: localStorage.userDisplayName,

}

},

methods: {

logOut: function(){

localStorage.clear();

this.$router.push('login')

}

}

}

6156b7e6fd0ce2be2ad970ee8c8fc936.gif

全部搞定,最后还有一个奇怪的问题。在第一次登录后页面不能完整显示,需要刷新一次。不过如果手动制定红色区域的高度则不会出现,我搞了半天也不知问题出在哪里,如果有哪位老师知道的话请指点我一下,谢谢。

a6723d85d922ee1adf39f83fd9bd81b4.gif

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值