美文网首页
vue-admin-template分页搜索排序

vue-admin-template分页搜索排序

作者: xyz098 | 来源:发表于2019-12-17 15:01 被阅读0次

准备

  • build git-vue-admin-template

    git clone https://github.com/PanJiaChen/vue-admin-template.git
    cd vue-admin-template
    # 安装依赖
    npm install --verbose --registry=https://registry.npm.taobao.org
    # 开发环境运行
    npm run dev
    # 编译到线上
    npm run build:prod
    

    http://localhost:9528/

  • advanced

    # 调优
    npm run preview
    # 调优查看
    npm run preview -- --report
    # 代码格式
    npm run lint
    # 检查代码格式
    npm run lint -- --fix
    
  • 部署 deployment

    # 生产dist文件
    npm run build:prod 
    # 本地预览
    npm install -g serve --verbose
    serve -s dist
    

实战

分页pagination

  • 关键点: 表格绑定当前页数据

搜索search

  • 关键点: 双向绑定事件响应关联表格数据

排序sort

  • 关键点:指定prop与sortable

加载loading

  • 关键点: 绑定后根据bool类型决定

代码附录

  • javascript

    <script>
    export default {
      data() {
        return {
          isLoading: true,   // 默认加载
          pageList: [],      // 当前页数据
          total: 0,          // 总数据条数
          currentPage: 1,    // 当前页
          pagelimit: 2,      // 页面展示数据条数
          list: [],          // 原始数据
          search: [],        // 搜索字段
          tmpList: []        // 临时搜索结果数据
        }
      },
    
      created() {
        this.initList()
      },
    
      methods: {
        // 模拟初始原始数据
        initList() {
          this.list = [
            { name: 'axxx', request: 1, availab: '10%', hit: '10%', restime: 60, bandwidth: 50, xx4: 50, xx5: 50, backnum: 5, backband: 50, back4xx: 10, back5xx: 20 },
            { name: 'bAAx', request: 2, availab: '20%', hit: '10%', restime: 60, bandwidth: 50, xx4: 50, xx5: 50, backnum: 5, backband: 50, back4xx: 10, back5xx: 20 },
            { name: 'aaxxx', request: 3, availab: '30%', hit: '10%', restime: 60, bandwidth: 50, xx4: 50, xx5: 50, backnum: 5, backband: 50, back4xx: 10, back5xx: 20 }      ]  
          this.initPageList()
        },
        
        // 初始页面数据
        initPageList() {
          this.isLoading = false         // 有数据关闭加载表示
          this.total = this.list.length
          this.pagelimit = 2           
          this.pageList = this.list.slice((this.currentPage - 1) * this.pagelimit, this.currentPage * this.pagelimit)  // 当前页数据内容
        },
            
        // 改变页面条数
        handleSizeChange: function(size) {
          this.pagelimit = size
          this.initPageList()
        },
            
        // 改变当前页
        handleCurrentChange: function(currentPage) {
          this.currentPage = currentPage
          this.initPageList()
        },
         
        // 模糊搜索
        handleFilter: function() { 
          this.isLoading = true
          // 原始数据过滤出 包含搜索字段的 数据结果
          this.tmpList = this.list.filter(data => !this.search || data.name.toLowerCase().includes(this.search.toLowerCase()))  
          // 判断是否为全局搜索与空搜索
          if (this.tmpList.length === this.list.length || this.tmpList.length === 0) {
            this.initPageList()
          } else {
            // 搜索结果以一页展示
            this.isLoading = false
            this.pageList = this.tmpList
            this.currentPage = 1
            this.pagelimit = this.tmpList.length
            this.total = this.tmpList.length
          }
        }
      }
    }
    </script>
    
  • template

    <template>
      <div class="app-container">
        <div style="width: 100%;margin-top:30px;margin-left:30px">
           <!-- v-model实现双向绑定,handleFilter事件响应 原生回车事件  -->
          <el-input v-model="search" placeholder="域名" style="width: 400px;" @keyup.enter.native="handleFilter" />
          <el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">
            查询
          </el-button>
        </div>
    
        <!-- v-loading加载与排序sort --> 
        <el-table
          v-loading="isLoading"
          :data="pageList"
          style="width:90%;margin-top:30px;margin-left:30px"
          border
          :default-sort="{prop: 'request', order: 'descending'}"
        >
          <el-table-column align="center" label="域名" prop="name" />
          <el-table-column align="center" label="请求数" prop="request" sortable />
          <el-table-column align="center" label="可用率" prop="availab" sortable />
          <el-table-column align="center" label="命中率" prop="hit" sortable />
          <el-table-column align="center" label="响应时间" prop="restime" sortable />
          <el-table-column align="center" label="带宽" prop="bandwidth" sortable />
          <el-table-column align="center" label="4xx" prop="xx4" sortable />
          <el-table-column align="center" label="5xx" prop="xx4" sortable />
          <el-table-column align="center" label="回源次数" prop="backnum" sortable />
          <el-table-column align="center" label="回源带宽" prop="backband" sortable />
          <el-table-column align="center" label="回源4xx" prop="back4xx" sortable />
          <el-table-column align="center" label="回源5xx" prop="back5xx" sortable />
        </el-table>
    
        <div style="width:90%;margin-top:30px;margin-left:30px">
          <!-- 分页 -->
          <el-pagination
            background
            :current-page="currentPage"
            :page-sizes="[10,15,20]"
            :page-size="pagelimit"
            layout="total,prev,pager,next,jumper,sizes"
            :total="total"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
          />
        </div>
      </div>
    </template>
    

相关文章

网友评论

      本文标题:vue-admin-template分页搜索排序

      本文链接:https://www.haomeiwen.com/subject/yvisnctx.html