首页 > 其他分享 >vue3实现在移动端时用卡片展示数据而在PC端时切换为表格展示数据

vue3实现在移动端时用卡片展示数据而在PC端时切换为表格展示数据

时间:2024-06-13 18:45:14浏览次数:11  
标签:const title 展示 value order content PC 端时 id

1、根据屏幕宽度自动切换卡片和表格来展示数据
2、PC端用pagination分页,移动端用v-infinite-scroll滚动分页
3、准备封装成一个组件......

<template>

  <div>
    <div v-if="isMobile" class="infinite-list" style="overflow: auto" v-infinite-scroll="loadMore">
      <el-row :gutter="20">
        <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" v-for="item in items" :key="item.id">
          <el-card class="box-card">
            <div>{{ item.id }}</div>
            <div>{{ item.content }}</div>
          </el-card>
        </el-col>

      </el-row>
    </div>
    <div v-else>
      <el-table :data="items" style="width: 100%">
        <el-table-column prop="id" label="id"></el-table-column>
        <el-table-column prop="content" label="产品规格"></el-table-column>
        <el-table-column prop="order" label="订单号"></el-table-column>
      </el-table>
    </div>
    <el-pagination layout="total, sizes, prev, pager, next, jumper" :current-page="currentPage" :page-size="pageSize"
      :total="total" @size-change="handlePageChange" @current-change="handlePageChange" v-show="!isMobile"/>
  </div>

</template>

<script setup lang="ts">

import { ref, computed ,watch,onMounted,onUnmounted} from 'vue'


const items = ref([])


const screenWidth = ref(window.innerWidth);

const updateScreenWidth = () => {
  screenWidth.value = window.innerWidth;
};
 
onMounted(() => {
  window.addEventListener('resize', updateScreenWidth);
});
 
onUnmounted(() => {
  window.removeEventListener('resize', updateScreenWidth);
});

let isMobile = ref(false)

watch(screenWidth, (newVal, oldVal) => {
  if(newVal>768){
    isMobile.value =false
  }else{
    isMobile.value =true
  }
});


const currentPage = ref(1);
const pageSize = ref(5);
const total = ref(20); // 假设总共有100条数据
// 加载更多数据的函数
const loadMore = async () => {
  if (currentPage.value * pageSize.value < total.value) {
    handlePageChange(currentPage.value + 1);
  }
};

// 分页改变时的处理函数
const handlePageChange = (newPage) => {
  currentPage.value = newPage;
  fetchData(newPage);
};

const setItem =(arr)=>{
  if (!isMobile.value) {
      items.value = arr
    } else {
      arr.map(obj => {
        items.value.push(obj)
      })
    }
}
// 模拟获取数据的函数
const fetchData = async (page) => {
  if (page === 1) {
    const arr =
      [
        { id: 1, title: '饼干', content: '12克,8片装', order: 'No00001' },
        { id: 2, title: '糖果', content: '草莓味', order: 'No00002' },
        { id: 3, title: '饼干', content: '12克,8片装', order: 'No00001' },
        { id: 4, title: '糖果', content: '草莓味', order: 'No00002' },
        { id: 5, title: '饼干', content: '12克,8片装', order: 'No00001' }
      ]
      setItem(arr)
  }
  else if (page === 2) {
    const arr = [
      { id: 6, title: '糖果', content: '草莓味', order: 'No00002' },
      { id: 7, title: '饼干', content: '12克,8片装', order: 'No00001' },
      { id: 8, title: '糖果', content: '草莓味', order: 'No00002' },
      { id: 9, title: '饼干', content: '12克,8片装', order: 'No00001' },
      { id: 10, title: '糖果', content: '草莓味', order: 'No00002' },
    ]
    setItem(arr)
  }
  else if (page === 3) {
    const arr = [
      { id: 11, title: '饼干', content: '12克,8片装', order: 'No00001' },
      { id: 12, title: '糖果', content: '草莓味', order: 'No00002' },
      { id: 13, title: '饼干', content: '12克,8片装', order: 'No00001' },
      { id: 14, title: '糖果', content: '草莓味', order: 'No00002' },
      { id: 15, title: '饼干', content: '12克,8片装', order: 'No00001' },
    ]
    setItem(arr)
  }
  else if (page === 4) {
    const arr = [
      { id: 16, title: '糖果', content: '草莓味', order: 'No00002' },
      { id: 17, title: '饼干', content: '12克,8片装', order: 'No00001' },
      { id: 18, title: '糖果', content: '草莓味', order: 'No00002' },
      { id: 19, title: '饼干', content: '12克,8片装', order: 'No00001' },
      { id: 20, title: '糖果', content: '草莓味', order: 'No00002' },
    ]
    setItem(arr)
  }
};

fetchData(currentPage.value)
</script>



<style>
.box-card {
  margin-bottom: 20px;
}

.infinite-list {
  height: 100vh;
  padding: 0;
  margin: 0;
  list-style: none;
}
</style>

效果图如下:

标签:const,title,展示,value,order,content,PC,端时,id
From: https://www.cnblogs.com/3cock/p/18246515

相关文章

  • 工业通讯协议(四)- OPCUA
    参考:https://www.opc-router.com/what-is-opc-ua/#:~:text=Inthiscontext%2CthemeaningofUAin,COM%2FDCOMtopurelybinaryTCP%2FIPoralternativelySOAP.https://github.com/OPCFoundation/UA-.NETStandard一.OPC介绍OPC(OLEforProcessControl)协议是一种用于......
  • PC微信逆向) 定位微信浏览器打开链接的call
    首发地址:https://mp.weixin.qq.com/s/Nik8fBF3hxH5FPMGNx3JFw前言最近想写一个免费的微信公众号自动采集的工具,我看公众号文章下载需求还挺多的。搜了下github,免费的工具思路大多都是使用浏览器打开公众号主页获取到需要的请求参数,例如key、uin等,然后再用参数请求历史。优化......
  • pc端element表格实现动态列及导出xlsx
    一、首先实现动态列,为了防止刷新恢复初始状态,用pinia持久化存储实现效果:实现代码://主页面代码//template<el-buttontype="primary"@click="selectDialogRef.openDialog()">简表设置</el-button><el-table:data="dataList"><el-table-columnv-if=&q......
  • vite+vue3展示文件夹内的所有组件
    https://www.cnblogs.com/y-shmily/p/16546743.html 在组件目录下新建index.jsimport{markRaw}from"vue";constfilesNameList=[];constfiles=import.meta.glob("./*.vue");for(constkeyinfiles){constfileName=key.replace(/(\.......
  • 【2024算力大会分会 | SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深
    【2024算力大会分会|SPIE出版】2024云计算、性能计算与深度学习国际学术会议(CCPCDL2024)2024 InternationalconferenceonCloudComputing,PerformanceComputingandDeepLearning *CCPCDL往届均已完成EI检索,最快会后4个半月完成!一、重要信息大会官网:www.ccpc......
  • 搬运:python基于pywinauto实现PC端自动化 python操作微信自动化
    目录一、pywinauto安装和启动1.安装:2.backend选择和控件查看工具inspect介绍2.启动(实例化程序):以微信示例3.Application对象app的常用方法二、控件定位方法和控件可用方法2.1层级查找控件的方法2.2kwargs筛选条件2.3控件可用的方法属性三、具体使用举例1.对......
  • 酷炫大屏展示!一个完全开源的BI平台!
    大家好,我是Java陈序员。在工作中,我们积累了很多宝贵的数据,但是数据是冰冷的,需要以图表的形式展示给用户观看,这时候就需要一个强大的BI平台。今天,给大家介绍一个基于SpringBoot实现的BI平台,只要几个步骤就能轻松实现酷炫大屏展示!关注微信公众号:【Java陈序员】,获取开源项......
  • 手机上玩 PC 游戏的开源项目「GitHub 热点速览」
    上周国产3A大作《黑神话:悟空》开启预售,同时公布游戏将于北京时间2024.8.20正式上线。这是一款由「游戏科学」开发的西游题材单机·动作·角色扮演游戏,它采用「虚幻引擎5」制作。该引擎并不是完全开源的,但它提供了部分源代码的访问权限。具体来说,就是 GitHub账号必须先关联E......
  • 使用rpc和venom工具模拟隧道搭建
    环境Avps-外网(这里用电脑主机模拟)B双网卡主机-外网内网(这里用虚拟机搭建kali系统)C内网主机-内网(这里用虚拟机搭建centos系统)用到的工具rpc、venom全局代理工具:proxifier浏览器代理工具:switchomega步骤网卡配置B双网卡主机配置C内网主机配置2.服务......
  • httpclient,轻量级idea集成测试工具
    优点:不用新开一个网页,具有测试数据保存功能,不需要配置即用(对比swagger)   不会特别占内存(对比postman) 使用方法:idea中安装插件controller方法中点击 选择对应action 即可自动生成测试,点击左侧三角即可测试。但是数据内容需要自己填写如下:###分页查询POST{......