首页 > 其他分享 >umy-ui表格单行编辑(解决单行编辑滑动后失效问题)

umy-ui表格单行编辑(解决单行编辑滑动后失效问题)

时间:2023-04-20 17:03:59浏览次数:35  
标签:return val 编辑 default umy 单行 window item row

TableRowEdit.vue

<template>
  <div>
      <ux-grid
        :data="tableData"
        tooltip-effect="dark"
        show-overflow="tooltip"
        :cell-style="{'text-align':'center'}" 
        :row-class-name="tableRowClassName"
        :max-height="tableConfig.height"
        style="width: 100%">
        <ux-table-column
          v-if="isShow.isSelection"
          type="checkbox"
          width="40">
        </ux-table-column>
        <ux-table-column 
          type="index" 
          label="序号" 
          style="min-width: 80px;max-width:120px;" 
          width="60"
          v-if="isShow.isIndex">
        </ux-table-column>

        <ux-table-column
          v-for="(e, i) in columns"
          :key="i"
          :resizable="true"
          header-align="center"
          :field="e.fieldCode"
          :title="e.fieldName"
          min-width="140"
          >
          <template slot="header" slot-scope="scope">
            <div>{{ e.fieldName }}<i v-if="e.isSelect||e.isInput" class="el-icon-edit"></i></div>
          </template>
          <!-- 选择器 -->
          <template v-slot="scope" v-if="e.isSelect">
            <div v-if="scope.row.index==tableCli">
              <el-select 
                v-model="scope.row[e.fieldCode]" 
              >
                <el-option 
                  v-for="item in e.SelectList" 
                  :key="item.value" 
                  :label="item.label" 
                  :value="item.value"
                ></el-option>
              </el-select>
            </div>
            <span v-else>{{ getType(e.SelectList,scope.row[e.fieldCode]) }}</span>
          </template>
          <!-- 输入框 -->
          <template v-slot="scope" v-else-if="e.isInput">
            <div v-if="scope.row.index==tableCli">
              <el-input v-model="scope.row[e.fieldCode]"></el-input>
            </div>
            <span v-else>{{scope.row[e.fieldCode]}}</span>
          </template>

          <!-- 禁止编辑 -->
          <template v-slot="scope" v-else>
            <span>{{scope.row[e.fieldCode]}}</span>
          </template>
        </ux-table-column>

        <ux-table-column
          fixed="right"
          title="操作"
          v-if="isShow.isShowButton"
          header-align="center"
          min-width="150">
          <template slot-scope="scope">
              <el-button 
                v-if="isShow.isShowButton&&scope.row.index!==tableCli"
                type="text" 
                @click="editButton(scope.row,scope)"
                :icon="isShow.iconEdit?isShow.iconEdit:'el-icon-edit'" 
                size="small"
              >
                {{ isShow.editTxt }}
              </el-button>
            <el-button type="text" v-if="scope.row.index==tableCli" @click="saveButton(scope.row,scope)" size="small">保存</el-button>
            <el-button type="text" v-if="scope.row.index==tableCli" size="small" @click="cancelEdit">取消</el-button>
          </template>
        </ux-table-column>
      </ux-grid>

      <el-pagination
          v-if="setPage.isPagination"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="setPage.currentPage"
          :page-sizes="[100, 200, 300, 400]"
          :page-size="setPage.pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="setPage.total">
      </el-pagination>
    </div>
  </template>
  
  <script>
    export default {
      data() {
        return {
          tableCli:-1,
          // 自适应高度
          tableConfig:{
              isLoading:true,
              height:window.innerHeight-190
          },
        }
      },
      props:{
        // table 表格显示高度
        tableHeight:{
            type:Number,
            default:() => {
                return 190
            }
        },
        // 表头
        columns:{
            type:Array,
            default:() => {
                return []
            }
        },
        // 表格
        tableData:{
            type:Array,
            default:() => {
                return []
            }
        },
        // 页码的设置
        setPage:{
            type:Object,
            default:() => {
                return {
                    isPagination:false,//是否显示
                    currentPage:1,//当前页码
                    pageSize:100, // 当前页的数量
                    total:0, // 总量
                }
            }
        },
        // 是否显示
        isShow:{
            type:Object,
            default:() => {
                return {
                    
                }
            }
        },
      },
      created(){
        // 初始化开始监听自适应高度数据
        window.addEventListener("resize",this.getHeigth)
      },
      destroyed(){
        // 销毁高度自适应监听
        window.removeEventListener("resize",this.getHeigth)
      },
      watch:{
        tableHeight: {
            handler(newVal, oldVal) {
                this.tableConfig.height = window.innerHeight - newVal
            },
            deep: true,
            immediate: true
        }
      },
      methods:{
        // 此方法用于区分是否点击的是当前行
        tableRowClassName({row,rowIndex}){
          row.index=rowIndex
        },
        //  点击编辑事件
        editButton(row,index){
          this.tableCli=index.$rowIndex
        },
        // 行编辑保存事件
        saveButton(row,index){
          this.$emit("saveButton",row,index)
          
        },
        //  取消编辑
        cancelEdit(){
          this.tableCli = -1
        },
        //  转换格式
          getType(data,val) {
            const item = data.filter(item => item['value'] === val)[0]
            return item ? item.label : ''
          },
        // 自适应高度
        getHeigth(){
            // this.tableConfig.height = window.innerHeight - 170
            this.tableConfig.height = window.innerHeight - this.tableHeight
        },
        // 每页的数量
        handleSizeChange(val) {
            this.$emit("handleSizeChange",val)
        },
        // 当前页码
        handleCurrentChange(val) {
            this.$emit("handleCurrentChange",val)
        }
      }
    }
  </script>

标签:return,val,编辑,default,umy,单行,window,item,row
From: https://www.cnblogs.com/axingya/p/17337417.html

相关文章

  • 29 编辑手记 | 我被老乔洗脑了
    你好,我是王一鹏,《乔新亮的CTO成长复盘》的专栏编辑,也是一名被老乔洗了脑的编辑。为啥这么说呢?我先给你举几个例子吧。两个月前,我出差至上海,参与落地一场线下会议。飞机还未起飞,我就同几个多年不见的大学同学约好了晚饭,誓要尝尝阿拉大上海的本帮菜。起初,一切都很顺利。飞机如......
  • 在线编辑器 实现ctrl+v粘贴图片并上传、word粘贴带图片
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片。需要用户手动一张张上传Word图片。如果只有一张图片还能够接......
  • React+hook+ts+ant design封装一个具有编辑和新增功能的页面
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷微信公众号前端小歌谣需求分析在前端项目中最常......
  • PDFsam basic免费开源pdf编辑器
    PDFtk、PDFsam可以根据PDF中的信息分割合并PDF,免费版本就可以做到!由于PDFtk只提供了安装包,PDFsam有便携免安装的版本,basic免费,enhanced版本收费。https://github.com/torakiki/pdfsam/releasesPDFsam官网:(https://pdfsam.org/)基础版的下载页面:(https://pdfsam.org/download......
  • Typora 1.5.12 (windows/MacOs版) 简单高效且实用的Markdown编辑器
    简介Typora的设计理念非常人性化,与传统编辑器相比,更注重用户的视觉效果和阅读体验。它的编辑界面非常简洁,用户可以就近编辑,随时查看效果,避免频繁地转换预览模式,提高了工作效率和灵活性。此外,Typora软件还提供了诸如内置思维导图、目录和常用快捷键等便捷功能,可以让用户在编辑的......
  • elementUI Table 表格编辑数据后停留当前位置
    后台管理系统在实际开发中,表格如果在一定高度出现滚动条。这时如果对表格行数据进行编辑或者拖拽排序操作,数据刷新后滚动条会默认回到顶部,这样体验会不太好。如果想保留在当前位置可以这样操作:1.el-table标签添加ref属性<el-table:data="tableData"v-loading="tableLoading......
  • 如何将之前编辑的文章HTML源代码导入到TinyMCE编辑器中
    如果你想用TinyMCE来修改你之前写的文章那么你需要将源代码放到TinyMCE中,如果服务器把HTML源码发给我们可是我们应该怎样调用?方法为使用 tinymce.activeEditor.setContent()这个函数具体用法为:tinymce.activeEditor.setContent()//设置TinyMCE编辑器里的内容源代码tin......
  • 文本编辑器 实现ctrl+v粘贴图片并上传、word粘贴带图片
    ​ 当前功能基于PHP,其它语言流程大抵相同。大概流程:1.将docx文件上传到服务器中2.使用PHPoffice/PHPword实现将word转换为HTML3.将HTML代码返回并赋值到编辑器中 1编辑器配置修改1.1新增上传wordjson配置在ueditor\php\config.json中新增如下配置:     /*......
  • Linux-文本编辑vim
    vim使用流程vim默认机器是不安装的,需要手动安装这个工具命令yuminstallvim-y #通过yum软件管理工具进行安装当vim打开不存在的文件的时候,默认会创建文件语法1.vim文件名2.输入字母i,进入编辑模式,代表insert输入字母o,在光标下一行开始编辑3.写完代码......
  • 直播网站程序源码,给组件按钮、文本编辑框等设置圆形边框、颜色
    直播网站程序源码,给组件按钮、文本编辑框等设置圆形边框、颜色代码如下:1.添加drawable资源文件 <?xmlversion="1.0"encoding="utf-8"?><shape  xmlns:android="http://schemas.android.com/apk/res/android"  android:shape="rectangle">  <!--......