Skip to content

app.config › tasco

Các khoá dưới tasco trong app/app.config.ts mà layer đọc. Khác runtimeConfig, app.config.ts cố định lúc build và đi xuống trình duyệt — hợp với cấu hình giao diện, không dùng cho bí mật hay giá trị đổi theo môi trường.

ts
// app/app.config.ts
import { h } from 'vue'
import { IconShoppingCart } from '@tabler/icons-vue'
import type { NavItem } from '@tasco/ui'

export default defineAppConfig({
  tasco: {
    appTitle: 'Quản lý đơn hàng',
    footerText: '© Tập đoàn Tasco',
    themeMode: 'light',
    topNav: [{ label: 'Điều hành', path: '/' }] satisfies NavItem[],
    nav: [
      {
        label: 'Đơn hàng',
        path: '/orders',
        icon: () => h(IconShoppingCart, { size: 18 }),
        permission: '/orders/search',
      },
    ] satisfies NavItem[],
  },
})

Khoá

KhoáKiểuMặc địnhĐọc ở
tasco.appTitlestring'Tasco'Tiêu đề cạnh logo trong layout; tiêu đề TascoLoginForm ở trang /auth/login
tasco.footerTextstring'© Tập đoàn Tasco'Chân trang layout; rỗng → không hiện
tasco.themeMode'light' | 'dark''light'Chế độ khởi tạo của useThemeMode khi người dùng chưa chọn (chưa có cookie tasco:theme)
tasco.topNavNavItem[][]Menu module ngang trên header (CTopNav); rỗng → ẩn
tasco.navNavItem[][]Menu sidebar (CSideNav)

Cả topNavnav được lọc qua usePermission().filterByPermission trước khi hiển thị. Layout tô sáng mục có path là tiền tố dài nhất của đường dẫn hiện tại.

Kiểu export từ @tasco/ui.

FieldKiểuBắt buộcÝ nghĩa
labelstringNhãn hiển thị
pathstringKhôngĐường dẫn điều hướng của mục lá; nhóm có children thì bỏ trống
icon() => VNodeKhôngRender function, vd () => h(IconHome, { size: 18 }) — không truyền thẳng component
permissionstringKhôngURI quyền; người dùng không có quyền thì mục bị ẩn, nhóm bị ẩn thì cả nhánh ẩn
childrenNavItem[]KhôngMenu con một cấp
keystringKhôngKhoá riêng; mặc định lấy path, không có path thì label kèm vị trí

Merge giữa layer và dự án

Nuxt merge app.config.ts bằng defu: object gộp sâu, dự án thắng khi trùng khoá; mảng được nối (phần tử của dự án đứng trước, của layer nối sau). Layer để navtopNav rỗng nên menu hiện đúng những gì dự án khai.

Thêm khoá của dự án

Khoá riêng của dự án đặt ngoài tasco để không đụng khoá core có thể thêm sau này:

ts
export default defineAppConfig({
  tasco: { appTitle: 'Quản lý đơn hàng' },
  orders: { defaultPageSize: 50 },
})

Liên quan