【vant移动端表格数据排版】用vant2简单实现一个把PC端表格数据展示在移动端的排版。上拉加载更多,下拉刷新页面,新增,编辑,删除功能

news2024/11/24 12:42:31

前言

上次做了一个移动端的表格功能,纯表格的那种。
跟PC一样,但是我一直觉得在移动端上写表格很糟糕的体验,毕竟手机就那么大。这不合理。
但是我这公司又需要把PC端的表格的数据展示在移动端。
导致我只能去试试看怎么排版比较好。由于网上也是一直找不到什么案例参考,所以就自己想了一个排版供大家参考。
如果各位有更好的排版方式请发我一个图学习一下

效果图

手机上截图的页面
在这里插入图片描述

视频演示

vant2把表格PC端表格数据展示在手机端。页面排班参考

如果需要纯表格的去这里

移动端表格

上面纯表格的效果图

在这里插入图片描述

代码

这里代码直接发出来了,大家复制需要的
我这里没有接口的,纯前端的代码。可以直接复制了改改。
数据都是模拟的,所以数据需要自行替换
说一下,这里我用到了一些elementul的组件解决的无限滚动的问题。
这个class=“infinite-list” 的div是elementul中的。下拉刷新是vant的。
所以各位需要先引用好才可以使用,或者你们参考这个自己用熟悉的组件写也行。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 移动端缩放 -->
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <meta name="viewport"
        content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <!-- vue方面文件 -->
    <script src="/statics/vue_element/vue.js"></script>
    <script src="/statics/vue_element/element.js"></script>
    <link rel="stylesheet" href="/statics/vue_element/element.css">
    <script src="/statics/vue_element/axios.js"></script>
    <!-- 企业微信部分 -->
    <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
    <!-- vant -->
    <link rel="stylesheet" href="/statics/css/vant.css" />
    <script src="/statics/js/vant.js"></script>
    <title>私信录入</title>
</head>

<body>
    <div id="app">
        <div>
            <van-nav-bar title="私信录入" left-text="返回" left-arrow @click-left="onClickLeft" right-text="新增"
                @click-right="onClickRight" />
        </div>
        <div style="padding:5px;">
            <div class="infinite-list" v-infinite-scroll="load" style="overflow:auto;height: 93vh;" :infinite-scroll-distance="10">
                <!-- 下拉刷新组件 -->
                <van-pull-refresh v-model="isLoading" @refresh="onRefresh">
                    <el-card class="box" v-for="item,index in list" :key="index">
                        <div style="font-size:14px;font-weight:bold;display:flex;">
                            <span>张无忌{{index}}</span>
                            <!-- 编辑和删除 -->
                            <span style="text-align:right;flex: 1;">
                                <van-popover v-model="item.showPopover" theme="dark" trigger="click" :actions="actions"
                                    @select="setUp">
                                    <template #reference>
                                        <van-icon name="arrow-down" style="cursor:pointer;" />
                                    </template>
                                </van-popover>
                            </span>
                        </div>
                        <el-row>
                            <el-col :span="12">
                                <div class="title">日期</div>
                                <div class="info">2023-07-05</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">手机号</div>
                                <div class="info">13088885555</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">科室</div>
                                <div class="info">中医科</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">二级科室</div>
                                <div class="info">中医男科</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">录入人</div>
                                <div class="info">李四</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">推粉备注</div>
                                <div class="info">硬度和尺寸问题</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">分配客服</div>
                                <div class="info">张三</div>
                            </el-col>
                            <el-col :span="12">
                                <div class="title">是否加V</div>
                                <div class="info"></div>
                            </el-col>
                        </el-row>
                    </el-card>
                </van-pull-refresh>
            </div>
        </div>
        <!-- 录入弹框 -->
        <van-dialog v-model="show" title="标题" show-cancel-button @confirm="enterSxInfo">
            <div style="height:50vh;overflow: auto;">
                <van-form>
                    <van-field readonly clickable name="picker" :value="value" label="科室" placeholder="点击选择科室"
                        @click="showPicker = true" />
                </van-form>
                <van-form>
                    <van-field readonly clickable name="picker" :value="value" label="二级科室" placeholder="点击选择二级科室"
                        @click="showPicker = true" />
                </van-form>
                <van-form>
                    <van-field v-model="phone" name="手机号" label="手机号" placeholder="请填写手机号" />
                </van-form>
                <van-form>
                    <van-field v-model="wexin" name="微信" label="微信" placeholder="请填写微信" />
                </van-form>
                <van-form>
                    <van-field v-model="tuifen" name="推粉备注信息" label="推粉备注信息" placeholder="请填写推粉备注信息" rows="3"
                        autosize />
                </van-form>
                <van-form>
                    <van-field name="uploader" label="图片上传">
                        <template #input>
                            <van-uploader v-model="uploader" />
                        </template>
                    </van-field>
                </van-form>
            </div>
        </van-dialog>
        <van-popup v-model="showPicker" position="bottom">
            <van-picker show-toolbar :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />
        </van-popup>
    </div>
</body>
<script type="text/javascript">
    let v = new Vue({
        el: '#app',
        data() {
            return {
                show: false,
                value: '',
                columns: ['男科', '妇科', '中医科', '外科', '泌尿外科'],
                showPicker: false,
                phone: '',
                wexin: '',
                tuifen: '',
                uploader: [],
                currentPage: 0,
                showPopover: false,
                actions: [{
                    text: '编辑'
                }, {
                    text: '删除'
                }],
                isLoading: false,
                list: [{
                        showPopover: false,
                    },
                    {
                        showPopover: false,
                    },
                    {
                        showPopover: false,
                    },
                    {
                        showPopover: false,
                    },
                    {
                        showPopover: false,
                    }

                ]
            }
        },
        mounted() {},
        methods: {
            // 无限滚动
            load() {
                let obj = {
                    showPopover: false,
                }
                console.log('load');
                this.list.push(obj)
            },
            // 下拉刷新
            onRefresh() {
                let that = this
                setTimeout(() => {
                    vant.Toast('刷新成功');
                    that.isLoading = false;
                }, 1000);
            },
            // 设置
            setUp(action, index) {
                console.log(action.text, 'action');
                if (action.text == '编辑') {
                    this.show = true
                }
                if (action.text == '删除') {
                    vant.Dialog.confirm({
                            message: '此操作将会删除该条数据,是否继续操作',
                        })
                        .then(() => {
                            vant.Notify({
                                type: 'success',
                                message: '删除成功!'
                            });
                        })
                        .catch(() => {});
                }
            },
            // 私信录入
            enterSxInfo() {
                console.log(this.uploader);
            },
            // 科室选择
            onConfirm(value) {
                this.value = value;
                this.showPicker = false;
            },
            // 返回
            onClickLeft() {
                window.history.back()
            },
            // 新增
            onClickRight() {
                console.log('add');
                this.show = true
            }
        }
    })
</script>
<style scoped>
    html,
    body {
        height: 100%;
    }

    #app {
        height: 100vh;
        background-color: #f1f1f1;
        position: relative;
    }

    .van-popover__action {
        width: 100% !important;
    }

    .box {
        margin-bottom: 5px;
    }

    .title {
        font-size: 12px;
        color: #A4A4A4;
        margin: 5px 0;
    }

    .info {
        font-size: 14px;
    }
</style>

</html>

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

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

相关文章

【Qt-14】QT小知识点

1、关闭程序时报错 解决方案&#xff1a; 报这个错误可能是内存溢出&#xff0c;申请的空间与注销的空间不一致导致&#xff0c;排查了好久&#xff0c;我不是因为这个原因&#xff0c;我的问题如下&#xff0c;没有new窗体。 2、固定QT窗体大小 this->setMinimumSize(QSi…

NLP实战6:seq2seq翻译实战-Pytorch复现-小白版

目录 一、前期准备 1. 搭建语言类 2. 文本处理函数 3. 文件读取函数 二、Seq2Seq 模型 1. 编码器&#xff08;Encoder&#xff09; 2. 解码器&#xff08;Decoder&#xff09; 三、训练 1. 数据预处理 2. 训练函数 四、训练与评估 &#x1f368; 本文为[&#x1f51…

【算法集训之线性表篇】Day 02

文章目录 题目一思路分析代码实现效果 题目二思路分析代码实现效果 题目一 01.设置一个高效算法&#xff0c;将顺序表L的所有元素逆置&#xff0c;要求其空间复杂度为O(1)。 思路分析 首先&#xff0c;根据题目要求&#xff0c;空间复杂度度为O(1),则不能通过空间换时间的方…

为什么编程更关注内存而很少关注CPU?

我们知道&#xff0c;我们编写的程序&#xff0c;不管是什么编程语言&#xff0c;最后执行的时候&#xff0c;基本上都是CPU在完成。之所以说基本上&#xff0c;是因为还有GPU、FPGA等特殊情况。 但不知道大家发现没有&#xff0c;我们编程的时候&#xff0c;经常在关注内存问…

大促转化率精准预估优化论文随笔记

这是一篇阿里妈妈的论文【KDD’23 | 转化率预估新思路&#xff1a;基于历史数据复用的大促转化率精准预估】 常规的销量预测&#xff0c;遇到一些特大事件&#xff0c;直播、大促&#xff0c;一般很难预估得准确。而且现在电商机制也比较多样&#xff0c;预售、平台折扣等。 本…

初识MySQL:了解MySQL特性、体系结构以及在Linux中部署MySQL

目录 MySQL简介 MySQL特性 MySQL体系结构 SQL的四个层次&#xff1a; 连接层&#xff1a; SQL层&#xff1a; 插件式存储引擎&#xff1a; 物理文件层&#xff1a; 一条SQL语句的执行流程&#xff1a; MySQL在Linux中的安装、部署 首先需要下载mysql软件包&#xff…

月入9000+的CSGO游戏搬砖项目操作细节和疑问 ?给您一一解答

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 01 海外CSGO游戏搬砖项目是什么&#xff1f; csgo搬砖是在外服steam上购买包含印花枪皮等等…

9.2、增量表数据同步

1、数据通道 2、Flume配置 1&#xff09;Flume配置概述 Flume需要将Kafka中topic_db主题的数据传输到HDFS&#xff0c;故其需选用KafkaSource以及HDFSSink&#xff0c;Channel选用FileChannel。 需要注意的是&#xff0c; HDFSSink需要将不同mysql业务表的数据写到不同的路径…

2023.7.4 Dataloader切分

一、 如果文件夹路径是 path/to/folder with spaces/&#xff0c;使用以下方式输入 path/to/folder\ with\ spaces/或者使用引号包裹路径&#xff1a; "path/to/folder with spaces/"这样可以确保命令行正确解析文件夹路径&#xff0c;并将空格作为路径的一部分进…

ADB自动化测试框架

一、介绍 adb的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用&#xff0c;利用adb工具的前提是在手机上打开usb调试&#xff0c;然后通过数据线连接电脑。在电脑上使用命令模式来操作手机&#xff1a;重启、进入recovery、进入fastboot、推送文件功能等。简单来…

Intellij IDEA 初学入门图文教程(八) —— IDEA 在提交代码时 Performing Code Analysis 卡死

在使用 IDEA 开发过程中&#xff0c;提交代码时常常会在碰到代码中的 JS 文件时卡死&#xff0c;进度框上显示 Performing Code Analysis&#xff0c;如图&#xff1a; 原因是 IDEA 工具默认提交代码时&#xff0c;分析代码功能是打开的&#xff0c;需要通过配置关闭下就可以了…

Linux高性能网络编程:TCP底层的收发过程

今天探索高性能网络编程&#xff0c;但是我觉得在谈系统API之前可以先讲一些Linux底层的收发包过程&#xff0c;如下这是一个简单的socket编程代码&#xff1a; int main() {... fd socket(AF_INET, SOCKET_STREAM, 0);bind(fd, ...);listen(fd, ...);// 如何建立连接...afd …

冒泡排序法(优化与实例演示)

冒泡排序法 冒泡排序法基本介绍 冒泡排序是一种简单而经典的排序算法&#xff0c;它的原理是通过不断比较相邻元素的大小并交换位置&#xff0c;将较大&#xff08;或较小&#xff09;的元素逐渐“冒泡”到数组的末尾。这个过程持续进行多轮&#xff0c;直到整个数组按照顺序…

【Zabbix 6.0 监控系统安装和部署】

目录 一、Zabbix 介绍1、zabbix 是什么&#xff1f;2、zabbix 监控原理&#xff08;重点&#xff09;3、Zabbix 6.0 新特性4、Zabbix 6.0 功能组件1、Zabbix Server2、数据库3、Web 界面4、Zabbix Agent5、Zabbix Proxy6、Java Gateway 二、Zabbix 6.0 部署1、部署 zabbix 服务…

idea goland 插件 struct to struct

go-struct-to-struct idea goland 插件。实现自动生成 struct 间 转换代码。 https://plugins.jetbrains.com/plugin/22196-struct-to-struct/ IntelliJ plugin that Automatically generate two struct transformations through function declarations Usage define func …

【怎么实现多组输入之EOF】

C语言怎么实现多组输入之EOF C语言之EOF介绍1、什么是EOF&#xff1f;2、EOF的用法3、EOF的扩展3.1、scanf返回值之EOF3.2、scanf函数的返回值有以下几种情况 4、如何是实现多组输入&#xff1f;4.1、多组输入---- 常规写法例程14.2、多组输入---- 实现多组输入的打印例程24.3、…

不想被卷的程序员们,应该学什么?

我真的好像感慨一下&#xff0c;这个世界真的给计算机应届生留活路了吗&#xff1f; 看着周围的同学&#xff0c;打算搞前端、JAVA、C、C的&#xff0c;一个两个去跑去应聘。你以为是00后整治职场&#xff1f; 真相是主打一个卑微&#xff1a;现阶段以学习为主&#xff08;工…

探寻日本区块链游戏的未来潜力

日本的区块链游戏 日本是全球范围内游戏市场人均利润最高的国家之一。其中&#xff0c;《My Crypto Heroes》的首次公售金额达到了 16,000 ETH。 关键要点&#xff1a; 日本具有强大的游戏基础&#xff0c;使其成为加密游戏发展的理想地区。 日本流行的加密货币游戏包括《My…

Python中jsonpath库使用,及与xpath语法区别

jsonpath库使用 pip install jsonpath 基本语法 JSONPath语法元素和对应XPath元素的对比

Work20230705

//main.c #include "uart4.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); }int main() {while(1){//将获取到的字符1发送到终端//hal_put_char(hal_get_char()1);hal_put_string…