侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

vue2.5+ElementUi2.15+实现列表页中的分页、时间戳转日期、状态开关等功能demo

前端  /  管理员 发布于 3年前   1545

该项目是以典型的前后端分离架构:hyperf、jwt + vue、element ui

需求:

列表页的开发(我这用文章列表页实现)

完成功能:列表展示,分页,状态开关,日期转化

未完成功能:新增 批量删除 , 操作栏功能,编辑,删除等


环境:

跟之前的一样(有兴趣的可以自行翻阅)

"dependencies": {
    "axios": "^0.21.1",
    "element-ui": "^2.15.6",
    "vue": "^2.5.2",
    "vue-router": "^3.0.1",
    "vuex": "^3.6.2"
},

后端接口:

hyperf2.1+jwt


开始步骤:

1.添加路由 以 文章列表 路由为例

/src/router/index.js

(我直接复制过来整个测试项目路由页)

import Vue from 'vue'
import Router from 'vue-router'

import login from '@/views/login'
import Container from '@/container/Container'

import Dashboard from '@/views/dashboard'
import User from '@/views/user'
import Article from '@/views/article'

Vue.use(Router)
const router = new Router({
  //mode: 'history',  //去掉url中的#
  routes: [
    {
      path: '/',
      redirect: '/dashboard',
      name: 'Container',
      component: Container,
      children: [
        {path: 'dashboard', name: '首页', component: Dashboard, },
        {path: 'user', name: '用户列表', component: User,},
        {path: 'article', name: '文章列表', component: Article,},
      ]
    },
    {
      path: '/login',
      name: 'login',
      component: login
    }
  ]
})

//使用 router.beforeEach 注册一个全局前置守卫,判断用户是否登陆
router.beforeEach((to, from, next) => {
  if (to.path === '/login') {
    next()
  } else {
    let token = localStorage.getItem('token')
    if (token === null || token === '') {
      next('/login')
    } else {
      next()
    }
  }
})
export default router


2.添加文章列表页面

/src/views/article/index.vue

<template>
  <div>
      <el-table
        ref="multipleTable"
        :data="tableData.slice((currentPage-1)*pagesize,currentPage*pagesize)"
        tooltip-effect="dark"
        style="width: 100%"
        @selection-change="handleSelectionChange">
      <el-table-column
        type="selection"
        width="55">
      </el-table-column>
     
      <el-table-column prop="art_id" label="ID" width="120"></el-table-column>
      <el-table-column prop="title" label="标题" width="140"></el-table-column>
      <el-table-column prop="cat_id" label="分类" width="120"></el-table-column>
      <el-table-column prop="view" label="浏览量" width="140"></el-table-column>
      <el-table-column prop="pubtime" label="添加日期" :formatter="formatDate" width="150"></el-table-column>
     
      <el-table-column prop="is_state" label="状态" width="140">
        <template scope="scope">
              <el-switch
                v-model="scope.row.is_state"
                active-color="#13ce66"
                inactive-color="#ff4949"
                :active-value="0"
                :inactive-value="1"
                @change="changeStatus(scope.row)">
              </el-switch>
        </template>
      </el-table-column>
     
      <el-table-column prop="is_state" label="状态" width="80" align="center">
          <template scope="scope">
              <span v-if="scope.row.is_state==1" style="color:red;">停用</span>
              <span v-if="scope.row.is_state==0" style="color:green;">启用</span>
          </template>
      </el-table-column>
     
     <el-table-column label="操作" width="140" align="center">
         <template scope="scope">
            <el-button type="text" size="mini" @click="blockUp(scope.row)" v-if="scope.row.is_state==1">停用</el-button>
            <el-button type="text" size="mini" @click="startUsing(scope.row)" v-if="scope.row.is_state==0">启用</el-button>
         </template>
     </el-table-column>
     
     <el-table-column align="center" label="操作" width="200%">
         <template slot-scope="scope">
           <el-button v-if="scope.row.edit" type="success" size="mini"
                      icon="el-icon-circle-check-outline" @click="confirmEdit(scope.row)">保存
           </el-button>
           <el-button v-else type="primary" size="mini"
                      @click="startEdit(scope.row)">编辑
           </el-button>
           <el-button v-if="scope.row.edit" class="cancel-btn" size="mini" icon="el-icon-refresh"
                      type="warning" @click="cancelEdit(scope.row)">取消
           </el-button>
           <!--<el-button type="danger" size="mini" @click="handleConfig(scope.row)">删除</el-button>-->
         </template>
     </el-table-column>
    </el-table>
   
    <div style="margin-top: 20px">
      <el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二、第三行的选中状态</el-button>
      <el-button @click="toggleSelection()">取消选择</el-button>
    </div>
   
    <div style="text-align: center;margin-top: 30px;">
          <el-pagination
            background
            layout="prev, pager, next"
            :total="total"
            @current-change="current_change">
          </el-pagination>
    </div>
  </div>
</template>
<script>
  export default {
      data() {
        return {
          tableData: [],
          multipleSelection: [],
          total: 0,
          pagesize:5,
          currentPage:1
        }
      },
      methods: {
        addArt: function() {
          this.axios({
            method: 'GET',
            url: 'https://blog.zongscan.com/admin/arts',
          }).then(res => {
            console.log(res)
            this.tableData = res.data.data;
            this.total= res.data.total;
          }).catch(function () {
              console.log(66)
          })
        },
        current_change:function(currentPage){
          this.currentPage = currentPage
        },
       
        //改变状态
        changeStatus:function(v) {
          console.log( v.art_id + '--->'+v.is_state)
          //修改状态
          this.axios({
            method: 'GET',
            url: 'https://blog.zongscan.com/admin/artedit',
            params: {'art_id':v.art_id,'is_state':v.is_state}
          }).then(res => {
            console.log(res.data)
            this.$alert('状态修改成功!', 'is_state', {
                confirmButtonText: 'ok'
            })
          }).catch(function () {
            console.log('is_state')
          })
        },
        //日期转化
        formatDate(row, column) {
            let data = row[column.property]
            if(data == null) {
                return null
            }
            //注意 时间单位/毫秒 不然就显示1970了
            let dt = new Date(data * 1000)
             return dt.getFullYear() + '-' + (dt.getMonth() + 1) + '-' + dt.getDate() + ' ' + dt.getHours() + ':' + dt.getMinutes() + ':' + dt.getSeconds()
        },
       
        toggleSelection(rows) {
          if (rows) {
            rows.forEach(row => {
              this.$refs.multipleTable.toggleRowSelection(row);
            });
          } else {
            this.$refs.multipleTable.clearSelection();
          }
        },
        handleSelectionChange(val) {
          this.multipleSelection = val;
        }
      },
      mounted: function () {     
        this.addArt()  
      }
  }
</script>
<style>
</style>


来张完整的效果图:

el-table.png







  • 上一条:
    vue2.5+中手动刷新页面axios.interceptors.request.use不自动添加token出现跨域
    下一条:
    日常记录水贴,看到layui官网下线的官宣公告,发出的一些感慨
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客