Appearance
CMS - Technical Map
Auto-generated bởi codebase-doc-generator ngày 2026-03-23 (verified từ code thực). Không chỉnh sửa thủ công.
Routes
Content
| Route | Path | Mục đích |
|---|---|---|
ROUTE_PAGE | /cms/page | Danh sách pages |
ROUTE_PAGE_CREATE | /cms/page/create | Tạo page |
ROUTE_PAGE_DETAIL | /cms/page/:id | Chi tiết page |
ROUTE_POST | /cms/post | Danh sách posts |
ROUTE_POST_CREATE | /cms/post/create | Tạo post |
ROUTE_POST_DETAIL | /cms/post/:id | Chi tiết post |
ROUTE_POST_UPDATE | /cms/post/:id/edit | Sửa post |
ROUTE_POST_UPDATE_IN_DETAIL | /cms/post/:id/update-in-detail | Sửa post khi đang ở detail |
ROUTE_POST_CATEGORY | /cms/post-category | Danh sách category |
ROUTE_POST_CATEGORY_CREATE | /cms/post-category/create | Tạo category |
ROUTE_POST_CATEGORY_DETAIL | /cms/post-category/:id | Chi tiết category |
Campaign / Voucher
| Route | Path | Mục đích |
|---|---|---|
ROUTE_CAMPAIGN | /cms/campaign | Danh sách campaign |
ROUTE_CAMPAIGN_CREATE | /cms/campaign/create | Tạo campaign |
ROUTE_CAMPAIGN_DETAIL | /cms/campaign/:id | Chi tiết campaign |
ROUTE_CAMPAIGN_UPDATE | /cms/campaign/:id/edit | Sửa campaign |
ROUTE_VOUCHER_MANAGEMENT | /cms/voucher-management | Container voucher management |
ROUTE_VOUCHER | /cms/voucher-management/voucher | Tab voucher overview |
ROUTE_VOUCHER_CREATE | /cms/voucher-management/voucher/create | Tạo voucher |
ROUTE_VOUCHER_DETAIL | /cms/voucher-management/voucher/:id | Chi tiết voucher |
ROUTE_VOUCHER_UPDATE | /cms/voucher-management/voucher/:id/edit | Sửa voucher |
ROUTE_VOUCHER_CAMPAIGN | /cms/voucher-management/voucher-campaign | Overview voucher campaign |
ROUTE_VOUCHER_CAMPAIGN_CREATE | /cms/voucher-management/voucher-campaign/create | Tạo voucher campaign |
ROUTE_VOUCHER_CAMPAIGN_DETAIL | /cms/voucher-management/voucher-campaign/:id | Chi tiết voucher campaign |
ROUTE_VOUCHER_CAMPAIGN_UPDATE | /cms/voucher-management/voucher-campaign/:id/edit | Sửa voucher campaign |
Events
| Route | Path | Mục đích |
|---|---|---|
ROUTE_EVENT | /cms/event | Container event |
ROUTE_ACCUMULATION_EVENT | /cms/event/accumulation | Overview accumulation |
ROUTE_ACCUMULATION_EVENT_CREATE | /cms/event/accumulation/create | Tạo accumulation event |
ROUTE_ACCUMULATION_EVENT_DETAIL | /cms/event/accumulation/:id | Chi tiết accumulation event |
ROUTE_ACCUMULATION_EVENT_UPDATE | /cms/event/accumulation/:id/edit | Sửa accumulation event |
ROUTE_ACCUMULATION_EVENT_CUSTOMER_DETAIL | /cms/event/accumulation/:id/:customerId | Chi tiết khách trong accumulation |
ROUTE_LUCKY_DRAW_EVENT | /cms/event/lucky-draw | Overview lucky draw |
ROUTE_LUCKY_DRAW_EVENT_CREATE | /cms/event/lucky-draw/create | Tạo lucky draw |
ROUTE_LUCKY_DRAW_EVENT_DETAIL | /cms/event/lucky-draw/:id | Chi tiết lucky draw |
ROUTE_LUCKY_DRAW_EVENT_UPDATE | /cms/event/lucky-draw/:id/edit | Sửa lucky draw |
ROUTE_LUCKY_DRAW_EVENT_CUSTOMER_DETAIL | /cms/event/lucky-draw/:id/:customerId | Chi tiết khách lucky draw |
ROUTE_GIFT_EVENT | /cms/event/gift-event | Overview gift event |
ROUTE_GIFT_EVENT_CREATE | /cms/event/gift-event/create | Tạo gift event |
ROUTE_GIFT_EVENT_DETAIL | /cms/event/gift-event/:id | Chi tiết gift event |
ROUTE_GIFT_EVENT_UPDATE | /cms/event/gift-event/:id/edit | Sửa gift event |
Facebook Dataset
| Route | Path | Mục đích |
|---|---|---|
ROUTE_FACEBOOK_DATASET | /cms/facebook-dataset | Workspace dataset Facebook |
ROUTE_FACEBOOK_DATASET_BOARDCAST_DETAIL | /cms/facebook-dataset/:id | Detail broadcast dataset |
ROUTE_FACEBOOK_DATASET_INFO | facebook-dataset/:id | Public info page với PublicLayout |
Navigation & Permission
| Item | Giá trị |
|---|---|
| Module gốc | MODULE_CMS = cms |
| Moderator permissions | ITLeader, ITStaff, ContentLeader |
| Voucher full access | ITLeader, ITStaff, BOD |
| Voucher basic access | thêm Accountant*, CustomerService*, HR*, Telesales* |
| CMS subdomain module IDs | news, campaign, voucher_management, event_management, fb_dataset |
Navigation groups
| Group | Nội dung |
|---|---|
Marketing | Post, Notification, Campaign, Voucher Management, Facebook Dataset |
Event | Event container |
Ghi Âm | Voice recording route ngoài domain CMS thuần |
Yêu cầu | Approval |
Chi phí | Hoàn tiền, chi phí, thanh toán âm |
Thiết Bị | Thiết bị, bàn giao, báo hỏng |
FE Pages (30+)
| Nhóm | Pages tiêu biểu |
|---|---|
| Posts/Pages | Posts, PostCreate, PostDetail, Pages, PageCreate, PageDetail, PostCategories, PostCategoryCreate, PostCategoryDetail |
| Campaign | Campaigns, CampaignCreate, CampaignDetail |
| Banners | Banners, BannerCreate, BannerDetail, BannerGroupCreate, BannerGroupDetail |
| Events | AccumulationEvent*, LuckyDrawEvent*, GiftEvent* |
| Facebook Dataset | FacebookDataset, FacebookDatasetInfo |
GraphQL Operations
post.graphql
| Operation | Mục đích |
|---|---|
GetPostsPagination | Paging posts |
GetPosts | Lấy posts |
GetPostByPk | Chi tiết post |
CreatePosts | Tạo post |
UpdatePosts / UpdatePostByPk | Sửa post |
DeletePosts | Xóa post |
DeletePostCategoryRelations | Gỡ quan hệ category-post |
post-category.graphql
| Operation | Mục đích |
|---|---|
GetPostCategories | Lấy categories |
CreatePostCategories | Tạo category |
UpdatePostCategoryByPk / UpdatePostCategories | Sửa category |
DeletePostCategories | Xóa category |
campaign.graphql
| Operation | Mục đích |
|---|---|
GetCampaignsPagination | Paging campaign |
GetCampaigns | Lấy campaigns |
GetCampaignByPk | Chi tiết campaign |
CreateCampaigns | Tạo campaign |
UpdateCampaigns / UpdateCampaignByPk | Sửa campaign |
UpdateCampaignTimeByPk | Cập nhật thời gian campaign |
voucher.graphql
| Operation | Mục đích |
|---|---|
ActivateVoucher | Kích hoạt voucher |
ActivateOfflineVoucher | Kích hoạt voucher offline |
CreateDraftVoucherCampaign | Tạo draft voucher campaign |
ApproveVoucherCampaign | Duyệt voucher campaign |
ChangeVoucherCampaignStatus | Đổi trạng thái campaign |
DuplicateCampaign | Nhân bản campaign |
PrintVoucher | In voucher |
GetDetailVoucherCampaign | Chi tiết voucher campaign |
SearchVoucherCampaignSummary | Summary campaign |
GetVoucherAnalyticsSummary | Tổng hợp analytics |
GetVoucherDistributionByDate | Phân phối theo ngày |
GetVoucherCampaignHistory | Lịch sử campaign |
GetVoucherCampaignAnalyticsSummary | Analytics detail |
SearchOfflineVoucherCampaigns | Tìm campaign offline |
GetVoucherBranchStatistics / GetVoucherProductStatistics / GetVoucherProductGroupStatistics | Thống kê phân rã |
event.graphql
| Operation | Mục đích |
|---|---|
GetEvents / GetLuckyDrawEvents | Danh sách event |
GetEventByPk | Chi tiết event |
GetEventCustomers | Danh sách khách trong event |
GetRewardClaims | Lịch sử claim thưởng |
GetEventOrders | Đơn hàng liên quan event |
InsertEvent / UpsertEvent / UpdateEvent | Tạo/cập nhật event |
RequestOtpRewardClaim / VerifyOtpRewardClaim | OTP cho nhận thưởng |
GetEventCustomerDetail / GetLuckyEventCustomerDetail | Detail khách trong event |
GetRewardWheelStatus / GetWheelRewardDetail | Lucky draw wheel runtime/detail |
GetTemplates, GetEventOptions | Master data cho event |
gift-event.graphql
| Operation | Mục đích |
|---|---|
GetEventList | Danh sách gift events |
InsertEventWithDetails | Tạo event kèm detail |
GetEventDetailsById | Chi tiết gift event |
GetGiftEventChart | Biểu đồ payout/event |
GetCustomerFinancialReport / Aggregate / Item | Báo cáo tài chính khách |
GetCustomerVoucherSummary | Tổng hợp voucher khách |
facebook-dataset.graphql
| Operation | Mục đích |
|---|---|
GetFacebookDatasetHistoryList | Lịch sử đơn hàng liên quan dataset |
GetFacebookDatasetDataList | Dữ liệu dataset |
GetFacebookDatasetBroadcastList | Danh sách broadcast |
GetBroadcastDetail | Chi tiết broadcast |
GetUserReceiveBroadcast | Danh sách người nhận |
InsertDatasetFBConfig / UpdateDatasetFBConfig | CRUD config dataset |
SendBroadcastAction | Gửi broadcast |
StopBroadcast | Dừng broadcast |
ConfirmOrderNotification / OrderConfirm | Luồng xác nhận đơn |
banner.graphql.txt
| Operation | Mục đích |
|---|---|
GetBannerGroups / GetBannerGroupByPk | Danh sách/chi tiết banner group |
CreateBannerGroups / UpdateBannerGroups / DeleteBannerGroups | CRUD banner group |
GetBanners / GetBannerByPk | Danh sách/chi tiết banner |
CreateBanners / UpdateBanners / UpdateBannerByPk / DeleteBanners | CRUD banner |
DeleteBannerGroupItems / CreateBannerGroupItem | Gắn/gỡ item trong banner group |
FE Runtime logic
useCmsStore
| State | Vai trò |
|---|---|
postCategories | Cache category |
posts | Cache posts |
banners | Cache banners |
bannerGroups | Cache banner groups |
campaigns | Cache campaigns |
usePost.ts
| Logic | Ghi chú |
|---|---|
| CRUD facade | Wrap GraphQL CRUD cho post |
| Slug lookup | getPostBySlug() query theo contents.slug |
| Cache-first | Ưu tiên Pinia, fallback query network |
useBanner.ts
| Logic | Ghi chú |
|---|---|
| CRUD facade | Wrap CRUD cho banner |
| Query caching | Replace/update cache theo scope query |
| PK helpers | Có useGetBannerByPk và updateBannerByPk |
useCampaign.ts
| Logic | Ghi chú |
|---|---|
| Campaign cache | Đồng bộ vào useCmsStore.campaigns |
| Status filters | Suy luận từ published_at, start_date, end_date |
| Code lookup | Hỗ trợ getCampaignByCode() cho campaign còn active |
useEvent.tsx
| Logic | Ghi chú |
|---|---|
| HTML rule generation | Sinh HTML accumulation/lucky draw/gift event rules |
| Event-specific templates | Mỗi loại event có bộ text/rule riêng |
FacebookDataset.tsx / FacebookDatasetTable.tsx
| Logic | Ghi chú |
|---|---|
| Workspace mode | Route root render FacebookDatasetTable, route detail render RouterView |
| Tabs | history, data, boardcast |
| Filter reset | Đổi tab sẽ reset filter về init value |
AccumulationEventDetail.tsx
| Logic | Ghi chú |
|---|---|
| Root/detail switch | Nếu route là detail root thì render AccumulationDetail; nếu route sâu hơn thì render RouterView |
Voucher container
| Logic | Ghi chú |
|---|---|
| Nested tabs | Voucher và Voucher Campaign là 2 child trees riêng trong cùng container |
| Layout | VoucherCampaignLayout.tsx hiện chỉ re-export MainLayout |
Backend / data domains
| Domain | Objects / vai trò |
|---|---|
cms database | post, post_category, banner, banner_group, banner_group_item, banner user view features |
ecommerce database | campaign, voucher_campaigns, event, event_customer, reward_claim, nhiều reporting functions |
restful-api | Facebook event notification/webhook-type handlers |
Permission model highlights
| Nhóm | Roles chính |
|---|---|
| Moderator/content | ITLeader, ITStaff, ContentLeader |
| Voucher full | ITLeader, ITStaff, BOD |
| Voucher basic | Voucher full + Accountant*, CustomerService*, HR*, Telesales* |
| Voucher report | Voucher full + một phần leadership ở Accounting/CS/HR/Telesales |
| Event roles constant | FPAccumulationRoles, ViewAllAccumulationRoles, SendGiftRoles |
Rủi ro / Findings kỹ thuật
| # | Note |
|---|---|
| 1 | Banner pages/compositions/GraphQL còn đủ nhưng route tree banner đang bị comment, nên feature có dấu hiệu dormant. |
| 2 | ROUTE_CAMPAIGN_CREATE bị comment trong route tree dù config vẫn khai báo. |
| 3 | Nhiều event routes create/detail/update/customer_detail đang để permissions: [], đây là cấu hình cần xem lại. |
| 4 | banner.graphql được lưu thành banner.graphql.txt, bất thường so với các file GraphQL còn lại. |
| 5 | FACEBOOK_DATASET_BOARDCAST và route/tab liên quan dùng typo boardcast xuyên suốt codebase. |
| 6 | ROUTE_FACEBOOK_DATASET_INFO được mount với PublicLayout và meta.public = isPlatformAdmin(), nghĩa là public-ness không hoàn toàn tĩnh. |