Vue+ElementUI 搭建後臺管理系統(實戰系列六)

前言

使用ElementUI已經有一段時間了,在一邊上手開發後臺管理系統的同事,也記錄了一些筆記,一直都沒有時間將這些零零散散的筆記總結起來,整理成一個比較系統詳細一點的教程,可以留着以後來看。

關於開發過程中,確實使用到很大一部分的文檔,都說前端開發離不開文檔,重要的話說三遍,一定要多看文檔。

管理後臺解決方案

vue-element-admin 是一個後臺前端解決方案,它基於 vue 和 element-ui實現。

Star指數:69.7k
Github 地址:https://github.com/PanJiaChen/vue-element-admin
Demo體驗:https://panjiachen.github.io/vue-element-admin/#/dashboard
官方文檔:https://panjiachen.github.io/vue-element-admin-site/zh/

使用建議
本項目的定位是後臺集成方案,不太適合當基礎模板來進行二次開發。因爲本項目集成了很多你可能用不到的功能,會造成不少的代碼冗餘。如果你的項目不關注這方面的問題,也可以直接基於它進行二次開發。


Vue+ElementUI 搭建後臺管理系統(實戰系列六) - 表格分頁

前面有提到在vue裏面,對於表格的使用:vue2.0 + element-ui 實戰項目-渲染表格系列文章,在實戰的過程中,往往還要選擇一個合適的分頁,搭配着一起使用,尤其是數據比較多的時候,必然會做出分頁效果。

關於一些經常用到的參考文檔:這裏都羅列一下,查找起來比較方便。

1:在組件裏面找一個自己比較喜歡的分頁的樣式
https://element.eleme.cn/#/zh-CN/component/pagination

其實我們可以看到,文檔裏面的樣式非常的簡單
複製一下這段代碼

<el-pagination
  background
  layout="prev, pager, next"
  :total="1000">
</el-pagination>

就可以在頁面上看到一個靜態的分頁的效果了

2:最重要的一個步驟就是點擊分頁的辦法

  // 初始頁currentPage、初始每頁數據數pagesize和數據data
    handleSizeChange: function (size) {
      this.pagesize = size;
      console.log(this.pagesize); //每頁下拉顯示數據
    },
    handleCurrentChange: function (currentPage) {
      this.currentPage = currentPage;
      console.log(this.currentPage); //點擊第幾頁
    },

3:對錶格中獲取到的json數據進行處理

:data="pvData.slice((currentPage - 1) * pagesize, currentPage * pagesize)"

4:將前面的靜態分頁也進行修改一下,加上方法和變量

 <el-pagination
      style="margin: 12px 0px"
      background
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[5, 10, 20, 40]"
      :page-size="pagesize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pvData.length"
    >
    </el-pagination>

5:寫一個完整的實例:

json

{"msg":"success","total":0,"code":1,"data":[{"id":6,"userOrganId":null,"userName":"super","sex":1,"realName":"super","birthday":null,"password":"202cb962ac59075b964b07152d234b70","roleId":1,"roleName":"角色1","organId":1,"organName":"部門1","authority":0,"companyId":1,"phone":null,"organIds":null,"isPagination":false,"page":1,"rows":1},{"id":13,"userOrganId":null,"userName":"super2","sex":1,"realName":"super","birthday":null,"password":"202cb962ac59075b964b07152d234b70","roleId":1,"roleName":"角色1","organId":1,"organName":"部門1","authority":0,"companyId":1,"phone":null,"organIds":null,"isPagination":false,"page":1,"rows":1},{"id":14,"userOrganId":null,"userName":"999","sex":1,"realName":"999","birthday":null,"password":"d41d8cd98f00b204e9800998ecf8427e","roleId":1,"roleName":"1","organId":1,"organName":"1","authority":1,"companyId":1,"phone":null,"organIds":null,"isPagination":false,"page":1,"rows":1},{"id":27,"userOrganId":null,"userName":"21","sex":null,"realName":"21","birthday":null,"password":"d41d8cd98f00b204e9800998ecf8427e","roleId":1,"roleName":"","organId":1,"organName":"","authority":1,"companyId":1,"phone":null,"organIds":null,"isPagination":false,"page":1,"rows":1},{"id":28,"userOrganId":null,"userName":"111","sex":1,"realName":"111","birthday":null,"password":"202cb962ac59075b964b07152d234b70","roleId":1,"roleName":"1","organId":1,"organName":"14","authority":1,"companyId":1,"phone":null,"organIds":null,"isPagination":false,"page":1,"rows":1},{"id":29,"userOrganId":null,"userName":"212","sex":0,"realName":"121","birthday":null,"password":"d41d8cd98f00b204e9800998ecf8427e","roleId":1,"roleName":"1","organId":1,"organName":"13","authority":1,"companyId":1,"phone":null,"organIds":null,"isPagination":false,"page":1,"rows":1}]}

實例代碼

<template>
  <div class="tab-container">
    <el-table
      :data="pvData.slice((currentPage - 1) * pagesize, currentPage * pagesize)"
      border
      fit
      highlight-current-row
      style="width: 100%"
    >
      <el-table-column
        prop="userName"
        label="用戶名"
        width="180"
      ></el-table-column>

      <el-table-column prop="realName" label="姓名"></el-table-column>
      <el-table-column prop="sex" label="性別"  :formatter="formatSex"></el-table-column>
      <el-table-column prop="organName" label="所屬部門"></el-table-column>
      <el-table-column prop="authority" label="權限"></el-table-column>
      <el-table-column prop="roleName" label="角色"></el-table-column>

    </el-table>

    <el-pagination
      style="margin: 12px 0px"
      background
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[5, 10, 20, 40]"
      :page-size="pagesize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pvData.length"
    >
    </el-pagination>

  </div>
</template>
<script>
//調用接口
import {getQuerycheckList} from "@/api/permission/user";

export default {
  data() {
    return {
      // 分頁
      currentPage: 1, //初始頁
      pagesize: 5, //    每頁的數據
      total: 0,
      pvData: [],

    };
  },

  created() {
    this.getQuerycheckList();
  },
  methods: {
    // 初始頁currentPage、初始每頁數據數pagesize和數據data
    handleSizeChange: function (size) {
      this.pagesize = size;
      console.log(this.pagesize); //每頁下拉顯示數據
    },
    handleCurrentChange: function (currentPage) {
      this.currentPage = currentPage;
      console.log(this.currentPage); //點擊第幾頁
    },

    //查詢題目列表信息接口
    getQuerycheckList() {
      const params = {
        organId: 1,
        userOrganId: 1,
        authority: 0,
        page: 1,
        rows: 5,
        isPagination: false,
      };
      getQuerycheckList(params).then((res) => {
        console.log("查詢題目列表信息", res);
        this.pvData = res.data;
      });
    },
    //格式化性別
    formatSex(row, column) {
    return row.sex === 1? "男" : "女";
    }
  },
};
</script>
<style scoped>
.tab-container {
  margin: 30px;
}
</style>

效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章