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>
相关推荐
程序员清洒36 分钟前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6661 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
会飞的战斗鸡2 小时前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling2 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
qq_177767372 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767373 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区3 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
烬头88213 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos
Amumu121383 小时前
Vuex介绍
前端·javascript·vue.js
2601_949809593 小时前
flutter_for_openharmony家庭相册app实战+相册详情实现
javascript·flutter·ajax