[CLAUDE] PurchaseEvaluation: +mục E "Link hồ sơ" (hyperlink NAS) + rename "Dự trù PRO"->"Ngân sách PRO"
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 4m25s

Anh Kiệt (FDC UAT): (1) thêm mục "e. Link hồ sơ" dưới mục "d. Bản so sánh" — 1 ô dán
hyperlink tới thư mục hồ sơ trên NAS công ty, hiện dạng <a> bấm-mở (target _blank rel
noopener noreferrer), null-safe; (2) đổi nhãn "Dự trù PRO"->"Ngân sách PRO" (cả badge
+ row label; GIỮ "Ghi chú từ PRO" + field-code/biến).
- BE: PurchaseEvaluation +HoSoLink string? (Mig AddHoSoLinkToPurchaseEvaluation —
  nvarchar(1000) nullable, no new table, Down reversible) + Create/Update command
  (+trailing optional =null -> backward-compat, 0 call-site break) + Detail DTO + projection.
  Build slnx PASS.
- FE x2 app SHA256 mirror (PeDetailTabs + PeWorkspaceCreateView): mục E input/hyperlink +
  rename. types +hoSoLink.
Workflow fan-out (BE song song FE -> review); FE+reviewer return-rỗng -> em main recover
disk + build-verify x3 + self-gate (bắt badge sót rename).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-06-16 11:13:39 +07:00
parent 318860a38e
commit 5a0aaa4e83
13 changed files with 6458 additions and 10 deletions

View File

@ -58,6 +58,8 @@ export function PeWorkspaceCreateView({
diaDiem: '',
moTa: '',
paymentTerms: '',
// anh Kiệt FDC — link thư mục hồ sơ trên NAS (1 cột HoSoLink, JSON hoSoLink).
hoSoLink: '',
// [S61 Mig 50] "Ngân sách - kỳ này" — thay budgetId/budgetManual* (module
// Budget cũ xóa hẳn; bảng Tổng hợp ngân sách gói thầu ở PeDetailTabs).
budgetPeriodAmount: 0,
@ -115,6 +117,7 @@ export function PeWorkspaceCreateView({
diaDiem: form.diaDiem || null,
moTa: form.moTa || null,
paymentTerms: null, // S59 vòng 5: field gỡ khỏi form
hoSoLink: form.hoSoLink || null,
approvalWorkflowId: form.approvalWorkflowId || null,
...budgetPayload,
})
@ -275,6 +278,21 @@ export function PeWorkspaceCreateView({
label="d. Bản so sánh"
value={<LockedHint text="Tải bảng so sánh sau khi tạo phiếu." />}
/>
{/* e. Link hồ sơ (anh Kiệt FDC) — dán link thư mục hồ sơ trên NAS công ty
(1 cột HoSoLink). Create = Input; khi xem phiếu render thẻ <a> bấm-mở. */}
<div className="flex gap-3">
<span className="w-44 shrink-0 pt-1.5 text-[12px] text-slate-500">e. Link hồ </span>
<div className="min-w-0 flex-1">
<Input
type="url"
value={form.hoSoLink}
onChange={e => setForm({ ...form, hoSoLink: e.target.value })}
placeholder="Dán link thư mục hồ sơ trên NAS..."
className="max-w-2xl text-sm"
/>
</div>
</div>
</div>
</Section>