interface Base { createdBy?: string | number createdOn?: string updatedBy?: string | number updatedOn?: string } interface PageSettings { label?: string; // Nhãn layout?: string; // Bố cục template?: string; // Bản mẫu mainLink?: boolean; // Liên kết chính footerLink?: boolean; // Liên kết chân trang sidebarLink?: boolean; // Liên kết trượt bên floatingLink?: boolean; // Liên kết bám nổi dataType?: string; // Loại dữ liệu: Section, Category, Topic, Event, Collection, Article, Tag, Author, Poll, Quiz, Survey, Advertising, Other dataQuery?: string; // Truy vấn dữ liệu: IDS | NEW | VIEW | SQL | REQUEST | PARAM | ... dataResult?: string; // Kết quả dữ liệu (Json) } interface PageSectionSettings { label?: string; // Nhãn layout?: string; // Bố cục template?: string; // Bản mẫu } interface PageComponentSettings { label?: string; // Nhãn layout?: string; // Bố cục template?: string; // Bản mẫu dataType?: string; // Loại dữ liệu: Section, Category, Topic, Event, Collection, Article, Tag, Author, Poll, Quiz, Survey, Advertising, Other dataQuery?: string; // Truy vấn dữ liệu: IDS | NEW | VIEW | SQL | REQUEST | ... dataResult?: string; // Kết quả dữ liệu (Json) } interface PageSection extends Base { id?: number; // Mã định danh siteId?: number; // Mã hệ thống pageId?: number; // Mã trang parentId?: number; // Mã vùng cha title?: string; // Tiêu đề slug?: string; // (Anchor) code?: string; // Mã nhận diện content?: string; // Nội dung keywords?: string; // Từ khóa description?: string; // Mô tả type?: number; // Phân loại: PageSectionType features?: string; // Đặc trưng: Featured (nổi bật) taxonomy?: string; // Phân loại: Block | Module | Navigation settings?: PageSectionSettings; // Thiết lập: PageSectionSettings (Json) isPublished?: boolean; // Đã xuất bản publishedBy?: number; // Xuất bản bởi publishedOn?: string; // Xuất bản vào lúc (string) expiresOn?: string; // Hết hạn vào lúc (string) order?: number; // Thứ tự sắp xếp status?: number; // Trạng thái } interface PageComponent extends Base { id?: number; // Mã định danh siteId?: number; // Mã hệ thống pageId?: number; // Mã trang sectionId?: number; // Mã vùng title?: string; // Tiêu đề code?: string; // Mã nhận diện content?: string; // Nội dung type?: number; // Phân loại: PageComponentType features?: string; // Đặc trưng: Featured (nổi bật) taxonomy?: string; // Phân loại settings?: PageComponentSettings; // Thiết lập: PageComponentSettings (Json) isPublished?: boolean; // Đã xuất bản publishedBy?: number; // Xuất bản bởi publishedOn?: string; // Xuất bản vào lúc (string) expiresOn?: string; // Hết hạn vào lúc (string) order?: number; // Thứ tự sắp xếp status?: number; // Trạng thái } interface Page extends Base { id?: number; // Mã định danh siteId?: number; // Mã hệ thống parentId?: number; // Mã trang cha title?: string; // Tiêu đề slug?: string; // Slug code?: string; // Mã nhận diện content?: string; // Nội dung favicon?: string; // Biểu tượng keywords?: string; // Từ khóa thumbnail?: string; // Ảnh đại diện description?: string; // Mô tả type?: number; // Phân loại: PageType features?: string; // Đặc trưng: Featured (nổi bật) taxonomy?: string; // Phân nhóm settings?: PageSettings; // Thiết lập: PageSettings (Json) isPublished?: boolean; // Đã xuất bản publishedBy?: number; // Đã xuất bản bởi publishedOn?: string; // Đã xuất bản vào lúc (string) expiresOn?: string; // Đã hết hạn vào lúc (string) order?: number; // Thứ tự sắp xếp status?: number; // Trạng thái components?: PageComponent[]; sections?: PageSection[]; } export const getDynamicPageByCode = async (event : any) => { try { const { apiUrl } = useRuntimeConfig().public const slug = event.context.params.slug; const { item }: any = await $fetch(`${apiUrl}/cms/page/overview-page/slug:${slug}`, { headers: new Headers({ site: '1' || 1, }), }) return item } catch (error) { handleError(error); } } export const getDynamicPageById = async (event : any) => { try { const { apiUrl } = useRuntimeConfig().public const id = event.context.params.id; const { item }: any = await $fetch(`${apiUrl}/cms/overview-page/${id}`) return item } catch (error) { handleError(error); } }