修复一些前端显示bug

This commit is contained in:
2026-04-29 19:44:25 +08:00
parent 89816f367b
commit 8e46be69ab
5 changed files with 23 additions and 29 deletions
@@ -555,13 +555,12 @@ onMounted(async () => {
<table class="w-full text-left text-sm text-gray-900 dark:text-white"> <table class="w-full text-left text-sm text-gray-900 dark:text-white">
<thead> <thead>
<tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base dark:text-gray-400"> <tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base dark:text-gray-400">
<th class="px-5 py-3 font-medium">{{ t('warehouse.item_name') }}</th> <th class="px-5 py-3 font-medium w-24">{{ t('warehouse.item_name') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.serial_number') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.serial_number') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.remark') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.remark') }}</th>
<th class="px-5 py-3 font-medium w-20 text-center">{{ t('warehouse.quantity') }}</th> <th class="px-5 py-3 font-medium w-20 text-center">{{ t('warehouse.quantity') }}</th>
<th class="px-5 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th> <th class="px-5 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th>
<th class="px-5 py-3 font-medium">{{ t('customer.related_customers') }}</th> <th class="px-5 py-3 font-medium w-48">{{ t('customer.related_customers') }}</th>
<th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.created_at') }}</th>
<th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.updated_at') }}</th> <th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.updated_at') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.created_by') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.created_by') }}</th>
<th class="px-5 py-3 font-medium w-20 text-right">{{ t('warehouse.actions') }}</th> <th class="px-5 py-3 font-medium w-20 text-right">{{ t('warehouse.actions') }}</th>
@@ -569,7 +568,7 @@ onMounted(async () => {
</thead> </thead>
<tbody> <tbody>
<tr v-if="loadingItems"> <tr v-if="loadingItems">
<td colspan="10" class="px-5 py-8 text-center"> <td colspan="9" class="px-5 py-8 text-center">
<svg class="mx-auto h-5 w-5 animate-spin text-gray-400" viewBox="0 0 24 24" fill="none"> <svg class="mx-auto h-5 w-5 animate-spin text-gray-400" viewBox="0 0 24 24" fill="none">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" /> <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" />
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" /> <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" />
@@ -577,7 +576,7 @@ onMounted(async () => {
</td> </td>
</tr> </tr>
<tr v-else-if="items.length === 0"> <tr v-else-if="items.length === 0">
<td colspan="10" class="px-5 py-8 text-center text-gray-400 dark:text-gray-500"> <td colspan="9" class="px-5 py-8 text-center text-gray-400 dark:text-gray-500">
{{ t('warehouse.no_items') }} {{ t('warehouse.no_items') }}
</td> </td>
</tr> </tr>
@@ -591,7 +590,7 @@ onMounted(async () => {
<td class="px-5 py-3"> <td class="px-5 py-3">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<IconPackage class="text-green-500 flex-shrink-0" :size="16" /> <IconPackage class="text-green-500 flex-shrink-0" :size="16" />
<span class="font-medium max-w-xs truncate">{{ item.Name }}</span> <span class="font-medium max-w-[5rem] truncate">{{ item.Name }}</span>
</div> </div>
</td> </td>
<td class="px-5 py-3 text-xs text-gray-500 dark:text-gray-400 max-w-[140px] truncate">{{ item.SerialNumber || '—' }}</td> <td class="px-5 py-3 text-xs text-gray-500 dark:text-gray-400 max-w-[140px] truncate">{{ item.SerialNumber || '—' }}</td>
@@ -610,7 +609,7 @@ onMounted(async () => {
v-for="customer in item.Customers.slice(0, 3)" v-for="customer in item.Customers.slice(0, 3)"
:key="customer.id" :key="customer.id"
:to="`/customer/detail/${customer.id}`" :to="`/customer/detail/${customer.id}`"
class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60" class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60 whitespace-nowrap"
@click.stop @click.stop
> >
<IconUser :size="10" /> <IconUser :size="10" />
@@ -620,7 +619,6 @@ onMounted(async () => {
</div> </div>
<span v-else class="text-gray-400"></span> <span v-else class="text-gray-400"></span>
</td> </td>
<td class="px-5 py-3 text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap">{{ fmtTs(item.CreatedAt) }}</td>
<td class="px-5 py-3 text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap">{{ fmtTs(item.UpdatedAt) }}</td> <td class="px-5 py-3 text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap">{{ fmtTs(item.UpdatedAt) }}</td>
<td class="px-5 py-3"> <td class="px-5 py-3">
<div class="flex items-center gap-1.5"> <div class="flex items-center gap-1.5">
@@ -293,20 +293,19 @@ onMounted(() => {
<thead> <thead>
<tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base dark:text-gray-400"> <tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base dark:text-gray-400">
<th class="px-6 py-3 font-medium w-16">ID</th> <th class="px-6 py-3 font-medium w-16">ID</th>
<th class="px-6 py-3 font-medium">{{ t('warehouse.container_name') }}</th> <th class="px-6 py-3 font-medium w-40">{{ t('warehouse.container_name') }}</th>
<th class="px-6 py-3 font-medium">{{ t('warehouse.remark') }}</th> <th class="px-6 py-3 font-medium">{{ t('warehouse.remark') }}</th>
<th class="px-6 py-3 font-medium w-24 text-center">{{ t('warehouse.child_containers') }}</th> <th class="px-6 py-3 font-medium w-24 text-center">{{ t('warehouse.child_containers') }}</th>
<th class="px-6 py-3 font-medium w-24 text-center">{{ t('warehouse.items') }}</th> <th class="px-6 py-3 font-medium w-24 text-center">{{ t('warehouse.items') }}</th>
<th class="px-6 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th> <th class="px-6 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th>
<th class="px-6 py-3 font-medium">{{ t('customer.related_customers') }}</th> <th class="px-6 py-3 font-medium w-48">{{ t('customer.related_customers') }}</th>
<th class="px-6 py-3 font-medium whitespace-nowrap w-44">{{ t('warehouse.created_at') }}</th>
<th class="px-6 py-3 font-medium w-28 text-right">{{ t('warehouse.actions') }}</th> <th class="px-6 py-3 font-medium w-28 text-right">{{ t('warehouse.actions') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<!-- 加载中 --> <!-- 加载中 -->
<tr v-if="loading"> <tr v-if="loading">
<td colspan="9" class="px-6 py-8 text-center text-gray-400"> <td colspan="8" class="px-6 py-8 text-center text-gray-400">
<svg class="mx-auto mb-2 h-5 w-5 animate-spin text-gray-400" viewBox="0 0 24 24" fill="none"> <svg class="mx-auto mb-2 h-5 w-5 animate-spin text-gray-400" viewBox="0 0 24 24" fill="none">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" /> <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" />
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" /> <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" />
@@ -316,7 +315,7 @@ onMounted(() => {
</tr> </tr>
<!-- 空状态 --> <!-- 空状态 -->
<tr v-else-if="containers.length === 0"> <tr v-else-if="containers.length === 0">
<td colspan="9" class="px-6 py-8 text-center text-gray-400 dark:text-gray-500"> <td colspan="8" class="px-6 py-8 text-center text-gray-400 dark:text-gray-500">
{{ t('warehouse.no_containers') }} {{ t('warehouse.no_containers') }}
</td> </td>
</tr> </tr>
@@ -332,7 +331,7 @@ onMounted(() => {
<td class="px-6 py-3"> <td class="px-6 py-3">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<IconFolder class="text-blue-500 flex-shrink-0" :size="18" /> <IconFolder class="text-blue-500 flex-shrink-0" :size="18" />
<span class="font-medium text-gray-900 dark:text-white max-w-xs truncate">{{ c.Title }}</span> <span class="font-medium text-gray-900 dark:text-white max-w-[10rem] truncate">{{ c.Title }}</span>
</div> </div>
</td> </td>
<td class="px-6 py-3 text-gray-500 dark:text-gray-400 max-w-xs truncate">{{ c.Remark || '—' }}</td> <td class="px-6 py-3 text-gray-500 dark:text-gray-400 max-w-xs truncate">{{ c.Remark || '—' }}</td>
@@ -366,7 +365,7 @@ onMounted(() => {
v-for="customer in c.Customers.slice(0, 3)" v-for="customer in c.Customers.slice(0, 3)"
:key="customer.id" :key="customer.id"
:to="`/customer/detail/${customer.id}`" :to="`/customer/detail/${customer.id}`"
class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60" class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60 whitespace-nowrap"
@click.stop @click.stop
> >
<IconUser :size="10" /> <IconUser :size="10" />
@@ -376,7 +375,6 @@ onMounted(() => {
</div> </div>
<span v-else class="text-gray-400"></span> <span v-else class="text-gray-400"></span>
</td> </td>
<td class="px-6 py-3 whitespace-nowrap text-gray-500 dark:text-gray-400">{{ formatDate(c.CreatedAt) }}</td>
<td class="px-6 py-3 text-right" @click.stop> <td class="px-6 py-3 text-right" @click.stop>
<div class="flex items-center justify-end gap-1"> <div class="flex items-center justify-end gap-1">
<button <button
@@ -226,7 +226,7 @@ onMounted(fetchItems)
<th class="px-5 py-3 font-medium">{{ t('warehouse.serial_number') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.serial_number') }}</th>
<th class="px-5 py-3 font-medium w-20 text-center">{{ t('warehouse.quantity') }}</th> <th class="px-5 py-3 font-medium w-20 text-center">{{ t('warehouse.quantity') }}</th>
<th class="px-5 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th> <th class="px-5 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th>
<th class="px-5 py-3 font-medium">{{ t('customer.related_customers') }}</th> <th class="px-5 py-3 font-medium w-48">{{ t('customer.related_customers') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.location') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.location') }}</th>
<th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.created_at') }}</th> <th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.created_at') }}</th>
<th class="px-5 py-3 font-medium w-16 text-right">{{ t('warehouse.actions') }}</th> <th class="px-5 py-3 font-medium w-16 text-right">{{ t('warehouse.actions') }}</th>
@@ -255,7 +255,7 @@ onMounted(fetchItems)
v-for="customer in item.Customers.slice(0, 3)" v-for="customer in item.Customers.slice(0, 3)"
:key="customer.id" :key="customer.id"
:to="`/customer/detail/${customer.id}`" :to="`/customer/detail/${customer.id}`"
class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60" class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60 whitespace-nowrap"
@click.stop @click.stop
> >
<IconUser :size="10" /> <IconUser :size="10" />
@@ -534,13 +534,12 @@ onMounted(() => {
<table class="w-full text-left text-sm text-gray-900 dark:text-white"> <table class="w-full text-left text-sm text-gray-900 dark:text-white">
<thead> <thead>
<tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base dark:text-gray-400"> <tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base dark:text-gray-400">
<th class="px-5 py-3 font-medium">{{ t('warehouse.item_name') }}</th> <th class="px-5 py-3 font-medium w-40">{{ t('warehouse.item_name') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.serial_number') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.serial_number') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.remark') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.remark') }}</th>
<th class="px-5 py-3 font-medium w-20 text-center">{{ t('warehouse.quantity') }}</th> <th class="px-5 py-3 font-medium w-20 text-center">{{ t('warehouse.quantity') }}</th>
<th class="px-5 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th> <th class="px-5 py-3 font-medium w-24 text-center">{{ t('work_order.work_order_count') }}</th>
<th class="px-5 py-3 font-medium">{{ t('customer.related_customers') }}</th> <th class="px-5 py-3 font-medium w-48">{{ t('customer.related_customers') }}</th>
<th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.created_at') }}</th>
<th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.updated_at') }}</th> <th class="px-5 py-3 font-medium whitespace-nowrap">{{ t('warehouse.updated_at') }}</th>
<th class="px-5 py-3 font-medium">{{ t('warehouse.created_by') }}</th> <th class="px-5 py-3 font-medium">{{ t('warehouse.created_by') }}</th>
<th class="px-5 py-3 font-medium w-20 text-right">{{ t('warehouse.actions') }}</th> <th class="px-5 py-3 font-medium w-20 text-right">{{ t('warehouse.actions') }}</th>
@@ -548,7 +547,7 @@ onMounted(() => {
</thead> </thead>
<tbody> <tbody>
<tr v-if="itemLoading"> <tr v-if="itemLoading">
<td colspan="10" class="px-6 py-8 text-center text-gray-400"> <td colspan="9" class="px-6 py-8 text-center text-gray-400">
<svg class="mx-auto mb-2 h-5 w-5 animate-spin text-gray-400" viewBox="0 0 24 24" fill="none"> <svg class="mx-auto mb-2 h-5 w-5 animate-spin text-gray-400" viewBox="0 0 24 24" fill="none">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" /> <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4" />
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" /> <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8H4z" />
@@ -557,7 +556,7 @@ onMounted(() => {
</td> </td>
</tr> </tr>
<tr v-else-if="items.length === 0"> <tr v-else-if="items.length === 0">
<td colspan="10" class="px-6 py-8 text-center text-gray-400 dark:text-gray-500"> <td colspan="9" class="px-6 py-8 text-center text-gray-400 dark:text-gray-500">
{{ t('warehouse.no_items') }} {{ t('warehouse.no_items') }}
</td> </td>
</tr> </tr>
@@ -567,7 +566,7 @@ onMounted(() => {
class="cursor-pointer border-b border-gray-100 transition-colors hover:bg-gray-50 dark:border-dk-muted dark:hover:bg-dk-base" class="cursor-pointer border-b border-gray-100 transition-colors hover:bg-gray-50 dark:border-dk-muted dark:hover:bg-dk-base"
@click="goToItemDetail(item)" @click="goToItemDetail(item)"
> >
<td class="px-5 py-3 font-medium max-w-xs truncate">{{ item.Name }}</td> <td class="px-5 py-3 font-medium max-w-[10rem] truncate">{{ item.Name }}</td>
<td class="px-5 py-3 text-xs text-gray-500 dark:text-gray-400 max-w-[140px] truncate">{{ item.SerialNumber || '—' }}</td> <td class="px-5 py-3 text-xs text-gray-500 dark:text-gray-400 max-w-[140px] truncate">{{ item.SerialNumber || '—' }}</td>
<td class="px-5 py-3 text-xs text-gray-500 dark:text-gray-400 max-w-[200px] truncate">{{ item.Remark || '—' }}</td> <td class="px-5 py-3 text-xs text-gray-500 dark:text-gray-400 max-w-[200px] truncate">{{ item.Remark || '—' }}</td>
<td class="px-5 py-3 text-center text-sm">{{ item.Quantity }}</td> <td class="px-5 py-3 text-center text-sm">{{ item.Quantity }}</td>
@@ -584,7 +583,7 @@ onMounted(() => {
v-for="customer in item.Customers.slice(0, 3)" v-for="customer in item.Customers.slice(0, 3)"
:key="customer.id" :key="customer.id"
:to="`/customer/detail/${customer.id}`" :to="`/customer/detail/${customer.id}`"
class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60" class="inline-flex items-center gap-1 rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 hover:bg-blue-200 dark:bg-blue-900/40 dark:text-blue-400 dark:hover:bg-blue-900/60 whitespace-nowrap"
@click.stop @click.stop
> >
<IconUser :size="10" /> <IconUser :size="10" />
@@ -594,7 +593,6 @@ onMounted(() => {
</div> </div>
<span v-else class="text-gray-400"></span> <span v-else class="text-gray-400"></span>
</td> </td>
<td class="px-5 py-3 text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap">{{ formatDate(item.CreatedAt) }}</td>
<td class="px-5 py-3 text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap">{{ formatDate(item.UpdatedAt) }}</td> <td class="px-5 py-3 text-xs text-gray-400 dark:text-gray-500 whitespace-nowrap">{{ formatDate(item.UpdatedAt) }}</td>
<td class="px-5 py-3"> <td class="px-5 py-3">
<div class="flex items-center gap-1.5"> <div class="flex items-center gap-1.5">
@@ -142,7 +142,7 @@ onMounted(fetchOrders)
<thead> <thead>
<tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base"> <tr class="border-b border-gray-200 bg-gray-50 text-gray-500 dark:border-dk-muted dark:bg-dk-base">
<th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 w-16">No.</th> <th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 w-16">No.</th>
<th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400">{{ t('work_order.title') }}</th> <th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 w-48">{{ t('work_order.title') }}</th>
<th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400">描述</th> <th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400">描述</th>
<th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400">关联客户</th> <th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400">关联客户</th>
<th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 whitespace-nowrap w-44">{{ t('work_order.created_at') }}</th> <th class="px-6 py-3 font-medium text-gray-500 dark:text-gray-400 whitespace-nowrap w-44">{{ t('work_order.created_at') }}</th>
@@ -173,7 +173,7 @@ onMounted(fetchOrders)
@click="jumpToOrder(order.ID)" @click="jumpToOrder(order.ID)"
> >
<td class="px-6 py-3 text-gray-500 dark:text-gray-400">{{ order.ID }}</td> <td class="px-6 py-3 text-gray-500 dark:text-gray-400">{{ order.ID }}</td>
<td class="px-6 py-3 font-medium text-gray-900 dark:text-white max-w-xs truncate">{{ order.Title }}</td> <td class="px-6 py-3 font-medium text-gray-900 dark:text-white max-w-[12rem] truncate">{{ order.Title }}</td>
<td class="px-6 py-3 text-gray-500 dark:text-gray-400 max-w-xs truncate">{{ order.Description || '—' }}</td> <td class="px-6 py-3 text-gray-500 dark:text-gray-400 max-w-xs truncate">{{ order.Description || '—' }}</td>
<td class="px-6 py-3"> <td class="px-6 py-3">
<div v-if="order.customers && order.customers.length > 0" class="flex flex-wrap gap-1"> <div v-if="order.customers && order.customers.length > 0" class="flex flex-wrap gap-1">
@@ -181,7 +181,7 @@ onMounted(fetchOrders)
v-for="c in order.customers" v-for="c in order.customers"
:key="c.id" :key="c.id"
:to="`/customer/detail/${c.id}`" :to="`/customer/detail/${c.id}`"
class="inline-flex items-center gap-1 rounded-full border border-blue-200 bg-blue-50 px-2 py-0.5 text-xs text-blue-700 hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-900/30 dark:text-blue-300" class="inline-flex items-center gap-1 rounded-full border border-blue-200 bg-blue-50 px-2 py-0.5 text-xs text-blue-700 hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-900/30 dark:text-blue-300 whitespace-nowrap"
> >
{{ (c.last_name || '') + (c.first_name ? ' ' + c.first_name : '') }} {{ (c.last_name || '') + (c.first_name ? ' ' + c.first_name : '') }}
</RouterLink> </RouterLink>