ElementUI之动态树+数据表格+分页

ElementUI之动态树+数据表格+分页

一.ElementUI之动态树(动态菜单实现)

菜单代码结构

<el-menu>
	<el-submenu index="" key="">
        <template slot="title">
            <i class=""></i>
            <span></span>
        </template>
		<el-menu-item index="" key="">
            <i class=""></i>
            <span></span>
        </el-menu-item>
	</el-submenu>
</el-menu>

在action.js里设置系统菜单数据和书籍数据地址

'SYSTEM_MENU': '/module//queryRootNodebook', //系统菜单
  'BOOK_LIST': '/book/queryBookPager', //书籍查询

在created()生命周期中获取表格的数据

export default {
		data(){
		  return{
        collapsed:false,
        menus:[]
		  }
		},
    created(){
      this.$root.BUS.$on('doCollapsed',v=>{
        //v指的是TopNav传递过来的this.collapsed
        this.collapsed=v;
      });
      let url=this.axios.urls.SYSTEM_MENU;
      this.axios.get(url,{}).then(resp=>{
        console.log(resp)
        this.menus=resp.data.rows;

      }).catch(err=>{

      });
    }
	}

获取的数据结构:

在这里插入图片描述

一级菜单的加载:

	<el-submenu v-for="m in menus"
  :index="'index_'+m.id"//保证菜单唯一性
   :key="'key_'+m.id">//保证菜单唯一性
        <template slot="title">
            <i :class="m.icon"></i>
            <span>{{m.text}}</span>
        </template>
		<!-- <el-menu-item index="" key="">
            <i class=""></i>
            <span></span>
        </el-menu-item> -->
	</el-submenu>

二级菜单的加载:

	<el-submenu v-for="m in menus"
  :index="'index_'+m.id"
   :key="'key_'+m.id">
        <template slot="title">
            <i :class="m.icon"></i>
            <span>{{m.text}}</span>
        </template>
		<el-menu-item v-for="m2 in m.modules"
  :index="'index_'+m2.id"
   :key="'key_'+m2.id">
            <i :class="m2.icon"></i>
            <span>{{m2.text}}</span>
        </el-menu-item>
	</el-submenu>

对应菜单的跳转

在主界面上加上下行代码.将子菜单的index属性的值设置为url跳转地址,即可实现子菜单点击跳转

 router :default-active="$route.path"

创建菜单对应地址的Vue文件,在AppMain.Vue(主界面)设置锚点

 <router-view></router-view>

在index.js中设置跳转地址参数

import AddBook from '@/views/book/AddBook'
import BookList from '@/views/book/BookList'
{
      path: '/AppMain',
      name: 'AppMain',
      component: AppMain,
      children:[
        {
          path: '/LeftNav',
          name: 'LeftNav',
          component: LeftNav
        },
        {
          path: '/TopNav',
          name: 'TopNav',
          component: TopNav
        },
        {
          path: '/book/AddBook',
          name: 'AddBook',
          component: AddBook
        },
        {
          path: '/book/BookList',
          name: 'BookList',
          component: BookList
        }
      ]
    }

即可实现跳转

运行效果:

在这里插入图片描述

二.数据表格

查询书籍按钮

  <el-form :inline="true"  class="demo-form-inline">
<el-form :inline="true"  class="demo-form-inline">
     <el-form-item v-model="bookname" label="书籍查询">
       <el-input  placeholder=""></el-input>
     </el-form-item>

     <el-form-item>
       <el-button type="primary" @click="onSubmit">查询</el-button>
     </el-form-

数据表格

<!-- 数据表格 -->
     <el-table :data="tableData"  borderstyle="width: 100%">
       <el-table-column    prop="id"label="编号"   width="180"> </el-table-column>
       <el-table-column  prop="bookname" label="书籍名"width="180"> </el-table-column>
       <el-table-column prop="price" label="价格"> </el-table-column>
       <el-table-column prop="booktype"label="书籍分类"> </el-table-column>
     </el-table>

分页

 <el-pagination
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"

           :page-sizes="[10, 20, 30, 40]"
           :page-size="rows"
           layout="total, sizes, prev, pager, next, jumper"
           :total="total">
         </el-pagination>

后台数据格式

在这里插入图片描述

前端数据接收以及方法

export default{
  data(){
    return{
      bookname:null,//单选框内的内容,暂时没用
      tableData:[],//表格数据
      page:1,//页数
      total:0,//数据条数
      rows:10//单页显示数据数
    }
  },
  methods:{
    query(params){//通用查询方法
      let url=this.axios.urls.BOOK_LIST;//查询书籍数据

      this.axios.get(url,{params:params}).then(resp=>{
        this.tableData=resp.data.rows;//将查询到的数据传入表格
        this.total=resp.data.total;//将查询到的数据传入表格
      }).catch(err=>{

      })
    },
    onSubmit(){

      let params={
        bookname:this.bookname
      }
      this.query(params)
    },
    handleSizeChange(r){//Ui提供的当单页显示数据条数发生改变时执行的方法
      console.log("当前展示数"+r);//r即单页显示数据条数上限
      let params={
        bookname:this.bookname,
         page:this.page,
        rows:r
      }
      this.query(params)
    },
    handleCurrentChange(p){//Ui提供的当页数发生改变时执行的方法
      console.log("当前为第"+p+"页");
      let params={
        bookname:this.bookname,
        page:r,
        rows:this.rows
      }
      this.query(params)
    }
  }
}

最终结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,作为AI语言模型,我无法提供代码编写服务。但是,我可以为您提供一些指导和建议。 首先,您需要安装Vue3、TypeScript和ElementUI。然后,您可以创建一个Vue组件,该组件包含一个分页表格。您可以使用ElementUI的el-table和el-pagination组件来实现这个分页表格。 在组件中,您需要定义一些数据,例如表格数据、当前页码、每页显示的行数等。您还需要定义一些方法来处理分页表格数据的加载。 以下是一个简单的示例: ```html <template> <div> <el-table :data="tableData" border> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalRows" ></el-pagination> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { ElTable, ElTableColumn, ElPagination } from 'element-plus'; export default defineComponent({ name: 'PaginationTable', components: { ElTable, ElTableColumn, ElPagination }, data() { return { tableData: [], currentPage: 1, pageSize: 10, totalRows: , }; }, methods: { async loadData() { // load data from server based on currentPage and pageSize // update tableData and totalRows }, handleCurrentChange(page: number) { this.currentPage = page; this.loadData(); }, }, mounted() { this.loadData(); }, }); </script> ``` 在这个示例中,我们使用了ElementUI的el-table和el-pagination组件来实现分页表格。我们定义了一些数据,例如表格数据、当前页码、每页显示的行数和总行数。我们还定义了一个loadData方法来加载表格数据,并在mounted钩子中调用它。我们还定义了一个handleCurrentChange方法来处理页码变化事件,并在el-pagination组件中使用它。 当用户点击页码或更改每页显示的行数时,handleCurrentChange方法将被调用,并更新currentPage和pageSize数据。然后,loadData方法将被调用,从服务器加载新的表格数据,并更新tableData和totalRows数据。最后,el-pagination组件将根据这些数据重新渲染分页器。 当然,这只是一个简单的示例。您可能需要根据您的具体需求进行更改和扩展。但是,这个示例应该可以帮助您入门Vue3、TypeScript和ElementUI分页表格的编写。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值