From 539ec2eb695b62f98b6a975b0b4a5d7beac1c459 Mon Sep 17 00:00:00 2001 From: theorose49 Date: Tue, 30 Jun 2026 13:50:13 +0900 Subject: [PATCH] =?UTF-8?q?feat(perm):=20=EC=97=85=EC=B2=B4=EB=8B=B4?= =?UTF-8?q?=EB=8B=B9=EC=9E=90=20=ED=8F=BC/=EC=9E=91=EC=97=85=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EB=A5=BC=20=EC=9D=BC=EB=B0=98=20=EA=B5=AC=EC=84=B1?= =?UTF-8?q?=EC=9B=90=EC=97=90=EA=B2=8C=20=EA=B0=9C=EB=B0=A9=20+=20?= =?UTF-8?q?=EA=B0=9C=EC=9A=94=20=EC=A3=BC=EC=9D=98=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=9D=B8=EB=9D=BC=EC=9D=B8=20=ED=8E=B8=EC=A7=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 업체 담당자 추가/수정/삭제 폼을 모든 구성원에게 표시 - 작업 상세 '삭제'를 모든 구성원에게 노출 - 개요 탭 주의사항을 인라인 편집(patchProjectNotes, 구성원 누구나) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/lib/api.ts | 5 +++ src/pages/ProjectDetail.tsx | 73 ++++++++++++++++++++++--------------- 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index b3a995f..b2bcfc9 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -133,6 +133,11 @@ export const getContacts = (id: string) => export const upsertContact = (id: string, b: Partial) => api.post(`/projects/${id}/contacts`, b).then((r) => r.data); export const deleteContact = (cId: string) => api.delete(`/contacts/${cId}`).then((r) => r.data); +// 비민감 정보(주의사항·계약범위)는 프로젝트 구성원 누구나 편집 +export const patchProjectNotes = ( + id: string, + b: { cautions?: string; scopeText?: string; scopeGraphic?: string } +) => api.patch(`/projects/${id}/notes`, b).then((r) => r.data); export const getTasks = (id: string) => api.get(`/projects/${id}/tasks`).then((r) => r.data); diff --git a/src/pages/ProjectDetail.tsx b/src/pages/ProjectDetail.tsx index 22a9233..a0176f4 100644 --- a/src/pages/ProjectDetail.tsx +++ b/src/pages/ProjectDetail.tsx @@ -10,7 +10,7 @@ import { getPayments, upsertProjectMember, deleteProjectMember, createTask, updateTask, deleteTask, getTaskComments, createTaskComment, deleteTaskComment, getProjectMails, putMailNote, syncProjectMails, hideMail, - upsertContact, deleteContact, putContract, uploadContractFile, getFileDownloadUrl, + upsertContact, deleteContact, patchProjectNotes, putContract, uploadContractFile, getFileDownloadUrl, deleteContractFile, createPayment, updatePayment, deletePayment, recomputeProject, updateProject, } from "@/lib/api"; @@ -67,7 +67,7 @@ export function ProjectDetailPage() { {tab === "members" && } {tab === "timeline" && } {tab === "mail" && } - {tab === "contacts" && } + {tab === "contacts" && } {tab === "contract" && isAdmin && } @@ -86,20 +86,35 @@ function Row({ label, value }: { label: string; value: React.ReactNode }) { function Overview({ project: p }: { project: Project }) { const { nameOf } = useDirectory(); + const qc = useQueryClient(); + const [cautions, setCautions] = useState(p.cautions); + useEffect(() => { setCautions(p.cautions); }, [p.id]); + const saveCautions = useMutation({ + mutationFn: () => patchProjectNotes(p.id, { cautions }), + onSuccess: () => qc.invalidateQueries({ queryKey: ["project", p.id] }), + }); return ( -
-
- - - - - +
+
+
+ + + + + +
+
+ + + +
-
- - - - + {/* 주의사항: 프로젝트 구성원 누구나 편집 (비민감 정보) */} +
+ 주의사항 · 구성원 누구나 편집 +