【表格单元格可编辑】vue-elementul简单实现table表格点击单元格可编辑,点击单元格变成弹框修改数据

news2024/12/26 23:23:54

前言

这是继我另一个帖子就是单元格点击变成输入框后添加的功能
因为考虑到有些时候修改单元格的信息可能点击后要修改很多,那一个输入框不好用
所以这时候就需要一个弹框可以把所有表单都显示出来修改
所以这里就专门又写了一个demo,用于处理这种情况
如果需要看表格单元格点击后变成输入框,然后焦点消失后直接更改的模板,可以点击这个帖子
链接在这:点击单元格变输入框

效果图

列表展示,点击单元格可以弹出弹框,内部是当前单元格的行和列的数据
在这里插入图片描述
在这里插入图片描述

代码

功能实现的几个点解释一下。
1,获取到行和列的数据主要是cellClick和tableCellClassName方法
这里我是用的人名和日期来返回给后端修改数据的。
如果你们需要拿到当前行的id之类的。
就自行更改一下就可以了。行的数据和列的数据都有的

2,注意一下,这里表格上面是需要放prop的。
我这里:prop="arrd.key"就是把每个列的字段名存起来。
如果不写这个,那么你就拿不到当前列的字段名了。当然如果你不需要返回这个字段名那就无所谓

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

<head>
    <meta charset="UTF-8">
    <!-- 公共css文件 -->
    <link rel="stylesheet" href="/statics/css/common/common.css">
    <!-- 公共js文件 -->
    <script type="text/javascript" src="/statics/vue_element/common.js"></script>
    <!-- vue方面文件 -->
    <link rel="stylesheet" href="/statics/vue_element/element.css">
    <script src="/statics/vue_element/vue.js"></script>
    <script src="/statics/vue_element/element.js"></script>
    <script src="/statics/vue_element/axios.js"></script>
    <title>表格单元格弹框修改</title>
</head>

<body>
    <div id="app" v-cloak>
        <!-- 搜索栏 -->
        <div class="search_main">
            <div class="ibox-search" ref="menus">
                <el-form :inline="true" class="form-inline">
                    <el-form-item label="排班日期">
                        <el-date-picker v-model="time" size="small" type="month" placeholder="选择日期"
                            value-format="yyyy-MM" clearable id="month1" class="ywidth">
                        </el-date-picker>
                    </el-form-item>
                    <el-form-item>
                        <el-button size="small" @click="search" type="primary">查询</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </div>
        <!-- 内容栏 -->
        <div class="layout-main">
            <div class="ibox-search">
                <!-- 循环表头 -->
                <el-table :data="tableData" border style="width: 100%" v-loading="loadings" :height="height" ref="table"
                    :cell-class-name="tableCellClassName" @cell-click="cellClick">
                    <el-table-column v-for="(arrd,index) in headered" :fixed="arrd.fixed" :key="index"
                        :label="arrd.name" align="center" show-overflow-tooltip :prop="arrd.key"
                        :width="arrd.key=='ks'||arrd.key=='doctor'?'100px':''">
                        <template slot-scope="{row, $index}">
                            <div :class="row[arrd.key]==''?'':'bg-success text-white'"
                                style="width:100%;cursor:pointer;" v-if="arrd.key!=='ks'&&arrd.key!=='doctor'">
                                <span>{{row[arrd.key]}}</span>
                            </div>
                            <div style="width:100%;" v-else>
                                <span>{{row[arrd.key]}}</span>
                            </div>
                        </template>
                    </el-table-column>
                </el-table>
                <!-- 分页 -->
                <div class="list-footer" ref="footer">
                    <div class="foot-bg">
                    </div>
                    <div class="block page_r">
                        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                            :current-page="currentPage" :page-sizes="[10, 30, 50, 100]" :page-size="pagesize"
                            layout="total, sizes, prev, pager, next, jumper" :total="count">
                        </el-pagination>
                    </div>
                </div>
            </div>
        </div>
        <!-- 新增修改 -->
        <el-dialog :title="name" :visible.sync="dialogVisible" top='40px' width="25%" center class="dialog_box">
            <el-form :model="ruleForm" ref="ruleForm" label-width="100px" class="demo-ruleForm">
                <el-form-item label="医生:">
                    {{nickName}}
                </el-form-item>
                <el-form-item label="日期:">
                    <span>{{tableTimer}}</span>
                </el-form-item>
                <el-form-item label="接诊人数:">
                    <el-input v-model="ruleForm.show_num" size="small" placeholder="请输入内容"></el-input>
                </el-form-item>
            </el-form>
            <span slot="footer" class="dialog-footer">
                <el-button @click="subForm('ruleForm')" size='small' type="primary" class="btn">保存</el-button>
            </span>
        </el-dialog>
    </div>
</body>
<script>
    new Vue({
        el: '#app',
        data() {
            return {
                time: '', //日期
                tableData: [], //表格数据
                headered: [],
                loadings: false,
                height: null,
                // 分页部分
                currentPage: 1,
                pagesize: 10,
                count: 0,
                // 弹框title
                name: '',
                // 弹框显示隐藏
                dialogVisible: false,
                // 弹框内数据
                ruleForm: {
                    show_num: '', //输入框
                },
                qd_options: [], //弹框内下拉框
                //表单验证
                value: '', //
                nickName: '', //医生名
                tableTimer: '' //当前列名称
            }
        },
        mounted() {
            let that = this
            that.initTableHeight() //初始化 表格高度
            window.addEventListener('resize', this.initTableHeight) //动态表格高度监听
            that.time = timer.benyuefen() //初始化默认获取本月日期,不含日
            that.searchList() //初始化表格数据获取
        },
        methods: {
            // 给行和列赋值
            tableCellClassName({
                row,
                column,
                rowIndex,
                columnIndex
            }) {
                //注意这里是解构
                //利用单元格的 className 的回调方法,给行列索引赋值
                row.index = rowIndex;
                column.index = columnIndex;
            },
            // 拿到行和列对应的值
            cellClick(row, index) {
                if (index.property == 'ks' || index.property == 'doctor') {
                    return
                }
                this.dialogVisible = true
                this.tableTimer = index.label //当前单元格的列名称
                this.ruleForm.show_num = row[index.property] //当前单元格的值
                this.nickName = row.doctor //当前行的医生
                this.value = row[index.property]
                console.log('点击后获取的数据:','行:',row, '列:',index);
            },
            // 表格高度
            initTableHeight() {
                let that = this
                var menus = that.$refs.menus.offsetHeight //搜索栏高度
                var footer = that.$refs.footer.offsetHeight //分页高度
                that.height = window.innerHeight - menus - footer - 25 + 'px'
            },
            // 获取表格数据
            searchList() {
                let that = this
                // that.loadings = true
                // 模拟数据
                this.headered = [{
                            "key": "ks",
                            "name": "科室"
                        },
                        {
                            "key": "doctor",
                            "name": "专家"
                        },
                        {
                            "key": "num1",
                            "name": "2023-02-01"
                        },
                        {
                            "key": "num2",
                            "name": "2023-02-02"
                        },
                        {
                            "key": "num3",
                            "name": "2023-02-03"
                        },
                        {
                            "key": "num4",
                            "name": "2023-02-04"
                        },
                        {
                            "key": "num5",
                            "name": "2023-02-05"
                        },
                        {
                            "key": "num6",
                            "name": "2023-02-06"
                        },
                        {
                            "key": "num7",
                            "name": "2023-02-07"
                        },
                        {
                            "key": "num8",
                            "name": "2023-02-08"
                        },
                        {
                            "key": "num9",
                            "name": "2023-02-09"
                        },
                        {
                            "key": "num10",
                            "name": "2023-02-10"
                        },
                        {
                            "key": "num11",
                            "name": "2023-02-11"
                        },
                        {
                            "key": "num12",
                            "name": "2023-02-12"
                        },
                        {
                            "key": "num13",
                            "name": "2023-02-13"
                        },
                        {
                            "key": "num14",
                            "name": "2023-02-14"
                        },
                        {
                            "key": "num15",
                            "name": "2023-02-15"
                        },
                        {
                            "key": "num16",
                            "name": "2023-02-16"
                        },
                        {
                            "key": "num17",
                            "name": "2023-02-17"
                        },
                        {
                            "key": "num18",
                            "name": "2023-02-18"
                        },
                        {
                            "key": "num19",
                            "name": "2023-02-19"
                        },
                        {
                            "key": "num20",
                            "name": "2023-02-20"
                        },
                        {
                            "key": "num21",
                            "name": "2023-02-21"
                        },
                        {
                            "key": "num22",
                            "name": "2023-02-22"
                        },
                        {
                            "key": "num23",
                            "name": "2023-02-23"
                        },
                        {
                            "key": "num24",
                            "name": "2023-02-24"
                        },
                        {
                            "key": "num25",
                            "name": "2023-02-25"
                        },
                        {
                            "key": "num26",
                            "name": "2023-02-26"
                        },
                        {
                            "key": "num27",
                            "name": "2023-02-27"
                        },
                        {
                            "key": "num28",
                            "name": "2023-02-28"
                        }
                    ]
                    this.tableData = [{
                            ks: "中医科",
                            doctor: "段占天",
                            num1: 0,
                            num2: 0,
                            num3: 0,
                            num4: 0,
                            num5: 0,
                            num6: 0,
                            num7: 0,
                            num8: 0,
                            num9: 0,
                            num10: 0,
                            num11: 0,
                            num12: 0,
                            num13: 0,
                            num14: 0,
                            num15: 0,
                            num16: 0,
                            num17: 0,
                            num18: 0,
                            num19: 0,
                            num20: 0,
                            num21: 0,
                            num22: 0,
                            num23: 0,
                            num24: 0,
                            num25: 0,
                            num26: 0,
                            num27: 0,
                            num28: 0,
                            index: 0
                        },
                        {
                            ks: "中医科",
                            doctor: "陈国",
                            num1: 0,
                            num2: 0,
                            num3: 0,
                            num4: 0,
                            num5: 0,
                            num6: 0,
                            num7: 0,
                            num8: 0,
                            num9: 0,
                            num10: 0,
                            num11: 0,
                            num12: 0,
                            num13: 0,
                            num14: 0,
                            num15: 0,
                            num16: 0,
                            num17: 0,
                            num18: 0,
                            num19: 0,
                            num20: 0,
                            num21: 0,
                            num22: 0,
                            num23: 0,
                            num24: 0,
                            num25: 0,
                            num26: 0,
                            num27: 0,
                            num28: 0,
                            index: 1
                        }
                    ]
                    return
                axios.get(apiadmin_url + `zkjk_doctor_limit?month=${that.time}`, {
                    headers: {
                        token: session_token,
                        hosId: userinfo.hospital_id,
                    }
                }).then(res => {
                    this.headered = res.data.data.header
                    this.tableData = res.data.data.data
                    // 根据ks字段排序
                    this.tableData.sort(function (a, b) {
                        return a.ks > b.ks ? 1 : -1
                    })
                    that.loadings = false
                }).catch(error => {})
            },
            // 搜索按钮
            search() {
                let that = this
                that.currentPage = 1
                that.searchList()
            },
            // 分页
            handleSizeChange(val) {
                let that = this
                that.pagesize = val;
                that.searchList()
            },
            // 分页
            handleCurrentChange(val) {
                let that = this
                that.currentPage = val;
                that.searchList()
            },
            // 弹框内提交
            subForm(formName) {
                let that = this
                if (this.value == 0) {
                    axios.post(apiadmin_url + "zkjk_doctor_limit", {
                        date: this.tableTimer,
                        doctor: this.nickName,
                        limit_num: this.ruleForm.show_num
                    }, {
                        headers: {
                            token: session_token,
                            hosId: userinfo.hospital_id,
                        }
                    }).then(response => {
                        if (response.data.code == 200) {
                            that.dialogVisible = false
                            this.$message({
                                showClose: true,
                                type: 'success',
                                message: response.data.message
                            });
                            that.search()
                        } else {
                            this.$message({
                                showClose: true,
                                message: response.data.message,
                                type: 'error'
                            });
                        }
                    }).catch(error => {})
                } else {
                    axios.put(apiadmin_url +
                        `zkjk_doctor_limit/1?date=${this.tableTimer}&doctor=${this.nickName}&limit_num=${this.ruleForm.show_num}`, {}, {
                            headers: {
                                token: session_token,
                                hosId: userinfo.hospital_id,
                            }
                        }).then(response => {
                        if (response.data.code == 200) {
                            that.dialogVisible = false
                            this.$message({
                                showClose: true,
                                type: 'success',
                                message: response.data.message
                            });
                            that.search()
                        } else {
                            this.$message({
                                showClose: true,
                                message: response.data.message,
                                type: 'error'
                            });
                        }
                    }).catch(error => {})
                }
            },
        }
    })
</script>

</html>

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

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

相关文章

深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展

2月9日&#xff0c;深兰科技机器人商丘制造基地投产仪式在商丘市梁园区北航创新园隆重举行。商丘市人大常委会副主任、梁园区委书记张兵&#xff0c;梁园区区长薛天江、河南省装备制造业协会会长张桦&#xff0c;河南省机器人行业协会会长王济昌&#xff0c;深兰科技集团董事长…

使用ChatGPT和EZDML迅速高效生成可运行的软件系统原型

ChatGPT最近很热&#xff0c;其对程序员可以说影响极大&#xff0c;是不得不跟的潮流趋势&#xff0c;因此EZDML新版也把ChatGPT的支持加上了&#xff0c;可以在几分钟内按您的意思生成一个数据模型&#xff0c;再搭载使用EZDML自带的代码模板&#xff0c;能快速生成可真正运行…

基于FPGA的 SPI通信 设计(1)

引言 低速通信目前搞过 UART串口通信、IIC通信。其实 SPI 也算是中低速&#xff08;有时也可以用作高速通信&#xff09;串行通信的范畴&#xff0c;但是一直还没真正实现过&#xff0c;所以此系列就 SPI的协议以及FPGA设计作几篇博客记录。欢迎订阅关注~ SPI 标准协议 x1模式…

【软件测试】测试外包,我们该去吗?看看资深测试工程师的见解......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 外包的含义和目的&a…

2023年家族办公室研究报告

第一章 概况 家族办公室最早起源于古罗马时期的大“Domus”&#xff08;家族主管&#xff09;以及中世纪时期的大“Domo”&#xff08;总管家&#xff09;。现代意义上的家族办公室出现于19世纪中叶&#xff0c;一些抓住产业革命机会的大亨将金融专家、法律专家和财务专家集合…

MySQL数据库14——更新和删除数据

SQL里面使用UPDATE更新数据&#xff0c;删除使用DELETE语句。 Mysql要修改一下设置&#xff0c;才能更新&#xff1a; 在左上角菜单栏里面选择偏好栏&#xff0c;取消下面这个红框的勾选 更新单个字段的数据 如果运行环境为MySQL 则使用以下语句进行备份。 CREATE TABLE stu…

VS中scanf报错+extern关键字+常量+转义字符

目录 一、解决VS中scanf报错 二、extern关键字 三、常量 &#xff08;一&#xff09;C语言中的常量分为以下以下几种 1. 字面常量 2. const 修饰的常变量 3. #define 定义的标识符常量 4. 枚举常量 四、转义字符 &#xff08;一&#xff09;\? &#xff08;二&…

轻松解决Session-Cookie 鉴权(含坑)附代码

Session-Cookie 鉴权 cookie介绍 Cookie 存储在客户端&#xff0c;可随意篡改&#xff0c;不安全有大小限制&#xff0c;最大为 4kb有数量限制&#xff0c;一般一个浏览器对于一个网站只能存不超过 20 个 Cookie&#xff0c;浏览器一般只允许存放 300个 CookieCookie 是不可跨…

力扣SQL刷题11

目录标题1194. 锦标赛优胜者--做出来了1225. 报告系统状态的连续日期-勉强1159. 市场分析 II1205. 每月交易II1194. 锦标赛优胜者–做出来了 题型&#xff1a;看题 解答&#xff1a;先处理matches表&#xff0c;整出分数列和players表连接 注意点&#xff1a; union all 时…

【逐步剖C】-番外篇-实用调试技巧

一、 Bug介绍 在正式开始讲解调试技巧之前先介绍一下我们亦敌亦友的Bug。 程序错误&#xff0c;即英文的Bug&#xff0c;也称为缺陷、臭虫&#xff0c;是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。 早期的计算机由于体积非常庞…

2.21、管程

管程就是一个软件模块&#xff0c;里面封装了实现同步&#xff0c;互斥的函数 1、为什么要引入管程 信号量机制存在的问题&#xff1a;编写程序困难、易出错 能不能设计一种机制&#xff0c;让程序员写程序时不需要再关注复杂的 PV 操作&#xff0c;让写代码更轻松呢? 1973年…

使用python从houdini导出arnold材质

先说结果,如果要使用python从houdini导出arnold材质可以使用以下命令 import hou import htoa vops [hou.node("/shop/arnold_vopnet1/")] htoa.material.materialExport(vops,"D:/mat.mtlx")以下是在寻找解决方法的过程中记录的流水账日志 google泛搜索…

MySQL入门篇-MySQL MHA高可用实战

MHA简介 MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由日本DeNA公司的youshimaton&#xff08;现就职于Facebook公司&#xff09;开发&#xff0c;是一套优秀的作为MySQL高可用性环境下故障切换和主从提…

2023软考考哪个证书好?

软考有三个级别&#xff08;初级&#xff0c;中级和高级&#xff09;&#xff0c;这三个级别分别对应5个方向&#xff0c;下面这张图片呢&#xff0c;可以一目了然&#xff0c;一些小小建议&#xff01;&#xff01;&#xff01;遵循一个原则&#xff1a;首先选专业对口的科目&…

为什么这11道JVM面试题这么重要(附答案)

本文内容整理自 博学谷狂野架构师 运行时数据区都包含什么 虚拟机的基础面试题 程序计数器Java 虚拟机栈本地方法栈Java 堆方法区 程序计数器 程序计数器是线程私有的&#xff0c;并且是JVM中唯一不会溢出的区域&#xff0c;用来保存线程切换时的执行行数 程序计数器&#xff…

算法笔记(三)—— 桶排序及排序总结

堆 逻辑上是一棵完全二叉树&#xff08;依次遍满或者全满&#xff09;。 数组可以转为完全二叉树&#xff0c;完全二叉树某结点左孩子(2*i1)&#xff0c;右孩子(i*22)&#xff0c;父结点((i-1/)2)&#xff0c;根节点的父还是自己。 如何将数组转化为堆&#xff08;大根堆&…

Web自动化测试——selenium篇(一)

文章目录一、环境准备二、Web 自动化测试 Demo三、元素定位常用方法四、元素定位失败可能原因五、测试对象操作六、等待操作七、信息打印在学习 Web 自动化测试的过程中&#xff0c;selenium 是其中的常用工具。除了其开源免费&#xff0c;包含丰富的 API 以外&#xff0c;它还…

基于“PLUS模型+“生态系统服务多情景模拟预测

工业革命以来&#xff0c;社会生产力迅速提高&#xff0c;人类活动频繁&#xff0c;此外人口与日俱增对土地的需求与改造更加强烈&#xff0c;人-地关系日益紧张。此外&#xff0c;土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

windows安装proget实现nuget私有包部署

下载proget 官网 下载地址 免费下载 安装proget 下载完成之后双击安装 选择ProGet 默认选择即可 也可以指定数据库&#xff0c;SQL Server数据库 Server服务器名;Database数据库名;User Id用户名;Password密码 Serverlocalhost;DatabaseProGet2;User Idsa;Passwordxxxx…

浅谈一下前端工作中全流程多层次的四款测试工具

在应届生找工作的时候&#xff0c;我们经常会见到一条招聘要求&#xff1a;要求实习经历。或者 有实习经历者优先。 为什么大部分公司在招聘时&#xff0c;都要求你必须有实习经历&#xff1f; 商业项目与个人项目不同&#xff0c;一段实习经历&#xff0c;能够熟悉公司中成熟…