Skip to content

Giới thiệu

Tasco Framework là nền tảng frontend dùng chung cho các sản phẩm nội bộ của tập đoàn: một team core duy trì, nhiều team sản phẩm dùng lại. Nền tảng đóng gói thành một Nuxt layer — dự án chỉ khai báo extends là có sẵn giao diện, đăng nhập, phân quyền và lớp gọi backend.

ts
// nuxt.config.ts của dự án sản phẩm
export default defineNuxtConfig({
  extends: ['@tasco/nuxt-layer-base'],
  compatibilityDate: '2025-01-01',
})

Dành cho ai

Trang này và toàn bộ khu Bắt đầu, Hướng dẫn, Component viết cho dev team sản phẩm — người dựng màn hình nghiệp vụ trên nền framework. Người phát triển chính framework đọc khu Phát triển core.

Framework hợp với ứng dụng quản trị nội bộ sau đăng nhập: danh sách, biểu mẫu, chi tiết, báo cáo. Trang công khai cần SEO hay first-paint nhanh không phải mục tiêu chính — vẫn làm được nhưng phải tự bật SSR cho route đó, xem Chế độ render.

Framework lo gì, team lo gì

ViệcAi làm
Theme, màu, font, mật độ componentFramework — dự án chỉ dùng token --tasco-*
Bộ component C* (bảng, form, nhãn, layout…)Framework
Đăng nhập IAM, cookie phiên, làm mới thông tin người dùngFramework
Cơ chế phân quyền (chặn route, menu, nút)Framework — dự án khai báo URI quyền
Proxy /api/** sang backend, gắn tokenFramework (Nitro BFF)
Chuẩn hoá lỗi, hiển thị toast/notificationFramework
Màn hình nghiệp vụ, điều hướng, DTO của sản phẩmTeam sản phẩm
Nội dung .env (IAM, gateway, secret)Team sản phẩm
Hạ tầng CI/CD, registry image, máy chạyTeam sản phẩm (có sẵn mẫu)

Một trang trông như thế nào

Không import, không đăng ký component: layer đã auto-import composable và đăng ký C* toàn cục.

vue
<script setup lang="ts">
definePageMeta({ permissions: ['/orders/search'] })

interface Order { id: number, code: string, customer: string }

const api = useApi()
const { dataSource, loading, pagination, onChange } = useTable<Order>(
  (query) => api('/orders', { query }),
)

const columns = [
  { title: 'Mã đơn', dataIndex: 'code', key: 'code' },
  { title: 'Khách hàng', dataIndex: 'customer', key: 'customer' },
]
</script>

<template>
  <CPageHeader title="Đơn hàng" />
  <CTable
    row-key="id"
    :columns="columns"
    :data-source="dataSource"
    :loading="loading"
    :pagination="pagination"
    @change="onChange"
  />
</template>

Các package

Dự án sản phẩm chỉ cài @tasco/nuxt-layer-base (và @tasco/ui cho type); phần còn lại là phụ thuộc của nó. Tên package chỉ cần nhớ khi tra cứu API.

PackageVai trò
@tasco/nuxt-layer-baseĐiểm vào duy nhất: plugin, middleware, layout, Nitro BFF, trang đăng nhập
@tasco/uiBộ component C* bọc Ant Design Vue
@tasco/composablesuseApi, useAuth, usePermission, useTable, useThemeMode
@tasco/themeDesign token → theme antdv + biến CSS --tasco-*
@tasco/utilsAppError, phân loại lỗi, kiểu Paginated
@tasco/clicreate-tasco-app — tạo dự án mới
@tasco/aiChat streaming qua BFF, thư viện prompt (tuỳ chọn)
@tasco/mcpMáy chủ MCP tri thức framework cho AI tooling

Toàn bộ @tasco/* đi cùng một số phiên bản (lockstep) và phát hành trên GitLab Package Registry ở cấp group tasco.

Ba quy tắc cần nhớ ngay

  1. Không import ant-design-vue trực tiếp trong dự án — dùng C* từ @tasco/ui, kể cả không viết thẻ <a-*> trong template. Đổi phiên bản antdv là việc của core, dự án không chịu ảnh hưởng.
  2. Màu và khoảng cách chỉ dùng var(--tasco-*) — không hardcode mã màu. Xem Viết CSS trong dự án.
  3. Chặn quyền phía client chỉ để làm đẹp trải nghiệm. Backend vẫn phải tự kiểm tra quyền trên mọi request. Xem Mô hình phân quyền.

Đọc tiếp