[CLAUDE] FE-User: Plan CA Chunk B — Move 4 master pages từ fe-admin → fe-user

- Copy SuppliersPage/ProjectsPage/DepartmentsPage/CatalogsPage (948 LOC mirror)
- Extend menuKeys.ts với 5 key Catalogs* (CatalogUnits/Materials/Services/WorkItems)
- Add 7 route App.tsx (/master/suppliers + /master/projects + /master/departments + 4 catalogs tab)
- fe-user component parity verified (DataTable, PageHeader, PermissionGuard, 6 shadcn ui)

Verify:
- fe-user npm run build PASS 0 TS err (1916 modules, 14.14s)
- 4 file SHA256 byte-identical mirror fe-admin (all 4 hash match)
- 0 BE touch (Chunk A em main solo parallel)

Pending Chunk C: sidebar filter 2 app (fe-admin HIDE 9 menu, fe-user SHOW)
Pending Chunk D: smoke verify + role demo user

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-05-22 10:56:11 +07:00
parent 3cb54e032e
commit 06a441cf4e
6 changed files with 962 additions and 0 deletions

View File

@ -6,6 +6,10 @@ import { Layout } from '@/components/Layout'
import { LoginPage } from '@/pages/LoginPage'
import { UserDashboardPage } from '@/pages/UserDashboardPage'
import { InboxPage } from '@/pages/InboxPage'
import { SuppliersPage } from '@/pages/master/SuppliersPage'
import { ProjectsPage } from '@/pages/master/ProjectsPage'
import { DepartmentsPage } from '@/pages/master/DepartmentsPage'
import { CatalogsPage } from '@/pages/master/CatalogsPage'
import { ContractCreatePage } from '@/pages/contracts/ContractCreatePage'
import { ContractDetailPage } from '@/pages/contracts/ContractDetailPage'
import { MyContractsPage } from '@/pages/contracts/MyContractsPage'
@ -31,6 +35,11 @@ function App() {
>
<Route path="/dashboard" element={<UserDashboardPage />} />
<Route path="/inbox" element={<InboxPage />} />
<Route path="/master/suppliers" element={<SuppliersPage />} />
<Route path="/master/projects" element={<ProjectsPage />} />
<Route path="/master/departments" element={<DepartmentsPage />} />
<Route path="/master/catalogs" element={<Navigate to="/master/catalogs/units" replace />} />
<Route path="/master/catalogs/:kind" element={<CatalogsPage />} />
<Route path="/contracts/new" element={<ContractCreatePage />} />
<Route path="/contracts/:id" element={<ContractDetailPage />} />
<Route path="/my-contracts" element={<MyContractsPage />} />