dev类似于excel的数据编辑

[复制链接]
发表于 2025-12-2 13:38:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 着实这个不是我末了的效果,只是中心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去实现的方法
  1. <template>
  2.   <div class="page">
  3.     <div class="table table-input-box">
  4.       <div
  5.         style="flex: 1"
  6.         v-for="(item, index) in tableData"
  7.         :key="index"
  8.         class="textarea-item"
  9.       >
  10.         <div class="textarea-row">
  11.           <div
  12.             style="flex: 1"
  13.             @click.prevent="inputBlurHandler($event, item)"
  14.             class="column-item item1"
  15.           >
  16.             <el-input
  17.               class="item__input"
  18.               v-model="tableData[index].date"
  19.               type="textarea"
  20.               resize="none"
  21.               placeholder="请输入内容"
  22.               autosize
  23.             ></el-input>
  24.           </div>
  25.           <div
  26.             style="flex: 1"
  27.             @click.prevent="inputBlurHandler($event, item)"
  28.             class="column-item item2"
  29.           >
  30.             <el-input
  31.               class="item__input"
  32.               v-model="tableData[index].name"
  33.               type="textarea"
  34.               resize="none"
  35.               placeholder="请输入内容"
  36.               autosize
  37.             ></el-input>
  38.           </div>
  39.         </div>
  40.       </div>
  41.     </div>
  42.   </div>
  43. </template>
  44. <script>
  45. export default {
  46.   name: "Batch",
  47.   data() {
  48.     return {
  49.       // 下拉选项
  50.       showedit: false,
  51.       // 表格数据
  52.       tableData: [],
  53.       // 需要编辑的属性
  54.       editProp: ["date", "name"],
  55.       columns: [
  56.         { label: "流程顺序", prop: "date", width: 100, align: "center" },
  57.         { label: "流程名称", prop: "name", width: null },
  58.       ],
  59.       current_Y_X: null,
  60.     };
  61.   },
  62.   computed: {
  63.     foodLabel() {
  64.       return (val) => {
  65.         return this.options.find((o) => o.value === val).label;
  66.       };
  67.     },
  68.   },
  69.   mounted() {
  70.     this.tableData = [
  71.       {
  72.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  73.         name: "王小虎",
  74.         food: "选项5",
  75.       },
  76.       {
  77.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  78.         name: "王小虎",
  79.         food: "选项5",
  80.       },
  81.       {
  82.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  83.         name: "王小虎",
  84.         food: "选项5",
  85.       },
  86.       {
  87.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  88.         name: "王小虎",
  89.         food: "选项5",
  90.       },
  91.       {
  92.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  93.         name: "王小虎",
  94.         food: "选项5",
  95.       },
  96.       {
  97.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  98.         name: "王小虎",
  99.         food: "选项5",
  100.       },
  101.       {
  102.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  103.         name: "王小虎",
  104.         food: "选项5",
  105.       },
  106.       {
  107.         date: "你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好.",
  108.         name: "王小虎",
  109.         food: "选项5",
  110.       },
  111.       {
  112.         date: "-02",
  113.         name: "王小虎",
  114.         food: "选项5",
  115.       },
  116.       {
  117.         date: "-02",
  118.         name: "王小虎",
  119.         food: "选项5",
  120.       },
  121.       {
  122.         date: "2016-05-04",
  123.         name: "王小虎",
  124.         food: "选项5",
  125.       },
  126.       {
  127.         date: "2016-05-01",
  128.         name: "王小虎",
  129.         food: "选项5",
  130.       },
  131.       {
  132.         date: "2016-05-03",
  133.         name: "王小虎",
  134.         food: "选项5",
  135.       },
  136.     ];
  137.   },
  138.   methods: {
  139.     inputBlurHandler(event, data) {
  140.       const span = event.target;
  141.       if (span.className.includes("column-item")) {
  142.         span.children[0].children[0].focus();
  143.       }
  144.     },
  145.   },
  146. };
  147. </script>
  148. <style lang="scss">
  149. .textarea-item {
  150.   border-bottom: #f1f1f1 1px solid;
  151.   .textarea-row {
  152.     display: flex;
  153.     justify-content: start;
  154.     flex-wrap: nowrap;
  155.     .column-item {
  156.       &:first-child {
  157.         border-right: #f1f1f1 1px solid;
  158.       }
  159.       .item__input {
  160.         padding: 5px;
  161.         textarea {
  162.           background-color: rebeccapurple;
  163.           width: 100%;
  164.           border: none; /* 去除边框 */
  165.           background-color: transparent; /* 透明背景 */
  166.           padding: 0 !important;
  167.           outline: none; /* 去除聚焦时的轮廓线 */
  168.           margin: 0; /* 去除外边距 */
  169.           font-size: 12px !important; /* 设置字体大小,与 p 标签一致 */
  170.           color: inherit; /* 继承父元素的字体颜色 */
  171.           line-height: 1;
  172.           // white-space: pre-wrap;
  173.           text-align: start;
  174.           font-family: Avenir, Helvetica, Arial, sans-serif !important;
  175.           overflow: hidden;
  176.           // word-break: break-all !important;
  177.           // font-family: youjian !important;
  178.         }
  179.       }
  180.     }
  181.   }
  182. }
  183. .table-input-box {
  184.   overflow-y: auto;
  185. }
  186. </style>
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表