ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

el-table 单元格编辑

2021-07-21 22:58:04  阅读:205  来源: 互联网

标签:el ++ 单元格 rowCount colCount table ev col row


<template>
  <div class="app-container">
    <el-table
      v-loading="listLoading"
      :data="list"
      element-loading-text="Loading"
      border
      fit
      highlight-current-row
    >
      <el-table-column align="center" label="ID" width="95">
     
         <template slot-scope="scope">
          <el-input v-model="scope.row.id"
                    v-bind:ref="'r'+ scope.$index + 'c' + 1"
                    @input='input(scope.row, scope.row.id, range.value)'
                    @keyup.native="keyup($event, scope.$index, 1)"
                    @change='save(scope.row)'></el-input>
      
        </template>
      </el-table-column>
      <el-table-column align="center" label="author" width="95">
     
         <template slot-scope="scope">
          <el-input v-model="scope.row.author"
                    v-bind:ref="'r'+ scope.$index + 'c' + 2"
                    @input='input(scope.row, scope.row.author, range.value)'
                    @keyup.native="keyup($event, scope.$index, 2)"
                    @change='save(scope.row)'></el-input>
      
        </template>
      </el-table-column>
    
     
    </el-table>
  </div>
</template>

<script>
import { getList } from '@/api/table'

export default {
  filters: {
    statusFilter(status) {
      const statusMap = {
        published: 'success',
        draft: 'gray',
        deleted: 'danger'
      }
      return statusMap[status]
    }
  },
  data() {
    return {
      list: null,
      listLoading: true
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      this.listLoading = true
      getList().then(response => {
        this.list = response.data.items
        this.listLoading = false
      })
    },
     keyup(ev, row, col) {
        this.keyupTo(ev, row, col, this.list.length,2)
      },
      keyupTo(ev, row, col, rowCount, colCount) {
        // 替代 switch 的优雅写法
        const actions = {
          'ArrowUp': () => {
            row--
            if (row < 0) row = rowCount - 1
          },
          'ArrowDown': () => {
            row++
            if (row >= rowCount) row = 0;
          },
          'ArrowLeft': () => {
            col--
            if (col < 1) col = colCount;
          },
          'ArrowRight': () => {
            col++
            if (col > colCount) col = 1
          },
          'Enter': () => {
            col++
            if (col > colCount) {
              // 右下角的话保持不动
              if (row === (rowCount - 1)) {
                col = colCount
                this.list.push({})
              } else {
                col = 1
                row++
              }
            }
          },
        }
        let action = actions[ev.key];
        if (action !== undefined) {
          action.call()
          // 用 nextTick 避免 input 还没渲染出来
          this.$nextTick(() => {
            this.$refs['r' + row + 'c' + col].focus()
          })
        }
      },
  }
}
</script>

标签:el,++,单元格,rowCount,colCount,table,ev,col,row
来源: https://blog.csdn.net/az44yao/article/details/118978473

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有