vue el-table字段点击出现el-input输入框,失焦保存

news/2024/7/24 12:39:23 标签: vue.js, javascript, 前端

一、效果展示

  • 当没有数据初始化展示如下:

  • 有数据展示数据,点击出现输入框, 失焦保存修改

二、代码实现

javascript"><!-- @cell-click="cellClick" 当前单击的单元格 -->
<el-table
    ref="table"
    size="mini"
    height="100%"
    :data="tableData"
    @cell-click="cellClick"
 >
 <el-table-column width="100" label="排序" show-overflow-tooltip>
  <template slot-scope="scope">
    <span
      v-if="
        scope.row.index === dbClickIndex &&
        dbClickLabel === '排序'
      "
    >
      <el-input
        ref="sortNumRef"
        v-model="sortNum"
        placeholder="请输入"
        @blur="inputBlur(scope.row)"
        :pattern="numberPattern"
      />
    </span>
    <div v-else>
      <div class="flex_between cursor_pointer">
        <span
          :style="{ color: !scope.row.sortNum ? '#bbb' : '' }"
          >{{ scope.row.sortNum || '请输入' }}</span
        >
        <i class="el-icon-edit" style="color: #1989fe"></i>
      </div>
    </div> 
  </template>
 </el-table-column>
</el-table>

 data() {
    return {
      sortNum: null,
      dbClickIndex: null, // 点击的单元格
      dbClickLabel: '', // 当前点击的列名
      numberPattern: '[1-9]\\d*', // 正则表达式,限制只能输入正整数
    }
 }

methods:{
  //  row 当前行 column 当前列
    cellClick(row, column, cell, event) {
      if (column.label === '排序') {
        this.dbClickIndex = row.index
        this.dbClickLabel = column.label
        this.sortNum = row.sortNum
        //聚焦input
        this.$nextTick(() => {
          this.$refs.sortNumRef.focus()
        })
      }
    },
    // 失去焦点初始化
    inputBlur(row, event, column) {
      this.editThemeIndex(row)
      this.dbClickIndex = null
      this.dbClickLabel = ''
      this.sortNum = null
    },
    // 编辑主题指标列表-排序字段
    editThemeIndex(row) {
      if (this.sortNum === row.sortNum) return
      const params = {
        sortNum: Number(this.sortNum) || '',
        id: row.id
      }
      //接口请求
      xxxApi(params).then((res) => {
        if (res.code === 200) {
          this.$message.success('修改成功')
          this.refreshClick()
        }
      })
    },
    // 刷新
    refreshClick(val) {
      this.pages.pageIndex = 1
      this.initTable()
    }
  }


http://www.niftyadmin.cn/n/5197137.html

相关文章

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第六章 样式格式化

系列文章目录&#xff08;点击查看&#xff09; 文章目录 系列文章目录&#xff08;点击查看&#xff09;前言一、安装二、使用三、安装公共样式四、入口文件配置五、测试总结 前言 本篇涉及安装 sass&#xff0c;并且配置项目 sass 的初始化样式。 一、安装 根据前面的项目配…

预约按摩小程序功能及使用指南;

小程序预约按摩功能及使用指南&#xff1a; 1. 注册登录&#xff1a;用户可选择通过账号密码或微信一键登录&#xff0c;便捷注册&#xff0c;轻松管理预约服务。 2. 查找店铺&#xff1a;展示附近的按摩店铺信息&#xff0c;用户可根据需求选择合适的店铺进行预约。 3. 选择服…

JavaScript 运行机制

文章目录 JavaScript 运行机制目标知识要点一、进程与线程1.1 概念1.2 区别1.3 多进程与多线程1.4 JS 为什么是单线程1.5 浏览器1.5.1 浏览器包含哪些进程1.5.2 为什么浏览器要多进程1.5.3 渲染进程1.5.3.1 GUI 渲染线程1.5.3.2 JS 引擎线程1.5.3.3 事件触发线程1.5.3.4 定时触…

Java GUI实现桌球小游戏

桌球游戏是一种室内运动&#xff0c;通常在一个正式的桌球台上进行。这种游戏也被称为台球或母球。桌球游戏的目标是使用一个击球杆将彩球击入桌面四个角落的袋子中&#xff0c;得分最高的一方获胜。桌球游戏需要一定的技巧和策略&#xff0c;因此是一项受欢迎的竞技运动和休闲…

(六)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (文档分割 Splitting)

在上一章中&#xff0c;我们刚刚讨论了如何将文档加载到标准格式中&#xff0c;现在我们要谈论如何将它们分割成较小的块。这听起来可能很简单&#xff0c;但其中有很多微妙之处会对后续工作产生重要影响。 文章目录 1、为什么要做文档分割&#xff1f;2、文档分割方式3、基于…

网络工程师-HCIA网课视频学习

这里是速成的&#xff0c;只积累下&#xff0c;自己未曾学习到的东西。通过书本补充知识点。 视频&#xff1a;hcia17-链路聚合_哔哩哔哩_bilibili hcia16-路由高级特性&#xff1a; hcia17-链路聚合&#xff1a; 由于如果根据视频来学习的话&#xff0c;感觉视频的总结并不…

js-WebApi笔记之BOM

目录 window对象 定时器-延迟函数 location对象 navigator对象 histroy对象 本地存储 localStorage sessionStorage localStorage 存储复杂数据类型 window对象 BOM (Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScr…

110.firefly-overlayroot

折腾rk3399的开发板的时候&#xff0c;突然发现overlayroot这个词汇。 我移植一下linux5.10的内核到firefly3399开发板&#xff0c;结果启动之后文件系统提示只读&#xff01;&#xff01;&#xff01; 这就让我很莫名。后来看到mount文件系统的情况&#xff0c;感觉也是不可…