수요신청현황에서 수요정보 수정 기능 추가

This commit is contained in:
jsyang
2026-04-02 15:44:40 +09:00
parent f5f2a8f675
commit f528c0e893
2 changed files with 123 additions and 10 deletions
@@ -123,7 +123,7 @@ function DateInput({
}
export default function DemandStatusPage() {
const { getSdmInfoStatusList, Sdm, Common } = useDmStore((state) => state);
const { getSdmInfoStatusList, updateSdmInfoData, Sdm, Common } = useDmStore((state) => state);
const { successLogin, sdmInfoStatusList } = Sdm;
const { selectSidoData, selectSigunData } = Common;
@@ -243,13 +243,15 @@ export default function DemandStatusPage() {
}, [selectedSdmInfoStatus]);
const candidateNames = useMemo(() => {
const list = selectedSdmInfoStatus?.splyCndtList ?? [];
const list = isEditMode
? editData?.splyCndtList ?? []
: selectedSdmInfoStatus?.splyCndtList ?? [];
return [
list[0]?.ruseUtztnFcltNm ?? "",
list[1]?.ruseUtztnFcltNm ?? "",
list[2]?.ruseUtztnFcltNm ?? "",
];
}, [selectedSdmInfoStatus]);
}, [isEditMode, editData, selectedSdmInfoStatus]);
const onSelectSdmInfoStatus = (dmdInfoSn: number | "") => {
if(isEditMode){
@@ -269,6 +271,61 @@ export default function DemandStatusPage() {
return { a, b };
};
const searchCandidate = (e: React.MouseEvent) => {
e.preventDefault();
e.stopPropagation();
const dmdInfoId = JSON.parse(
sessionStorage.getItem("user") || "{}"
)?.dmdInfoId?.toString();
const url = `/map/popup?dmdInfoId=${encodeURIComponent(dmdInfoId)}`;
const width = window.screen.availWidth;
const height = window.screen.availHeight;
const left = 0;
const top = 0;
const popupOptions = `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`;
window.open(url, "candidatePopup", popupOptions);
};
const saveInfo = () => {
if(confirm('수정된 데이터를 저장하시겠습니까?')){
const payload = {
...editData,
splyCndtList : editData.splyCndtList ?? []
};
updateSdmInfoData(payload).then((res) => {
if (res) {
const user = JSON.parse(sessionStorage.getItem("user") || "{}");
if (user?.dmdInfoId) {
getSdmInfoStatusList(user.dmdInfoId);
}
setIsEditMode(false);
}
});
}
}
useEffect(() => {
const handler = (event: MessageEvent) => {
if (!event.data) return;
if (event.data.type === "SET_SUBS_INFO") {
const list = event.data.payload || [];
setEditData((prev) => ({
...prev,
splyCndtList: list,
}));
}
};
window.addEventListener("message", handler);
return () => {
window.removeEventListener("message", handler);
};
}, []);
return (
<main className="bg-white">
@@ -372,13 +429,7 @@ export default function DemandStatusPage() {
type="button"
className="h-8 rounded-md bg-[#888] px-4 text-base text-white hover:bg-neutral-700"
onClick={() => {
setOriginData(editData);
setIsEditMode(false);
if(confirm('수정된 데이터를 저장하시겠습니까?')){
//todo
// updateSdmInfoData(editData);
}
saveInfo();
}}
>
저장
@@ -582,9 +633,53 @@ export default function DemandStatusPage() {
<div className="col-span-12 bg-sky-50 px-4 py-3 text-sm font-semibold text-slate-700 border-b border-neutral-200">
공급처 후보지
{
isEditMode &&
<button
type="button"
className="h-8 w-25 ml-12 rounded-md bg-[#888] px-2 text-base text-white hover:bg-neutral-700"
onClick={(e) => {
searchCandidate(e);
//splyList => 해당객체가 대민에서 선택한 후보처 리스트
//setLastSub => 해당 스테이트가 선택한 마지막 후보처를 넣어야하는 스테이트
}}>
후보지 조회
</button>
}
</div>
{candidateNames.map((candidateName, index) => (
isEditMode ? (
<div
key={`candidate-${index}`}
className="col-span-12 md:col-span-4 grid grid-cols-12 border-b md:border-b-0 border-neutral-200"
>
<div className="col-span-5 bg-sky-50 px-3 py-4 flex items-center justify-center text-center font-semibold text-slate-700">
후보지{index + 1}
</div>
<div className="col-span-7 px-3 py-4 flex items-center justify-center text-center">
<TextInput
value={candidateName}
disabled={true}
onChange={(v) => {
setEditData((prev) => {
const newList = [...(prev.splyCndtList || [])];
newList[index] = {
...newList[index],
ruseUtztnFcltNm: v,
};
return {
...prev,
splyCndtList: newList,
};
});
}}
/>
</div>
</div>
) :
<div
key={`candidate-${index}`}
className="col-span-12 md:col-span-4 grid grid-cols-12 border-b md:border-b-0 border-neutral-200"
+18
View File
@@ -466,6 +466,19 @@ const postSdmInfoData = async (data: SdmInfoFormData): Promise<boolean> => {
}
}
// 수요정보 수정
const fetchUpdateSdmInfoData = async (data: SdmInfoFormData): Promise<boolean> => {
try {
await postFetch("/reuseFc/request/updateDemandInfo", data);
alert('수요 정보 수정에 성공하였습니다.');
return true;
} catch (error) {
console.log(error);
alert('수요 정보 수정에 실패하였습니다.');
return false;
}
}
const postSdmLoginData = async (data: DemandCompType) => {
try {
const res = await postFetch("/reuseFc/request/login", data);
@@ -539,6 +552,7 @@ export type SdmActions = {
initializeSdmData: () => void;
insertSdmData: (data: DemandCompType) => Promise<void>;
insertSdmInfoData: (data: SdmInfoFormData) => Promise<boolean>;
updateSdmInfoData: (data: SdmInfoFormData) => Promise<boolean>;
getDemandCompList: (searchText: string, pageCnt: number) => Promise<void>;
actionLogin: (data: DemandCompType) => Promise<void>;
getSdmInfoStatusList: (dmdInfoId: string) => Promise<void>;
@@ -617,6 +631,10 @@ export const SdmReducer = (set: any): SdmActions => {
return await postSdmInfoData(data);
},
updateSdmInfoData: async (data: SdmInfoFormData): Promise<boolean> => {
return await fetchUpdateSdmInfoData(data);
},
// 수요처 정보
getDemandCompList: async (searchText: string, pageCnt: number) => {
const res = await getDemandCompList(searchText, pageCnt);