久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日頭條 焦點資訊 營銷之道 企業報道 淘寶運營 網站建設 軟件開發 400電話
  當前位置: 首頁 » 資訊 » 軟件開發 » 正文

Vue中Element-UI構建管理后臺代碼分享

放大字體  縮小字體 發布日期:2018-02-28  來源:企業800網  作者:新格網  瀏覽次數:335  【去百度看看】
核心提示:本文主要和大家分享Vue中Elememt-UI構建管理后臺代碼,希望能幫助到大家。

本文主要和大家分享Vue中Elememt-UI構建管理后臺代碼,希望能幫助到大家。

安裝

我使用的是 vue-cli 初始化項目,命令如下:

  npm i -g vue-cli
mkdir my-project && cd my-project
vue init webpack


修改 package.json 文件:

   ...
"dependencies": {
  "vue": "^2.5.2",
  "vue-router": "^3.0.1",
  "element-ui": "^2.0.7",  // element-ui
  "axios": "^0.17.1"  // http 請求庫
}
...


之后執行 npm install 進行安裝依賴,如果安裝速度有點慢的話,可以試一下 cnpm ,具體安裝和用法自行查找。

簡單介紹下項目的目錄結構:

├─build  // 構建配置
├─config  // 配置文件
├─src  // vue 開發源文件目錄
├────assets  // css/js 文件
├────components  // vue 組件
├────router   // 路由
├────App.vue   // 啟動組件
├────main.js  // 入口文件
├─static  // 靜態文件目錄
├─test  // 測試目錄


之后在項目根目錄執行 npm run dev ,打開瀏覽器輸入 http://localhost:8080 就可以查看了。

目標

登錄頁面,登錄,退出功能

首頁,調用接口渲染列表

路由

路由使用的是 vue-router,具體用法可參考 官方文檔
我們這里需要兩個路由:
src/router/index.js

   import Vue from 'vue'
import Router from 'vue-router'
import Index from '@/components/Index'
import Login from '@/components/Login'
Vue.use(Router)
const routers =  new Router({
  routes: [
    {
      path: '/index',
      name: 'index',
      component: Index
    },
    {
      path: '/login',
      name: 'login',
      component: Login
    }
  ]
})
routers.beforeEach((to, from, next) => {
  if (to.name !== 'login' && !localStorage.getItem('token')) {
    next({path: 'login'})
  } else {
    next()
  }
})
export default routers


登錄頁面

src/components/Login.vue

   <template>
  <p class="login">
    <el-form name="aa" :inline="true" label-position="right" label-width="80px">
        <el-form-item label="用戶名">
          <el-input v-model="user.name"></el-input>
        </el-form-item>
        <el-form-item label="密碼">
          <el-input type="password" v-model="user.password"></el-input>
        </el-form-item>
        <el-form-item label=" ">
          <el-button type="primary" @click="login()">登錄</el-button>
        </el-form-item>
    </el-form>
  </p>
</template>
<script>
import $http from '@/api/'
import config from '@/config'
export default {
  data () {
    return {
      user: {
        name: '',
        password: ''
      }
    }
  },
  mounted: function () {
    var token = localStorage.getItem('token')
    if (token) {
      this.$router.push('/index')
    }
  },
  methods: {
    login: function () {
      var data = {
        grant_type: 'password',
        client_id: config.oauth_client_id,
        client_secret: config.oauth_secret,
        username: this.user.name,
        password: this.user.password
      }
      var _this = this
      $http.login(data).then(function (res) {
        if (res.status === 200) {
          $http.setToken(res.data.access_token)
          _this.$message({
            showClose: false,
            message: '登錄成功',
            type: 'success'
          })
          _this.$router.push('/index')
        } else {
          _this.$message({
            showClose: false,
            message: '登錄失敗',
            type: 'error'
          })
        }
      })
    }
  }
}
</script>
<style>
.login{
    width: 300px;
    margin: 100px auto;
    background-color: #ffffff;
    padding: 30px 30px 5px;
    border-radius: 5px;
}
</style>


首頁

src/components/Index.vue

   <template>
  <p class="main">
    <el-table
      stripe
      v-loading="loading"
      element-loading-background="#dddddd"
      :data="tableData"
      style="width: 100%">
      <el-table-column
        prop="id"
        label="ID">
      </el-table-column>
      <el-table-column
        prop="name"
        label="名稱">
      </el-table-column>
    </el-table>
    <el-pagination
      background
      layout="prev, pager, next"
      :total="total"
      class="page"
      @current-change="pageList">
    </el-pagination>
  </p>
</template>
<script>
import $http from '@/api/'
export default {
  data () {
    return {
      tabledata: [],
      total: 0,
      loading: false
    }
  },
  mounted: function () {
    this.getList()
  },
  methods: {
    pageList: function (page) {
      this.search.page = page
      this.getList()
    },
    getList: function () {
      var _this = this
      _this.loading = true
      $http.index().then(function (res) {
        if (res.status === 200) {
          _this.tableData = res.data.data.lists
          _this.total = res.data.data.total
        }
        _this.loading = false
      })
    }
  }
}
</script>


App

src/App.vue

   <template>
  <p id="app">
    <el-row v-if="token">
      <menus class="left-menu">
        <h3 class="logo"><a href="/">Admin</a></h3>
      </menus>
      <el-col :span="21" :gutter="0" :offset="3">
        <el-breadcrumb separator-class="el-icon-arrow-right" class="breadcrumb">
          <el-breadcrumb-item :to="{ path: '/' }">首頁</el-breadcrumb-item>
          <el-breadcrumb-item class="active">列表</el-breadcrumb-item>
        </el-breadcrumb>
        <el-dropdown @command="operate" class="header">
          <img src="http://www.argcandargv.com/skin/default/image/lazy.gif" class="lazy" original="http://www.argcandargv.com/skin/default/image/nopic.gif" />
          <el-dropdown-menu slot="dropdown" :click="true">
            <el-dropdown-item command="/user/profile">基本資料</el-dropdown-item>
            <el-dropdown-item command="/logout">安全退出</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
        <router-view/>
      </el-col>
      <el-col :span="21" :gutter="0" :offset="3" class="footer">Copyright ? 2017 Flyerboy All Rights Reserved</el-col> 
    </el-row>
    <router-view v-if="!token" />
  </p>
</template>
<script>
import Menus from '@/components/Menu'
export default {
  name: 'App',
  data () {
    return {
      token: false
    }
  },
  mounted: function () {
    this.token = localStorage.getItem('token') ? true : false
  },
  watch: {
    '$route.path': function ($newVal, $oldVal) {
      this.token = localStorage.getItem('token') ? true : false
    }
  },
  methods: {
     operate: function (command) {
      if (command === '/logout') {
        localStorage.removeItem('token')
        this.$router.push('login')
      } else {
        this.$router.push(command)
      }
    }
  },
  components: {
    Menus
  }
}
</script>
<style>
body{
  margin: 0;
  padding: 0;
  background-color: #eeeeee;
}
.header{
  position: absolute;
  top: 5px;
  right: 20px;
}
.header img{
  width: 38px;
  height: 38px;
  border-radius: 20px;
  border: 1px solid #aaaaaa;
}
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.main{
  padding: 20px;
  min-height: 600px;
  margin-bottom: 20px;
}
.main table{
  background: #ffffff;
}
.left-menu{
  background-color: #33374B;
}
.logo{
  padding: 20px 0 15px 20px;
  font-size: 24px;
  border-bottom: 2px solid #3a8ee6;
}
.logo a{
  color: #ffffff;
  text-decoration: none;
}
.left-menu .el-menu{
  border-right: 0;
}
.breadcrumb{
  line-height: 40px;
  padding: 5px 20px;
  background: #ffffff;
}
.breadcrumb span{
  color: #069;
  font-weight: normal;
}
.breadcrumb .active{
  color: #aaaaaa;
}
.page{
  margin: 20px 0 0;
  margin-left: -10px;
}
.page .el-pager li.number{
  background-color: #ffffff;
}
.el-submenu .el-menu-item{
  padding-left: 60px !important;
}
.footer{
  position: fixed;
  bottom: 0;
  right: 0;
  font-size: 12px;
  color: #888888;
  padding: 15px 20px;
  text-align: center;
  background-color: #ffffff;
  margin-top: 40px;
}
</style>


調用 API

src/api/index.js

   import axios from 'axios'
axios.defaults.baseURL = 'http://localhost:8000/'
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('token')
export default {
  setToken: function (token) {
    localStorage.setItem('token', token)
    axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
  },
  login: function (param) {
    return axios.post('oauth/token', param)
  },
  index: function (params) {
    return axios.get('api/user/list', {
      params: params
    })
  }
}

config

src/config.js 這里配置登錄 oauth 需要的 client_id 和 secret

   export default {
  oauth_client_id: 2,
  oauth_secret: ''
}

main.js

src/main.js

   import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)
Vue.config.productionTip = false
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

api 接口

主要用到兩個接口,一個是 api/oauth/token 登錄獲取 token 接口,一個獲取列表 api/user/list。
第一個接口是用到 laravel oauth,第二個接口直接是一個簡單的查詢用戶列表接口,詳細講會在下一篇文章中講述。

相關推薦:

微信公眾平臺開發管理后臺開發

基于thinkphp5開發的管理后臺

Vue的elementUI實現自定義主題

以上就是Vue中Element-UI構建管理后臺代碼分享的詳細內容,更多請關注php中文網其它相關文章!

 
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規舉報 ]  [ 關閉窗口 ]

 
0條 [查看全部]  相關評論

 
網站首頁 | 關于我們 | 聯系方式 | 使用協議 | 版權隱私 | 網站地圖 | 排名推廣 | 廣告服務 | 積分換禮 | 網站留言 | RSS訂閱 | 吉ICP備11001726號-6
企業800網 · 提供技術支持