@AndreySergienko

Как связать ячейки таблицы между собой и выровнять высоту строки по наибольшей ячейке?

Вопрос в том, как применять высоту ячеек в строке по самой большой ячейке?
Может есть решение через css?

Исходя из массива данных с бэка я формирую динамически таблицу.
Создаю колонки. в зависимости от заданного заранее количества и к ним привязываю ключи объекта.
Каждая строка это объект. Ячейка есть св-во объекта.

Ячейка шапки имеет класс table__cell table__cell--head
Ячейка тела включает обёртку в виде table__body и вложенный div с классами table__cell table__cell--body
625c0a1d571b4672793368.png
625c0b7ad616c394219316.png

Vue 3 (из примера убрал импорты и определение компонентов)
Главный компонент:
<template>
  <div class="table">
    <TheTableTouchBar
      v-if="selectedItems.length"
      :touch-bar-list="touchBarList"
      :selected-items="selectedItems"
    />

    <TheTableCheckbox
      :is-checkbox="isCheckbox"
      :cells="cells"
      :selected-items="selectedItems"
      @selected="handlerSelectedItem"
      @selectedAll="handlerSelectedAllItems"
    />

      <div
        class="table__column"
        v-for="column in columns"
        :key="column.value"
      >

        <TheTableHead
          :column="column"
        />
        <TheTableBody
          :keyValue="column.value"
          :cells="cells"
        />

      </div>

  </div>
</template>


<script setup>
const props = defineProps({
  // Setting Content
  columns: {
    type: Array,
    required: true
  },
  cells: {
    type: Array,
    required: true
  },
  touchBarList: {
    type: Array,
    required: false
  },
  isCheckbox: {
    type: Boolean,
    required: false,
    default: true
  },
  isActionOnClickCell: {
    type: Boolean,
    required: false
  }
})

// Let
const selectedItems = ref([])

// Function
const handlerSelectedItem = (cellId) => {
  if (selectedItems.value.includes(cellId)) {
    selectedItems.value = selectedItems.value.filter((id) => id !== cellId)
  } else {
    selectedItems.value.push(cellId)
  }
}
const handlerSelectedAllItems = () => {
  if (selectedItems.value.length !== props.cells.length) {
    props.cells.map((cell) => {
      selectedItems.value.push(cell.id)
    })
  } else {
    selectedItems.value.length = 0
  }
}
</script>


Компонент шапки:
<template>
  <div class="table__cell table__cell--head">
    {{ column.name }}
    <VIcons v-if="column.filter" />
  </div>
</template>

<script setup>
const props = defineProps({
  column: {
    type: Object,
    required: true
  }
})
</script>


Компонент содержимого:
<template>
  <div
    class="table__body"
    v-for="(cell, index) in cells"
    :key="cell[keyValue]"
  >
    <div :class="['table__cell table__cell--body',
           index % 2 ? 'table__cell--body-gray' : ''
           ]">
      {{ cell[keyValue] }}
    </div>
  </div>
</template>

<script setup>
const props = defineProps({
  cells: {
    type: Array,
    required: true
  },
  keyValue: {
    type: String,
    required: true
  }
})
</script>
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SummerWeb Ярославль
от 120 000 до 180 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
16 июн. 2024, в 13:45
15000 руб./за проект
16 июн. 2024, в 13:36
10000 руб./за проект
16 июн. 2024, в 12:59
6000 руб./за проект