Files
solution-erp/fe-admin/src/pages/ComingSoonPage.tsx
pqhuy1987 2a7269581c
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m56s
[CLAUDE] Infra: go nhanh S92 khoi revoker (owner supersede: hien thi het) + skeleton menu GD2/GD4 + ComingSoonPage x2
- RevokeTemporarilyHiddenModulesAsync: GO Contracts+Ct_*/Master-set khoi predicate (bai tra gia: grant SQL tay bi revoker lat o restart #423 - 447/494 row roi; regrant=447 da chay truoc commit nay). Hrm/Off/Personal GIU (y owner: vung dang-lam chi admin)
- reviewKeys += ContractMenuKeys + MasterMenuKeys + KhkkKeys + HdcKeys (CanRead-only all-role, fresh-env hoi tu)
- Seeder tree.Add: Khkk_G1 + 4 leaves (khuon Duyet NCC) + Hdc_x7 (tai dung nhan 01.-07.) - prod da INSERT truc tiep (perm=156)
- ComingSoonPage mirror x2 (md5-identical) + route /coming-soon x2 + staticMap 11 leaf x2 (gotcha #50)
- Test: AdminOnlyModulesRevokeTests tach StillHidden/Reopened + REGRESSION-GUARD S159 (re-add nhanh S92 => do); ProcurementMasterAccessSeedTests doc lai isolation bang CO CAO (spec-change S92->S159, update test + code chung commit)
- 562 test PASS - nghiem thu cuoi = restart THAT khi deploy run nay (khuon S91)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 12:34:15 +07:00

55 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ComingSoonPage — trang đích cho các mục menu skeleton GĐ2/GĐ4 (module chưa build).
// [S159 2026-07-29] Owner: menu hiển thị đủ 4 giai đoạn + phân list như Duyệt NCC
// NGAY TỪ BÂY GIỜ để mọi người góp ý — leaf chưa có module trỏ về đây thay vì
// link chết. MIRROR ×2 app BYTE-IDENTICAL (nút quay lại dùng navigate(-1) để
// không phụ thuộc route riêng từng app).
import { useNavigate, useSearchParams } from 'react-router-dom'
import { ArrowLeft, Hourglass } from 'lucide-react'
import { Button } from '@/components/ui/Button'
import { PePipelineStrip } from '@/components/pe/PePipelineStrip'
const STAGE_INFO: Record<string, { name: string; steps: string; desc: string }> = {
'2': {
name: 'Kế hoạch ký kết HĐ',
steps: 'Bước 7 → 12',
desc: 'Phiếu nối tiếp từ phiếu Duyệt NCC đã duyệt — duyệt mẫu/shopdrawing, so sánh giá và chốt giá trị ký kết hợp đồng.',
},
'4': {
name: 'Hợp đồng cứng',
steps: 'Bước 19 → 21',
desc: 'Lưu bản hợp đồng đã ký cứng (tải lên bản scan sau khi ký, đóng dấu và phát hành).',
},
}
export function ComingSoonPage() {
const navigate = useNavigate()
const [params] = useSearchParams()
const stage = params.get('stage') ?? '2'
const info = STAGE_INFO[stage] ?? STAGE_INFO['2']
return (
<div className="p-6">
<div className="mx-auto max-w-3xl rounded-lg border border-slate-200 bg-white shadow-sm">
<PePipelineStrip current={Number(stage)} />
<div className="flex flex-col items-center px-6 py-10 text-center">
<span className="icon-chip mb-3">
<Hourglass className="h-4 w-4" />
</span>
<h2 className="text-lg font-semibold text-slate-900">{info.name}</h2>
<div className="mt-1 text-xs font-medium text-slate-500">
Giai đoạn {stage} · {info.steps}
</div>
<p className="mt-3 max-w-md text-sm leading-relaxed text-slate-600">{info.desc}</p>
<p className="mt-2 rounded-md bg-amber-50 px-3 py-1.5 text-xs font-medium text-amber-700">
Phân hệ đang đưc triển khai cấu trúc menu hiển thị trước đ mọi người góp ý.
</p>
<Button variant="outline" size="sm" className="mt-5" onClick={() => navigate(-1)}>
<ArrowLeft className="h-3.5 w-3.5" />
Quay lại
</Button>
</div>
</div>
</div>
)
}