-
-
-
-
+
+
+
+ {showActionBar && (
+
+
+ {showReviewOpinionButton && (
+
+ )}
+ {showReturnButton && }
+ {showSubmitButton && (
+ submitFunc()} />
+ )}
+
+ )}
+
+ {isLoading && (
+
+ )}
+
+
+ void handleActiveTabChange(v)}
+ className="w-full"
+ variant="default"
+ >
+
+ {columnInfo.map((info) => (
+
+ {info.tabLabel || info.tabKey}
+
+ ))}
+
+ {columnInfo.map((info) => {
+ const tabKey = info.tabKey;
+ if (!info.columns || !info.columnLayout) {
+ return null;
+ }
+
+ const rowData = rowDataMap.get(tabKey) ?? [];
+ const gridColumnInfo: ColumnInfo = {
+ columns: info.columns,
+ columnLayout: info.columnLayout,
+ };
+
+ return (
+
+ {
+ setRowDataMap((prev) => {
+ const next = new Map(prev);
+ const cur = next.get(tabKey) ?? [];
+ const n =
+ typeof updater === "function" ? updater(cur) : updater;
+ next.set(tabKey, n);
+ return next;
+ });
+ }}
+ isExcelImport={false}
+ isExcelExport
+ showHeaderCheckbox={false}
+ fixedColumns={info.fixedColumns}
+ enableSort={false}
+ cellStyleCallback={reviewCellStyleCallbackByTab.get(tabKey)}
+ />
+
+ );
+ })}
+
-
- >
+
+
{
+ if (lastSearchValues != null) {
+ await handleSearch(lastSearchValues);
+ }
+ }}
+ />
+
+
);
};
-
export default SewageExcretaRelatedRvw;
diff --git a/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx b/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx
index d0dbcb383..3d38d84c5 100644
--- a/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx
+++ b/apps/st/src/components/statistics/review/SewageExcretaSlurgeRvw.tsx
@@ -1,52 +1,440 @@
-import { useState } from "react";
+import { useMemo, useRef, useState } from "react";
-import { TabDataGrid } from "@rsone/components";
-import SearchForm from "@/components/module/SearchForm";
-import SaveButton from "@/components/button/SaveButton";
-import ApproveButton from "@/components/button/ApproveButton";
-import ReviewOpinionButton from "@/components/button/ReviewOpinionButton";
+import { useAlertStore, useUserStore } from "@/shared/lib";
+import { statisticsManagementApi } from "@/entities/statistics/api/statistics-management-service";
+import { statisticsApi } from "@/entities/statistics/api/statistics-service";
+import {
+ extractSewageExcretaSlurgeReviewList,
+ extractSewageExcretaSlurgeReviewStatsStatusInfo,
+ mapSewageExcretaSlurgeReviewRows,
+ type SewageExcretaSlurgeReviewRequestParams,
+} from "@/entities/statistics/model/statistics-sewage-excreta-slurge-review-interface";
+import type { StatsStatusInfo } from "@/entities/statistics/model/statistics-sewage-pipe-review-interface";
+import type {
+ ReviewerInfoRequest,
+ ReviewOpinionSaveRequest,
+} from "@/entities/statistics/model/statistics-interface";
+import { LoadingWithAnimation, Tabs, TabsContent, TabsList, TabsTrigger } from "@common/components";
+
+import SubmitButton from "@/components/button/SumitButton";
import ReturnButton from "@/components/button/ReturnButton";
-
+import ReviewOpinionButton from "@/components/button/ReviewOpinionButton";
+import DataGrid from "@/components/module/DataGrid";
+import SearchForm from "@/components/module/SearchForm";
+import { ReturnReasonDialog } from "@/components/statistics/review/ReturnReasonDialog";
+import { ReviewSubmitDialog } from "@/components/statistics/review/ReviewSubmitDialog";
+import {
+ ReviewOpinionDialog,
+ type ReviewOpinionDialogContext,
+} from "@/components/statistics/review/ReviewOpinionDialog";
+import type { ColumnConfig, ColumnInfo, ColumnInfoList } from "@/components/type/DataGrid.type";
+import type { SearchFormValues } from "@/components/type/SearchForm.type";
import { SewageExcretaSludgeInfoListRvw } from "@/components/util/column/review/SewageExcretaSlurgeRvwColumn";
+import { buildReviewRowTypeCurrCellStyleCallbackByTab, toGridRows } from "@/components/util/grid/gridFunction";
-// 하수도 통계 관리 11. 하수 및 분뇨 찌꺼기(슬러지) 처리
+const firstTabKey = SewageExcretaSludgeInfoListRvw[0]?.tabKey ?? "ST00110001";
+
+async function fetchSludgeReviewTab(
+ tabKey: string,
+ searchParam: SewageExcretaSlurgeReviewRequestParams,
+) {
+ if (tabKey === "ST00110001") {
+ return statisticsManagementApi.getSludgeProcessingReviewList(searchParam);
+ }
+ if (tabKey === "ST00110002") {
+ return statisticsManagementApi.getSludgeDigestionTankReviewList(searchParam);
+ }
+ if (tabKey === "ST00110003") {
+ return statisticsManagementApi.getSludgeFacilityOperReviewList(searchParam);
+ }
+ if (tabKey === "ST00110004") {
+ return statisticsManagementApi.getHumanWasteSludgeReviewList(searchParam);
+ }
+ return null;
+}
+
+// 하수도 통계 검토 11. 하수 및 분뇨 찌꺼기(슬러지) 처리
const SewageExcretaSlurgeRvw = () => {
+ const { setMessage: alert } = useAlertStore((state) => state);
+ const userInfo = useUserStore((state) => state.userInfo);
const [rowDataMap, setRowDataMap] = useState