Проблема здесь в том, что v-for
если повторять каждый элемент внутри строки, включая саму строку. Я вижу, что вам нужно показать данные категорий в двух разных местах: в выпадающем списке и в квадратах в конце, но нет необходимости в l oop и генерировать все остальные элементы между ними.
Есть пара вещей, которые вы можете сделать здесь, создать еще один компонент для нижних элементов (те, которые имеют тень от фона) или создать два отдельных цикла, перемещая v-for="cat in catList"
, что потребует этих трех изменений
<!--remove the v-for="cat in catList" because this breaks everything-->
<div class="row bg-light p-5 mt-3">
<!--add one loop here for the dropdown elements-->
<a v-for="cat in catList" v-on:click="displayCategory(cat.id)" class="dropdown-item" href="#">{{ cat.name }}</a>
<!--add the second loop here-->
<div v-for="cat in catList" class="col-sm-12 col-md-3 col-lg-3 col-offset-top shadow-lg darkblue position-relative mt-5 mb-5 p-5">
Я обновил скрипку с изменениями здесь https://jsfiddle.net/zgranda/y9d5fk67/2/
При этом элементы не должны дублироваться, но все еще нужны некоторые CSS исправления для тени
РЕДАКТИРОВАТЬ : увидел ваш комментарий и отредактировал скрипку, теперь он должен l oop оба деления, так как я не знаю, как это должно выглядеть, поэтому вам нужно настроить CSS немного https://jsfiddle.net/zgranda/2w39pdac/3/