All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m41s
- 3 shared component PageHeader/KpiCard/WidgetCard ×2 app SHA256-identical; tái dùng token Hồ sơ NS (.app-gradient-brand/.card-accent/.icon-chip/.stat-value/.label-eyebrow + accent palette teal/violet/amberx/greenx); gotcha #66 text-white! trên gradient header. - OfficeDashboardPage 2-cột widget kiểu PURO HomePage: Đề xuất/Đơn từ/Ticket/Phòng họp hôm nay + "Công việc của tôi" + Thao tác nhanh. Reuse query endpoint sẵn có (shared TanStack cache, KHÔNG BE/API mới), đếm client-side, loading/error/empty mỗi widget. - Sync fe-admin/src/index.css ← fe-user (đóng drift S66-S68: heading 600→700, ink #0f172a→#0b1220, label-eyebrow slate→brand-600 + rule gotcha #66). Nay 2 app đồng bộ. - Menu key Off_Dashboard (MenuKeys.cs const + All[] + DbInitializer seed Order 0 dưới Off) — no migration, idempotent. GIỮ ẨN non-Admin (RevokeTemporarilyHiddenModules StartsWith Off). Chưa golive. - Wire 4-place ×2 app: App.tsx route /office/dashboard + menuKeys.ts + Layout staticMap. - Fix KpiCard activeBorder -300 → -500 (accent palette chỉ 50/100/500/600/700 — chống "vỡ màu im lặng" Tailwind v4: border-teal-300 rơi default Tailwind, border-amberx-300 drop hẳn). - Build PASS x2 (fe-user index-DrxDysO7 / fe-admin index-TbkadgKd) + dotnet slnx 0/0. reviewer PASS 0 blocker. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
75 lines
3.0 KiB
TypeScript
75 lines
3.0 KiB
TypeScript
// Đồng bộ tay với BE SolutionErp.Domain.Identity.MenuKeys
|
|
export const MenuKeys = {
|
|
Dashboard: 'Dashboard',
|
|
Master: 'Master',
|
|
Suppliers: 'Suppliers',
|
|
Projects: 'Projects',
|
|
Departments: 'Departments',
|
|
// 4 master catalogs cho Details add form autocomplete (Plan CA S29 — UI sang fe-user)
|
|
Catalogs: 'Catalogs',
|
|
CatalogUnits: 'CatalogUnits',
|
|
CatalogMaterials: 'CatalogMaterials',
|
|
CatalogServices: 'CatalogServices',
|
|
CatalogWorkItems: 'CatalogWorkItems',
|
|
Contracts: 'Contracts',
|
|
Forms: 'Forms',
|
|
Reports: 'Reports',
|
|
System: 'System',
|
|
Users: 'Users',
|
|
Roles: 'Roles',
|
|
Permissions: 'Permissions',
|
|
MenuVisibility: 'MenuVisibility',
|
|
Workflows: 'Workflows',
|
|
PurchaseEvaluations: 'PurchaseEvaluations',
|
|
PeWorkflows: 'PeWorkflows',
|
|
// Quy trình duyệt MỚI (Mig 22 — Session 17, 2026-05-08)
|
|
ApprovalWorkflowsV2: 'ApprovalWorkflowsV2',
|
|
AwV2_DuyetNcc: 'AwV2_DuyetNcc',
|
|
AwV2_DuyetNccPhuongAn: 'AwV2_DuyetNccPhuongAn',
|
|
// [S61 Mig 50] Module Ngân sách cũ (Budgets + Bg_*) XÓA — thay bằng bảng
|
|
// "Tổng hợp ngân sách trình ký" per (Dự án, Hạng mục) trong phiếu PE.
|
|
// Module Hồ sơ Nhân sự (Mig 34 — Phase 10.1 G-H1 Session 33, 2026-05-26)
|
|
Hrm: 'Hrm',
|
|
HrmHoSo: 'Hrm_HoSo',
|
|
// Cấu hình HRM (Mig 35 — Phase 10.2 G-H2 Session 34, 2026-05-27)
|
|
HrmConfig: 'Hrm_Config',
|
|
HrmConfigLeaveTypes: 'Hrm_Config_LeaveTypes',
|
|
HrmConfigHolidays: 'Hrm_Config_Holidays',
|
|
HrmConfigShifts: 'Hrm_Config_Shifts',
|
|
HrmConfigOtPolicies: 'Hrm_Config_OtPolicies',
|
|
// P11-C (S51) — danh mục xe công + tài xế (dùng khi đặt xe)
|
|
HrmConfigVehicles: 'Hrm_Config_Vehicles',
|
|
HrmConfigDrivers: 'Hrm_Config_Drivers',
|
|
// Module Văn phòng số — Danh bạ nội bộ (Phase 10.2 G-O1 Session 34, 2026-05-27)
|
|
Off: 'Off',
|
|
// Bảng điều khiển Văn phòng số (landing dashboard — admin auto via All)
|
|
OffDashboard: 'Off_Dashboard',
|
|
OffDanhBa: 'Off_DanhBa',
|
|
// Văn phòng số — Phòng họp (Phase 10.2 G-O2 — Mig 36 Session 36, 2026-05-28)
|
|
OffPhongHop: 'Off_PhongHop',
|
|
OffPhongHopView: 'Off_PhongHop_View',
|
|
OffPhongHopManage: 'Off_PhongHop_Manage',
|
|
OffPhongHopBook: 'Off_PhongHop_Book',
|
|
// Phase 10.3 G-O3 (S37) — Đề xuất (Proposal)
|
|
OffDeXuat: 'Off_DeXuat',
|
|
OffDeXuatList: 'Off_DeXuat_List',
|
|
OffDeXuatCreate: 'Off_DeXuat_Create',
|
|
OffDeXuatInbox: 'Off_DeXuat_Inbox',
|
|
// Phase 10.3-10.4 G-O4+G-O5+G-O6+G-P1+G-H3 (S38) — Workflow Apps skeleton
|
|
OffDonTu: 'Off_DonTu',
|
|
OffDonTuLeave: 'Off_DonTu_Leave',
|
|
OffDonTuOt: 'Off_DonTu_Ot',
|
|
OffDonTuTravel: 'Off_DonTu_Travel',
|
|
OffDatXe: 'Off_DatXe',
|
|
OffItTicket: 'Off_ItTicket',
|
|
OffChamCong: 'Off_ChamCong',
|
|
// P11-E (S52) — Báo cáo chấm công (admin-only leaf dưới Văn phòng số)
|
|
OffAttendanceReport: 'Off_AttendanceReport',
|
|
HrmDashboard: 'Hrm_Dashboard',
|
|
// [S57] Nhóm "Cá nhân" (mirror Puro) — Chấm công re-parent Off → Personal
|
|
Personal: 'Personal',
|
|
} as const
|
|
|
|
export type MenuKey = typeof MenuKeys[keyof typeof MenuKeys]
|
|
export type CrudAction = 'Read' | 'Create' | 'Update' | 'Delete'
|