feat(ui): adopt Tailwind v4 design system and archive change

- Add tailwindcss v4 + @tailwindcss/vite to mall, shop-admin, admin
- Add @vmall/shared/theme.css tokens with html[data-accent] presets
- Add @vmall/ui kit (VBtn/VBadge/VField/VInput/VCard/VPanel/VTable/VPage,
  VAccentSwatch, useAccent) as a Nuxt module
- Convert all three apps to kit + utilities; delete ui.css/mall.css and
  every <style scoped>; consoles get accent presets, mall locked to red
- Fix VCard boolean prop default (padding) and PDP/store stale
  useAsyncData keys on param navigation
- Archive adopt-tailwind-design-system; new frontend-ui capability spec
This commit is contained in:
Chengdong Zhang
2026-09-22 18:22:50 +08:00
parent 4d2ee3b0bf
commit 0d0e10b97b
101 changed files with 2833 additions and 7207 deletions
+6 -15
View File
@@ -24,11 +24,11 @@ onMounted(() => {
</script>
<template>
<section class="mpanel invoices-panel">
<h1 class="mpanel-title">{{ t("user.invoicesTitle") }}</h1>
<div v-if="loading" class="muted">{{ t("common.loading") }}</div>
<VCard class="min-h-[560px]">
<h1 class="mb-4 text-xl font-bold text-text">{{ t("user.invoicesTitle") }}</h1>
<div v-if="loading" class="px-0 py-5 text-muted">{{ t("common.loading") }}</div>
<UiEmptyState v-else-if="rows.length === 0" :text="t('user.noInvoices')" />
<table v-else class="mtable">
<VTable v-else>
<thead>
<tr>
<th>{{ t("user.invoiceNo") }}</th>
@@ -51,16 +51,7 @@ onMounted(() => {
<td>{{ invoice.issued_at ? invoice.issued_at.slice(0, 10) : t("mall.notAvailable") }}</td>
</tr>
</tbody>
</table>
</section>
</VTable>
</VCard>
</template>
<style scoped>
.invoices-panel {
min-height: 560px;
}
.muted {
color: var(--mall-faint);
padding: 20px 0;
}
</style>