Compare commits
20
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c16b9d14d | ||
|
|
3ba11b5508 | ||
|
|
65f74987f8 | ||
|
|
aaed8fe971 | ||
|
|
cba305ab9b | ||
|
|
913256cac4 | ||
|
|
75d14782f4 | ||
|
|
c30de7f40d | ||
|
|
ca96e55c07 | ||
|
|
64698fb97e | ||
|
|
662a461cfa | ||
|
|
2a15138014 | ||
|
|
97727908fa | ||
|
|
16ebb8eb3a | ||
|
|
f8c902a138 | ||
|
|
01c01dedbb | ||
|
|
007a39ebfa | ||
|
|
bec3132417 | ||
|
|
8c2bdc65eb | ||
|
|
e7a46ac3a2 |
@@ -16,7 +16,6 @@ export class LoginApiService implements LoginService {
|
|||||||
|
|
||||||
public async login(payload: ILogin): Promise<void> {
|
public async login(payload: ILogin): Promise<void> {
|
||||||
try {
|
try {
|
||||||
console.log(' ENDPOINT.USER_SERVICE.LOGIN ', ENDPOINT.USER_SERVICE.LOGIN)
|
|
||||||
const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, {
|
const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ export class LoginApiService implements LoginService {
|
|||||||
|
|
||||||
public async login(payload: ILogin): Promise<void> {
|
public async login(payload: ILogin): Promise<void> {
|
||||||
try {
|
try {
|
||||||
console.log(' ENDPOINT.USER_SERVICE.LOGIN ', ENDPOINT.USER_SERVICE.LOGIN)
|
|
||||||
console.log(payload.userId+' '+payload.password)
|
|
||||||
const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, {
|
const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ const InfilChart = ({ pplMngNo }: ModalOpenProp) => {
|
|||||||
<span className="text-2xl text-red-600 font-bold">● 침입수량 산정결과</span>
|
<span className="text-2xl text-red-600 font-bold">● 침입수량 산정결과</span>
|
||||||
<div className="flex items-center mt-2">
|
<div className="flex items-center mt-2">
|
||||||
<span className="ml-5 text-black text-xl">침입수량 : </span>
|
<span className="ml-5 text-black text-xl">침입수량 : </span>
|
||||||
<span className="w-[35px] inline-block text-right text-black text-xl font-bold">{inftwtQty}</span>
|
<span className="w-[45px] inline-block text-right text-black text-xl font-bold">{inftwtQty}</span>
|
||||||
<span className="ml-2 text-black text-xl">m³/d</span>
|
<span className="ml-2 text-black text-xl">m³/d</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -170,7 +170,7 @@ const InfilChart = ({ pplMngNo }: ModalOpenProp) => {
|
|||||||
{/* 차트 */}
|
{/* 차트 */}
|
||||||
<div className="h-[90%] bg-white text-3xl">
|
<div className="h-[90%] bg-white text-3xl">
|
||||||
<MainChart chartConfig={chartConfig} chartForm={chartForm} chartData={chartData} chartTitle={'침입수량 그래프'}
|
<MainChart chartConfig={chartConfig} chartForm={chartForm} chartData={chartData} chartTitle={'침입수량 그래프'}
|
||||||
yFieldText2="시간" yFieldText="유량(m³/h)"/>
|
yFieldText2="" yFieldText="유량(m³/h)"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{popupOpen && (
|
{popupOpen && (
|
||||||
|
|||||||
@@ -161,17 +161,17 @@ const RdiiChart = ({ pplMngNo }: ModalOpenProp) => {
|
|||||||
<span className="text-2xl text-red-600 font-bold">● 강우유입수량 분석결과</span>
|
<span className="text-2xl text-red-600 font-bold">● 강우유입수량 분석결과</span>
|
||||||
<div className="flex items-center mt-2">
|
<div className="flex items-center mt-2">
|
||||||
<span className="w-[95px] inline-block text-right text-black text-xl">평균RDII : </span>
|
<span className="w-[95px] inline-block text-right text-black text-xl">평균RDII : </span>
|
||||||
<span className="w-[30px] inline-block text-right text-black text-xl font-bold"> {rdiiQty}</span>
|
<span className="w-[45px] inline-block text-right text-black text-xl font-bold"> {rdiiQty}</span>
|
||||||
<span className="ml-2 text-black"> m³/d</span>
|
<span className="ml-2 text-black"> m³/d</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center mt-2">
|
<div className="flex items-center mt-2">
|
||||||
<span className="w-[95px] inline-block text-right text-black text-xl">적용강우량 : </span>
|
<span className="w-[95px] inline-block text-right text-black text-xl">적용강우량 : </span>
|
||||||
<span className="w-[30px] inline-block text-right text-black text-xl font-bold"> {rainTotal}</span>
|
<span className="w-[45px] inline-block text-right text-black text-xl font-bold"> {rainTotal}</span>
|
||||||
<span className="ml-2 text-black"> mm</span>
|
<span className="ml-2 text-black"> mm</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center mt-2">
|
<div className="flex items-center mt-2">
|
||||||
<span className="w-[95px] inline-block text-right text-black text-xl">강우량대비RDII : </span>
|
<span className="w-[95px] inline-block text-right text-black text-xl">강우량대비RDII : </span>
|
||||||
<span className="w-[30px] inline-block text-right text-black text-xl font-bold"> {totalVolume}</span>
|
<span className="w-[45px] inline-block text-right text-black text-xl font-bold"> {totalVolume}</span>
|
||||||
<span className="ml-2 text-black"> m³/mm</span>
|
<span className="ml-2 text-black"> m³/mm</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
|
'use client';
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { Button } from '@common/components';
|
||||||
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
|
import { YearRangeSelectBox } from '@/components/ui/YearRangeSelectBox';
|
||||||
import { SelectBox } from '@common/business_components/ui';
|
import { SelectBox, UiTable } from '@common/business_components/ui';
|
||||||
import { Button, Input } from '@common/components';
|
import LoadingOverlay from '@/components/ui/LoadingBar';
|
||||||
import React from 'react';
|
|
||||||
//import { useDcTree, flattenFolders, useSggCd, useCityCd } from './components/searchModalReportApi';
|
import { addFileName, flattenFolders, getFileDownload, useCityCd, useDcTree, useSggCd, reportGubuns } from './searchModalReportApi';
|
||||||
import { type SelectDataType } from '../commonStore';
|
import { type SelectDataType } from '../commonStore';
|
||||||
import { useCityCd, useSggCd } from '../components/searchModalReportApi';
|
|
||||||
// import { useBizByFcltStore } from "../../../store/StoreProvider";
|
|
||||||
|
|
||||||
|
|
||||||
// // 하수도정비 기본계획 보고서
|
// 하수도정비 기본계획 보고서
|
||||||
export const reportTableHeadlist = [
|
export const reportTableHeadlist = [
|
||||||
{ id: "no", title: "NO" },
|
{ id: "no", title: "NO" },
|
||||||
{ id: "sido", title: "시도" },
|
{ id: "sido", title: "시도" },
|
||||||
@@ -23,79 +24,180 @@ export const reportTableHeadlist = [
|
|||||||
|
|
||||||
interface BasicTabProps {
|
interface BasicTabProps {
|
||||||
open?: boolean;
|
open?: boolean;
|
||||||
gubun: string;
|
|
||||||
sidos: SelectDataType[];
|
|
||||||
ctpvCd: string | number;
|
|
||||||
sigungu: string;
|
|
||||||
filteredSiguns: SelectDataType[];
|
|
||||||
yearFilter: { start: string; end: string; };
|
|
||||||
handleSearch: () => void;
|
|
||||||
handleCtpvCdChange: (val: string | number) => void;
|
|
||||||
// onOpenChange?: (open: boolean) => void;
|
|
||||||
// onFeatureSelect?: (row: any) => void;
|
|
||||||
// setTableData?: (data: any[]) => void;
|
|
||||||
// setTableCount?: (count: number) => void;
|
|
||||||
setYearFilter: (filter: { start: string; end: string }) => void;
|
|
||||||
setGubun: (gubun: string) => void;
|
|
||||||
setSigungu: (sigungu: string) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const ReportTab: React.FC<BasicTabProps> = ({
|
const ReportTab: React.FC<BasicTabProps> = ({ open }) => {
|
||||||
open,
|
|
||||||
gubun,
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
sidos,
|
const [isResetPage, setIsResetPage] = useState<boolean>(false);
|
||||||
ctpvCd,
|
const [isResetSelection, setIsResetSelection] = useState<boolean>(false);
|
||||||
sigungu,
|
const [showTable, setShowTable] = useState(false);
|
||||||
filteredSiguns = [{ val: '0', text: '전체', sido: '0' }],
|
const [tableData, setTableData] = useState<any[]>([]);
|
||||||
yearFilter,
|
const [tableCount, setTableCount] = useState(0);
|
||||||
handleSearch,
|
const [curPage, setCurPage] = useState(1);
|
||||||
handleCtpvCdChange,
|
const [yearFilter, setYearFilter] = useState({ start: "", end: "" });
|
||||||
// onOpenChange,
|
const [ctpvCd, setCtpvCd] = useState('0'); // 하수정비기본계획 report
|
||||||
// onFeatureSelect,
|
const [sigungu, setSigungu] = useState('0'); // 하수정비기본계획 report
|
||||||
// setTableData,
|
const [filteredSiguns, setFilteredSiguns] = useState<SelectDataType[]>([{ val: '0', text: '전체', sido: '0' }]);
|
||||||
// setTableCount,
|
const [gubun, setGubun] = useState(""); // 하수정비기본계획 report
|
||||||
setYearFilter,
|
const [reportGubun, setReportGubun] = useState("0"); // 하수정비기본계획 report
|
||||||
setGubun,
|
|
||||||
setSigungu,
|
|
||||||
}) => {
|
// 하수정비기본계획 report
|
||||||
|
const sidos = useCityCd();
|
||||||
|
const siguns = useSggCd();
|
||||||
|
const reportOriginData = useDcTree(""); //:Folder[]
|
||||||
|
|
||||||
|
const dynamicHeadlist: { id: string, title: string }[] = reportTableHeadlist;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// filterParams 초기화
|
||||||
|
setCtpvCd('0');
|
||||||
|
setSigungu('0');
|
||||||
|
setReportGubun('0');
|
||||||
|
setYearFilter({ start: "", end: "" });
|
||||||
|
setShowTable(false);
|
||||||
|
setTableData([]);
|
||||||
|
setTableCount(0);
|
||||||
|
setCurPage(1); // 페이지를 1로 초기화
|
||||||
|
setIsResetPage(true); // 페이지를 초기화
|
||||||
|
setIsResetSelection(true); // 선택 초기화
|
||||||
|
}, [open]);
|
||||||
|
|
||||||
|
// 페이지 변경 시마다 데이터 fetch
|
||||||
|
useEffect(() => {
|
||||||
|
// showTable이 true일 때만 fetch (최초 렌더 방지)
|
||||||
|
setIsResetPage(false);
|
||||||
|
setIsResetSelection(true); // 선택 초기화
|
||||||
|
if (showTable) fetchFilteredData();
|
||||||
|
}, [curPage]);
|
||||||
|
|
||||||
|
const handleCtpvCdChange = (val: string | number) => { // 하수도정비기본계획.시도
|
||||||
|
const sidoOption = sidos.find((n) => n.val === val);
|
||||||
|
setCtpvCd(String(val));
|
||||||
|
if (val !== '0') {
|
||||||
|
const filterSiguns = siguns.filter(item => item.sido === sidoOption?.text);
|
||||||
|
filterSiguns.unshift({ val: '0', text: '전체', sido: '0' });
|
||||||
|
setFilteredSiguns(filterSiguns);
|
||||||
|
}
|
||||||
|
setSigungu("0");
|
||||||
|
setGubun("");
|
||||||
|
setYearFilter({ start: "", end: "", });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 조회 버튼 클릭 시 1페이지로 이동 및 데이터 초기화
|
||||||
|
const handleSearch = () => {
|
||||||
|
setCurPage(1); // 페이지를 1로 초기화
|
||||||
|
fetchFilteredData();
|
||||||
|
setIsResetPage(true); // 페이지를 초기화
|
||||||
|
setIsResetSelection(false); // 선택 초기화
|
||||||
|
setShowTable(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 하수도정비기본계획 테이블 cellClick 핸들러
|
||||||
|
const handleReportCellClick = (index: number | undefined ) => {
|
||||||
|
console.log(index);
|
||||||
|
if (typeof index === "number" && tableData[index]) {
|
||||||
|
const reportData = tableData[index];
|
||||||
|
const fileName = reportData.fileName;
|
||||||
|
const filePath = reportData.filePath;
|
||||||
|
if (reportData.fileSn !== "") {
|
||||||
|
getFileDownload(reportData.fileSn, fileName, filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 검색 API 호출 함수
|
||||||
|
const fetchFilteredData = async () => {
|
||||||
|
setIsLoading(true); // 로딩 시작
|
||||||
|
setIsResetSelection(true); // 선택 초기화
|
||||||
|
|
||||||
|
try {
|
||||||
|
//const reportOriginData = await getDcTree('경기도');
|
||||||
|
const reportData = flattenFolders(reportOriginData);
|
||||||
|
let filterReportData = reportData;
|
||||||
|
if (ctpvCd !== "0") { // 시도검색
|
||||||
|
const sidoOption = sidos.find((n) => n.val === ctpvCd);
|
||||||
|
filterReportData = filterReportData.filter(item => item.sido === sidoOption?.text);
|
||||||
|
}
|
||||||
|
if (sigungu !== "0") { // 시군구검색
|
||||||
|
const sigunguOption = filteredSiguns.find((n) => n.val === sigungu);
|
||||||
|
filterReportData = filterReportData.filter(item => item.sigungu === sigunguOption?.text);
|
||||||
|
}
|
||||||
|
if (reportGubun !== "0") { // 보고서구분검색
|
||||||
|
const reportGubunOption = reportGubuns.find((n) => n.val === reportGubun);
|
||||||
|
filterReportData = filterReportData.filter(item => item.reportGubun === reportGubunOption?.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (yearFilter.start != "" && yearFilter.end == "") //승인년도검색
|
||||||
|
filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear >= yearFilter.start + "년" : null);
|
||||||
|
if (yearFilter.start == "" && yearFilter.end != "")
|
||||||
|
filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear <= yearFilter.end + "년" : null);
|
||||||
|
if (yearFilter.start != "" && yearFilter.end != "") {
|
||||||
|
filterReportData = filterReportData.filter(item => {
|
||||||
|
return (item.approvalYear) ? item.approvalYear >= yearFilter.start + "년" && item.approvalYear <= yearFilter.end + "년" : null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (gubun !== "") { // 구분검색
|
||||||
|
filterReportData = filterReportData.filter(item => (item.plantZoneGugun) ? String(item.plantZoneGugun).includes(String(gubun)) : null);
|
||||||
|
}
|
||||||
|
console.log('report count:', filterReportData.length);
|
||||||
|
setTableCount(filterReportData.length || 0);
|
||||||
|
filterReportData = filterReportData.slice((curPage - 1) * 10, curPage * 10); // paging
|
||||||
|
filterReportData = filterReportData?.map((item, index) => ({ ...item, no: (curPage - 1) * 10 + index + 1 }));
|
||||||
|
//const fileList = await getDcFile("CLS20250530000041");
|
||||||
|
addFileName(filterReportData).then(data => {
|
||||||
|
filterReportData = data;
|
||||||
|
setTableData(filterReportData || []);
|
||||||
|
});
|
||||||
|
setTableData(filterReportData || []);
|
||||||
|
|
||||||
|
setShowTable(true);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('API ERROR:', err);
|
||||||
|
setTableData([]);
|
||||||
|
} finally {
|
||||||
|
setIsLoading(false); // 로딩 종료
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
<div className="relative flex flex-col border rounded-lg p-6 w-full h-[10vh]">
|
<div className="relative flex flex-col border rounded-lg p-6 w-full h-[10vh]">
|
||||||
<div className="flex items-center mb-3">
|
<div className="flex items-center mb-3">
|
||||||
<SelectBox
|
<SelectBox className="w-[150px] mr-8"
|
||||||
className="w-[150px] mr-8"
|
|
||||||
selectClass="rounded-lg bg-white"
|
selectClass="rounded-lg bg-white"
|
||||||
label="시도"
|
label="시도" selectArray={sidos}
|
||||||
selectArray={sidos}
|
value={ctpvCd} onSelectValue={handleCtpvCdChange}
|
||||||
value={ctpvCd}
|
|
||||||
onSelectValue={handleCtpvCdChange}
|
|
||||||
selectContentClass="z-[101]"
|
selectContentClass="z-[101]"
|
||||||
/>
|
/>
|
||||||
<SelectBox
|
<SelectBox className="w-48"
|
||||||
className="w-48"
|
|
||||||
selectClass="w-48 rounded-lg bg-white truncate"
|
selectClass="w-48 rounded-lg bg-white truncate"
|
||||||
label="시군구"
|
label="시군구" selectArray={filteredSiguns}
|
||||||
selectArray={filteredSiguns}
|
value={sigungu} onSelectValue={val => setSigungu(String(val))}
|
||||||
value={sigungu}
|
|
||||||
onSelectValue={val => setSigungu(String(val))}
|
|
||||||
selectContentClass="z-[101]"
|
selectContentClass="z-[101]"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center mb-6">
|
<div className="flex items-center mb-6">
|
||||||
<label className="inline-block w-auto whitespace-nowrap text-xl text-gray-600 mr-2">구분</label>
|
{/* <label className="inline-block w-auto whitespace-nowrap text-xl text-gray-600 mr-2">구분</label>
|
||||||
<Input
|
<Input
|
||||||
className='!text-xl w-[100px] placeholder:text-center mr-8'
|
className='!text-xl w-[100px] placeholder:text-center mr-8'
|
||||||
placeholder="입력"
|
placeholder="입력"
|
||||||
value={gubun}
|
value={gubun}
|
||||||
onChange={(e) => { setGubun(e.target.value); }}
|
onChange={(e) => { setGubun(e.target.value); }}
|
||||||
|
/> */}
|
||||||
|
<SelectBox className="w-[150px] mr-8"
|
||||||
|
selectClass="rounded-lg bg-white"
|
||||||
|
label="보고서구분" selectArray={[...reportGubuns]}
|
||||||
|
value={reportGubun} onSelectValue={val => setReportGubun(String(val))}
|
||||||
|
selectContentClass="z-[101]" labelClass='whitespace-nowrap text-xl text-gray-600 pr-2'
|
||||||
/>
|
/>
|
||||||
<YearRangeSelectBox
|
{/* 승인년도 필터 */}
|
||||||
start={yearFilter.start}
|
<YearRangeSelectBox start={yearFilter.start} end={yearFilter.end}
|
||||||
end={yearFilter.end}
|
|
||||||
onChange={range => setYearFilter({ ...yearFilter, start: range.start, end: range.end })}
|
onChange={range => setYearFilter({ ...yearFilter, start: range.start, end: range.end })}
|
||||||
startLabel="승인년도"
|
startLabel="승인년도" endLabel=""
|
||||||
endLabel=""
|
|
||||||
/>
|
/>
|
||||||
{/* 조회 버튼 */}
|
{/* 조회 버튼 */}
|
||||||
<div className="flex-1 flex justify-end">
|
<div className="flex-1 flex justify-end">
|
||||||
@@ -103,6 +205,28 @@ const ReportTab: React.FC<BasicTabProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="h-[79vh] w-full overflow-hidden rounded-lg border">
|
||||||
|
{/* 테이블2 영역 (가로/세로 스크롤 가능) */}
|
||||||
|
<div className="flex-1 px-2 pb-2">
|
||||||
|
<LoadingOverlay isLoading={isLoading} />
|
||||||
|
<UiTable
|
||||||
|
headName={(() => {
|
||||||
|
return (<>조회 결과 ({tableCount.toLocaleString('ko-KR')})건</>);
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
tableData={tableData}
|
||||||
|
headlist={dynamicHeadlist}
|
||||||
|
pageSize={10}
|
||||||
|
total={tableCount}
|
||||||
|
cellClick={handleReportCellClick}
|
||||||
|
onPageChange={setCurPage}
|
||||||
|
resetPageNo={isResetPage}
|
||||||
|
resetSelection={isResetSelection}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,8 @@ import { UiModal, UITab, UiTable } from '@common/business_components/ui';
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import React, { useEffect, useMemo, useState } from 'react';
|
import React, { useEffect, useMemo, useState } from 'react';
|
||||||
import { ExclnSewagePumpCol2, MsSwageMhlCol2, MsSwagePplCol2, stofcbrCol2, SwtrmtFcltCol2, SwtrmtPrcsZoneCol2 } from '../components/common/table';
|
import { ExclnSewagePumpCol2, MsSwageMhlCol2, MsSwagePplCol2, stofcbrCol2, SwtrmtFcltCol2, SwtrmtPrcsZoneCol2 } from '../components/common/table';
|
||||||
//import { useDcTree, flattenFolders, useSggCd, useCityCd } from './components/searchModalReportApi';
|
|
||||||
import { type SelectDataType } from '../commonStore';
|
import { type SelectDataType } from '../commonStore';
|
||||||
import { MS_SWAGE_PPL_CODES, MS_SWAGE_PPL_USE_CODES, MS_SWAGE_MHL_CODES } from '../components/common/table';
|
import { MS_SWAGE_PPL_CODES, MS_SWAGE_PPL_USE_CODES, MS_SWAGE_MHL_CODES } from '../components/common/table';
|
||||||
import { addFileName, flattenFolders, getFileDownload, useCityCd, useDcTree, useSggCd } from '../components/searchModalReportApi';
|
|
||||||
// import { useBizByFcltStore } from "../../../store/StoreProvider";
|
|
||||||
import { getData } from "@/components/lib/api";
|
import { getData } from "@/components/lib/api";
|
||||||
import BasicTab, { BASIC_TYPES } from './basicTab';
|
import BasicTab, { BASIC_TYPES } from './basicTab';
|
||||||
import OperationTab, { BIZ_TY_CD, operationCleaningTableHeadlist, operationInspectionTableHeadlist, operationMaintenanceTableHeadlist, operationTableHeadlist, WORK_TYPES } from './operationTab';
|
import OperationTab, { BIZ_TY_CD, operationCleaningTableHeadlist, operationInspectionTableHeadlist, operationMaintenanceTableHeadlist, operationTableHeadlist, WORK_TYPES } from './operationTab';
|
||||||
@@ -68,9 +65,10 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
const [detailBizId, setDetailBizId] = useState(0);
|
const [detailBizId, setDetailBizId] = useState(0);
|
||||||
const [city, setCity] = useState(0);
|
const [city, setCity] = useState(0);
|
||||||
const [sgg, setSgg] = useState(0);
|
const [sgg, setSgg] = useState(0);
|
||||||
const [ctpvCd, setCtpvCd] = useState('0');
|
const [ctpvCd, setCtpvCd] = useState('0'); // 하수정비기본계획 report
|
||||||
const [sigungu, setSigungu] = useState('0');
|
const [sigungu, setSigungu] = useState('0'); // 하수정비기본계획 report
|
||||||
const [gubun, setGubun] = useState(""); // 하수정비기본계획 report
|
const [gubun, setGubun] = useState(""); // 하수정비기본계획 report
|
||||||
|
const [reportGubun, setReportGubun] = useState("0"); // 하수정비기본계획 report
|
||||||
const [start1, setStart1] = useState("");
|
const [start1, setStart1] = useState("");
|
||||||
const [start2, setStart2] = useState("");
|
const [start2, setStart2] = useState("");
|
||||||
const [end1, setEnd1] = useState("");
|
const [end1, setEnd1] = useState("");
|
||||||
@@ -83,10 +81,7 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
const [yearFilter, setYearFilter] = useState({ start: "", end: "" });
|
const [yearFilter, setYearFilter] = useState({ start: "", end: "" });
|
||||||
const [filteredSiguns, setFilteredSiguns] = useState<SelectDataType[]>([{ val: '0', text: '전체', sido: '0' }]);
|
const [filteredSiguns, setFilteredSiguns] = useState<SelectDataType[]>([{ val: '0', text: '전체', sido: '0' }]);
|
||||||
|
|
||||||
const sidos = useCityCd();
|
|
||||||
const siguns = useSggCd();
|
|
||||||
const reportOriginData = useDcTree(""); //:Folder[]
|
|
||||||
|
|
||||||
// 오늘 날짜 구하기
|
// 오늘 날짜 구하기
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const todayYear = today.getFullYear().toString();
|
const todayYear = today.getFullYear().toString();
|
||||||
@@ -105,7 +100,6 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
if (activeTab === 'operation') return operationTableHeadlist;
|
if (activeTab === 'operation') return operationTableHeadlist;
|
||||||
if (activeTab === 'report') return reportTableHeadlist;
|
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
}, [activeTab, basicType, workType]);
|
}, [activeTab, basicType, workType]);
|
||||||
@@ -134,8 +128,6 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
setVar4("");
|
setVar4("");
|
||||||
setCity(0);
|
setCity(0);
|
||||||
setSgg(0);
|
setSgg(0);
|
||||||
setCtpvCd('0');
|
|
||||||
setSigungu('0');
|
|
||||||
setYearFilter({
|
setYearFilter({
|
||||||
start: "",
|
start: "",
|
||||||
end: "",
|
end: "",
|
||||||
@@ -281,41 +273,7 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
setDetailTableData([]);
|
setDetailTableData([]);
|
||||||
setDetailTableCount(0);
|
setDetailTableCount(0);
|
||||||
|
|
||||||
} else if (activeTab === 'report') {
|
}
|
||||||
//const reportOriginData = await getDcTree('경기도');
|
|
||||||
const reportData = flattenFolders(reportOriginData);
|
|
||||||
let filterReportData = reportData;
|
|
||||||
if (ctpvCd !== "0") { // 시도검색
|
|
||||||
const sidoOption = sidos.find((n) => n.val === ctpvCd);
|
|
||||||
filterReportData = filterReportData.filter(item => item.sido === sidoOption?.text);
|
|
||||||
}
|
|
||||||
if (sigungu !== "0") { // 시군구검색
|
|
||||||
const sigunguOption = filteredSiguns.find((n) => n.val === sigungu);
|
|
||||||
filterReportData = filterReportData.filter(item => item.sigungu === sigunguOption?.text);
|
|
||||||
}
|
|
||||||
if (yearFilter.start != "" && yearFilter.end == "") //승인년도검색
|
|
||||||
filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear >= yearFilter.start + "년" : null);
|
|
||||||
if (yearFilter.start == "" && yearFilter.end != "")
|
|
||||||
filterReportData = filterReportData.filter(item => (item.approvalYear) ? item.approvalYear <= yearFilter.end + "년" : null);
|
|
||||||
if (yearFilter.start != "" && yearFilter.end != "") {
|
|
||||||
filterReportData = filterReportData.filter(item => {
|
|
||||||
return (item.approvalYear) ? item.approvalYear >= yearFilter.start + "년" && item.approvalYear <= yearFilter.end + "년" : null;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (gubun !== "") { // 구분검색
|
|
||||||
filterReportData = filterReportData.filter(item => (item.plantZoneGugun) ? String(item.plantZoneGugun).includes(String(gubun)) : null);
|
|
||||||
}
|
|
||||||
console.log('report count:', filterReportData.length);
|
|
||||||
setTableCount(filterReportData.length || 0);
|
|
||||||
filterReportData = filterReportData.slice((curPage - 1) * 10, curPage * 10); // paging
|
|
||||||
filterReportData = filterReportData?.map((item, index) => ({ ...item, no: (curPage - 1) * 10 + index + 1 }));
|
|
||||||
//const fileList = await getDcFile("CLS20250530000041");
|
|
||||||
addFileName(filterReportData).then(data => {
|
|
||||||
filterReportData = data;
|
|
||||||
setTableData(filterReportData || []);
|
|
||||||
});
|
|
||||||
setTableData(filterReportData || []);
|
|
||||||
}
|
|
||||||
|
|
||||||
setShowTable(true);
|
setShowTable(true);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -588,31 +546,7 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// 하수도정비기본계획 테이블 cellClick 핸들러
|
|
||||||
const handleReportCellClick = (index: number | undefined, headId?: String) => {
|
|
||||||
console.log(index);
|
|
||||||
if (typeof index === "number" && tableData[index]) {
|
|
||||||
const reportData = tableData[index];
|
|
||||||
const fileName = reportData.fileName;
|
|
||||||
const filePath = reportData.filePath;
|
|
||||||
if (reportData.fileSn !== "") {
|
|
||||||
getFileDownload(reportData.fileSn, fileName, filePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleCtpvCdChange = (val: string | number) => { // 하수도정비기본계획.시도
|
|
||||||
const sidoOption = sidos.find((n) => n.val === val);
|
|
||||||
setCtpvCd(String(val));
|
|
||||||
if (val !== '0') {
|
|
||||||
const filterSiguns = siguns.filter(item => item.sido === sidoOption?.text);
|
|
||||||
filterSiguns.unshift({ val: '0', text: '전체', sido: '0' });
|
|
||||||
setFilteredSiguns(filterSiguns);
|
|
||||||
}
|
|
||||||
setSigungu("0");
|
|
||||||
setGubun("");
|
|
||||||
setYearFilter({ start: "", end: "", });
|
|
||||||
}
|
|
||||||
|
|
||||||
const renderBody = () => (
|
const renderBody = () => (
|
||||||
<>
|
<>
|
||||||
@@ -673,17 +607,6 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
{activeTab === 'report' && (
|
{activeTab === 'report' && (
|
||||||
<ReportTab
|
<ReportTab
|
||||||
open={open}
|
open={open}
|
||||||
gubun={gubun}
|
|
||||||
sidos={sidos}
|
|
||||||
ctpvCd={ctpvCd}
|
|
||||||
sigungu={sigungu}
|
|
||||||
filteredSiguns={filteredSiguns}
|
|
||||||
yearFilter={yearFilter}
|
|
||||||
handleSearch={handleSearch}
|
|
||||||
handleCtpvCdChange={handleCtpvCdChange}
|
|
||||||
setYearFilter={setYearFilter}
|
|
||||||
setGubun={setGubun}
|
|
||||||
setSigungu={setSigungu}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{/* </UITab2> */}
|
{/* </UITab2> */}
|
||||||
@@ -691,7 +614,7 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
|
|
||||||
{/* 📋 결과 리스트 */}
|
{/* 📋 결과 리스트 */}
|
||||||
{/* 기본정보 탭, 하수도정비기본계획보고서 탭 */}
|
{/* 기본정보 탭, 하수도정비기본계획보고서 탭 */}
|
||||||
{(activeTab === 'basic' || activeTab === 'report') && (
|
{(activeTab === 'basic' ) && (
|
||||||
<div className="h-[79vh] w-full overflow-hidden rounded-lg border">
|
<div className="h-[79vh] w-full overflow-hidden rounded-lg border">
|
||||||
{/* 테이블2 영역 (가로/세로 스크롤 가능) */}
|
{/* 테이블2 영역 (가로/세로 스크롤 가능) */}
|
||||||
<div className="flex-1 px-2 pb-2">
|
<div className="flex-1 px-2 pb-2">
|
||||||
@@ -706,7 +629,7 @@ const SearchModal: React.FC<SearchModalProps> = ({
|
|||||||
headlist={dynamicHeadlist}
|
headlist={dynamicHeadlist}
|
||||||
pageSize={10}
|
pageSize={10}
|
||||||
total={tableCount}
|
total={tableCount}
|
||||||
cellClick={activeTab === 'report' ? handleReportCellClick : handleBasicCellClick}
|
cellClick={handleBasicCellClick}
|
||||||
onPageChange={setCurPage}
|
onPageChange={setCurPage}
|
||||||
resetPageNo={isResetPage}
|
resetPageNo={isResetPage}
|
||||||
resetSelection={isResetSelection}
|
resetSelection={isResetSelection}
|
||||||
|
|||||||
+16
-21
@@ -31,6 +31,14 @@ const isYear = (value: string): boolean => {
|
|||||||
return /^[0-9]{4}년$/.test(value);
|
return /^[0-9]{4}년$/.test(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const reportGubuns = [{val: '0', text: '전체'}, {val: '1', text: '보고서'}
|
||||||
|
, {val: '2', text: '요약보고서'} , {val: '3', text: '부록'}, {val: '4', text: '기타'}];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flatten a hierarchical folder structure into a flat array.
|
||||||
|
* @param data - The hierarchical folder data to flatten.
|
||||||
|
* @returns An array of flattened folders with their paths and levels.
|
||||||
|
*/
|
||||||
export function flattenFolders(data: Folder[]): FlattenedFolder[] {
|
export function flattenFolders(data: Folder[]): FlattenedFolder[] {
|
||||||
const result: FlattenedFolder[] = [];
|
const result: FlattenedFolder[] = [];
|
||||||
const exceptNodeNm = ["부분","통합","전체"];
|
const exceptNodeNm = ["부분","통합","전체"];
|
||||||
@@ -72,15 +80,10 @@ export function flattenFolders(data: Folder[]): FlattenedFolder[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.forEach((root) => traverse(root, {}, 0));
|
data.forEach((root) => traverse(root, {}, 0));
|
||||||
console.log(result.slice(0, 10));
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getDcTree = async (clsfSystmNm:string) => {
|
export const getDcTree = async (clsfSystmNm:string) => {
|
||||||
//const cityName = encodeURIComponent(clsfSystmNm);
|
|
||||||
const queryString = 'clsfSystmNm='+clsfSystmNm;
|
|
||||||
console.log("getDcTree queryString:", queryString);
|
|
||||||
//const result = await getDcData(`/api/v1/dc/clsf${queryString ? `?${queryString}` : ''}`);
|
|
||||||
const result = await getDcData("/api/v1/dc/clsf?clsfSystmNm=" + clsfSystmNm);
|
const result = await getDcData("/api/v1/dc/clsf?clsfSystmNm=" + clsfSystmNm);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
@@ -110,13 +113,8 @@ export const addFileName = async (data:FlattenedFolder[]) => {
|
|||||||
data.map(async (item) => {
|
data.map(async (item) => {
|
||||||
const filenameArr:ReportDataFile[] = await getDcFile(String(item.clsfSystmSn));
|
const filenameArr:ReportDataFile[] = await getDcFile(String(item.clsfSystmSn));
|
||||||
const f = filenameArr[0];
|
const f = filenameArr[0];
|
||||||
//console.log("clsfSystmSn:", item.clsfSystmSn, "f:", f);
|
|
||||||
const result = {...item, fileName:f?.fileTitle, regDate:f?.regDt, fileSn:f?.fileSn, filePath:f?.filePath};
|
const result = {...item, fileName:f?.fileTitle, regDate:f?.regDt, fileSn:f?.fileSn, filePath:f?.filePath};
|
||||||
// if (f !== undefined && f.fileSn !== "") {
|
|
||||||
// const fprcs = await getDcFileprcs(f?.fileSn);
|
|
||||||
// if (fprcs.length>0)
|
|
||||||
// result.filePath = fprcs[0].filePath;
|
|
||||||
// }
|
|
||||||
return result;
|
return result;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@@ -124,7 +122,6 @@ export const addFileName = async (data:FlattenedFolder[]) => {
|
|||||||
}
|
}
|
||||||
export const getDcFileprcs = async (fileSn:string) => {
|
export const getDcFileprcs = async (fileSn:string) => {
|
||||||
const queryString = 'fileSn='+fileSn;
|
const queryString = 'fileSn='+fileSn;
|
||||||
console.log("getDcTree queryString:", queryString);
|
|
||||||
const result = await getDcData(`/api/v1/dc/fileprcs${queryString ? `?${queryString}` : ''}`);
|
const result = await getDcData(`/api/v1/dc/fileprcs${queryString ? `?${queryString}` : ''}`);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
@@ -151,9 +148,6 @@ export const fileDownload = (data:Blob, fileName:string) => { // Blob데이터
|
|||||||
window.URL.revokeObjectURL(url);
|
window.URL.revokeObjectURL(url);
|
||||||
}
|
}
|
||||||
export const getFileDownload = async (fileSn:string, fileName:string, filePath:string) => {
|
export const getFileDownload = async (fileSn:string, fileName:string, filePath:string) => {
|
||||||
//const fileprcsData = await getDcFileprcs(fileSn); // filePath 조회
|
|
||||||
//if (fileprcsData?.length === 0 ) { alert("filePath 조회 오류"); }
|
|
||||||
//if (fileprcsData[0].filePath === "") alert("filePath 정보 없으므로 다운로드 불가");
|
|
||||||
if (filePath === "") alert("filePath 정보 없으므로 다운로드 불가:filesn"+ fileSn);
|
if (filePath === "") alert("filePath 정보 없으므로 다운로드 불가:filesn"+ fileSn);
|
||||||
const blobData = await getDcFileDownload(filePath); // 실제 다운로드 API
|
const blobData = await getDcFileDownload(filePath); // 실제 다운로드 API
|
||||||
fileDownload(blobData, fileName);
|
fileDownload(blobData, fileName);
|
||||||
@@ -165,12 +159,13 @@ export const getCityCd = async (): Promise<SelectDataType[]> => {
|
|||||||
if (!response.ok) throw new Error(`시도 데이터 오류: ${response.status}`);
|
if (!response.ok) throw new Error(`시도 데이터 오류: ${response.status}`);
|
||||||
const res = await response.json();
|
const res = await response.json();
|
||||||
const city = res.data;
|
const city = res.data;
|
||||||
const cityCd = city.map((item: any) => ({
|
let citys:SelectDataType[] = city.map((item: {adstDstrCd:string, sido:string}) => ({
|
||||||
val: item.adstDstrCd,
|
val: item.adstDstrCd,
|
||||||
text: item.sido,
|
text: item.sido,
|
||||||
}));
|
}));
|
||||||
cityCd.unshift({ val: '0', text: '전체' });
|
citys = citys.sort((a:SelectDataType, b:SelectDataType) => a.text.localeCompare(b.text));
|
||||||
return cityCd;
|
citys.unshift({ val: '0', text: '전체' });
|
||||||
|
return citys;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('시도 데이터를 가져오는데 실패했습니다:', error);
|
console.error('시도 데이터를 가져오는데 실패했습니다:', error);
|
||||||
return [{ val: '0', text: '전체', sido: '0' }];
|
return [{ val: '0', text: '전체', sido: '0' }];
|
||||||
@@ -186,9 +181,9 @@ export const useSggCd = () => {
|
|||||||
if (result) {
|
if (result) {
|
||||||
setData(result);
|
setData(result);
|
||||||
}
|
}
|
||||||
|
console.log("useSggCd호출");
|
||||||
};
|
};
|
||||||
fetch();
|
fetch();
|
||||||
console.log("useSggCd호출");
|
|
||||||
}, []);
|
}, []);
|
||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
@@ -200,7 +195,7 @@ export const getSggCd = async (): Promise<SelectDataType[]> => {
|
|||||||
if (!response.ok) throw new Error(`시군구 데이터 오류: ${response.status}`);
|
if (!response.ok) throw new Error(`시군구 데이터 오류: ${response.status}`);
|
||||||
const res = await response.json();
|
const res = await response.json();
|
||||||
const sgg = res.data;
|
const sgg = res.data;
|
||||||
const sggCd = sgg.map((item: any) => ({
|
const sggCd = sgg.map((item: {adstDstrCd:string, sido:string, gugun:string}) => ({
|
||||||
val: item.adstDstrCd,
|
val: item.adstDstrCd,
|
||||||
sido: item.sido,
|
sido: item.sido,
|
||||||
text: item.gugun,
|
text: item.gugun,
|
||||||
@@ -222,9 +217,9 @@ export const useCityCd = () => {
|
|||||||
if (result) {
|
if (result) {
|
||||||
setData(result);
|
setData(result);
|
||||||
}
|
}
|
||||||
|
console.log("useCityCd호출");
|
||||||
};
|
};
|
||||||
fetch();
|
fetch();
|
||||||
console.log("useCityCd호출");
|
|
||||||
}, []);
|
}, []);
|
||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
@@ -87,7 +87,6 @@ export const deleteData = async (url: string, data?: object): Promise<any> => {
|
|||||||
|
|
||||||
// RSONE DC API 호출
|
// RSONE DC API 호출
|
||||||
export const getDcData = async (url: string, data?: object): Promise<any> => {
|
export const getDcData = async (url: string, data?: object): Promise<any> => {
|
||||||
console.log(url);
|
|
||||||
const res = await fetch('/dc-service' + url, {
|
const res = await fetch('/dc-service' + url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -61,13 +61,16 @@ const Map = () => {
|
|||||||
|
|
||||||
// 2. data가 OpenLayers Feature 인스턴스인지 확인
|
// 2. data가 OpenLayers Feature 인스턴스인지 확인
|
||||||
let foundFeature: any = null;
|
let foundFeature: any = null;
|
||||||
|
console.log(data)
|
||||||
|
//console.log(data.getId())
|
||||||
let featureId = data.fid;
|
let featureId = data.fid;
|
||||||
const layerName = data.layerNm;
|
const layerName = data.layerNm;
|
||||||
if (layerName === "tb_wr_bdst_ruse_fclt") {
|
|
||||||
|
if (layerName === "재이용시설") {
|
||||||
// 재이용시설
|
// 재이용시설
|
||||||
featureId = `${layerName}.${data.searchPk}`;
|
featureId = `${layerName}.${data.searchPk}`;
|
||||||
} else if ( //빗물이용시설, 중수도시설
|
} else if ( //빗물이용시설, 중수도시설
|
||||||
layerName === "tb_wr_rnwtr_utztn_fclt" ||
|
layerName === "빗물이용시설" ||
|
||||||
layerName == "tb_wr_rswtr_fclt"
|
layerName == "tb_wr_rswtr_fclt"
|
||||||
) {
|
) {
|
||||||
featureId = `${layerName}.${data.bdstInfoSn}`;
|
featureId = `${layerName}.${data.bdstInfoSn}`;
|
||||||
@@ -136,16 +139,6 @@ const Map = () => {
|
|||||||
gisMaps={gisMaps}
|
gisMaps={gisMaps}
|
||||||
isMiniMap={false}
|
isMiniMap={false}
|
||||||
searchView={undefined}
|
searchView={undefined}
|
||||||
// searchView={(props: any) => (
|
|
||||||
// <MapSearchBar
|
|
||||||
// searchType="공급처 후보지 조회"
|
|
||||||
// showApplyButton={false}
|
|
||||||
// checkedLayers={checkedLayers}
|
|
||||||
// checkedLayersData={checkedLayersData}
|
|
||||||
// {...props}
|
|
||||||
// />
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
detailView={(props: any) => (
|
detailView={(props: any) => (
|
||||||
<NewWindowPopup
|
<NewWindowPopup
|
||||||
onClose={handlePopupClose} // 메모이제이션된 함수 사용
|
onClose={handlePopupClose} // 메모이제이션된 함수 사용
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
|
|||||||
const [mngList, setMngList] = useState<DemandCompType[]>(coSttnRes || []);
|
const [mngList, setMngList] = useState<DemandCompType[]>(coSttnRes || []);
|
||||||
///////////////////////////////////////////// 피쳐데이터 선택 시 각 시설별 데이터 처리 ///////////////////////////////////////////////
|
///////////////////////////////////////////// 피쳐데이터 선택 시 각 시설별 데이터 처리 ///////////////////////////////////////////////
|
||||||
const getSelectedLayers = () => {
|
const getSelectedLayers = () => {
|
||||||
|
console.log(1)
|
||||||
let result = null;
|
let result = null;
|
||||||
const layers = gisMap ? gisMap.getLayers().getArray().filter((l: any) => l.getVisible()) : []; // gisMap이 null인지 확인 후 레이어 가져오기
|
const layers = gisMap ? gisMap.getLayers().getArray().filter((l: any) => l.getVisible()) : []; // gisMap이 null인지 확인 후 레이어 가져오기
|
||||||
let featureLayer: { get: (key: string) => any } = { get: () => null };
|
let featureLayer: { get: (key: string) => any } = { get: () => null };
|
||||||
@@ -127,6 +128,7 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
result = featureLayer.get('lyrNm');
|
result = featureLayer.get('lyrNm');
|
||||||
|
console.log(result)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
@@ -156,15 +158,15 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const detainSttn = async (featureCd: string, layerNm: string) => {
|
const detainSttn = async (featureCd: string, layerNm: string) => {
|
||||||
if (layerNm == 'tb_wr_rnwtr_utztn_fclt') { //빗물이용시설
|
if (layerNm == '빗물이용시설') { //빗물이용시설
|
||||||
const res = await getFetch(fetchType.WR, `/reuseFc/rainyInfoList/1/20/0/${featureCd}`)
|
const res = await getFetch(fetchType.WR, `/reuseFc/rainyInfoList/1/20/0/${featureCd}`)
|
||||||
setRainList(res)
|
setRainList(res)
|
||||||
}
|
}
|
||||||
else if (layerNm == 'tb_wr_rswtr_fclt') { //중수도 시설
|
else if (layerNm == '중수도시설') { //중수도 시설
|
||||||
const res = await getFetch(fetchType.WR, `/reuseFc/waterreuseFc/1/20/0/${featureCd}`)
|
const res = await getFetch(fetchType.WR, `/reuseFc/waterreuseFc/1/20/0/${featureCd}`)
|
||||||
setRswtrList(res)
|
setRswtrList(res)
|
||||||
}
|
}
|
||||||
else if(layerNm =='tb_wr_ruse_fclt_dmd_co'){ //수요처
|
else if(layerNm =='수요처'){ //수요처
|
||||||
const res = await getFetch(fetchType.WR, `/reuseFc/request/1/20/0/${featureCd}`)
|
const res = await getFetch(fetchType.WR, `/reuseFc/request/1/20/0/${featureCd}`)
|
||||||
setMngList(res)
|
setMngList(res)
|
||||||
}
|
}
|
||||||
@@ -192,6 +194,7 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
|
|||||||
},[mngList])
|
},[mngList])
|
||||||
|
|
||||||
const layerId = getSelectedLayers();
|
const layerId = getSelectedLayers();
|
||||||
|
console.log(layerId)
|
||||||
if (featureData && typeof featureData.getProperties === "function") {
|
if (featureData && typeof featureData.getProperties === "function") {
|
||||||
const selectedVal = featureData.getProperties();
|
const selectedVal = featureData.getProperties();
|
||||||
let featureCd = layerId == '하수재이용시설' ? selectedVal?.swtrmt_fclt_cd : layerId == '빗물이용시설' || layerId == '중수도시설' || layerId == '온배수시설' || layerId == '수요처' ? selectedVal?.bdst_nm : layerId == '하수처리시설' ? selectedVal?.swtrmt_fclt_nm : null;
|
let featureCd = layerId == '하수재이용시설' ? selectedVal?.swtrmt_fclt_cd : layerId == '빗물이용시설' || layerId == '중수도시설' || layerId == '온배수시설' || layerId == '수요처' ? selectedVal?.bdst_nm : layerId == '하수처리시설' ? selectedVal?.swtrmt_fclt_nm : null;
|
||||||
@@ -505,17 +508,17 @@ const NewWindowPopup: React.FC<NewWindowPopupProps> = ({
|
|||||||
layerId = seletectedLayerNm || '';
|
layerId = seletectedLayerNm || '';
|
||||||
}
|
}
|
||||||
//하수처리시설
|
//하수처리시설
|
||||||
const isPrcsFclt = layerId == 'tb_il_swage_prcs_fclt'
|
const isPrcsFclt = layerId == '하수처리시설'
|
||||||
// 재이용시설
|
// 재이용시설
|
||||||
const isPbnst = layerId == 'tb_wr_bdst_ruse_fclt';
|
const isPbnst = layerId == '재이용시설';
|
||||||
// 빗물이용시설
|
// 빗물이용시설
|
||||||
const isRain = layerId == 'tb_wr_rnwtr_utztn_fclt';
|
const isRain = layerId == '빗물이용시설';
|
||||||
// 중수도시설
|
// 중수도시설
|
||||||
const isRswt = layerId == 'tb_wr_rswtr_fclt';
|
const isRswt = layerId == '중수도시설';
|
||||||
// 온배수시설
|
// 온배수시설
|
||||||
const isHtdfl = layerId == 'tb_wr_htdfl_fclt';
|
const isHtdfl = layerId == '온배수시설';
|
||||||
// 수요처관리
|
// 수요처관리
|
||||||
const isReuseMng = layerId == 'tb_wr_ruse_fclt_dmd_co';
|
const isReuseMng = layerId == '수요처관리';
|
||||||
if (isPrcsFclt) {
|
if (isPrcsFclt) {
|
||||||
if (viewMode == 'list') {
|
if (viewMode == 'list') {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ export default function PublicReuseFaciltyInsert() {
|
|||||||
// defaultValues: { items: pbnstRegArrayZod.parse([]) },
|
// defaultValues: { items: pbnstRegArrayZod.parse([]) },
|
||||||
mode: "onChange",
|
mode: "onChange",
|
||||||
});
|
});
|
||||||
const { isDirty } = form.formState;
|
// const { isDirty } = form.formState;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
fields: items,
|
fields: items,
|
||||||
@@ -90,10 +90,10 @@ export default function PublicReuseFaciltyInsert() {
|
|||||||
}, [pbnst.isInit, pubHasuInit]);
|
}, [pbnst.isInit, pubHasuInit]);
|
||||||
|
|
||||||
const onSubmit = async (valuse: { items: PbnstRegArrrayType }) => {
|
const onSubmit = async (valuse: { items: PbnstRegArrrayType }) => {
|
||||||
if (!isDirty) {
|
// if (!isDirty) {
|
||||||
toast.error("변경사항이 없습니다."); // 변경사항이 없으면 메시지 표시
|
// toast.error("변경사항이 없습니다."); // 변경사항이 없으면 메시지 표시
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
const data = writeRgtrAndMdfr(valuse.items);
|
const data = writeRgtrAndMdfr(valuse.items);
|
||||||
let bizs = [] as fcBizType[];
|
let bizs = [] as fcBizType[];
|
||||||
data.forEach((fclt) => {
|
data.forEach((fclt) => {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useWrStore } from "@/app/store";
|
import { useWrStore } from "@/app/store";
|
||||||
import { btnClass } from "@/app/store/common/code";
|
import { btnClass } from "@/app/store/common/code";
|
||||||
|
import { prfRegPageSize } from "@/app/store/prfmncReg/pbnstPrfmncReg";
|
||||||
import type { customPbnst } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
import type { customPbnst } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type";
|
||||||
import type { WaterReuseFacility } from "@/app/store/ruseFcltMng/fcltSttn/pbnstSttn/type";
|
import type { WaterReuseFacility } from "@/app/store/ruseFcltMng/fcltSttn/pbnstSttn/type";
|
||||||
import { excelDownload, yearOptions } from "@/components/lib/func/commom";
|
import { excelDownload, yearOptions } from "@/components/lib/func/commom";
|
||||||
@@ -33,6 +34,8 @@ export default function PbnstSttn() {
|
|||||||
} = useWrStore((state) => state);
|
} = useWrStore((state) => state);
|
||||||
|
|
||||||
const { pbnstSttnRes, fclts, pbnstSttnResCount } = pbnstSttn;
|
const { pbnstSttnRes, fclts, pbnstSttnResCount } = pbnstSttn;
|
||||||
|
|
||||||
|
const [isReset, setIsReset] = useState(false);
|
||||||
const ref = useRef<ReturnType>({} as ReturnType);
|
const ref = useRef<ReturnType>({} as ReturnType);
|
||||||
const [searchYear, setSearchYear] = useState<string>(
|
const [searchYear, setSearchYear] = useState<string>(
|
||||||
String(new Date().getFullYear())
|
String(new Date().getFullYear())
|
||||||
@@ -67,6 +70,24 @@ export default function PbnstSttn() {
|
|||||||
},
|
},
|
||||||
[getPbnStnDetail, pbnstSttnRes]
|
[getPbnStnDetail, pbnstSttnRes]
|
||||||
);
|
);
|
||||||
|
useEffect(() => {
|
||||||
|
if (!pbnstSttn.isInit) {
|
||||||
|
getFlcts();
|
||||||
|
}
|
||||||
|
}, [pbnstSttn.isInit]);
|
||||||
|
useEffect(() => {
|
||||||
|
|
||||||
|
pbnSttnInit("1", "15", ref.current, searchYear, fclts);
|
||||||
|
}, [fclts]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (pbnstSttnRes && pbnstSttnRes.length > 0) {
|
||||||
|
setBdstTable(pbnstSttnRes);
|
||||||
|
} else {
|
||||||
|
setBdstTable([]);
|
||||||
|
}
|
||||||
|
}, [pbnstSttnRes]);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (pbnstSttn.excelList.length >= 0) {
|
if (pbnstSttn.excelList.length >= 0) {
|
||||||
@@ -79,23 +100,7 @@ export default function PbnstSttn() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}, [pbnstSttn.excelList]);
|
}, [pbnstSttn.excelList]);
|
||||||
useEffect(() => {
|
|
||||||
|
|
||||||
if (!pbnstSttn.isInit) {
|
|
||||||
getFlcts();
|
|
||||||
}
|
|
||||||
}, [pbnstSttn.isInit, pbnSttnInit, ref.current]);
|
|
||||||
useEffect(() => {
|
|
||||||
if (pbnstSttnRes && pbnstSttnRes.length > 0) {
|
|
||||||
setBdstTable(pbnstSttnRes);
|
|
||||||
} else {
|
|
||||||
setBdstTable([]);
|
|
||||||
}
|
|
||||||
}, [pbnstSttnRes]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
pbnSttnInit("1", "15", ref.current, searchYear, fclts);
|
|
||||||
}, [fclts]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (pbnstSttn.pbnstDetail.pbnstRuseFcltId)
|
if (pbnstSttn.pbnstDetail.pbnstRuseFcltId)
|
||||||
@@ -157,16 +162,11 @@ export default function PbnstSttn() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
queryClick={function (returnType: ReturnType): void {
|
queryClick={ ()=> {
|
||||||
pbnstSttnSearch(
|
// pbnSearch(returnType);
|
||||||
false,
|
|
||||||
"1",
|
//setTableIndex(0)
|
||||||
"15",
|
setIsReset(true);
|
||||||
returnType,
|
|
||||||
pbnRuseNm,
|
|
||||||
searchYear,
|
|
||||||
fclts
|
|
||||||
);
|
|
||||||
}}
|
}}
|
||||||
excelClick={excelClick}
|
excelClick={excelClick}
|
||||||
initClick={function (): void {
|
initClick={function (): void {
|
||||||
@@ -194,13 +194,16 @@ export default function PbnstSttn() {
|
|||||||
pbnstSttnSearch(
|
pbnstSttnSearch(
|
||||||
false,
|
false,
|
||||||
String(page),
|
String(page),
|
||||||
String(15),
|
String(prfRegPageSize),
|
||||||
ref.current,
|
ref.current,
|
||||||
pbnRuseNm,
|
pbnRuseNm,
|
||||||
searchYear,
|
searchYear,
|
||||||
fclts
|
fclts
|
||||||
);
|
);
|
||||||
|
setIsReset(false);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
resetPageNo={isReset}
|
||||||
>
|
>
|
||||||
<HeadMakeColSpan upHeadList={pbnstSttn.pbnstSttNodeList} />
|
<HeadMakeColSpan upHeadList={pbnstSttn.pbnstSttNodeList} />
|
||||||
</UiTable>
|
</UiTable>
|
||||||
|
|||||||
@@ -38,11 +38,12 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { headMakeprfmnc } from "../chkgdnReg/TableHead";
|
import { headMakeprfmnc } from "../chkgdnReg/TableHead";
|
||||||
|
|
||||||
export default function PrfmncPrfmncReg() {
|
export default function PrfmncPrfmncReg() {
|
||||||
const { auth, prfmnc, prfmncHasuInit, prfmnRegData, prfmncHasuNmSearch } = useWrStore(
|
const { auth, prfmnc, prfmncHasuInit, prfmnRegData, prfmncHasuNmSearch,getPrfFmcRes } = useWrStore(
|
||||||
(state) => state
|
(state) => state
|
||||||
);
|
);
|
||||||
const { pbnstPrfmncHeadList, monthHeadList, prfmncRes, prfmncResCount } = prfmnc;
|
const { prfPbnFclts, pbnstPrfmncHeadList, monthHeadList, prfmncRes, prfmncResCount } = prfmnc;
|
||||||
const { regAuthrtYn, mdfcnAuthrtYn } = auth;
|
const { regAuthrtYn, mdfcnAuthrtYn } = auth;
|
||||||
|
const [isReset, setIsReset] = useState(false);
|
||||||
const [bdstTable, setbdstTable] = useState<FcPrfType[]>();
|
const [bdstTable, setbdstTable] = useState<FcPrfType[]>();
|
||||||
const [searchTxt, setSearchTxt] = useState<string>();
|
const [searchTxt, setSearchTxt] = useState<string>();
|
||||||
const [isExcelOpen, setIsExcelOPen] = useState<{
|
const [isExcelOpen, setIsExcelOPen] = useState<{
|
||||||
@@ -51,7 +52,6 @@ export default function PrfmncPrfmncReg() {
|
|||||||
}>({ isModal: false, data: {} as FcPrfType });
|
}>({ isModal: false, data: {} as FcPrfType });
|
||||||
const [inputData, setInputData] = useState<any[]>();
|
const [inputData, setInputData] = useState<any[]>();
|
||||||
const [pbnstRuseFcltId, setpbnstRuseFcltId] = useState<string>();
|
const [pbnstRuseFcltId, setpbnstRuseFcltId] = useState<string>();
|
||||||
const [pageNation, setPageNation] = useState<number>(1);
|
|
||||||
const [cellNum, setCellNum] = useState<number>(1);
|
const [cellNum, setCellNum] = useState<number>(1);
|
||||||
const [searchYear, setSearchYear] = useState<string>(
|
const [searchYear, setSearchYear] = useState<string>(
|
||||||
String(new Date().getFullYear())
|
String(new Date().getFullYear())
|
||||||
@@ -65,20 +65,6 @@ export default function PrfmncPrfmncReg() {
|
|||||||
"A1:O1"
|
"A1:O1"
|
||||||
);
|
);
|
||||||
}, [prfmnc.excelList]);
|
}, [prfmnc.excelList]);
|
||||||
/*
|
|
||||||
const onSave = useCallback(
|
|
||||||
async() => {
|
|
||||||
if (pbnstRuseFcltId) {
|
|
||||||
await prfmnRegData(pageNation,'41',
|
|
||||||
excelToPbnPrfData(
|
|
||||||
inputData as unknown as JSON[],
|
|
||||||
searchYear,
|
|
||||||
pbnstRuseFcltId
|
|
||||||
) as unknown as PrfType
|
|
||||||
);
|
|
||||||
// cellClick(cellNum)
|
|
||||||
}
|
|
||||||
}, [inputData, searchYear, pbnstRuseFcltId, pageNation,cellNum]);*/
|
|
||||||
|
|
||||||
const { t } = useTranslation('base');
|
const { t } = useTranslation('base');
|
||||||
const onSave = useCallback(() => {
|
const onSave = useCallback(() => {
|
||||||
@@ -86,19 +72,20 @@ export default function PrfmncPrfmncReg() {
|
|||||||
if (!pbnstRuseFcltId) return;
|
if (!pbnstRuseFcltId) return;
|
||||||
|
|
||||||
prfmnRegData(
|
prfmnRegData(
|
||||||
pageNation,
|
1,
|
||||||
'41',
|
'41',
|
||||||
excelToPbnPrfData(
|
excelToPbnPrfData(
|
||||||
inputData as unknown as JSON[],
|
inputData as unknown as JSON[],
|
||||||
searchYear,
|
searchYear,
|
||||||
pbnstRuseFcltId
|
pbnstRuseFcltId
|
||||||
) as unknown as PrfType
|
) as unknown as PrfType
|
||||||
, searchYear
|
, searchYear,
|
||||||
|
prfPbnFclts
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
confirmToast(t('isUpdateMsg'), handleConfirm);
|
confirmToast(t('isUpdateMsg'), handleConfirm);
|
||||||
}, [inputData, searchYear, pbnstRuseFcltId, pageNation, cellNum]);
|
}, [inputData, searchYear, pbnstRuseFcltId, cellNum,prfPbnFclts]);
|
||||||
|
|
||||||
const cellClick = useCallback(
|
const cellClick = useCallback(
|
||||||
(index: number | undefined) => {
|
(index: number | undefined) => {
|
||||||
@@ -194,10 +181,15 @@ export default function PrfmncPrfmncReg() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!prfmnc.isInit) {
|
if (!prfmnc.isInit) {
|
||||||
const year = new Date().getFullYear()
|
getPrfFmcRes()
|
||||||
prfmncHasuInit(1, '41', String(year));
|
|
||||||
}
|
}
|
||||||
}, [prfmnc.isInit, prfmncHasuInit]);
|
}, [prfmnc.isInit, getPrfFmcRes]);
|
||||||
|
|
||||||
|
|
||||||
|
useEffect(() =>{
|
||||||
|
const year = new Date().getFullYear()
|
||||||
|
prfmncHasuInit(1, '41',String(year) ,prfPbnFclts);
|
||||||
|
},[prfPbnFclts])
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
||||||
|
|
||||||
@@ -254,14 +246,8 @@ export default function PrfmncPrfmncReg() {
|
|||||||
<div className="flex flex-row space-x-2">
|
<div className="flex flex-row space-x-2">
|
||||||
<Button size={"sm"} onClick={() => {
|
<Button size={"sm"} onClick={() => {
|
||||||
|
|
||||||
if (searchTxt && searchTxt?.length > 0) {
|
|
||||||
prfmncHasuNmSearch(1, '41', searchYear, searchTxt)
|
setIsReset(true)
|
||||||
setPageNation(1)
|
|
||||||
} else {
|
|
||||||
prfmncHasuInit(1, '41', searchYear)
|
|
||||||
setPageNation(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
}}>
|
}}>
|
||||||
조회
|
조회
|
||||||
</Button>
|
</Button>
|
||||||
@@ -314,10 +300,15 @@ export default function PrfmncPrfmncReg() {
|
|||||||
setCellNum(index ?? 0);
|
setCellNum(index ?? 0);
|
||||||
}}
|
}}
|
||||||
onPageChange={
|
onPageChange={
|
||||||
(page) => {
|
(page:number) => {
|
||||||
prfmncHasuInit(page, '41', searchYear);
|
if (searchTxt && searchTxt?.length > 0) {
|
||||||
setPageNation(page)
|
prfmncHasuNmSearch(page, '41', searchYear, searchTxt,prfPbnFclts)
|
||||||
|
} else {
|
||||||
|
prfmncHasuInit(page, '41', searchYear,prfPbnFclts)
|
||||||
|
}
|
||||||
|
setIsReset(false);
|
||||||
}}
|
}}
|
||||||
|
resetPageNo={isReset}
|
||||||
/>
|
/>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
</ListDiv>
|
</ListDiv>
|
||||||
@@ -350,9 +341,10 @@ export default function PrfmncPrfmncReg() {
|
|||||||
setIsExcelOPen({ ...isExcelOpen, isModal: open })
|
setIsExcelOPen({ ...isExcelOpen, isModal: open })
|
||||||
}}
|
}}
|
||||||
setModalExcelData={async (excelData) => {
|
setModalExcelData={async (excelData) => {
|
||||||
await prfmnRegData(pageNation, '41',
|
await prfmnRegData(1, '41',
|
||||||
excelData,
|
excelData,
|
||||||
searchYear
|
searchYear
|
||||||
|
,prfPbnFclts
|
||||||
);
|
);
|
||||||
// 데이터 저장 후 UI 업데이트는 useEffect가 감지하여 처리하므로 여기서는 호출하지 않습니다.
|
// 데이터 저장 후 UI 업데이트는 useEffect가 감지하여 처리하므로 여기서는 호출하지 않습니다.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,9 +150,9 @@ export default function PbnstPrfmncSttn() {
|
|||||||
}
|
}
|
||||||
const tableData = [...inUsageData, ...outUsageData, usageTotalObj];
|
const tableData = [...inUsageData, ...outUsageData, usageTotalObj];
|
||||||
setPrfData(tableData);
|
setPrfData(tableData);
|
||||||
setExcelData(excelPrfmncSttnParsing(prfData ?? []))
|
setExcelData(excelPrfmncSttnParsing(tableData ?? []))
|
||||||
// });
|
|
||||||
} else {
|
} else {
|
||||||
|
setExcelData(excelPrfmncSttnParsing([]))
|
||||||
setPrfData([]);
|
setPrfData([]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -605,7 +605,11 @@ export default function PbnstPrfmncSttn() {
|
|||||||
isResetPage(true)
|
isResetPage(true)
|
||||||
}}
|
}}
|
||||||
excelClick={excelClick}
|
excelClick={excelClick}
|
||||||
initClick={function (): void { }}
|
initClick={function (): void {
|
||||||
|
setPbnRuseNm("");
|
||||||
|
setFromDate(String(new Date().getFullYear()));
|
||||||
|
setToDate(String(new Date().getFullYear()))
|
||||||
|
}}
|
||||||
btnClass={btnClass}
|
btnClass={btnClass}
|
||||||
ref={ref} isAdmin={false} />
|
ref={ref} isAdmin={false} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export const DmdCoReqSchema = z.object({
|
|||||||
z.object({
|
z.object({
|
||||||
ruseUtztnFcltNm: z.string(),
|
ruseUtztnFcltNm: z.string(),
|
||||||
ruseUtztnFcltCd: z.string(),
|
ruseUtztnFcltCd: z.string(),
|
||||||
})
|
}).nullish()
|
||||||
).nullish(),
|
).nullish(),
|
||||||
totalConstCost: z.number().nullish(),
|
totalConstCost: z.number().nullish(),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -52,8 +52,6 @@ export const coSttnActionsExport: (set: any) => coSttnActions = (
|
|||||||
`/reuseFc/request/${pageNo}/${pageCnt}/${con}`
|
`/reuseFc/request/${pageNo}/${pageCnt}/${con}`
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log('coSttnRes ', coSttnRes)
|
|
||||||
|
|
||||||
set((state: coSttnState) => {
|
set((state: coSttnState) => {
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
isInvalidNumber,
|
isInvalidNumber,
|
||||||
parseRawValue,
|
parseRawValue,
|
||||||
} from "@/components/lib/func/excelFunc";
|
} from "@/components/lib/func/excelFunc";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
export const useTypes = [
|
export const useTypes = [
|
||||||
"조경용수",
|
"조경용수",
|
||||||
"청소화장실용수",
|
"청소화장실용수",
|
||||||
@@ -16,6 +17,18 @@ export const useTypes = [
|
|||||||
"기타",
|
"기타",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
export const chkMngType =[
|
||||||
|
'위탁',
|
||||||
|
'자체'
|
||||||
|
]
|
||||||
|
export const chkSpwtPositnType = [
|
||||||
|
'유량계',
|
||||||
|
'수위계',
|
||||||
|
'펌프적산전력계',
|
||||||
|
'기타'
|
||||||
|
]
|
||||||
|
|
||||||
export type Buildingtype = {
|
export type Buildingtype = {
|
||||||
bdstInfoSn: number;
|
bdstInfoSn: number;
|
||||||
ctpvCd: 1;
|
ctpvCd: 1;
|
||||||
@@ -143,43 +156,56 @@ export const excelToRainChkData = (excelData: any, year: string) => {
|
|||||||
})
|
})
|
||||||
.filter((el: any) => el !== undefined);
|
.filter((el: any) => el !== undefined);
|
||||||
|
|
||||||
|
console.log("rainChkgdData", rainChkgdData);
|
||||||
if (rainChkgdData.length > 0) {
|
if (rainChkgdData.length > 0) {
|
||||||
rainChkgdData.forEach((rain: any) => {
|
rainChkgdData.forEach((rain: any) => {
|
||||||
const defaultMessage = `[시설명: ${rain.bdstNm}, 점검일: ${rain.chckYmd}, 이용용도: ${rain.guideDetails[0]?.utztnUsgCd}] 항목에서 `;
|
const defaultMessage = `[시설명: ${rain.bdstNm}, 점검일: ${rain.chckYmd}, 이용용도: ${rain.guideDetails[0]?.utztnUsgCd}] 항목에서 `;
|
||||||
|
|
||||||
if (rain.chckYmd && isInvalidDate(rain.chckYmd)) {
|
if (rain.chckYmd && isInvalidDate(rain.chckYmd)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage + `점검일: 날짜 형식 아님 (${rain.chckYmd})`
|
defaultMessage + `점검일: 날짜 형식 아님 입력값 : (${rain.chckYmd})`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (rain.anlOperCst.length > 2 && isInvalidNumber(rain.anlOperCst)) {
|
if (rain.anlOperCst.length > 2 && isInvalidNumber(rain.anlOperCst)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage +
|
||||||
` 연간운영비(원/년): 숫자 형식 아님 (${rain.anlOperCst})`
|
` 연간운영비(원/년): 숫자 형식 아님 /입력값:${rain.anlOperCst}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (rain.oilqMeasMthd.length > 1 && !chkMngType.includes(rain.oilqMeasMthd)) {
|
||||||
|
issues.push(
|
||||||
|
defaultMessage + `유량측정방법: 위탁 혹은 자체 만 허용) /입력값:${rain.oilqMeasMthd}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (rain.spwtPositn.length > 1 && !chkSpwtPositnType.includes(rain.spwtPositn)) {
|
||||||
|
issues.push(
|
||||||
|
defaultMessage + `측정위치: 유량계, 수위계, 펌프적산전력계, 기타 중 하나만 허용) /입력값:${rain.spwtPositn}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
rain.rainyDetails?.forEach((key) => {
|
rain.rainyDetails?.forEach((key) => {
|
||||||
if (key.ph?.length > 1 && isInvalidNumber(key.ph)) {
|
if (key.ph?.length > 1 && isInvalidNumber(key.ph)) {
|
||||||
issues.push(defaultMessage + `PH: 숫자 형식 아님 (${key.ph})`);
|
issues.push(defaultMessage + `PH: 숫자 형식 아님 /입력값:${key.ph}`);
|
||||||
}
|
}
|
||||||
if (key.trbt?.length > 1 && isInvalidNumber(key.trbt)) {
|
if (key.trbt?.length > 1 && isInvalidNumber(key.trbt)) {
|
||||||
issues.push(defaultMessage + `탁도: 숫자 형식 아님 (${key.trbt})`);
|
issues.push(defaultMessage + `탁도: 숫자 형식 아님 /입력값:${key.trbt}`);
|
||||||
}
|
}
|
||||||
if (key.grssClfg?.length > 1 && isInvalidNumber(key.grssClfg)) {
|
if (key.grssClfg?.length > 1 && isInvalidNumber(key.grssClfg)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage + `총대장균군수: 숫자 형식 아님 (${key.grssClfg})`
|
defaultMessage + `총대장균군수: 숫자 형식 아님 /입력값:${key.grssClfg}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (key.levyAmt?.length > 1 && isInvalidNumber(key.levyAmt)) {
|
if (key.levyAmt?.length > 1 && isInvalidNumber(key.levyAmt)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage +
|
||||||
`과태료부과금액(천원): 숫자 형식 아님 (${key.levyAmt})`
|
`과태료부과금액(천원): 숫자 형식 아님 /입력값:${key.levyAmt}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (key.vltnDt?.length > 2 && isInvalidDate(key.vltnDt)) {
|
if (key.vltnDt?.length > 2 && isInvalidDate(key.vltnDt)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage +
|
||||||
`과태료 부과일(위반일): 날짜 형식 아님 (${key.vltnDt})`
|
`과태료 부과일(위반일): 날짜 형식 아님 /입력값:${key.vltnDt}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -188,17 +214,19 @@ export const excelToRainChkData = (excelData: any, year: string) => {
|
|||||||
if (isInvalidNumber(guide.splyUswtrUtztnQnt)) {
|
if (isInvalidNumber(guide.splyUswtrUtztnQnt)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage +
|
||||||
`대체_${mm}: 숫자 형식 아님 (${guide.splyUswtrUtztnQnt})`
|
`대체_${mm}: 숫자 형식 아님 /입력값:${guide.splyUswtrUtztnQnt}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (isInvalidNumber(guide.ruseFcltUtztnQnt)) {
|
if (isInvalidNumber(guide.ruseFcltUtztnQnt)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage +
|
||||||
`빗물_${mm}: 숫자 형식 아님 (${guide.ruseFcltUtztnQnt})`
|
`빗물_${mm}: 숫자 형식 아님 /입력값:${guide.ruseFcltUtztnQnt}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}else{
|
||||||
|
toast.error("데이터가 없습니다. 점검 데이터를 확인해주세요.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (issues.length > 0) {
|
if (issues.length > 0) {
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
import type { SelectDataType } from "@common/business_components/ui";
|
import type { SelectDataType } from "@common/business_components/ui";
|
||||||
import { useTypes, type Buildingtype } from "../rainChkgdn/excel";
|
import {
|
||||||
|
chkMngType,
|
||||||
|
chkSpwtPositnType,
|
||||||
|
useTypes,
|
||||||
|
type Buildingtype,
|
||||||
|
} from "../rainChkgdn/excel";
|
||||||
import { TEST_UUID } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
|
import { TEST_UUID } from "@/app/store/ruseFcltMng/fcltReg/rainReg";
|
||||||
import type { rswtChkZodType } from ".";
|
import type { rswtChkZodType } from ".";
|
||||||
import {
|
import {
|
||||||
@@ -171,14 +176,14 @@ export const excelToRswtGuideData = (
|
|||||||
.filter((el: any) => el !== undefined);
|
.filter((el: any) => el !== undefined);
|
||||||
|
|
||||||
if (rswtChkgdData.length > 0) {
|
if (rswtChkgdData.length > 0) {
|
||||||
rswtExcelDataCheck(rswtChkgdData,issues)
|
rswtExcelDataCheck(rswtChkgdData, issues);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (issues.length > 0) {
|
if (issues.length > 0) {
|
||||||
return { data: [], issues };
|
return { data: [], issues };
|
||||||
}
|
}
|
||||||
|
|
||||||
return { data:rswtChkgdData, issues: [] };
|
return { data: rswtChkgdData, issues: [] };
|
||||||
};
|
};
|
||||||
|
|
||||||
export const excelToRswtPolution = (excelData: any, issues: string[]) => {
|
export const excelToRswtPolution = (excelData: any, issues: string[]) => {
|
||||||
@@ -248,25 +253,25 @@ export const excelToRswtPolution = (excelData: any, issues: string[]) => {
|
|||||||
})
|
})
|
||||||
.filter((el: any) => el !== undefined);
|
.filter((el: any) => el !== undefined);
|
||||||
if (rswtChkgdData.length > 0) {
|
if (rswtChkgdData.length > 0) {
|
||||||
rswtExcelDataCheck(rswtChkgdData,issues)
|
rswtExcelDataCheck(rswtChkgdData, issues);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (issues.length > 0) {
|
if (issues.length > 0) {
|
||||||
return { data: [], issues };
|
return { data: [], issues };
|
||||||
}
|
}
|
||||||
|
|
||||||
return { data:rswtChkgdData, issues: [] };
|
return { data: rswtChkgdData, issues: [] };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const rswtExcelDataCheck = (
|
||||||
const rswtExcelDataCheck=(rswtChkgdData:rswtChkZodType[], issues:string[]) =>{
|
rswtChkgdData: rswtChkZodType[],
|
||||||
|
issues: string[]
|
||||||
|
) => {
|
||||||
rswtChkgdData.forEach((rswt: any) => {
|
rswtChkgdData.forEach((rswt: any) => {
|
||||||
const defaultMessage = `*중수도 수질 [NO: ${rswt.bdstRuseFcltSn}, 점검일: ${rswt.chckYmd}, 이용용도: ${rswt.utztnUsgCd}] 항목에서 `;
|
const defaultMessage = `*중수도 수질 [NO: ${rswt.bdstRuseFcltSn}, 점검일: ${rswt.chckYmd}, 이용용도: ${rswt.utztnUsgCd}] 항목에서 `;
|
||||||
|
|
||||||
if (rswt.chckYmd && isInvalidDate(rswt.chckYmd)) {
|
if (rswt.chckYmd && isInvalidDate(rswt.chckYmd)) {
|
||||||
issues.push(
|
issues.push(defaultMessage + `점검일: 날짜 형식 아님 (${rswt.chckYmd})`);
|
||||||
defaultMessage + `점검일: 날짜 형식 아님 (${rswt.chckYmd})`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (rswt.anlOperCst.length > 2 && isInvalidNumber(rswt.anlOperCst)) {
|
if (rswt.anlOperCst.length > 2 && isInvalidNumber(rswt.anlOperCst)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
@@ -279,6 +284,25 @@ const rswtExcelDataCheck=(rswtChkgdData:rswtChkZodType[], issues:string[]) =>{
|
|||||||
defaultMessage + ` 처리용량(m³): 숫자 형식 아님 (${rswt.prcsCpct})`
|
defaultMessage + ` 처리용량(m³): 숫자 형식 아님 (${rswt.prcsCpct})`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
rswt.oilqMeasMthd.length > 1 &&
|
||||||
|
!chkMngType.includes(rswt.oilqMeasMthd)
|
||||||
|
) {
|
||||||
|
issues.push(
|
||||||
|
defaultMessage +
|
||||||
|
`유량측정방법: 위탁 혹은 자체 만 허용) /입력값:${rswt.oilqMeasMthd}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
rswt.spwtPositn.length > 1 &&
|
||||||
|
!chkSpwtPositnType.includes(rswt.spwtPositn)
|
||||||
|
) {
|
||||||
|
issues.push(
|
||||||
|
defaultMessage +
|
||||||
|
`측정위치: 유량계, 수위계, 펌프적산전력계, 기타 중 하나만 허용) /입력값:${rswt.spwtPositn}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (rswt?.rswtrPollutions && rswt?.rswtrPollutions.length > 0) {
|
if (rswt?.rswtrPollutions && rswt?.rswtrPollutions.length > 0) {
|
||||||
rswt.rswtrPollutions.forEach((pol) => {
|
rswt.rswtrPollutions.forEach((pol) => {
|
||||||
if (isInvalidNumber(pol.grssClfgUswtr)) {
|
if (isInvalidNumber(pol.grssClfgUswtr)) {
|
||||||
@@ -301,8 +325,7 @@ const rswtExcelDataCheck=(rswtChkgdData:rswtChkZodType[], issues:string[]) =>{
|
|||||||
}
|
}
|
||||||
if (isInvalidNumber(pol.bod)) {
|
if (isInvalidNumber(pol.bod)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage + `${pol.node}분기_BOD: 숫자 형식 아님 (${pol.bod})`
|
||||||
`${pol.node}분기_BOD: 숫자 형식 아님 (${pol.bod})`
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (isInvalidNumber(pol.smll)) {
|
if (isInvalidNumber(pol.smll)) {
|
||||||
@@ -319,8 +342,7 @@ const rswtExcelDataCheck=(rswtChkgdData:rswtChkZodType[], issues:string[]) =>{
|
|||||||
}
|
}
|
||||||
if (isInvalidNumber(pol.tph)) {
|
if (isInvalidNumber(pol.tph)) {
|
||||||
issues.push(
|
issues.push(
|
||||||
defaultMessage +
|
defaultMessage + `${pol.node}분기_T-P: 숫자 형식 아님 (${pol.tph})`
|
||||||
`${pol.node}분기_T-P: 숫자 형식 아님 (${pol.tph})`
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (isInvalidNumber(pol.tn)) {
|
if (isInvalidNumber(pol.tn)) {
|
||||||
@@ -358,7 +380,5 @@ const rswtExcelDataCheck=(rswtChkgdData:rswtChkZodType[], issues:string[]) =>{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
};
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,16 +7,17 @@ import toast from "react-hot-toast";
|
|||||||
|
|
||||||
const pbnstPrfmncHeadList = pbnstPrfmncHeadListExport;
|
const pbnstPrfmncHeadList = pbnstPrfmncHeadListExport;
|
||||||
const monthHeadList = monthHeadListExport;
|
const monthHeadList = monthHeadListExport;
|
||||||
|
export const prfRegPageSize = 10;
|
||||||
export type pbnstPrfmncState = {
|
export type pbnstPrfmncState = {
|
||||||
prfmnc: {
|
prfmnc: {
|
||||||
isInit: boolean;
|
isInit: boolean;
|
||||||
pbnstPrfmncHeadList: TableUpperProps[];
|
pbnstPrfmncHeadList: TableUpperProps[];
|
||||||
monthHeadList: TableUpperProps[];
|
monthHeadList: TableUpperProps[];
|
||||||
prfmncRes: FcPrfType[];
|
prfmncRes: FcPrfType[];
|
||||||
prfmncResCount:number;
|
prfmncResCount: number;
|
||||||
excelList: number[];
|
excelList: number[];
|
||||||
pageKey:number
|
pageKey: number;
|
||||||
|
prfPbnFclts: string[];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -26,68 +27,126 @@ export const pbnstPrfmncStateExport: pbnstPrfmncState = {
|
|||||||
pbnstPrfmncHeadList: pbnstPrfmncHeadList,
|
pbnstPrfmncHeadList: pbnstPrfmncHeadList,
|
||||||
monthHeadList: monthHeadList,
|
monthHeadList: monthHeadList,
|
||||||
prfmncRes: [],
|
prfmncRes: [],
|
||||||
prfmncResCount:1,
|
prfPbnFclts: [],
|
||||||
|
prfmncResCount: 1,
|
||||||
excelList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
excelList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
||||||
pageKey:1
|
pageKey: 1,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export type pbnstPrfmncType = pbnstPrfmncState & pbnstPrfmncActions;
|
export type pbnstPrfmncType = pbnstPrfmncState & pbnstPrfmncActions;
|
||||||
|
|
||||||
type pbnstPrfmncActions = {
|
type pbnstPrfmncActions = {
|
||||||
prfmncHasuInit: (page: number, sggOrCity: string ,year:string) => void;
|
prfmncHasuInit: (
|
||||||
prfmncHasuNmSearch: (page: number, sggOrCity: string , txt:string ,year:string) => void;
|
page: number,
|
||||||
prfmnRegData: (page:number,sggOrCity:string, data: PrfType,year:string) => void;
|
sggOrCity: string,
|
||||||
|
year: string,
|
||||||
|
prfPbnFclts: string[]
|
||||||
|
) => void;
|
||||||
|
prfmncHasuNmSearch: (
|
||||||
|
page: number,
|
||||||
|
sggOrCity: string,
|
||||||
|
year: string,
|
||||||
|
searchTxt: string,
|
||||||
|
prfPbnFclts: string[]
|
||||||
|
) => void;
|
||||||
|
prfmnRegData: (
|
||||||
|
page: number,
|
||||||
|
sggOrCity: string,
|
||||||
|
data: PrfType,
|
||||||
|
year: string,
|
||||||
|
prfPbnFclts: string[]
|
||||||
|
) => void;
|
||||||
|
getPrfFmcRes: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const checkWrRegList = async (year:string) => {
|
const hasuListFetch = async (
|
||||||
const url =`/reuseFc/pubDetailList`
|
page: number,
|
||||||
if(year&& year.length>0){
|
sggOrCity: string,
|
||||||
// url+=`/${year}`
|
year: string,
|
||||||
|
prfPbnFclts: string[],
|
||||||
|
searchTxt?: string
|
||||||
|
) => {
|
||||||
|
let filteredFclt = prfPbnFclts;
|
||||||
|
if (sggOrCity !== "0") {
|
||||||
|
filteredFclt = prfPbnFclts?.filter((fclt: string) => {
|
||||||
|
return sggOrCity.length == 2
|
||||||
|
? fclt.slice(0, 2) === sggOrCity
|
||||||
|
: fclt.slice(0, 5) === sggOrCity;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
const wrRegList = await getFetch("wr", url);
|
|
||||||
return wrRegList;
|
let url = `/prcsFclt/ruseInfo/1/${filteredFclt.length + 1}/A/${sggOrCity}/0/1/SW`;
|
||||||
};
|
if (searchTxt && searchTxt?.length > 0) {
|
||||||
const hasuListFetch = async (page: number, sggOrCity: string , year:string,searchNm?:string ) => {
|
url += `/${searchTxt}`;
|
||||||
const checkWrRegListRes = await checkWrRegList(year);
|
}
|
||||||
const rainRes = await postFectch(
|
const rainRes = await postFectch(url, filteredFclt, fetchType.COMMON);
|
||||||
`/prcsFclt/ruseInfo/${page ? page : 1}/10/A/${sggOrCity ? sggOrCity : "11"}/0/1/SW`,
|
|
||||||
checkWrRegListRes?.fcltCds,
|
const checkRuseFcltList =
|
||||||
fetchType.COMMON
|
searchTxt && searchTxt?.length > 0
|
||||||
|
? rainRes.data.map((item) => item.bscFctCd)
|
||||||
|
: filteredFclt;
|
||||||
|
|
||||||
|
const pubRuseList = await postFectch(
|
||||||
|
`/reuseFc/pubDetailList/${year}/${sggOrCity}/${page}/${prfRegPageSize}`,
|
||||||
|
checkRuseFcltList,
|
||||||
|
fetchType.WR
|
||||||
);
|
);
|
||||||
let findData = rainRes.data.map((item: pubHasuType) => {
|
const rusePrfList = pubRuseList.data
|
||||||
const data = checkWrRegListRes?.fcPrfList.find(
|
.map((item: FcPrfType) => {
|
||||||
(fclt: FcPrfType) =>
|
const findData = rainRes.data?.find(
|
||||||
fclt.pbnstRuseFcltId.substring(0, 11) === item?.bscFctCd
|
(fclt: pubHasuType) =>
|
||||||
);
|
item.pbnstRuseFcltId.substring(0, 11) === fclt?.bscFctCd
|
||||||
if(data !==undefined){
|
);
|
||||||
return( {
|
if (findData !== undefined) {
|
||||||
|
return {
|
||||||
|
sido: findData.sido,
|
||||||
|
gugun: findData.gugun,
|
||||||
|
bscFctNm: findData.bscFctNm,
|
||||||
|
bscFctCd: findData.bscFctCd,
|
||||||
|
ruseUtztnFcltNm: item.ruseUtztnFcltNm,
|
||||||
|
pbnstRuseFcltId: item.pbnstRuseFcltId,
|
||||||
|
prfList: item.prfList,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter(Boolean); // undefined 값을 제거합니다.
|
||||||
|
|
||||||
sido: item.sido,
|
return { data: rusePrfList, count: pubRuseList.count };
|
||||||
gugun: item.gugun,
|
|
||||||
bscFctNm: item.bscFctNm,
|
|
||||||
bscFctCd: item.bscFctCd,
|
|
||||||
ruseUtztnFcltNm: data.ruseUtztnFcltNm,
|
|
||||||
pbnstRuseFcltId: data.pbnstRuseFcltId,
|
|
||||||
prfList: data.prfList,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}).filter(Boolean); // undefined 값을 제거합니다.
|
|
||||||
|
|
||||||
if(searchNm){
|
|
||||||
|
|
||||||
findData= findData.filter((ruse:any) => ruse.ruseUtztnFcltNm.includes(searchNm))
|
|
||||||
}
|
|
||||||
|
|
||||||
return {data:findData, count:findData.length};
|
|
||||||
};
|
};
|
||||||
export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
|
export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
|
||||||
set: any
|
set: any
|
||||||
) => {
|
) => {
|
||||||
return {
|
return {
|
||||||
prfmncHasuInit: async (page: number, sggOrCity: string,year:string) => {
|
getPrfFmcRes: async () => {
|
||||||
try {
|
try {
|
||||||
const prfmncRes = await hasuListFetch(page, sggOrCity, year);
|
const pbnPrfRes = await getFetch(fetchType.WR, "/reuseFc/pubFc");
|
||||||
|
console.log("pbnPrfRes ", pbnPrfRes);
|
||||||
|
set((state: pbnstPrfmncState) => ({
|
||||||
|
...state,
|
||||||
|
prfmnc: {
|
||||||
|
...state.prfmnc,
|
||||||
|
prfPbnFclts: pbnPrfRes,
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
prfmncHasuInit: async (
|
||||||
|
page: number,
|
||||||
|
sggOrCity: string,
|
||||||
|
year: string,
|
||||||
|
prfPbnFclts: string[]
|
||||||
|
) => {
|
||||||
|
try {
|
||||||
|
console.log("prfPbnFclts ", prfPbnFclts);
|
||||||
|
const prfmncRes = await hasuListFetch(
|
||||||
|
page,
|
||||||
|
sggOrCity,
|
||||||
|
year,
|
||||||
|
prfPbnFclts
|
||||||
|
);
|
||||||
return set((state: pbnstPrfmncState) => ({
|
return set((state: pbnstPrfmncState) => ({
|
||||||
...state,
|
...state,
|
||||||
prfmnc: {
|
prfmnc: {
|
||||||
@@ -101,9 +160,21 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
|
|||||||
console.log(errorHasu);
|
console.log(errorHasu);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
prfmncHasuNmSearch: async (page: number, sggOrCity: string,fcltNm:string ,year:string)=> {
|
prfmncHasuNmSearch: async (
|
||||||
|
page: number,
|
||||||
|
sggOrCity: string,
|
||||||
|
year: string,
|
||||||
|
searchTxt: string,
|
||||||
|
prfPbnFclts: string[]
|
||||||
|
) => {
|
||||||
try {
|
try {
|
||||||
const prfmncRes = await hasuListFetch(page, sggOrCity,fcltNm ,year);
|
const prfmncRes = await hasuListFetch(
|
||||||
|
page,
|
||||||
|
sggOrCity,
|
||||||
|
year,
|
||||||
|
prfPbnFclts,
|
||||||
|
searchTxt
|
||||||
|
);
|
||||||
return set((state: pbnstPrfmncState) => ({
|
return set((state: pbnstPrfmncState) => ({
|
||||||
...state,
|
...state,
|
||||||
prfmnc: {
|
prfmnc: {
|
||||||
@@ -117,7 +188,13 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
|
|||||||
console.log(errorHasu);
|
console.log(errorHasu);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
prfmnRegData: async (page:number,sggOrCity:string,data: PrfType,year:string) => {
|
prfmnRegData: async (
|
||||||
|
page: number,
|
||||||
|
sggOrCity: string,
|
||||||
|
data: PrfType,
|
||||||
|
year: string,
|
||||||
|
prfPbnFclts: string[]
|
||||||
|
) => {
|
||||||
try {
|
try {
|
||||||
const ressponse = await postFectch(
|
const ressponse = await postFectch(
|
||||||
"/reuseFc/pubFcPrf",
|
"/reuseFc/pubFcPrf",
|
||||||
@@ -125,11 +202,14 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
|
|||||||
fetchType.WR
|
fetchType.WR
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if (ressponse.status === 200) {
|
if (ressponse.status === 200) {
|
||||||
toast.success("하수재이용 시설 실적 등록이 완료되었습니다.");
|
toast.success("하수재이용 시설 실적 등록이 완료되었습니다.");
|
||||||
const prfmncRes = await hasuListFetch(page, sggOrCity,year) ;
|
const prfmncRes = await hasuListFetch(
|
||||||
|
page,
|
||||||
|
sggOrCity,
|
||||||
|
year,
|
||||||
|
prfPbnFclts
|
||||||
|
);
|
||||||
|
|
||||||
return set((state: pbnstPrfmncState) => ({
|
return set((state: pbnstPrfmncState) => ({
|
||||||
...state,
|
...state,
|
||||||
@@ -138,10 +218,9 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (
|
|||||||
prfmncRes: prfmncRes.data,
|
prfmncRes: prfmncRes.data,
|
||||||
prfmncResCount: prfmncRes.count,
|
prfmncResCount: prfmncRes.count,
|
||||||
isInit: false,
|
isInit: false,
|
||||||
pageKey: state.prfmnc.pageKey + 1
|
pageKey: state.prfmnc.pageKey + 1,
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
@@ -50,42 +50,56 @@ const hasuListFetch = async (
|
|||||||
page: number,
|
page: number,
|
||||||
returnType: ReturnType,
|
returnType: ReturnType,
|
||||||
searchNm: string | undefined,
|
searchNm: string | undefined,
|
||||||
year: string,
|
fromDate: string,
|
||||||
|
toDate: string,
|
||||||
flcts: string[]
|
flcts: string[]
|
||||||
) => {
|
) => {
|
||||||
let url = `/prcsFclt/ruseInfo/`;
|
let url = '';
|
||||||
|
let filteredFclt = flcts;
|
||||||
|
const filterData = returnType.sigunValue !== '0' ? returnType.sigunValue : returnType.sidoValue
|
||||||
|
|
||||||
|
if (filterData !== '0')
|
||||||
|
filteredFclt = flcts.filter((fclt: string) => {
|
||||||
|
return filterData.length == 2 ? fclt.slice(0, 2) === filterData : fclt.slice(0, 5) === filterData
|
||||||
|
})
|
||||||
if (returnType.partValue === "A") {
|
if (returnType.partValue === "A") {
|
||||||
url += `${page}/5/${returnType.partValue}/${
|
url += `${returnType.partValue}/${
|
||||||
// returnType.sidoValue ? returnType.sidoValue : returnType.sigunValue
|
// returnType.sidoValue ? returnType.sidoValue : returnType.sigunValue
|
||||||
returnType.sigunValue !== '0' ? returnType.sigunValue : returnType.sidoValue
|
returnType.sigunValue !== '0' ? returnType.sigunValue : returnType.sidoValue
|
||||||
}/0/1/SW`
|
}/0/1/SW`
|
||||||
|
|
||||||
|
if (filterData !== '0')
|
||||||
|
filteredFclt = flcts.filter((fclt: string) => {
|
||||||
|
return filterData.length == 2 ? fclt.slice(0, 2) === filterData : fclt.slice(0, 5) === filterData
|
||||||
|
})
|
||||||
} else if (returnType.partValue === "R") {
|
} else if (returnType.partValue === "R") {
|
||||||
url += `${page}/5/${returnType.partValue}/${returnType.regionValue
|
url += `${returnType.partValue}/${returnType.regionValue
|
||||||
? returnType.regionValue
|
? returnType.regionValue
|
||||||
: returnType.unitWaterShedValue
|
: returnType.unitWaterShedValue
|
||||||
? returnType.unitWaterShedValue
|
? returnType.unitWaterShedValue
|
||||||
: returnType.middleRegionValue
|
: returnType.middleRegionValue
|
||||||
}/0/1/SW`
|
}/0/1/SW`
|
||||||
} else if (returnType.partValue === 'G') {
|
} else if (returnType.partValue === 'G') {
|
||||||
url += `${page}/5/${returnType.envPartValue}/${returnType.sigunValue !== '0' ? returnType.sigunValue : returnType.sidoValue}/0/1/SW`
|
url += `${returnType.envPartValue}/${returnType.sigunValue !== '0' ? returnType.sigunValue : returnType.sidoValue}/0/1/SW`
|
||||||
|
if (filterData !== '0')
|
||||||
|
filteredFclt = flcts.filter((fclt: string) => {
|
||||||
|
return filterData.length == 2 ? fclt.slice(0, 2) === filterData : fclt.slice(0, 5) === filterData
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
url += `1/2/A/0/0/1/SW`
|
url += `A/0/0/1/SW`
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchNm && searchNm?.length > 0) {
|
if (searchNm && searchNm?.length > 0) {
|
||||||
url += "/" + searchNm
|
url += "/" + searchNm
|
||||||
}
|
}
|
||||||
|
const pbnList = await postFectch(`/prcsFclt/ruseInfo/1/${filteredFclt.length}/` + url, filteredFclt, fetchType.COMMON);
|
||||||
const pbnList = await postFectch(url, flcts, fetchType.COMMON);
|
const checkRuseFcltList = searchNm && searchNm?.length > 0 ? pbnList.data.map((item) => item.bscFctCd) : filteredFclt
|
||||||
const getRuseList = await postFectch(
|
const getRuseList = await postFectch(
|
||||||
`/reuseFc/pubDetailList/${year}`,
|
`/reuseFc/pubDetailPrfList/${fromDate}/${toDate}/${filterData}/${page}/5`,
|
||||||
flcts,
|
checkRuseFcltList,
|
||||||
fetchType.WR
|
fetchType.WR
|
||||||
);
|
);
|
||||||
let count = 0;
|
|
||||||
const checkWrRegListRes = getRuseList.data;
|
const checkWrRegListRes = getRuseList.data;
|
||||||
|
|
||||||
const data: WaterReuseFacility[] = checkWrRegListRes.map(
|
const data: WaterReuseFacility[] = checkWrRegListRes.map(
|
||||||
(item: FcPrfType) => {
|
(item: FcPrfType) => {
|
||||||
if (!item.prfList || item.prfList.length === 0) {
|
if (!item.prfList || item.prfList.length === 0) {
|
||||||
@@ -96,7 +110,6 @@ const hasuListFetch = async (
|
|||||||
fclt.bscFctCd === item.pbnstRuseFcltId.substring(0, 11)
|
fclt.bscFctCd === item.pbnstRuseFcltId.substring(0, 11)
|
||||||
);
|
);
|
||||||
if (findData) {
|
if (findData) {
|
||||||
count++;
|
|
||||||
return {
|
return {
|
||||||
sido: findData?.sido || '-',
|
sido: findData?.sido || '-',
|
||||||
gugun: findData?.gugun || '-',
|
gugun: findData?.gugun || '-',
|
||||||
@@ -104,12 +117,12 @@ const hasuListFetch = async (
|
|||||||
ruseUtztnFcltNm: item?.ruseUtztnFcltNm || '-',
|
ruseUtztnFcltNm: item?.ruseUtztnFcltNm || '-',
|
||||||
pbnstRuseFcltId: item?.pbnstRuseFcltId || '-',
|
pbnstRuseFcltId: item?.pbnstRuseFcltId || '-',
|
||||||
bscFctCd: findData?.bscFctCd || '-',
|
bscFctCd: findData?.bscFctCd || '-',
|
||||||
count
|
prfList: item.prfList,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
).filter(Boolean);
|
).filter(Boolean);
|
||||||
return data;
|
return {data: data, count: getRuseList.count};
|
||||||
}
|
}
|
||||||
|
|
||||||
export const pbnstPrfmncSttnActionsExport: (set: any) => pbnstPrfmncSttnActions = (
|
export const pbnstPrfmncSttnActionsExport: (set: any) => pbnstPrfmncSttnActions = (
|
||||||
@@ -175,29 +188,17 @@ export const pbnstPrfmncSttnActionsExport: (set: any) => pbnstPrfmncSttnActions
|
|||||||
page,
|
page,
|
||||||
returnType,
|
returnType,
|
||||||
fcltNm,
|
fcltNm,
|
||||||
|
fromDate,
|
||||||
toDate,
|
toDate,
|
||||||
fclts);
|
fclts);
|
||||||
// const bscFctCdList = prfmncRes.map((item: any) => {
|
|
||||||
// return item.bscFctCd;
|
|
||||||
// })
|
|
||||||
const bscFctCdList = prfmncRes
|
|
||||||
.map((item: any) => item.bscFctCd)
|
|
||||||
.filter((value, index, self) => self.indexOf(value) === index);
|
|
||||||
// const bscFctCdList = [...new Set(prfmncRes.map((item: any) => item.bscFctCd))];
|
|
||||||
|
|
||||||
|
|
||||||
const res = await postFectch(
|
|
||||||
`/reuseFc/pubDetailList/${fromDate}/${toDate}`,
|
|
||||||
bscFctCdList,
|
|
||||||
`wr`,
|
|
||||||
)
|
|
||||||
let inUsageSum = 0;
|
let inUsageSum = 0;
|
||||||
let outUsageSum = 0;
|
let outUsageSum = 0;
|
||||||
let year = "";
|
let year = "";
|
||||||
const yearsData = [] as any
|
const yearsData = [] as any
|
||||||
|
|
||||||
res.data.forEach((item: any) => {
|
prfmncRes.data.forEach((item: any) => {
|
||||||
if (item.prfList.length === 0) {
|
if (!item.prfList || item.prfList.length === 0) {
|
||||||
const year: string = ""; // 연도 정보가 없으면 빈 문자열, 필요시 item에서 추출.
|
const year: string = ""; // 연도 정보가 없으면 빈 문자열, 필요시 item에서 추출.
|
||||||
const yearVal: { [key: string]: any } = { year: year, pbnstRuseFcltId: item.pbnstRuseFcltId ?? "", ruseUtztnFcltNm: item.ruseUtztnFcltNm ?? "" };
|
const yearVal: { [key: string]: any } = { year: year, pbnstRuseFcltId: item.pbnstRuseFcltId ?? "", ruseUtztnFcltNm: item.ruseUtztnFcltNm ?? "" };
|
||||||
yearVal[`${year}inUsage`] = 0;
|
yearVal[`${year}inUsage`] = 0;
|
||||||
@@ -205,7 +206,7 @@ export const pbnstPrfmncSttnActionsExport: (set: any) => pbnstPrfmncSttnActions
|
|||||||
yearVal[`${year}total`] = 0;
|
yearVal[`${year}total`] = 0;
|
||||||
yearsData.push(yearVal);
|
yearsData.push(yearVal);
|
||||||
}
|
}
|
||||||
item.prfList.forEach((acc) => {
|
item.prfList?.forEach((acc: any) => {
|
||||||
year = acc.ym?.substring(0, 4) ?? "";
|
year = acc.ym?.substring(0, 4) ?? "";
|
||||||
inUsageSum =
|
inUsageSum =
|
||||||
(acc.wshwtr ?? 0) + //조경용수
|
(acc.wshwtr ?? 0) + //조경용수
|
||||||
@@ -273,7 +274,7 @@ export const pbnstPrfmncSttnActionsExport: (set: any) => pbnstPrfmncSttnActions
|
|||||||
|
|
||||||
// prfmncRes 정보 merge
|
// prfmncRes 정보 merge
|
||||||
const resData = Object.values(mergedMap).map((item: any) => {
|
const resData = Object.values(mergedMap).map((item: any) => {
|
||||||
const match = prfmncRes.find((res) => res.pbnstRuseFcltId === item.pbnstRuseFcltId);
|
const match = prfmncRes.data.find((res) => res.pbnstRuseFcltId === item.pbnstRuseFcltId);
|
||||||
return match ? { ...item, ...match } : item;
|
return match ? { ...item, ...match } : item;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -282,10 +283,10 @@ export const pbnstPrfmncSttnActionsExport: (set: any) => pbnstPrfmncSttnActions
|
|||||||
pbnstPrfmncSttn: {
|
pbnstPrfmncSttn: {
|
||||||
...state.pbnstPrfmncSttn,
|
...state.pbnstPrfmncSttn,
|
||||||
// prfmncRes: prfmncRes,
|
// prfmncRes: prfmncRes,
|
||||||
prfmncResCount: fclts.length - 5,
|
prfmncResCount: prfmncRes.count,
|
||||||
isInit: false,
|
isInit: false,
|
||||||
prfmncRes: resData,
|
prfmncRes: resData,
|
||||||
rawData: res.data
|
rawData: prfmncRes.data
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
} catch (errorHasu) {
|
} catch (errorHasu) {
|
||||||
|
|||||||
@@ -95,43 +95,59 @@ const hasuListFetch = async (
|
|||||||
year: string,
|
year: string,
|
||||||
flcts: string[]
|
flcts: string[]
|
||||||
) => {
|
) => {
|
||||||
let url = `/prcsFclt/ruseInfo/`;
|
let url = ``;
|
||||||
|
let filteredFclt = flcts;
|
||||||
|
const filterData = reurnValue.sigunValue !== '0' ? reurnValue.sigunValue : reurnValue.sidoValue
|
||||||
|
|
||||||
|
|
||||||
|
if(filterData !== '0')
|
||||||
|
filteredFclt= flcts.filter((fclt: string) => {
|
||||||
|
return filterData.length==2 ?fclt.slice(0, 2) === filterData:fclt.slice(0, 5) === filterData
|
||||||
|
})
|
||||||
if (reurnValue.partValue === "A") {
|
if (reurnValue.partValue === "A") {
|
||||||
url += `${page}/${total}/${reurnValue.partValue}/${
|
url += `${reurnValue.partValue}/${
|
||||||
// reurnValue.sidoValue ? reurnValue.sidoValue : reurnValue.sigunValue
|
// reurnValue.sidoValue ? reurnValue.sidoValue : reurnValue.sigunValue
|
||||||
reurnValue.sigunValue !== '0' ? reurnValue.sigunValue : reurnValue.sidoValue
|
reurnValue.sigunValue !== '0' ? reurnValue.sigunValue : reurnValue.sidoValue
|
||||||
}/0/1/SW`
|
}/0/1/SW`
|
||||||
|
|
||||||
|
if(filterData !== '0')
|
||||||
|
filteredFclt= flcts.filter((fclt: string) => {
|
||||||
|
return filterData.length==2 ?fclt.slice(0, 2) === filterData:fclt.slice(0, 5) === filterData
|
||||||
|
})
|
||||||
} else if (reurnValue.partValue === "R") {
|
} else if (reurnValue.partValue === "R") {
|
||||||
url += `${page}/${total}/${reurnValue.partValue}/${reurnValue.regionValue
|
url += `${reurnValue.partValue}/${reurnValue.regionValue
|
||||||
? reurnValue.regionValue
|
? reurnValue.regionValue
|
||||||
: reurnValue.unitWaterShedValue
|
: reurnValue.unitWaterShedValue
|
||||||
? reurnValue.unitWaterShedValue
|
? reurnValue.unitWaterShedValue
|
||||||
: reurnValue.middleRegionValue
|
: reurnValue.middleRegionValue
|
||||||
}/0/1/SW`
|
}/0/1/SW`
|
||||||
} else if (reurnValue.partValue === 'G') {
|
} else if (reurnValue.partValue === 'G') {
|
||||||
|
url += `${reurnValue.envPartValue}/${reurnValue.sigunValue !== '0' ? reurnValue.sigunValue : reurnValue.sidoValue}/0/1/SW`
|
||||||
|
if(filterData !== '0')
|
||||||
url += `${page}/${total}/${reurnValue.envPartValue}/${reurnValue.sigunValue !== '0' ? reurnValue.sigunValue : reurnValue.sidoValue}/0/1/SW`
|
filteredFclt= flcts.filter((fclt: string) => {
|
||||||
|
return filterData.length==2 ?fclt.slice(0, 2) === filterData:fclt.slice(0, 5) === filterData
|
||||||
|
})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
url += `1/2/A/0/0/1/SW`
|
url += `A/0/0/1/SW`
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchNm && searchNm?.length > 0) {
|
if (searchNm && searchNm?.length > 0) {
|
||||||
url += "/" + searchNm
|
url += "/" + searchNm
|
||||||
}
|
}
|
||||||
|
|
||||||
const pbnList = await postFectch(url, flcts, fetchType.COMMON);
|
const pbnList = await postFectch( `/prcsFclt/ruseInfo/1/${filteredFclt.length}/`+url, filteredFclt, fetchType.COMMON);
|
||||||
|
|
||||||
|
|
||||||
|
const checkRuseFcltList = searchNm && searchNm?.length > 0?pbnList.data.map((item)=> item.bscFctCd ):filteredFclt
|
||||||
const getRuseList = await postFectch(
|
const getRuseList = await postFectch(
|
||||||
`/reuseFc/pubDetailList/${year}`,
|
`/reuseFc/pubDetailList/${year}/${filterData}/${page}/${total}`,
|
||||||
flcts,
|
checkRuseFcltList,
|
||||||
fetchType.WR
|
fetchType.WR
|
||||||
);
|
);
|
||||||
const checkWrRegListRes = getRuseList.data;
|
const checkWrRegListRes = getRuseList.data;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const data: WaterReuseFacility[] = checkWrRegListRes.map(
|
const data: WaterReuseFacility[] = checkWrRegListRes.map(
|
||||||
(item: FcPrfType) => {
|
(item: FcPrfType) => {
|
||||||
const findData = pbnList.data.find(
|
const findData = pbnList.data.find(
|
||||||
@@ -140,7 +156,6 @@ const hasuListFetch = async (
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (findData) {
|
if (findData) {
|
||||||
|
|
||||||
const usage = item.prfList.reduce(
|
const usage = item.prfList.reduce(
|
||||||
(acc, cur) => {
|
(acc, cur) => {
|
||||||
acc.inUsage +=
|
acc.inUsage +=
|
||||||
@@ -197,7 +212,11 @@ const hasuListFetch = async (
|
|||||||
|
|
||||||
}
|
}
|
||||||
).filter(Boolean);
|
).filter(Boolean);
|
||||||
return data;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return {data:data, count:getRuseList.count};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
||||||
@@ -237,8 +256,7 @@ export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
|||||||
fclts: string[]
|
fclts: string[]
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
|
||||||
const pbnstSttnRes = await hasuListFetch(
|
const pbnstSttnRes = await hasuListFetch(
|
||||||
page,
|
page,
|
||||||
total,
|
total,
|
||||||
@@ -250,7 +268,7 @@ export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
|||||||
|
|
||||||
// if (Number(total) > 9000) {
|
// if (Number(total) > 9000) {
|
||||||
if (isExcel) {
|
if (isExcel) {
|
||||||
const pbnstExcel = excelPbnstSttnParsing(pbnstSttnRes);
|
const pbnstExcel = excelPbnstSttnParsing(pbnstSttnRes.data);
|
||||||
set((state: pbnstSttnState) => {
|
set((state: pbnstSttnState) => {
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
@@ -267,8 +285,8 @@ export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
|||||||
...state,
|
...state,
|
||||||
pbnstSttn: {
|
pbnstSttn: {
|
||||||
...state.pbnstSttn,
|
...state.pbnstSttn,
|
||||||
pbnstSttnRes: pbnstSttnRes,
|
pbnstSttnRes: pbnstSttnRes.data,
|
||||||
pbnstSttnResCount: pbnstSttnRes.length
|
pbnstSttnResCount: pbnstSttnRes.count
|
||||||
// isInit: false,
|
// isInit: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -295,13 +313,14 @@ export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
|||||||
fclts
|
fclts
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
set((state: pbnstSttnState) => {
|
set((state: pbnstSttnState) => {
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
pbnstSttn: {
|
pbnstSttn: {
|
||||||
...state.pbnstSttn,
|
...state.pbnstSttn,
|
||||||
pbnstSttnRes: pbnstSttnRes,
|
pbnstSttnRes: pbnstSttnRes.data,
|
||||||
pbnstSttnResCount: pbnstSttnRes.length,
|
pbnstSttnResCount: pbnstSttnRes.count,
|
||||||
isInit: false,
|
isInit: false,
|
||||||
pbnstDetail: {} as customPbnst
|
pbnstDetail: {} as customPbnst
|
||||||
},
|
},
|
||||||
@@ -365,8 +384,8 @@ export const pbnstSttnActionsExport: (set: any) => pbnstSttnActions = (
|
|||||||
...state,
|
...state,
|
||||||
pbnstSttn: {
|
pbnstSttn: {
|
||||||
...state.pbnstSttn,
|
...state.pbnstSttn,
|
||||||
pbnstSearchData: pbnstSttnRes,
|
pbnstSearchData: pbnstSttnRes.data,
|
||||||
pbnstSttnResCount: pbnstSttnRes.length,
|
pbnstSttnResCount: pbnstSttnRes.count,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -488,16 +488,6 @@ export function PbnstBuseForm({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* <MngRegFormDetail
|
|
||||||
formList={ruseWaterQulityList}
|
|
||||||
h1Title={`하수처리수 재이용시설 보증수질 `}
|
|
||||||
subTitle="※재처리시설이 있는 경우만 작성"
|
|
||||||
form={form}
|
|
||||||
moClass="grid grid-cols-12 gap-4"
|
|
||||||
sonClass="col-span-4"
|
|
||||||
indexMng={indexMng}
|
|
||||||
indexBiz={indexBiz}
|
|
||||||
/> */}
|
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
<BuseWaterQulity
|
<BuseWaterQulity
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ export class LoginApiService implements LoginService {
|
|||||||
|
|
||||||
public async login(payload: ILogin): Promise<void> {
|
public async login(payload: ILogin): Promise<void> {
|
||||||
try {
|
try {
|
||||||
console.log(' ENDPOINT.USER_SERVICE.LOGIN ', ENDPOINT.USER_SERVICE.LOGIN)
|
|
||||||
const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, {
|
const response = await fetch( PROXY_HOST+ ENDPOINT.USER_SERVICE.LOGIN, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ type MonthPickerProps = {
|
|||||||
selectClass?: string;
|
selectClass?: string;
|
||||||
readOnly?: boolean;
|
readOnly?: boolean;
|
||||||
startYear?: number; // 시작 연도 props 추가
|
startYear?: number; // 시작 연도 props 추가
|
||||||
|
yearReadOnly?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
// yyyyMM → Date 객체
|
// yyyyMM → Date 객체
|
||||||
@@ -39,6 +40,7 @@ export const DateMonthPicker = ({
|
|||||||
selectClass,
|
selectClass,
|
||||||
readOnly = false,
|
readOnly = false,
|
||||||
startYear,
|
startYear,
|
||||||
|
yearReadOnly = false,
|
||||||
}: MonthPickerProps) => {
|
}: MonthPickerProps) => {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
@@ -78,6 +80,7 @@ export const DateMonthPicker = ({
|
|||||||
currentMonth={parsedDate}
|
currentMonth={parsedDate}
|
||||||
onMonthChange={handleSelect}
|
onMonthChange={handleSelect}
|
||||||
startYear={startYear}
|
startYear={startYear}
|
||||||
|
yearReadOnly={yearReadOnly}
|
||||||
/>
|
/>
|
||||||
</PopoverContent>
|
</PopoverContent>
|
||||||
</Popover>
|
</Popover>
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ export type MonthPickerProps = {
|
|||||||
shouldClosePopover?: boolean
|
shouldClosePopover?: boolean
|
||||||
) => void;
|
) => void;
|
||||||
startYear?: number;
|
startYear?: number;
|
||||||
|
yearReadOnly?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function MonthPicker({ currentMonth, onMonthChange, startYear }: MonthPickerProps) {
|
export function MonthPicker({ currentMonth, onMonthChange, startYear, yearReadOnly }: MonthPickerProps) {
|
||||||
|
|
||||||
const today = startOfToday();
|
const today = startOfToday();
|
||||||
const currentYear = today.getFullYear();
|
const currentYear = today.getFullYear();
|
||||||
@@ -73,6 +74,7 @@ const selectedYear = parseInt(yearFromProp);
|
|||||||
<div className="flex justify-center pt-1">
|
<div className="flex justify-center pt-1">
|
||||||
<Select
|
<Select
|
||||||
value={yearFromProp}
|
value={yearFromProp}
|
||||||
|
disabled={yearReadOnly}
|
||||||
onValueChange={(selectedYearStr) => {
|
onValueChange={(selectedYearStr) => {
|
||||||
const selectedYearNum = parseInt(selectedYearStr);
|
const selectedYearNum = parseInt(selectedYearStr);
|
||||||
const newDate = new Date(
|
const newDate = new Date(
|
||||||
|
|||||||
@@ -128,101 +128,7 @@ function Gis({
|
|||||||
// Feature Click Event
|
// Feature Click Event
|
||||||
const handleFeatureSelect = useCallback((data) => {
|
const handleFeatureSelect = useCallback((data) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
// gisMap = mapInstanceRef.current;
|
|
||||||
// gisMap = mapInstanceRef.current;
|
|
||||||
|
|
||||||
// if (!gisMap) {
|
|
||||||
// console.warn('지도가 초기화되지 않았습니다.');
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// if (!gisMap) {
|
|
||||||
// console.warn('지도가 초기화되지 않았습니다.');
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 항상 같은 select 객체 사용
|
|
||||||
// const select = GisApp.Module.select;
|
|
||||||
// if (!select) return;
|
|
||||||
// // 항상 같은 select 객체 사용
|
|
||||||
// const select = GisApp.Module.select;
|
|
||||||
// if (!select) return;
|
|
||||||
|
|
||||||
// // 1. 기존 선택 초기화
|
|
||||||
// select.resetSelectedFeature();
|
|
||||||
|
|
||||||
// // 2. data가 OpenLayers Feature 인스턴스인지 확인
|
|
||||||
// let foundFeature = null;
|
|
||||||
// if (data && typeof data.getGeometry === 'function' && typeof data.setStyle === 'function') {
|
|
||||||
// // 이미 Feature 인스턴스라면 그대로 사용
|
|
||||||
// foundFeature = data;
|
|
||||||
// } else {
|
|
||||||
// // 아니면 featureId로 맵에서 Feature 인스턴스를 찾아서 사용
|
|
||||||
// let featureId = data.fid;
|
|
||||||
// const layerName = layerNmRef.current
|
|
||||||
// if (layerName === '하수재이용시설') {
|
|
||||||
// featureId = data.searchPk;
|
|
||||||
// } else if (layerName === '빗물이용시설' || layerName == '중수도시설') {
|
|
||||||
// featureId = data.bdstInfoSn;
|
|
||||||
// } else if (layerName === '하수처리시설') {
|
|
||||||
// featureId = data.bscFctCd;
|
|
||||||
// } else if (layerName === '온배수시설') {
|
|
||||||
// featureId = data.bdstRuseFcltSn;
|
|
||||||
// } else if(layerName == '수요처'){
|
|
||||||
// featureId = data.dmdInfoId.replaceAll('-','')
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// console.warn('해당 레이어에 대한 featureId 매핑 없음', layerNm);
|
|
||||||
// featureId = data.fid || data.id || data.ftrIdn;
|
|
||||||
// }
|
|
||||||
// // gisMap.getLayers().getArray().forEach(layer => {
|
|
||||||
// // const source = layer.getSource?.();
|
|
||||||
// // if (source?.getFeatureById) {
|
|
||||||
// // const feature = source.getFeatureById(String(featureId).trim());
|
|
||||||
// // if (feature) foundFeature = feature;
|
|
||||||
// // }
|
|
||||||
// // });
|
|
||||||
// // const [layerType, id] = String(featureId).split('.');
|
|
||||||
// gisMap.getLayers().getArray().forEach(layer => {
|
|
||||||
// const source = layer.getSource?.();
|
|
||||||
// if (source?.getFeatures) {
|
|
||||||
// const allFeatures = source.getFeatures();
|
|
||||||
// for (const f of allFeatures) {
|
|
||||||
// const id = String(f.getId());
|
|
||||||
// // console.log('id', id, featureId)
|
|
||||||
// if (id && id.split('.')[1] === String(featureId)) {
|
|
||||||
// foundFeature = f;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 3. 피처 선택
|
|
||||||
// if (foundFeature) {
|
|
||||||
// let geometry = foundFeature.getGeometry();
|
|
||||||
// if (geometry) {
|
|
||||||
// let extent = geometry.getExtent();
|
|
||||||
|
|
||||||
// gisMap.getView().fit(extent, {
|
|
||||||
// duration: 300,
|
|
||||||
// padding: [50, 50, 50, 50],
|
|
||||||
// maxZoom: 16,
|
|
||||||
// constrainResolution: true,
|
|
||||||
// nearest: true,
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// select.selectFeature(foundFeature, true);
|
|
||||||
// } else {
|
|
||||||
// console.warn('OpenLayers Feature를 찾을 수 없습니다:', data);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// setFeatureData(data);
|
|
||||||
// setIsOpen(true);
|
|
||||||
// setIsSearchModalOpen(false);
|
|
||||||
|
|
||||||
onFeatureSelect?.(data); // 선택된 피쳐 데이터 콜백 호출
|
onFeatureSelect?.(data); // 선택된 피쳐 데이터 콜백 호출
|
||||||
console.log(data)
|
|
||||||
}, [mapInstanceRef]);
|
}, [mapInstanceRef]);
|
||||||
|
|
||||||
// 지도 생성 및 초기화
|
// 지도 생성 및 초기화
|
||||||
@@ -467,6 +373,7 @@ function Gis({
|
|||||||
setVisible={setTabVisible}
|
setVisible={setTabVisible}
|
||||||
onCheckedChange={handleCheckedLayersChange}
|
onCheckedChange={handleCheckedLayersChange}
|
||||||
onLayerIconClick={(layerNm) => {
|
onLayerIconClick={(layerNm) => {
|
||||||
|
console.log(layerNm)
|
||||||
layerNmRef.current = layerNm
|
layerNmRef.current = layerNm
|
||||||
setLayerNm(layerNm); setIsOpen(true); const dummyFeature = {
|
setLayerNm(layerNm); setIsOpen(true); const dummyFeature = {
|
||||||
getProperties: () => ({}), // 최소 구조
|
getProperties: () => ({}), // 최소 구조
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ export default React.memo(function GisTree({ checkedNodes = [], setCheckedNodes
|
|||||||
};
|
};
|
||||||
const handleLayerImgClick = (nodeNm, nodeId, layerNm) => {
|
const handleLayerImgClick = (nodeNm, nodeId, layerNm) => {
|
||||||
if(!checked.includes(nodeId)) alert('시설을 선택해주세요')
|
if(!checked.includes(nodeId)) alert('시설을 선택해주세요')
|
||||||
else onLayerIconClick(layerNm)
|
else onLayerIconClick(nodeNm)
|
||||||
}
|
}
|
||||||
if (!treeData || treeData.length === 0) return null;
|
if (!treeData || treeData.length === 0) return null;
|
||||||
|
|
||||||
|
|||||||
@@ -130,8 +130,6 @@ GisOlLayer.prototype = {
|
|||||||
strategy: all,
|
strategy: all,
|
||||||
});
|
});
|
||||||
return source;
|
return source;
|
||||||
|
|
||||||
return source;
|
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* [사용]WFS 레이어 생성
|
* [사용]WFS 레이어 생성
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ const SelectBox = React.forwardRef<
|
|||||||
value?: string | number;
|
value?: string | number;
|
||||||
readOnly?: boolean; // readOnly 속성 추가
|
readOnly?: boolean; // readOnly 속성 추가
|
||||||
selectContentClass?: string;
|
selectContentClass?: string;
|
||||||
|
labelClass?: string;
|
||||||
}
|
}
|
||||||
>(
|
>(
|
||||||
(
|
(
|
||||||
@@ -40,6 +41,7 @@ const SelectBox = React.forwardRef<
|
|||||||
value,
|
value,
|
||||||
readOnly = false,
|
readOnly = false,
|
||||||
selectContentClass,
|
selectContentClass,
|
||||||
|
labelClass = "w-20 whitespace-nowrap text-xl text-gray-600",
|
||||||
},
|
},
|
||||||
ref,
|
ref,
|
||||||
) => {
|
) => {
|
||||||
@@ -66,7 +68,7 @@ const SelectBox = React.forwardRef<
|
|||||||
return (
|
return (
|
||||||
<div className={className + " flex items-center"} ref={ref}>
|
<div className={className + " flex items-center"} ref={ref}>
|
||||||
{label && (
|
{label && (
|
||||||
<Label className="w-20 whitespace-nowrap text-xl text-gray-600">
|
<Label className={labelClass}>
|
||||||
{label}
|
{label}
|
||||||
</Label>
|
</Label>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user