dev类似于excel的数据编辑

其实这个不是我最后的结果,只是中间demo,因为我的场景数据量很大,2w左右,有数据合并,我更倾向于el-table是实现,但不想el-input一直显示,想用if-else 去做隐藏,但是用type=textarea发现高度适配有点问题,其中做了两种实验:

(1)失去焦点和获取焦点获取容器的高度再赋值给 textarea

(2)textarea点位设置 position: absolute设置显示和隐藏样式,但是同样发现需要很多歌el-input做显示隐藏 ,但是我不想这么处理。

(3)用dev去实现el-table,用flex 或grid 布局去实现

以下为dev用flex去实现的方法

复制代码
<template>
  <div class="page">
    <div class="table table-input-box">
      <div
        style="flex: 1"
        v-for="(item, index) in tableData"
        :key="index"
        class="textarea-item"
      >
        <div class="textarea-row">
          <div
            style="flex: 1"
            @click.prevent="inputBlurHandler($event, item)"
            class="column-item item1"
          >
            <el-input
              class="item__input"
              v-model="tableData[index].date"
              type="textarea"
              resize="none"
              placeholder="请输入内容"
              autosize
            ></el-input>
          </div>
          <div
            style="flex: 1"
            @click.prevent="inputBlurHandler($event, item)"
            class="column-item item2"
          >
            <el-input
              class="item__input"
              v-model="tableData[index].name"
              type="textarea"
              resize="none"
              placeholder="请输入内容"
              autosize
            ></el-input>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "Batch",
  data() {
    return {
      // 下拉选项
      showedit: false,
      // 表格数据
      tableData: [],
      // 需要编辑的属性
      editProp: ["date", "name"],

      columns: [
        { label: "流程顺序", prop: "date", width: 100, align: "center" },
        { label: "流程名称", prop: "name", width: null },
      ],
      current_Y_X: null,
    };
  },
  computed: {
    foodLabel() {
      return (val) => {
        return this.options.find((o) => o.value === val).label;
      };
    },
  },
  mounted() {
    this.tableData = [
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "-02",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "-02",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "2016-05-04",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "2016-05-01",
        name: "王小虎",
        food: "选项5",
      },
      {
        date: "2016-05-03",
        name: "王小虎",
        food: "选项5",
      },
    ];
  },
  methods: {
    inputBlurHandler(event, data) {
      const span = event.target;
      if (span.className.includes("column-item")) {
        span.children[0].children[0].focus();
      }
    },
  },
};
</script>

<style lang="scss">
.textarea-item {
  border-bottom: #f1f1f1 1px solid;

  .textarea-row {
    display: flex;
    justify-content: start;
    flex-wrap: nowrap;
    .column-item {
      &:first-child {
        border-right: #f1f1f1 1px solid;
      }
      .item__input {
        padding: 5px;
        textarea {
          background-color: rebeccapurple;
          width: 100%;
          border: none; /* 去除边框 */
          background-color: transparent; /* 透明背景 */
          padding: 0 !important;
          outline: none; /* 去除聚焦时的轮廓线 */
          margin: 0; /* 去除外边距 */
          font-size: 12px !important; /* 设置字体大小,与 p 标签一致 */
          color: inherit; /* 继承父元素的字体颜色 */
          line-height: 1;
          // white-space: pre-wrap;
          text-align: start;
          font-family: Avenir, Helvetica, Arial, sans-serif !important;
          overflow: hidden;
          // word-break: break-all !important;

          // font-family: youjian !important;
        }
      }
    }
  }
}
.table-input-box {
  overflow-y: auto;
}
</style>
相关推荐
前端小D13 分钟前
JS核心底层
前端·javascript
Dovis(誓平步青云)29 分钟前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
ruanno_top29 分钟前
能点,但 Tab 不到:两个组件把「可操作」做了一半
vue.js
爱吃烧烤的技术渣31 分钟前
别再手写 CRUD 了:我把 Element Plus 的工作量压缩成一份列 schema
前端·vue.js
codeejun2 小时前
每日一Go·MySQL-11、覆盖索引 & 回表原理
javascript·数据库·mysql
用户298698530142 小时前
React 前端将 Excel 工作表导出为图片的技术实践
javascript·react.js·excel
徐小夕3 小时前
万字长文!DeepSeek Super-agent × 企业知识库架构深度拆解与落地实践
前端·vue.js·github
麦麦麦当劳大王13 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
只睡四小时14 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
excel15 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端