• SPA项目开发之动态树+数据表格+分页


    目录

    一、树形菜单功能

    思路

    效果:

    二、书籍列表查询&分页

    思路

    效果:

    查询效果

    分页效果


    一、树形菜单功能

    思路

    1.要确定静态树形菜单节点的样式排版
    2.要获取树形节点的数据 this.axios.post
    3.通过拿到的数据渲染树形节点
        v-for 渲染节点
        定义渲染节点的变量

    首先将后端与前端项目运行起来

     使用户表中的用户信息进行登录

     LeftNav.vue

    1. <template>
    2. <el-menu router :default-active="$route.path" default-active="2" class="el-menu-vertical-demo" background-color="#334157" text-color="#fff"
    3. active-text-color="#ffd04b" :collapse="collapsed">
    4. <div class="logobox">
    5. <img class="logoimg" src="../assets/img/logo.png" alt="">
    6. div>
    7. <el-submenu v-for="m in menus" :index="'id_'+m.treeNodeId">
    8. <template slot="title">
    9. <i :class="m.icon">i>
    10. <span>{{m.treeNodeName}}span>
    11. template>
    12. <el-menu-item v-for="m2 in m.children" :key="'id_'+m2.treeNodeId" :index="m2.url">
    13. <i :class="m.icon">i>
    14. <span>{{m2.treeNodeName}}span>
    15. el-menu-item>
    16. el-submenu>
    17. el-menu>
    18. template>
    19. <script>
    20. export default {
    21. data() {
    22. return {
    23. collapsed: false,
    24. menus:[]
    25. }
    26. },
    27. created() {
    28. //从总线上取出 this.collapsed 变量
    29. this.$root.Bus.$on("collapsed-side", v => {
    30. this.collapsed = v;
    31. });
    32. //向后台 获取树形节点的数据
    33. let url = this.axios.urls.SYSTEM_MENU_TREE;
    34. //this指的是vue实例
    35. this.axios.post(url,{})
    36. .then(resp => { // 代表成功 this污染的问题可以通过箭头函数来实现 jdk8的 lambda表达式
    37. console.log(resp);
    38. this.menus = resp.data.result;
    39. }).catch(function() { //代表失败
    40. });
    41. }
    42. }
    43. script>
    44. <style>
    45. .el-menu-vertical-demo:not(.el-menu--collapse) {
    46. width: 240px;
    47. min-height: 400px;
    48. }
    49. .el-menu-vertical-demo:not(.el-menu--collapse) {
    50. border: none;
    51. text-align: left;
    52. }
    53. .el-menu-item-group__title {
    54. padding: 0px;
    55. }
    56. .el-menu-bg {
    57. background-color: #1f2d3d !important;
    58. }
    59. .el-menu {
    60. border: none;
    61. }
    62. .logobox {
    63. height: 40px;
    64. line-height: 40px;
    65. color: #9d9d9d;
    66. font-size: 20px;
    67. text-align: center;
    68. padding: 20px 0px;
    69. }
    70. .logoimg {
    71. height: 40px;
    72. }
    73. style>

    index.js

    1. import Vue from 'vue'
    2. import Router from 'vue-router'
    3. import HelloWorld from '@/components/HelloWorld'
    4. import AppMain from '@/components/AppMain'
    5. import LeftNav from '@/components/LeftNav'
    6. import TopNav from '@/components/TopNav'
    7. import Login from '@/views/Login'
    8. import Reg from '@/views/Reg'
    9. import Articles from '@/views/sys/Articles'
    10. Vue.use(Router)
    11. export default new Router({
    12. routes: [{
    13. path: '/',
    14. name: 'Login',
    15. component: Login
    16. },
    17. {
    18. path: '/Login',
    19. name: 'Login',
    20. component: Login
    21. },
    22. {
    23. path: '/Reg',
    24. name: 'Reg',
    25. component: Reg
    26. },
    27. {
    28. path: '/AppMain',
    29. name: 'AppMain',
    30. component: AppMain,
    31. children: [{
    32. path: '/LeftNav',
    33. name: 'LeftNav',
    34. component: LeftNav
    35. },
    36. {
    37. path: '/TopNav',
    38. name: 'TopNav',
    39. component: TopNav
    40. },
    41. {
    42. path: '/sys/Articles',
    43. name: 'Articles',
    44. component: Articles
    45. }
    46. ]
    47. }
    48. ]
    49. })

    效果:

    二、书籍列表查询&分页

    思路

    1.el-table 列表组件
    2.利用axios调用后台的文章查询接口-> created        没有传参
    3.el-pageination 列表组件
        size-change 页大小改变调用的事件
        current-change 页码改变调用的事件
    4.优化 将调用后台的文章查询接口的代码进行封装,为了复用
    5.el-form 查询的筛选条件    传参了

    this.doSearch 共用的查询方法
    this.search 带了查询条件的方法

    Articles.vue

    1. <script>
    2. export default {
    3. name: 'Articles',
    4. data() {
    5. return {
    6. listData: [],
    7. formInline: {
    8. page: 1,
    9. total: 10,
    10. title: ''
    11. }
    12. }
    13. },
    14. methods: {
    15. handleSizeChange(rows) {
    16. console.log("页大小发生改变时触发")
    17. this.formInline.page = 1;
    18. this.formInline.rows = rows;
    19. this.search();
    20. },
    21. handleCurrentChange(page) {
    22. console.log("当前页码发生改变时触发")
    23. this.formInline.page = page;
    24. this.search();
    25. },
    26. //是为了代码复用
    27. doSearch(param) {
    28. //向后台获取数据
    29. let url = this.axios.urls.SYSTEM_ARTICLE_LIST;
    30. //this指的是vue实例
    31. this.axios.post(url, param)
    32. .then(resp => { // 代表成功 this污染的问题可以通过箭头函数来实现 jdk8的 lambda表达式
    33. console.log(resp);
    34. this.listData = resp.data.result;
    35. this.formInline = resp.data.pageBean;
    36. }).catch(function() { //代表失败
    37. });
    38. },
    39. search() {
    40. //按照 条件进行查询
    41. this.doSearch(this.formInline);
    42. }
    43. },
    44. created() {
    45. this.doSearch({});
    46. }
    47. }
    48. script>
    49. <style>
    50. style>

     要实现点击文章管理跳转到Articles.vue的组件上,要定义锚点

    效果:

    查询效果

    分页效果

  • 相关阅读:
    RTOS的基本概念与线程基础知识
    【力扣-数据结构和算法-头哨兵】移除链表元素
    【精选】HTML5最全知识点集合
    【工具】SSH端口转发管理器,专门管理SSH Port Forwarding
    基于UDP的TFTP文件传输
    JSON-RPC跨域通信:Python服务器端解决方案与Js客户端 Mozilla扩展程序
    在Windows下自己从源码编译Python3.10.13成安装包
    数字经济时代文化消费新特征
    通过对比3PL和4PL,来了解什么是4PL
    ICLR 2022最佳论文解读
  • 原文地址:https://blog.csdn.net/weixin_65211978/article/details/126827213