v-col
задать пропc cols="auto"
что скажет колонкам не занимать все свободное пространство на оси, а между колонками вставить элемент v-spacer
который на оборот будет стараться занять все свободное пространство (собственно на этом его все задачи и заканчиваются). Так же могу посоветовать скрыть невидимый input
у v-select
при помощи стилей, он так же дет лишнюю не желательную ширину...
<tr v-for="row in rows">
<td v-for="header in headers">
<slot :name="`cel_${header.key}`" :row="row"> {{ row[header.key] }} </slot>
</td>
</tr>
...
...
<table-component :rows="users" :headers="headers">
<template slot="cel_full_name" slot-scope="props">
<router-link :to="`/user/${props.row.id}`">{{ props.row.full_name }}</router-link>
</template>
</table-component>
...
item-value=""
для v-select
, если точнее то тебе нужно указать в этом пропсе название ключа для значения каждого элемента массива селекта значенее которого вернется в v-model