Vue之ElementUI之动态树+数据表格+分页(项目功能)

news2024/12/23 20:14:50

目录

前言

一、实现动态树形菜单

1. 配置相应路径

2. 创建组件

3. 配置组件与路由的关系

index.js

4. 编写动态树形菜单

5. 页面效果演示

二、实现数据表格绑定及分页功能

1. 配置相应路径

2.  编写数据表格显示及分页功能代码

BookList.vue

3. 演示效果

总结


前言

        在上期的博客中我与各位老铁分享了有关首页导航栏及左侧树形菜单的基本搭建样式,今天的这期博客基于上期博客来实现左侧树形菜单与后台数据库进行动态绑定,还有实现后台数据在前台显示及实现分页功能。(老铁们仔细阅读观看)

一、实现动态树形菜单

1. 配置相应路径

       在action.js文件中配置左侧树形菜单回显页面的请求访问路径,代码如下(根据自身项目进行修改)。

'SYSTEM_MODULE': '/module/queryRootNode', //左侧树形菜单显示访问路径

 

2. 创建组件

        创建两个组件用于实现效果,也为后续的做铺垫。创建一个AddBook.vue和BookList.vue组件。

 

3. 配置组件与路由的关系

        将新创建的组件与路由进行关系绑定,在index.js的文件中设置

index.js

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'

import AppMain from '@/components/AppMain'
import LeftNav from '@/components/LeftNav'
import TopNav from '@/components/TopNav'

import Login from '@/views/book/AddBook'
import Login from '@/views/book/BookList'

import Login from '@/views/Login'
import Register from '@/views/Register'

Vue.use(Router)

export default new Router({
  routes: [ //默认首页
    {
      path: '/',
      name: 'Login',
      component: Login
    }, {
      path: '/Register',
      name: 'Register',
      component: Register
    }, {
      path: '/Login',
      name: 'Login',
      component: Login
    }, {
      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
      }]
    }
  ]
})

 在AppMain.vue中添加一下代码否则效果实现不了

  <router-view></router-view>

 

4. 编写动态树形菜单

<template>
  <el-menu router :default-active="$route.path" default-active="2" class="el-menu-vertical-demo" background-color="#334157" text-color="#fff"
    active-text-color="#ffd04b" :collapse="collapsed">
    <!-- <el-menu default-active="2" :collapse="collapsed" collapse-transition router :default-active="$route.path" unique-opened class="el-menu-vertical-demo" background-color="#334157" text-color="#fff" active-text-color="#ffd04b"> -->
    <div class="logobox">
      <img class="logoimg" src="../assets/img/logo.png" alt="">
    </div>

      <el-submenu v-for="m in menus" :index="'idx_'+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="m2.url" :key="'key_'+m2.id">
          <i class="m2.icon"></i>
          <span>{{m2.text}}</span>
        </el-menu-item>
      </el-submenu>

    <!-- <el-submenu index="1">
			<template slot="title">
				<i class="el-icon-location"></i>
				<span>导航一</span>
			</template>
			<el-menu-item-group>
				<template slot="title">分组一</template>
				<el-menu-item index="1-1">选项1</el-menu-item>
				<el-menu-item index="1-2">选项2</el-menu-item>
			</el-menu-item-group>
			<el-menu-item-group title="分组2">
				<el-menu-item index="1-3">选项3</el-menu-item>
			</el-menu-item-group>
			<el-submenu index="1-4">
				<template slot="title">选项4</template>
				<el-menu-item index="1-4-1">选项1</el-menu-item>
			</el-submenu>
		</el-submenu>
		<el-menu-item index="2">
			<i class="el-icon-menu"></i>
			<span slot="title">导航二</span>
		</el-menu-item>
		<el-menu-item index="3" disabled>
			<i class="el-icon-document"></i>
			<span slot="title">导航三</span>
		</el-menu-item>
		<el-menu-item index="4">
			<i class="el-icon-setting"></i>
			<span slot="title">导航四</span>
		</el-menu-item> -->

  </el-menu>
</template>
<script>
  export default {
    data() {
      return {
        collapsed: false,
        menus:[]
      }
    },
    created() {
      this.$root.Bus.$on('xxx', v => {
        this.collapsed = v;
      });

      // 向后台请求数据的访问路径
      let url = this.axios.urls.SYSTEM_MODULE;
      this.axios.get(url, {}).then(r => {
        console.log(r);
        this.menus = r.data.rows;
      }).catch(e => {

      })

    }
  }
</script>
<style>
  .el-menu-vertical-demo:not(.el-menu--collapse) {
    width: 240px;
    min-height: 400px;
  }

  .el-menu-vertical-demo:not(.el-menu--collapse) {
    border: none;
    text-align: left;
  }

  .el-menu-item-group__title {
    padding: 0px;
  }

  .el-menu-bg {
    background-color: #1f2d3d !important;
  }

  .el-menu {
    border: none;
  }

  .logobox {
    height: 40px;
    line-height: 40px;
    color: #9d9d9d;
    font-size: 20px;
    text-align: center;
    padding: 20px 0px;
  }

  .logoimg {
    height: 40px;
  }
</style>

5. 页面效果演示

二、实现数据表格绑定及分页功能

1. 配置相应路径

        在action中配置数据访问路径

2.  编写数据表格显示及分页功能代码

BookList.vue

<template>
  <div class="books" style="padding: 20px;">
    <!-- 1.搜索框 -->
    <el-form :inline="true" class="demo-form-inline">
      <el-form-item label="书籍名称">
        <el-input v-model="bookname" placeholder="书籍名称"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">搜索</el-button>
      </el-form-item>
    </el-form>
    <!-- 2.数据表格 -->
    <el-table :data="tableData" stripe style="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>
    <!-- 3.分页条 -->
    <div class="block" style="padding: 20px;">
      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
        :page-sizes="[10, 20, 30, 40]" :page-size="rows" layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </div>
  </div>


</template>

<script>
  export default {
    data() {
      return {
        bookname: '',
        tableData: [],
        rows:10,
        page:1,
        total:0

      }

    },
    methods: {
      // 定义一个查询的方法,方便调用减少代码冗余
      query(params) {
        // 向后台请求数据的访问路径
        let url = this.axios.urls.BookList;
        this.axios.get(url, {
          params: params
        }).then(r => {
          console.log(r);
          this.tableData = r.data.rows;
          this.total = r.data.total;
        }).catch(e => {

        })
      },
      onSubmit() {
        let params = {
          bookname: this.bookname,

        }
        // 调用查询方法
        this.query(params);
      },
      handleSizeChange(r) { //当页大小发生变化
        // 输出查看
        console.log("当前页大小:"+r);
        let params = {
          bookname: this.bookname,
          rows:r,
          page:this.page
        }
        // 调用查询方法
        this.query(params);
      },
      handleCurrentChange(p) { //当当前页页码大小发生变化
        // 输出查看
        console.log("当前页码:"+p);
        let params = {
          bookname: this.bookname,
          page:p,
          rows:this.rows
        }
        // 调用查询方法
        this.query(params);
      }
    },
    created() {

      // 调用查询方法
      this.query({});
    }
  }
</script>

<style>
</style>

3. 演示效果

总结

        本期博客分享到此结束,今天给大家带来了动态树形菜单的功能实现和数据表格及分页效果的实现,两个功能实现了前后端结合,连接了数据库实现数据交互。其中使用到了ElementUI框架样式,大大减少了开发所需时间,提高了开发效率。后期博客中会进行功能增添完善,希望各位老铁能三连加关注支持一波。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 - 泛型

目录 前言 1. 什么是泛型? 2. 为什么需要泛型? 引入泛型之前 引入泛型之后 3.泛型类 4.泛型的界限 1.上下界 2.通配符 前言 今天给大家介绍一下泛型的使用 1. 什么是泛型? 一般的类和方法&#xff0c;只能使用具体的类型: 要么是基本类型&#xff0c;要么是自定义…

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码&#xff0c;短视频seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云存储批量视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff0c;站内实现关键词、短视频批量搜索排名&#xff0c;数据统计分类多功能细节深度…

在多台服务器上运行相同命令(二)、clush

介绍安装配置互信认证参数含义基本使用节点组拷贝文件 介绍 Clush&#xff08;Cluster Shell&#xff09;是一个用于管理和执行集群操作的工具&#xff0c;它允许你在多台远程主机上同时执行命令&#xff0c;以便批量管理服务器。Clush 提供了一种简单而强大的方式来管理大规模…

MySQL:远程连接数据库(2)

环境 两台centos7 其中一台安装MySQL数据库 192.168.254.1 另外一台安装mariadb最小化安装mysql仅供MySQL连接 或者安装完整版mysql也是可以的&#xff0c;只要支持mysql命令即可 192.168.254.2 开始部署 我们如果让那个用户可以远程连接&…

一步解决Android Studio没有提示的问题

问题 我们在使用安卓开发软件的时候常常会遇到没有提示或提示不全的情况&#xff0c;这样会很影响我们的学习效率,接下来我来教大家快速解决这个问题 解决办法 应用完成后点击ok&#xff0c;提示就可以出来了 如果有适配的版本到这里就可以了&#xff0c;没有的话可以继续往下看…

怎么删除文件夹?这才是正确操作方法!

“作为一名电脑小白&#xff0c;想问问大家&#xff0c;我想把文件夹一整个删除&#xff0c;但是没法操作是为什么呀&#xff1f;应该怎么正确删除文件夹呢&#xff1f;求解答&#xff01;” 在电脑使用过程中&#xff0c;有时我们需要删除不再需要的文件夹以释放磁盘空间或整理…

ISP图像信号处理——白平衡校正和标定介绍以及C++实现

从数码相机直接输出的未经过处理过的RAW图到平常看到的JEPG图有一系列复杂的图像信号处理过程&#xff0c;称作ISP&#xff08;Image Signal Processing&#xff09;。这个过程会经过图像处理和压缩。 参考文章1&#xff1a;http://t.csdn.cn/LvHH5 参考文章2&#xff1a;htt…

打造综合性品牌阵地 阿里元境引领元宇宙营销创新升级

9月21日&#xff0c;由中国商务广告协会主办&#xff0c;中国商务广告协会元宇宙营销应用研究工作委员会、南京大学中德社会计算研究所、南京大学中德数字营销实验室联合主办的“聚力共生”元宇宙学术及商业应用论坛启幕。阿里元境副总经理、市场负责人史敏君出席了论坛“多元聚…

SSE 推送技术

1、简介 Server-Sent Events&#xff08;SSE&#xff09;技术&#xff0c;它是一种用于实现服务器向客户端实时单向推送数据的Web技术。 SSE基于HTTP协议&#xff0c;允许服务器将数据以事件流&#xff08;Event Stream&#xff09;的形式发送给客户端。客户端通过建立持久的HT…

一些数学公式的几何意义

三角函数平方和公式&#xff1a; 三角函数中的平方和公式有三个形式&#xff1a; 第一种&#xff1a;&#xff1b; 接着两边同时除以可以得到第二种&#xff1a;; 或第一种同时除以可以得到第三种&#xff1a;。 首先我们做一个单位圆&#xff0c;我们学三角函数的时候应该…

当两界交汇:前端开发、后端开发与全栈开发的对比与选择

编程世界就像一座大城市&#xff0c;前端开发和后端开发就像城市的两个不同街区。在这两个街区&#xff0c;前端和后端开发都有自己的价值和机会。 一、引言 有些人更喜欢在前端创造令人印象深刻的用户界面&#xff0c;而有些人更喜欢处理数据和系统逻辑。在选择时&#xff…

Topaz Gigapixel AI6.3.2(图片无损放大)

Topaz Gigapixel AI是一款功能实用的图像无损放大工具。它的特色之处在于&#xff0c;通过使用先进的深度学习方法&#xff0c;它能够将照片放大高达600%&#xff0c;同时完美保留图像的质量。 此外&#xff0c;Topaz Gigapixel AI还具有一些其他的特色功能。 它能自动进行面…

ABB DDC779BE02 3BHE006805R0002 控制主板模块

ABB DDC779BE02 3BHE006805R0002 控制主板模块用于自动化和控制系统中&#xff0c;它们可能具有以下一些常见特点和功能&#xff1a; 处理能力&#xff1a;ABB DDC779BE02 3BHE006805R0002 控制主板模块通常具有强大的处理能力&#xff0c;可以执行复杂的控制算法和逻辑。 多种…

软件测试之网站测试怎么做?有什么作用?

网站测试是指对一个已经搭建好的网站进行功能、性能、安全等方面的测试。作为一家专注于软件测试的公司&#xff0c;我们清楚地知道网站测试在整个软件开发过程中的重要性。   一、网站测试怎么做?   1、确保测试环境的稳定和一致性&#xff0c;包括操作系统、浏览器版本等…

AnV-X6使用及总结

目录 1 简介2 安装3 基础概念3.1 画布Graph3.2 基类Cell3.3 节点Node3.4 边Edge 4 使用4.1 创建节点4.2 节点连线4.3 事件系统 5 总结 1 简介 AntV是一个数据可视化&#xff08;https://x6.antv.antgroup.com/&#xff09;的工具&#xff08;https://antv.vision/zh/ &#xf…

IPv6的主要优势有哪些?

第一&#xff0c;明显地扩大了地址空间。IPv6采用128位地址长度&#xff0c;几乎可以不受限制地提供IP地址&#xff0c;从而确保了端到端连接的可能性。 第二&#xff0c;提高了网络的整体吞吐量。由于IPv6的数据包可以远远超过64k字节&#xff0c;应用程序可以利用最大传输单元…

RFID技术引领汽车零部件加工新时代

RFID技术的兴起引领了汽车零部件加工领域的新时代&#xff0c;作为一种利用无线电频率进行自动识别的技术&#xff0c;RFID技术能够快速、准确地识别物体并获取相关数据&#xff0c;在汽车零部件加工中&#xff0c;RFID技术具有重要的应用价值&#xff0c;可以提高生产效率、降…

idea环境下如何打包可运行jar?

工作中有时候偶尔写一些工具类、小程序&#xff0c;可是java程序员制作一个可运行jar实在折腾&#xff0c;利用idea开发环境&#xff0c;可以快速打包自己的可运行jar。具体怎么操作呢&#xff1f; 创建一个空白的java项目并完成自己的程序开发 完成java代码&#xff1a; /**…

Vue以及整合ElementUI

初始化vue项目 #vue 脚手架使用 webpack 模板初始化一个 appname 项目 vue init webpack appname启动 vue 项目 #项目的 package.json 中有 scripts&#xff0c;代表我们能运行的命令 npm start npm run dev #启动项目 npm run build&#xff1a;将项目打包项目结构 运行流程…

【AI视野·今日Robot 机器人论文速览 第四十二期】Wed, 27 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 27 Sep 2023 Totally 48 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;***Tactile Estimation of Extrinsic Contact,基于触觉的外部接触估计与稳定放置 (from 三菱电机) Daily Robotics Pape…