Merge remote-tracking branch 'origin/iipbs/st/dev'
Deploy Frontend / deploy (push) Successful in 2m53s
Deploy Frontend / deploy (push) Successful in 2m53s
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { cookies } from "next/headers";
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
import {
|
||||
AUTH_USER_ID,
|
||||
CLAIM_NAME,
|
||||
SITE_ID,
|
||||
ST_SERVICE_URL,
|
||||
} from "@/shared/config";
|
||||
import { SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME } from "@/entities/statistics/model/statistics-total/statistics-sewerage-aggregate-summary-interface";
|
||||
|
||||
const BACKEND_DOWNLOAD_URL = `${ST_SERVICE_URL}/st-management-service/api/v1/summary-excel/download`;
|
||||
|
||||
/** middleware `/server` rewrite는 장시간 blob 응답에서 연결이 끊길 수 있어 전용 프록시 사용 */
|
||||
export const dynamic = "force-dynamic";
|
||||
export const maxDuration = 3600;
|
||||
|
||||
export async function POST(request: Request) {
|
||||
const cookieStore = await cookies();
|
||||
const token = cookieStore.get(CLAIM_NAME)?.value;
|
||||
const userId = cookieStore.get(AUTH_USER_ID)?.value;
|
||||
|
||||
const headers: Record<string, string> = {
|
||||
"Content-Type": "application/json",
|
||||
"X-Site-Id": SITE_ID,
|
||||
Accept: SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME,
|
||||
};
|
||||
if (token) headers[CLAIM_NAME] = token;
|
||||
if (userId) headers[AUTH_USER_ID] = userId;
|
||||
|
||||
let body: string;
|
||||
try {
|
||||
body = await request.text();
|
||||
} catch {
|
||||
return NextResponse.json({ message: "요청 본문을 읽을 수 없습니다." }, { status: 400 });
|
||||
}
|
||||
|
||||
let backendRes: Response;
|
||||
try {
|
||||
backendRes = await fetch(BACKEND_DOWNLOAD_URL, {
|
||||
method: "POST",
|
||||
headers,
|
||||
body,
|
||||
cache: "no-store",
|
||||
});
|
||||
} catch {
|
||||
return NextResponse.json(
|
||||
{ message: "엑셀 서버에 연결할 수 없습니다." },
|
||||
{ status: 502 },
|
||||
);
|
||||
}
|
||||
|
||||
const responseHeaders = new Headers();
|
||||
const contentType = backendRes.headers.get("content-type");
|
||||
const contentDisposition = backendRes.headers.get("content-disposition");
|
||||
if (contentType) responseHeaders.set("Content-Type", contentType);
|
||||
if (contentDisposition) responseHeaders.set("Content-Disposition", contentDisposition);
|
||||
|
||||
return new NextResponse(backendRes.body, {
|
||||
status: backendRes.status,
|
||||
headers: responseHeaders,
|
||||
});
|
||||
}
|
||||
@@ -3,9 +3,27 @@ import { ValueType } from "realgrid"
|
||||
|
||||
import RealGrid, { GridFitStyle } from "realgrid"
|
||||
import { RealGridReact, RGDataColumn } from "realgrid-react"
|
||||
import type { DataGridProps, RealGridColumnInfo, GridViewWithSetColumns, FooterItemWithCallback, CellStyleCallback } from "../type/DataGrid.type"
|
||||
import type { DataGridProps, RealGridColumnInfo, GridViewWithSetColumns, FooterItemWithCallback, CellStyleCallback, CellStyleCallbackResult, CellStyleCallbackParams } from "../type/DataGrid.type"
|
||||
import { getComputedValueCallback } from "@/components/util/grid/computedFieldCallbacks"
|
||||
|
||||
function mergeCellStyleCallbackResult(
|
||||
baseStyleName: string | undefined,
|
||||
extra: CellStyleCallbackResult | undefined,
|
||||
): CellStyleCallbackResult {
|
||||
if (!extra) {
|
||||
return baseStyleName ? { styleName: baseStyleName } : {};
|
||||
}
|
||||
if (typeof extra === "string") {
|
||||
const styleName = [extra, baseStyleName].filter(Boolean).join(" ");
|
||||
return styleName ? { styleName } : {};
|
||||
}
|
||||
const styleName = [extra.styleName, baseStyleName].filter(Boolean).join(" ");
|
||||
return {
|
||||
...extra,
|
||||
...(styleName ? { styleName } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
// RealGrid 타입 확장
|
||||
declare module "realgrid" {
|
||||
interface GridView {
|
||||
@@ -40,13 +58,14 @@ function buildFieldsFromColumns(columns: { fieldName: string; valueType?: ValueT
|
||||
};
|
||||
if (col.computed) {
|
||||
const hasFields = "fields" in col.computed && col.computed.fields.length > 0;
|
||||
const hasNumeratorDenominator = "numeratorFields" in col.computed && col.computed.numeratorFields.length > 0 && col.computed.denominatorFields.length > 0;
|
||||
const hasNumeratorDenominator = "numeratorFields" in col.computed && col.computed.numeratorFields.length > 0 && "denominatorFields" in col.computed && col.computed.denominatorFields.length > 0;
|
||||
const hasMaxOfFieldAndSum = "baseField" in col.computed && "sumFields" in col.computed && col.computed.sumFields.length > 0;
|
||||
const hasDifferenceOfSums = "minuendFields" in col.computed && "subtrahendFields" in col.computed && col.computed.minuendFields.length > 0;
|
||||
const hasHalfSumOfSums = col.computed.type === "halfSumOfSums" && "firstSumFields" in col.computed && "secondSumFields" in col.computed && col.computed.firstSumFields.length > 0 && col.computed.secondSumFields.length > 0;
|
||||
const hasSumOfTwoHalfSumOfSums = col.computed.type === "sumOfTwoHalfSumOfSums" && "firstHalfSum" in col.computed && "secondHalfSum" in col.computed && col.computed.firstHalfSum.firstSumFields.length > 0 && col.computed.firstHalfSum.secondSumFields.length > 0 && col.computed.secondHalfSum.firstSumFields.length > 0 && col.computed.secondHalfSum.secondSumFields.length > 0;
|
||||
const hasSumOfMaxGroups = "groups" in col.computed && Array.isArray(col.computed.groups) && col.computed.groups.length > 0;
|
||||
if (hasFields || hasNumeratorDenominator || hasMaxOfFieldAndSum || hasDifferenceOfSums || hasHalfSumOfSums || hasSumOfTwoHalfSumOfSums || hasSumOfMaxGroups) {
|
||||
const hasSumPerTenThousand = col.computed.type === "sumPerTenThousand" && "numeratorFields" in col.computed && col.computed.numeratorFields.length > 0 && "denominatorField" in col.computed && Boolean(col.computed.denominatorField);
|
||||
if (hasFields || hasNumeratorDenominator || hasMaxOfFieldAndSum || hasDifferenceOfSums || hasHalfSumOfSums || hasSumOfTwoHalfSumOfSums || hasSumOfMaxGroups || hasSumPerTenThousand) {
|
||||
field.valueCallback = getComputedValueCallback(col.computed) as (prod: unknown, dataRow: number, fieldName: string, fieldNames: string[], values: unknown[]) => number;
|
||||
}
|
||||
}
|
||||
@@ -410,18 +429,33 @@ const CompactDataGrid = ({
|
||||
columns.forEach((column) => {
|
||||
const baseStyleName = column.styleName;
|
||||
const gridCol = currentGridView.columnByName(column.name) as {
|
||||
styleCallback?: (g: unknown, dataCell: { itemIndex?: number; index?: { itemIndex?: number }; dataField?: string; fieldName?: string }) => string;
|
||||
styleCallback?: (
|
||||
g: unknown,
|
||||
dataCell: {
|
||||
itemIndex?: number;
|
||||
index?: { itemIndex?: number };
|
||||
dataField?: string;
|
||||
fieldName?: string;
|
||||
},
|
||||
) => CellStyleCallbackResult;
|
||||
} | null;
|
||||
if (gridCol) {
|
||||
gridCol.styleCallback = (_g, dataCell) => {
|
||||
gridCol.styleCallback = (grid, dataCell) => {
|
||||
const itemIndex = dataCell?.index?.itemIndex ?? dataCell?.itemIndex ?? -1;
|
||||
const fieldName = (dataCell?.dataField ?? dataCell?.fieldName ?? column.fieldName) ?? '';
|
||||
const fieldName =
|
||||
(dataCell?.dataField ?? dataCell?.fieldName ?? column.fieldName) ?? "";
|
||||
const data = rowDataRef.current;
|
||||
if (itemIndex < 0 || itemIndex >= data.length) return baseStyleName ?? '';
|
||||
if (itemIndex < 0 || itemIndex >= data.length) {
|
||||
return mergeCellStyleCallbackResult(baseStyleName, undefined);
|
||||
}
|
||||
const row = data[itemIndex] as Record<string, string | number>;
|
||||
const extra = cellStyleCallbackRef.current?.({ rowIndex: itemIndex, fieldName, row });
|
||||
if (!extra) return baseStyleName ?? '';
|
||||
return baseStyleName ? `${extra} ${baseStyleName}` : extra;
|
||||
const extra = cellStyleCallbackRef.current?.({
|
||||
rowIndex: itemIndex,
|
||||
fieldName,
|
||||
row,
|
||||
grid: grid as CellStyleCallbackParams["grid"],
|
||||
});
|
||||
return mergeCellStyleCallbackResult(baseStyleName, extra);
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
@@ -11,6 +11,8 @@ import { Button } from "@common/components";
|
||||
|
||||
import type {
|
||||
CellStyleCallback,
|
||||
CellStyleCallbackParams,
|
||||
CellStyleCallbackResult,
|
||||
CellTooltipCallback,
|
||||
ColumnLayoutItem,
|
||||
DataGridProps,
|
||||
@@ -28,6 +30,24 @@ import {
|
||||
} from "@/components/util/gridExcelExport";
|
||||
import { useTabStore } from "@/store/tab-store";
|
||||
|
||||
function mergeCellStyleCallbackResult(
|
||||
baseStyleName: string | undefined,
|
||||
extra: CellStyleCallbackResult | undefined,
|
||||
): CellStyleCallbackResult {
|
||||
if (!extra) {
|
||||
return baseStyleName ? { styleName: baseStyleName } : {};
|
||||
}
|
||||
if (typeof extra === "string") {
|
||||
const styleName = [extra, baseStyleName].filter(Boolean).join(" ");
|
||||
return styleName ? { styleName } : {};
|
||||
}
|
||||
const styleName = [extra.styleName, baseStyleName].filter(Boolean).join(" ");
|
||||
return {
|
||||
...extra,
|
||||
...(styleName ? { styleName } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
// RealGrid 타입 확장
|
||||
declare module "realgrid" {
|
||||
interface GridView {
|
||||
@@ -521,6 +541,7 @@ function buildFieldsFromColumns(
|
||||
const hasNumeratorDenominator =
|
||||
"numeratorFields" in col.computed &&
|
||||
col.computed.numeratorFields.length > 0 &&
|
||||
"denominatorFields" in col.computed &&
|
||||
col.computed.denominatorFields.length > 0;
|
||||
const hasMaxOfFieldAndSum =
|
||||
"baseField" in col.computed &&
|
||||
@@ -557,12 +578,26 @@ function buildFieldsFromColumns(
|
||||
col.computed.type === "bodPrcsRt" &&
|
||||
"inflwField" in col.computed &&
|
||||
"dschgField" in col.computed;
|
||||
const hasSumPerTenThousand =
|
||||
col.computed.type === "sumPerTenThousand" &&
|
||||
"numeratorFields" in col.computed &&
|
||||
col.computed.numeratorFields.length > 0 &&
|
||||
"denominatorField" in col.computed &&
|
||||
Boolean(col.computed.denominatorField);
|
||||
const hasQuotientRatioPercent =
|
||||
col.computed.type === "quotientRatioPercent" &&
|
||||
"numeratorQuotient" in col.computed &&
|
||||
"denominatorQuotient" in col.computed &&
|
||||
col.computed.numeratorQuotient.length === 2 &&
|
||||
col.computed.denominatorQuotient.length === 2;
|
||||
const hasQuotientTimesMultiplierPercent =
|
||||
col.computed.type === "quotientTimesMultiplierPercent" &&
|
||||
"numeratorField" in col.computed &&
|
||||
"denominatorField" in col.computed &&
|
||||
"multiplierField" in col.computed &&
|
||||
Boolean(col.computed.numeratorField) &&
|
||||
Boolean(col.computed.denominatorField) &&
|
||||
Boolean(col.computed.multiplierField);
|
||||
if (
|
||||
hasFields ||
|
||||
hasNumeratorDenominator ||
|
||||
@@ -573,7 +608,9 @@ function buildFieldsFromColumns(
|
||||
hasSumOfMaxGroups ||
|
||||
hasPumpGrossPpqty ||
|
||||
hasBodPrcsRt ||
|
||||
hasQuotientRatioPercent
|
||||
hasSumPerTenThousand ||
|
||||
hasQuotientRatioPercent ||
|
||||
hasQuotientTimesMultiplierPercent
|
||||
) {
|
||||
const computedCallback = getComputedValueCallback(
|
||||
col.computed,
|
||||
@@ -1914,7 +1951,7 @@ const DataGrid = ({
|
||||
dataField?: string;
|
||||
fieldName?: string;
|
||||
},
|
||||
) => string;
|
||||
) => CellStyleCallbackResult;
|
||||
renderer?: { showTooltip?: boolean };
|
||||
} | null;
|
||||
if (gridCol) {
|
||||
@@ -1953,7 +1990,7 @@ const DataGrid = ({
|
||||
{ showTooltip: true },
|
||||
);
|
||||
}
|
||||
gridCol.styleCallback = (_g, dataCell) => {
|
||||
gridCol.styleCallback = (grid, dataCell) => {
|
||||
const itemIndex =
|
||||
dataCell?.index?.itemIndex ??
|
||||
dataCell?.itemIndex ??
|
||||
@@ -1966,8 +2003,12 @@ const DataGrid = ({
|
||||
if (
|
||||
itemIndex < 0 ||
|
||||
itemIndex >= data.length
|
||||
)
|
||||
return baseStyleName ?? "";
|
||||
) {
|
||||
return mergeCellStyleCallbackResult(
|
||||
baseStyleName,
|
||||
undefined,
|
||||
);
|
||||
}
|
||||
const row = data[itemIndex] as Record<
|
||||
string,
|
||||
string | number
|
||||
@@ -1977,11 +2018,12 @@ const DataGrid = ({
|
||||
rowIndex: itemIndex,
|
||||
fieldName,
|
||||
row,
|
||||
grid: grid as CellStyleCallbackParams["grid"],
|
||||
});
|
||||
if (!extra) return baseStyleName ?? "";
|
||||
return baseStyleName
|
||||
? `${extra} ${baseStyleName}`
|
||||
: extra;
|
||||
return mergeCellStyleCallbackResult(
|
||||
baseStyleName,
|
||||
extra,
|
||||
);
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
@@ -137,11 +137,11 @@ const SearchForm = (props: SearchFormProps = {}) => {
|
||||
prev.sido
|
||||
? prev
|
||||
: {
|
||||
...prev,
|
||||
sido: first.sido,
|
||||
gugun: "",
|
||||
bsnmCd: first.bsnmCd,
|
||||
},
|
||||
...prev,
|
||||
sido: first.sido,
|
||||
gugun: "",
|
||||
bsnmCd: first.bsnmCd,
|
||||
},
|
||||
);
|
||||
}, [sidoList, props.defaultValues?.sido, mergedProps.sido]);
|
||||
|
||||
@@ -398,16 +398,18 @@ const SearchForm = (props: SearchFormProps = {}) => {
|
||||
</div>
|
||||
)}
|
||||
<div className="ml-auto flex items-center gap-2">
|
||||
<Button
|
||||
color="white"
|
||||
className="h-[3.2rem] w-[96px]"
|
||||
type="button"
|
||||
onClick={handleReset}
|
||||
>
|
||||
초기화
|
||||
</Button>
|
||||
{mergedProps.isReset && (
|
||||
<Button
|
||||
color="white"
|
||||
className="h-[3.2rem] w-[96px]"
|
||||
type="button"
|
||||
onClick={handleReset}
|
||||
>
|
||||
초기화
|
||||
</Button>
|
||||
)}
|
||||
<Button className="h-[3.2rem] w-[96px]" type="submit">
|
||||
조회
|
||||
{props.searchButtonText ? props.searchButtonText : '조회'}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,9 +10,27 @@ import { useAlertStore } from "@/shared/lib";
|
||||
import { Tabs, TabsContent,TabsList, TabsTrigger } from "@common/components";
|
||||
import { Button } from "@common/components";
|
||||
|
||||
import type { CellStyleCallback,ColumnConfig, ColumnInfo, ColumnLayoutItem, FooterItemWithCallback, GridViewWithSetColumns, RealGridColumnInfo, TabDataGridProps } from "../type/DataGrid.type"
|
||||
import type { CellStyleCallback, CellStyleCallbackParams, CellStyleCallbackResult, ColumnConfig, ColumnInfo, ColumnLayoutItem, FooterItemWithCallback, GridViewWithSetColumns, RealGridColumnInfo, TabDataGridProps } from "../type/DataGrid.type"
|
||||
|
||||
import GridTopActionButton from "./GridTopActionButton";
|
||||
|
||||
function mergeCellStyleCallbackResult(
|
||||
baseStyleName: string | undefined,
|
||||
extra: CellStyleCallbackResult | undefined,
|
||||
): CellStyleCallbackResult {
|
||||
if (!extra) {
|
||||
return baseStyleName ? { styleName: baseStyleName } : {};
|
||||
}
|
||||
if (typeof extra === "string") {
|
||||
const styleName = [extra, baseStyleName].filter(Boolean).join(" ");
|
||||
return styleName ? { styleName } : {};
|
||||
}
|
||||
const styleName = [extra.styleName, baseStyleName].filter(Boolean).join(" ");
|
||||
return {
|
||||
...extra,
|
||||
...(styleName ? { styleName } : {}),
|
||||
};
|
||||
}
|
||||
import SplitDataGrid from "./SplitDataGrid";
|
||||
|
||||
import { getComputedValueCallback } from "@/components/util/grid/computedFieldCallbacks"
|
||||
@@ -73,10 +91,12 @@ function safeGridViewRefresh(gv: { refresh?: () => void } | null | undefined) {
|
||||
function safeColumnByName(
|
||||
gv: { columnByName?: (name: string) => unknown } | null | undefined,
|
||||
name: string,
|
||||
): { styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => string } | null {
|
||||
): { styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => CellStyleCallbackResult } | null {
|
||||
if (!gv?.columnByName) return null;
|
||||
try {
|
||||
const col = gv.columnByName(name) as { styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => string } | null;
|
||||
const col = gv.columnByName(name) as {
|
||||
styleCallback?: (g: unknown, dataCell: Record<string, unknown>) => CellStyleCallbackResult;
|
||||
} | null;
|
||||
return col ?? null;
|
||||
} catch {
|
||||
return null;
|
||||
@@ -220,13 +240,14 @@ function buildFieldsFromColumns(columns: { fieldName: string; valueType?: ValueT
|
||||
};
|
||||
if (col.computed) {
|
||||
const hasFields = "fields" in col.computed && col.computed.fields.length > 0;
|
||||
const hasNumeratorDenominator = "numeratorFields" in col.computed && col.computed.numeratorFields.length > 0 && col.computed.denominatorFields.length > 0;
|
||||
const hasNumeratorDenominator = "numeratorFields" in col.computed && col.computed.numeratorFields.length > 0 && "denominatorFields" in col.computed && col.computed.denominatorFields.length > 0;
|
||||
const hasMaxOfFieldAndSum = "baseField" in col.computed && "sumFields" in col.computed && col.computed.sumFields.length > 0;
|
||||
const hasDifferenceOfSums = "minuendFields" in col.computed && "subtrahendFields" in col.computed && col.computed.minuendFields.length > 0;
|
||||
const hasHalfSumOfSums = col.computed.type === "halfSumOfSums" && "firstSumFields" in col.computed && "secondSumFields" in col.computed && col.computed.firstSumFields.length > 0 && col.computed.secondSumFields.length > 0;
|
||||
const hasSumOfTwoHalfSumOfSums = col.computed.type === "sumOfTwoHalfSumOfSums" && "firstHalfSum" in col.computed && "secondHalfSum" in col.computed && col.computed.firstHalfSum.firstSumFields.length > 0 && col.computed.firstHalfSum.secondSumFields.length > 0 && col.computed.secondHalfSum.firstSumFields.length > 0 && col.computed.secondHalfSum.secondSumFields.length > 0;
|
||||
const hasSumOfMaxGroups = "groups" in col.computed && Array.isArray(col.computed.groups) && col.computed.groups.length > 0;
|
||||
if (hasFields || hasNumeratorDenominator || hasMaxOfFieldAndSum || hasDifferenceOfSums || hasHalfSumOfSums || hasSumOfTwoHalfSumOfSums || hasSumOfMaxGroups) {
|
||||
const hasSumPerTenThousand = col.computed.type === "sumPerTenThousand" && "numeratorFields" in col.computed && col.computed.numeratorFields.length > 0 && "denominatorField" in col.computed && Boolean(col.computed.denominatorField);
|
||||
if (hasFields || hasNumeratorDenominator || hasMaxOfFieldAndSum || hasDifferenceOfSums || hasHalfSumOfSums || hasSumOfTwoHalfSumOfSums || hasSumOfMaxGroups || hasSumPerTenThousand) {
|
||||
field.valueCallback = getComputedValueCallback(col.computed) as (prod: unknown, dataRow: number, fieldName: string, fieldNames: string[], values: unknown[]) => number;
|
||||
}
|
||||
}
|
||||
@@ -295,7 +316,7 @@ const TabDataGrid = ({
|
||||
const gridCol = safeColumnByName(gv, column.name);
|
||||
if (!gridCol) continue;
|
||||
const baseStyleName = column.styleName;
|
||||
gridCol.styleCallback = (_g, dataCell) => {
|
||||
gridCol.styleCallback = (grid, dataCell) => {
|
||||
const dc = dataCell as {
|
||||
itemIndex?: number;
|
||||
index?: { itemIndex?: number };
|
||||
@@ -306,16 +327,16 @@ const TabDataGrid = ({
|
||||
const fieldName = dc?.dataField ?? dc?.fieldName ?? column.fieldName;
|
||||
const data = rowDataMapRef.current.get(tabKey) || [];
|
||||
if (itemIndex < 0 || itemIndex >= data.length) {
|
||||
return baseStyleName ?? "";
|
||||
return mergeCellStyleCallbackResult(baseStyleName, undefined);
|
||||
}
|
||||
const row = data[itemIndex] as Record<string, string | number>;
|
||||
const extra = cellStyleCallbackRef.current?.({
|
||||
rowIndex: itemIndex,
|
||||
fieldName,
|
||||
row,
|
||||
grid: grid as CellStyleCallbackParams["grid"],
|
||||
});
|
||||
if (!extra) return baseStyleName ?? "";
|
||||
return baseStyleName ? `${extra} ${baseStyleName}` : extra;
|
||||
return mergeCellStyleCallbackResult(baseStyleName, extra);
|
||||
};
|
||||
attachedCount += 1;
|
||||
}
|
||||
|
||||
@@ -1140,8 +1140,8 @@ const PrivateSewageFacilityInp = () => {
|
||||
onValuesChange={setSearchValues}
|
||||
/>
|
||||
{showActionToolbarCard && (
|
||||
<div className="card !py-0">
|
||||
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
|
||||
<div className="card !py-0">
|
||||
<div className="flex justify-end items-center gap-[0.6rem] m-[0.6rem]">
|
||||
<VerificationResultButton
|
||||
VerificationResultButtonFunc={openVerificationHistoryDialog}
|
||||
/>
|
||||
@@ -1150,7 +1150,7 @@ const PrivateSewageFacilityInp = () => {
|
||||
<LastYearDataButton
|
||||
getLastYearDataFunc={() => void lastYearDataFunc()}
|
||||
/>
|
||||
<SubmitButton submitFunc={submitFunc} />
|
||||
<SubmitButton submitFunc={submitFunc} />
|
||||
</>
|
||||
)}
|
||||
{activeTabStatus?.laeSbmsnSttsCd === "2" && (
|
||||
|
||||
@@ -967,7 +967,7 @@ const PumpingStationInp = () => {
|
||||
onValuesChange={setSearchValues}
|
||||
/>
|
||||
{showActionToolbarCard && (
|
||||
<div className="card !py-0">
|
||||
<div className="card !py-0">
|
||||
<div className="m-[0.6rem] flex items-center justify-end gap-[0.6rem]">
|
||||
<VerificationResultButton
|
||||
VerificationResultButtonFunc={openVerificationHistoryDialog}
|
||||
@@ -977,18 +977,18 @@ const PumpingStationInp = () => {
|
||||
<LastYearDataButton
|
||||
getLastYearDataFunc={() => void getLastYearDataFunc()}
|
||||
/>
|
||||
<SubmitButton submitFunc={submitFunc} />
|
||||
<SubmitButton submitFunc={submitFunc} />
|
||||
</>
|
||||
)}
|
||||
{statusInfo?.laeSbmsnSttsCd === "2" && (
|
||||
<CancelSubmitButton cnacelSubmitFunc={cnacelSubmitFunc} />
|
||||
)}
|
||||
{showSaveInToolbar && <SaveButton saveFunc={saveFunc} />}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{showArticleToolbarCard && (
|
||||
<div className="card !py-0">
|
||||
<div className="card !py-0">
|
||||
<div className="m-[0.6rem] flex items-center justify-end gap-[0.6rem]">
|
||||
{showNotApplicable && (
|
||||
<NotApplicableCheckButton
|
||||
@@ -996,10 +996,10 @@ const PumpingStationInp = () => {
|
||||
setIsCheck={setIsNotApplicable}
|
||||
/>
|
||||
)}
|
||||
<AddArticleButton addArticleFunc={addArticleFunc} />
|
||||
<DeleteArticleButton deleteArticleFunc={deleteArticleFunc} />
|
||||
</div>
|
||||
</div>
|
||||
<AddArticleButton addArticleFunc={addArticleFunc} />
|
||||
<DeleteArticleButton deleteArticleFunc={deleteArticleFunc} />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
{isLoading && (
|
||||
<div className="absolute inset-0 z-50 flex items-center justify-center rounded-lg p-10 [data-theme='black']:bg-transparent">
|
||||
@@ -1008,14 +1008,14 @@ const PumpingStationInp = () => {
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<DataGrid
|
||||
<DataGrid
|
||||
key={canEditGrid ? "enterable" : "readonly"}
|
||||
getGridRef={gridRef as RefObject<RealGridReact | null>}
|
||||
columnInfo={columnInfo}
|
||||
rowStartNum={PumpingStationInpColumn.rowStartNum}
|
||||
fixedColumns={PumpingStationInpColumn.fixedColumns}
|
||||
rowData={rowData}
|
||||
setRowData={setRowData}
|
||||
rowData={rowData}
|
||||
setRowData={setRowData}
|
||||
getGridDataRef={gridGetRowsRef}
|
||||
showHeaderCheckbox
|
||||
statusInfo={statusInfo}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ import { useEffect, useMemo, useRef, useState } from "react";
|
||||
|
||||
import { useConfirm } from "@frontend-opensource/use-react-hooks";
|
||||
|
||||
import { useAlertStore } from "@/shared/lib";
|
||||
import { useAlertStore, useGlobalProgressStore } from "@/shared/lib";
|
||||
import { statisticsInputSewSupplyRateApi } from "@/entities/statistics/api/input/statistics-input-sew-supply-rate-service";
|
||||
import { statisticsInputSewerageFinanceApi } from "@/entities/statistics/api/input/statistics-input-sewerage-finance-service";
|
||||
import { statisticsApi } from "@/entities/statistics/api/statistics-service";
|
||||
@@ -10,30 +10,43 @@ import type {
|
||||
CauserBurdenItem,
|
||||
CauserBurdenSaveItem,
|
||||
CauserBurdenSaveRequest,
|
||||
CauserBurdenSubmitRequest,
|
||||
SewerageChargeItem,
|
||||
SewerageChargeSaveItem,
|
||||
SewerageChargeSaveRequest,
|
||||
SewerageChargeSubmitRequest,
|
||||
SewerageFinanceRequestParams,
|
||||
SewerageFinanceSettleItem,
|
||||
SewerageFinanceSettleSaveItem,
|
||||
SewerageFinanceSettleSaveRequest,
|
||||
SewerageFinanceSettleSubmitRequest,
|
||||
SewerageFinanceSubmitResponse,
|
||||
SewerageFinanceVerificationResult,
|
||||
SewerageUsageFeeItem,
|
||||
SewerageUsageFeeSaveItem,
|
||||
SewerageUsageFeeSaveRequest,
|
||||
SewerageUsageFeeSubmitRequest,
|
||||
} from "@/entities/statistics/model/input/statistics-input-sewerage-finance-interface";
|
||||
import { isInputPeriodCurrent } from "@/entities/statistics/model/input/statistics-sewage-supply-rate-input-interface";
|
||||
import type { cancelSubmitRequest, SewerageStatusInfo } from "@/entities/statistics/model/statistics-interface";
|
||||
import type { StatisticsInputSubmitInfoFormData } from "@/entities/statistics/model/statistics-input-submit-info-schema";
|
||||
import type {
|
||||
cancelSubmitRequest,
|
||||
ImrStatusResponse,
|
||||
SewerageStatusInfo,
|
||||
} from "@/entities/statistics/model/statistics-interface";
|
||||
import { LoadingWithAnimation, Tabs, TabsContent, TabsList, TabsTrigger } from "@common/components";
|
||||
|
||||
import { getUserInfo } from "../../../../../../packages/common/components/src/api";
|
||||
|
||||
import SubmitDailog from "./SubmitDailog";
|
||||
|
||||
import CancelSubmitButton from "@/components/button/CancelSubmitButton";
|
||||
import LastYearDataButton from "@/components/button/LastYearDataButton";
|
||||
import SaveButton from "@/components/button/SaveButton";
|
||||
import SubmitButton from "@/components/button/SumitButton";
|
||||
import VerificationResultButton from "@/components/button/VerificationResultButton";
|
||||
import DataGrid from "@/components/module/DataGrid";
|
||||
import { openVerificationResultDialogIfNeeded } from "@/components/module/post-submit-verification-results";
|
||||
import SearchForm from "@/components/module/SearchForm";
|
||||
import { VerificationResultDialog } from "@/components/module/VerificationResultDialog";
|
||||
import { VerificationResultHistoryDialog } from "@/components/module/VerificationResultHistoryDialog";
|
||||
@@ -306,11 +319,40 @@ function buildCauserBurdenSaveList(
|
||||
}));
|
||||
}
|
||||
|
||||
const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
async function waitForImrJobCompleted(
|
||||
jobId: string,
|
||||
getStatus: (id: string) => Promise<ImrStatusResponse>,
|
||||
options?: {
|
||||
pollIntervalMs?: number;
|
||||
maxAttempts?: number;
|
||||
onProgress?: (jobProgress: number) => void;
|
||||
},
|
||||
): Promise<void> {
|
||||
const pollIntervalMs = options?.pollIntervalMs ?? 2000;
|
||||
const maxAttempts = options?.maxAttempts ?? 150;
|
||||
for (let i = 0; i < maxAttempts; i++) {
|
||||
const res = await getStatus(jobId);
|
||||
options?.onProgress?.(Math.max(0, Math.min(100, Number(res.job_prog) || 0)));
|
||||
if (res.status === "COMPLETED" && Number(res.job_prog) === 100) return;
|
||||
if (res.status === "FAILED" || res.status === "ERROR" || res.status === "CANCELLED") {
|
||||
throw new Error(res.error_msg || `IMR 검증이 ${res.status} 상태로 종료되었습니다.`);
|
||||
}
|
||||
await sleep(pollIntervalMs);
|
||||
}
|
||||
throw new Error("IMR 검증 완료 대기 시간이 초과되었습니다.");
|
||||
}
|
||||
|
||||
// 하수도 통계 관리 > 09. 하수도재정
|
||||
const SewerageFinanceInp = () => {
|
||||
const { setMessage: alert } = useAlertStore((state) => state);
|
||||
const { confirm } = useConfirm();
|
||||
const { isAdminInfo } = useAdminStore();
|
||||
const showGlobalProgress = useGlobalProgressStore((state) => state.show);
|
||||
const hideGlobalProgress = useGlobalProgressStore((state) => state.hide);
|
||||
const setGlobalProgress = useGlobalProgressStore((state) => state.setProgress);
|
||||
const setGlobalProgressLabel = useGlobalProgressStore((state) => state.setLabel);
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [activeTab, setActiveTab] = useState<string>(firstTabKey);
|
||||
@@ -333,6 +375,7 @@ const SewerageFinanceInp = () => {
|
||||
>({});
|
||||
const [verificationHistoryOpen, setVerificationHistoryOpen] = useState(false);
|
||||
const [verificationResultDialogOpen, setVerificationResultDialogOpen] = useState(false);
|
||||
const [showSubmitDialog, setShowSubmitDialog] = useState(false);
|
||||
|
||||
const searchParamRef = useRef<SewerageFinanceRequestParams | null>(null);
|
||||
const searchDoneRef = useRef(false);
|
||||
@@ -702,7 +745,208 @@ const SewerageFinanceInp = () => {
|
||||
};
|
||||
|
||||
const submitFunc = () => {
|
||||
// 제출 로직
|
||||
void (async () => {
|
||||
const tabKey = activeTabRef.current;
|
||||
const { isSettleTab, isChargeTab, isUsageFeeTab, isCauserBurdenTab } =
|
||||
resolveSewerageFinanceTab(tabKey);
|
||||
if (!isSettleTab && !isChargeTab && !isUsageFeeTab && !isCauserBurdenTab) {
|
||||
alert("제출할 수 없는 탭입니다.");
|
||||
return;
|
||||
}
|
||||
if (!lastSearchedValues || !searchParamRef.current) {
|
||||
alert("먼저 조회를 진행해주세요.");
|
||||
return;
|
||||
}
|
||||
if (!buildGugunOkForToolbar(lastSearchedValues)) {
|
||||
alert("시군구를 선택해주세요.");
|
||||
return;
|
||||
}
|
||||
const currentData = getTabGridRows(tabKey);
|
||||
if (!currentData.length) {
|
||||
alert("제출할 데이터가 없습니다.");
|
||||
return;
|
||||
}
|
||||
if (await confirm("제출 하시겠습니까?")) {
|
||||
setShowSubmitDialog(true);
|
||||
}
|
||||
})();
|
||||
};
|
||||
|
||||
const executeSubmit = async (submitInfo: StatisticsInputSubmitInfoFormData) => {
|
||||
const tabKey = activeTabRef.current;
|
||||
const { isSettleTab, isChargeTab, isUsageFeeTab, isCauserBurdenTab } =
|
||||
resolveSewerageFinanceTab(tabKey);
|
||||
if (!isSettleTab && !isChargeTab && !isUsageFeeTab && !isCauserBurdenTab) {
|
||||
alert("제출할 수 없는 탭입니다.");
|
||||
return;
|
||||
}
|
||||
if (!lastSearchedValues || !searchParamRef.current) {
|
||||
alert("먼저 조회를 진행해주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
const currentData = getTabGridRows(tabKey);
|
||||
if (!currentData.length) {
|
||||
alert("제출할 데이터가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
const activeTabStatus = tabStatusInfoMap.get(tabKey) ?? null;
|
||||
const statsCdForTab = tabStatsCdMap.get(tabKey) ?? tabKey;
|
||||
const adminOpt = isAdminInfo ? { superAdmin: "superAdmin" as const } : {};
|
||||
|
||||
const submitInfoBase = {
|
||||
statsYr: lastSearchedValues.year ?? "",
|
||||
ctpvNm: lastSearchedValues.sido ?? "",
|
||||
sggNm:
|
||||
lastSearchedValues.gugun === "ALL"
|
||||
? ""
|
||||
: (lastSearchedValues.gugun ?? ""),
|
||||
sewerBzmnCd: lastSearchedValues.bsnmCd ?? "",
|
||||
laePicNm: submitInfo.laePicNm,
|
||||
laePicTelNo: submitInfo.laePicTelNo,
|
||||
laeKbrdrDeptNm: submitInfo.laeKbrdrDeptNm,
|
||||
laeKbrdrJbgdNm: submitInfo.laeKbrdrJbgdNm,
|
||||
laeIdfrNm: submitInfo.laeIdfrNm,
|
||||
laeIdfrTelNo: submitInfo.laeIdfrTelNo,
|
||||
laeIdfrDeptNm: submitInfo.laeIdfrDeptNm,
|
||||
laeIdfrJbgdNm: submitInfo.laeIdfrJbgdNm,
|
||||
};
|
||||
|
||||
const verificationQuery = {
|
||||
sewerBzmnCd: lastSearchedValues.bsnmCd ?? "",
|
||||
ctpvNm: lastSearchedValues.sido ?? "",
|
||||
sggNm:
|
||||
lastSearchedValues.gugun === "ALL"
|
||||
? ""
|
||||
: (lastSearchedValues.gugun ?? ""),
|
||||
statsYr: lastSearchedValues.year ?? "",
|
||||
statsCd: statsCdForTab,
|
||||
};
|
||||
|
||||
const reloadSubmittedTab = async () => {
|
||||
await loadActiveTabData(
|
||||
tabKey,
|
||||
searchParamRef.current!,
|
||||
lastSearchedValues,
|
||||
false,
|
||||
false,
|
||||
);
|
||||
};
|
||||
|
||||
try {
|
||||
showGlobalProgress({ label: "서버에 요청 중...", progress: 0 });
|
||||
const userInfo = await getUserInfo();
|
||||
setGlobalProgressLabel("일반 검증 진행 중...");
|
||||
|
||||
let response: SewerageFinanceSubmitResponse;
|
||||
|
||||
if (isSettleTab) {
|
||||
const param: SewerageFinanceSettleSubmitRequest = {
|
||||
...submitInfoBase,
|
||||
userId: userInfo.userUnqId,
|
||||
submitList: buildSewerageFinanceSettleSaveList(currentData),
|
||||
...adminOpt,
|
||||
};
|
||||
response =
|
||||
await statisticsInputSewerageFinanceApi.submitSewerageFinanceSettle(
|
||||
param,
|
||||
);
|
||||
} else if (isChargeTab) {
|
||||
const param: SewerageChargeSubmitRequest = {
|
||||
...submitInfoBase,
|
||||
userId: userInfo.userUnqId,
|
||||
submitList: buildSewerageChargeSaveList(currentData),
|
||||
...adminOpt,
|
||||
};
|
||||
response = await statisticsInputSewerageFinanceApi.submitSewerageCharge(param);
|
||||
} else if (isUsageFeeTab) {
|
||||
const param: SewerageUsageFeeSubmitRequest = {
|
||||
...submitInfoBase,
|
||||
userId: userInfo.userUnqId,
|
||||
submitList: buildSewerageUsageFeeSaveList(currentData),
|
||||
...adminOpt,
|
||||
};
|
||||
response =
|
||||
await statisticsInputSewerageFinanceApi.submitSewerageUsageFee(param);
|
||||
} else {
|
||||
const param: CauserBurdenSubmitRequest = {
|
||||
...submitInfoBase,
|
||||
userId: userInfo.userUnqId,
|
||||
submitList: buildCauserBurdenSaveList(currentData),
|
||||
...adminOpt,
|
||||
};
|
||||
response = await statisticsInputSewerageFinanceApi.submitCauserBurden(param);
|
||||
}
|
||||
|
||||
if (response.status !== "success") {
|
||||
alert(response.message || "데이터 제출 중 오류가 발생했습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
const finalStatus = response.data?.finalStatus;
|
||||
const nvpassed = response.data?.nvpassed;
|
||||
|
||||
if (finalStatus === "5") {
|
||||
setGlobalProgress(50);
|
||||
setGlobalProgressLabel("IMR 검증 진행 중...");
|
||||
const imrParam = {
|
||||
user_id: userInfo.userUnqId,
|
||||
sewer_bzmn_cd: lastSearchedValues.bsnmCd ?? "",
|
||||
stats_cd: statsCdForTab,
|
||||
stats_yr: lastSearchedValues.year ?? "",
|
||||
lae_sbmsn_stts_cd: activeTabStatus?.laeSbmsnSttsCd === "4" ? "4" : "2",
|
||||
gen_verify_stts_cd: nvpassed ? "1" : "2",
|
||||
};
|
||||
|
||||
try {
|
||||
const imrResponse = await statisticsApi.callImrService(imrParam);
|
||||
if (imrResponse.job_id) {
|
||||
await waitForImrJobCompleted(
|
||||
imrResponse.job_id,
|
||||
(id) => statisticsApi.getImrStatus(id),
|
||||
{
|
||||
onProgress: (jobProgress) => {
|
||||
setGlobalProgress(50 + Math.round(jobProgress / 2));
|
||||
},
|
||||
},
|
||||
);
|
||||
}
|
||||
setGlobalProgress(100);
|
||||
await reloadSubmittedTab();
|
||||
await openVerificationResultDialogIfNeeded(
|
||||
verificationQuery,
|
||||
setVerificationResultDialogOpen,
|
||||
{ notify: alert },
|
||||
);
|
||||
} catch (e) {
|
||||
await reloadSubmittedTab();
|
||||
await openVerificationResultDialogIfNeeded(
|
||||
verificationQuery,
|
||||
setVerificationResultDialogOpen,
|
||||
{ notify: alert, notifySubmitComplete: false },
|
||||
);
|
||||
const msg =
|
||||
e instanceof Error && e.message
|
||||
? e.message
|
||||
: "IMR 검증 중 오류가 발생했습니다.\n관리자에게 문의하세요.";
|
||||
alert(msg);
|
||||
}
|
||||
} else {
|
||||
setGlobalProgress(100);
|
||||
await reloadSubmittedTab();
|
||||
await openVerificationResultDialogIfNeeded(
|
||||
verificationQuery,
|
||||
setVerificationResultDialogOpen,
|
||||
{ notify: alert },
|
||||
);
|
||||
}
|
||||
} catch {
|
||||
alert("데이터 제출 중 오류가 발생했습니다.");
|
||||
} finally {
|
||||
hideGlobalProgress();
|
||||
setShowSubmitDialog(false);
|
||||
}
|
||||
};
|
||||
|
||||
const saveFunc = () => {
|
||||
@@ -1071,6 +1315,13 @@ const SewerageFinanceInp = () => {
|
||||
);
|
||||
}}
|
||||
/>
|
||||
<SubmitDailog
|
||||
open={showSubmitDialog}
|
||||
onOpenChange={setShowSubmitDialog}
|
||||
statusInfo={activeTabStatus}
|
||||
onConfirm={executeSubmit}
|
||||
isLoading={isLoading}
|
||||
/>
|
||||
<VerificationResultDialog
|
||||
open={verificationResultDialogOpen}
|
||||
onOpenChange={setVerificationResultDialogOpen}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,233 @@
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
|
||||
import { useConfirm } from "@frontend-opensource/use-react-hooks";
|
||||
import type { RealGridReact } from "realgrid-react";
|
||||
|
||||
import { useAlertStore, useGlobalProgressStore } from "@/shared/lib";
|
||||
import { statisticsSewerageAggregateSummaryApi } from "@/entities/statistics/api/statistics-sewerage-aggregate-summary-service";
|
||||
import type { SewerageAggregateSummaryDownloadRequest } from "@/entities/statistics/model/statistics-total/statistics-sewerage-aggregate-summary-interface";
|
||||
import { LoadingWithAnimation } from "@common/components";
|
||||
|
||||
import DataGrid from "@/components/module/DataGrid";
|
||||
import SearchForm from "@/components/module/SearchForm";
|
||||
import type { SearchFormValues } from "@/components/type/SearchForm.type";
|
||||
import { toGridRows } from "@/components/util/grid/gridFunction";
|
||||
|
||||
const columnInfo = {
|
||||
columns: [
|
||||
{
|
||||
name: "statsCd",
|
||||
fieldName: "statsCd",
|
||||
header: { text: "통계항목코드" },
|
||||
editable: false,
|
||||
visible: false,
|
||||
},
|
||||
{ name: "tabNm", fieldName: "tabNm", header: { text: "통계항목" }, editable: false },
|
||||
],
|
||||
columnLayout: ["statsCd", "tabNm"],
|
||||
};
|
||||
|
||||
type GridViewWithCheckApi = {
|
||||
getCheckedRows?: (refresh?: boolean) => number[];
|
||||
getCheckedItems?: (refresh?: boolean) => number[];
|
||||
};
|
||||
|
||||
const EXCEL_DOWNLOAD_PROGRESS_MAX = 98;
|
||||
const EXCEL_DOWNLOAD_PROGRESS_STEP = 1;
|
||||
const EXCEL_DOWNLOAD_PROGRESS_INTERVAL_MS = 500;
|
||||
const EXCEL_DOWNLOAD_PROGRESS_LABEL =
|
||||
"엑셀 파일을 생성 중입니다.\n창을 닫거나 이동하지 말고 잠시만 기다려주세요.";
|
||||
|
||||
const SewerageAggregateSummary = () => {
|
||||
const { confirm } = useConfirm();
|
||||
const { setMessage: alert } = useAlertStore((state) => state);
|
||||
const showGlobalProgress = useGlobalProgressStore((state) => state.show);
|
||||
const hideGlobalProgress = useGlobalProgressStore((state) => state.hide);
|
||||
const setGlobalProgress = useGlobalProgressStore((state) => state.setProgress);
|
||||
const [rowData, setRowData] = useState<Record<string, string | number>[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const getGridDataRef = useRef<(() => Record<string, string | number>[]) | null>(null);
|
||||
const getGridRef = useRef<RealGridReact | null>(null);
|
||||
const downloadProgressTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
let cancelled = false;
|
||||
|
||||
void (async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
const response =
|
||||
await statisticsSewerageAggregateSummaryApi.getAggregateSummaryTabList();
|
||||
|
||||
if (cancelled) return;
|
||||
|
||||
if (response.status === "success") {
|
||||
setRowData(toGridRows(response.data ?? []));
|
||||
} else {
|
||||
alert(response.message || "데이터 조회 중 오류가 발생했습니다.");
|
||||
}
|
||||
} catch {
|
||||
if (!cancelled) {
|
||||
alert("데이터 조회 중 오류가 발생했습니다.");
|
||||
}
|
||||
} finally {
|
||||
if (!cancelled) {
|
||||
setIsLoading(false);
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, [alert]);
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
if (downloadProgressTimerRef.current !== null) {
|
||||
clearInterval(downloadProgressTimerRef.current);
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
const stopDownloadProgressTimer = () => {
|
||||
if (downloadProgressTimerRef.current !== null) {
|
||||
clearInterval(downloadProgressTimerRef.current);
|
||||
downloadProgressTimerRef.current = null;
|
||||
}
|
||||
};
|
||||
|
||||
const startDownloadProgress = () => {
|
||||
stopDownloadProgressTimer();
|
||||
let currentProgress = 0;
|
||||
|
||||
showGlobalProgress({
|
||||
label: EXCEL_DOWNLOAD_PROGRESS_LABEL,
|
||||
progress: 0,
|
||||
});
|
||||
|
||||
downloadProgressTimerRef.current = setInterval(() => {
|
||||
currentProgress = Math.min(
|
||||
currentProgress + EXCEL_DOWNLOAD_PROGRESS_STEP,
|
||||
EXCEL_DOWNLOAD_PROGRESS_MAX,
|
||||
);
|
||||
setGlobalProgress(currentProgress);
|
||||
|
||||
if (currentProgress >= EXCEL_DOWNLOAD_PROGRESS_MAX) {
|
||||
stopDownloadProgressTimer();
|
||||
}
|
||||
}, EXCEL_DOWNLOAD_PROGRESS_INTERVAL_MS);
|
||||
};
|
||||
|
||||
const handleDownload = async (values: SearchFormValues) => {
|
||||
const gridView = getGridRef.current?.gridView as GridViewWithCheckApi | undefined;
|
||||
const checkedIndexes =
|
||||
gridView?.getCheckedRows?.(false) ?? gridView?.getCheckedItems?.(false) ?? [];
|
||||
|
||||
const allRows = getGridDataRef.current?.() ?? rowData;
|
||||
const statsCdList = checkedIndexes
|
||||
.map((idx) => normalizeGridString(allRows[idx]?.statsCd))
|
||||
.filter((cd) => cd.length > 0);
|
||||
|
||||
if (statsCdList.length === 0) {
|
||||
alert("내려받을 통계항목을 선택해주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!values.year) {
|
||||
alert("통계연도를 선택해주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
!(await confirm(
|
||||
`선택한 데이터 및 사용자 네트워크 환경에 따라 최대 1시간까지 시간이 소요될 수 있습니다.
|
||||
진행하시겠습니까?`
|
||||
))
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const summaryYearCnt =
|
||||
values.isSummary && values.isSummary !== "ALL"
|
||||
? Number(values.isSummary)
|
||||
: 0;
|
||||
|
||||
const request: SewerageAggregateSummaryDownloadRequest = {
|
||||
statsCdList,
|
||||
statsYr: values.year,
|
||||
ctpvNm: values.sido === "ALL" ? "" : (values.sido ?? ""),
|
||||
sggNm: values.gugun === "ALL" ? "" : (values.gugun ?? ""),
|
||||
sewerBzmnCd: values.bsnmCd ?? "",
|
||||
summaryYearCnt: Number.isFinite(summaryYearCnt) ? summaryYearCnt : 0,
|
||||
};
|
||||
|
||||
try {
|
||||
startDownloadProgress();
|
||||
const { blob, fileName } =
|
||||
await statisticsSewerageAggregateSummaryApi.downloadAggregateSummary(request);
|
||||
|
||||
stopDownloadProgressTimer();
|
||||
setGlobalProgress(100);
|
||||
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement("a");
|
||||
a.href = url;
|
||||
a.download = fileName || `하수도통계 집계 요약표_${values.year}.xlsx`;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
document.body.removeChild(a);
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 400));
|
||||
alert("저장되었습니다.");
|
||||
} catch (error) {
|
||||
const message =
|
||||
error instanceof Error && error.message
|
||||
? error.message
|
||||
: "엑셀 내려받기 중 오류가 발생했습니다.";
|
||||
alert(message);
|
||||
} finally {
|
||||
stopDownloadProgressTimer();
|
||||
hideGlobalProgress();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="relative">
|
||||
<SearchForm
|
||||
isSummary={true}
|
||||
sidoSelectText="전체"
|
||||
searchButtonText="내려받기"
|
||||
onSubmit={(values) => void handleDownload(values)}
|
||||
isReset={false}
|
||||
/>
|
||||
{isLoading && (
|
||||
<div className="absolute inset-0 z-50 [data-theme='black']:bg-transparent rounded-lg p-10 flex justify-center items-center">
|
||||
<div className="relative size-[5rem]">
|
||||
<LoadingWithAnimation color="primary" />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<DataGrid
|
||||
columnInfo={columnInfo}
|
||||
rowStartNum={1}
|
||||
isExcelImport={false}
|
||||
isExcelExport={false}
|
||||
showHeaderCheckbox
|
||||
rowData={rowData}
|
||||
setRowData={setRowData}
|
||||
getGridDataRef={getGridDataRef}
|
||||
getGridRef={getGridRef}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
function normalizeGridString(value: unknown): string {
|
||||
if (value === null || value === undefined) return "";
|
||||
return typeof value === "string" ? value : String(value);
|
||||
}
|
||||
|
||||
export default SewerageAggregateSummary;
|
||||
@@ -173,11 +173,24 @@ export type ComputedFieldConfig =
|
||||
dschgField: string;
|
||||
type: "bodPrcsRt";
|
||||
}
|
||||
| {
|
||||
/** Σ(numeratorFields) / denominatorField × 10,000 (건/10,000명) */
|
||||
numeratorFields: string[];
|
||||
denominatorField: string;
|
||||
type: "sumPerTenThousand";
|
||||
}
|
||||
| {
|
||||
/** (quotient[0]/quotient[1]) / (denominatorQuotient[0]/denominatorQuotient[1]) × 100 */
|
||||
numeratorQuotient: [string, string];
|
||||
denominatorQuotient: [string, string];
|
||||
type: "quotientRatioPercent";
|
||||
}
|
||||
| {
|
||||
/** (numeratorField / denominatorField) × multiplierField × 100 */
|
||||
numeratorField: string;
|
||||
denominatorField: string;
|
||||
multiplierField: string;
|
||||
type: "quotientTimesMultiplierPercent";
|
||||
};
|
||||
|
||||
export type ColumnConfig = {
|
||||
@@ -300,15 +313,30 @@ export type ColumnInfoList = {
|
||||
};
|
||||
|
||||
// 개별 셀 스타일을 동적으로 결정하기 위한 콜백 (예: 검증 오류 셀 강조)
|
||||
export type CellStyleCallbackGrid = {
|
||||
getValue?: (itemIndex: number, fieldName: string) => unknown;
|
||||
};
|
||||
|
||||
export type CellStyleCallbackParams = {
|
||||
rowIndex: number;
|
||||
fieldName: string;
|
||||
row: Record<string, string | number>;
|
||||
/** styleCallback 시점의 그리드 값 조회(행 단위 동적 스타일용) */
|
||||
grid?: CellStyleCallbackGrid;
|
||||
};
|
||||
|
||||
/** RealGrid styleCallback — 문자열(styleName) 또는 editable 등 동적 스타일 객체 */
|
||||
export type CellStyleCallbackResult =
|
||||
| string
|
||||
| {
|
||||
styleName?: string;
|
||||
editable?: boolean;
|
||||
readOnly?: boolean;
|
||||
};
|
||||
|
||||
export type CellStyleCallback = (
|
||||
params: CellStyleCallbackParams,
|
||||
) => string | undefined;
|
||||
) => CellStyleCallbackResult | undefined;
|
||||
|
||||
/** 셀 hover 시 툴팁 문구 (반환 시 해당 문구 표시, 검증 오류 메시지 등) */
|
||||
export type CellTooltipCallbackParams = {
|
||||
|
||||
@@ -30,10 +30,12 @@ export type SearchFormProps = {
|
||||
onReset?: () => void;
|
||||
onValuesChange?: (values: SearchFormValues) => void;
|
||||
defaultValues?: SearchFormValues;
|
||||
searchButtonText?: string;
|
||||
isReset?: boolean;
|
||||
};
|
||||
|
||||
export const defaultSearchFormProps: Required<
|
||||
Omit<SearchFormProps, "onSubmit" | "onReset" | "onValuesChange" | "defaultValues" | "sidoSelectText">
|
||||
Omit<SearchFormProps, "onSubmit" | "onReset" | "onValuesChange" | "defaultValues" | "sidoSelectText" | "searchButtonText">
|
||||
> = {
|
||||
sido: true,
|
||||
gugun: true,
|
||||
@@ -44,4 +46,5 @@ export const defaultSearchFormProps: Required<
|
||||
userMenual: false,
|
||||
isDetail: false,
|
||||
isSummary: false,
|
||||
isReset: true,
|
||||
};
|
||||
@@ -8,7 +8,7 @@ import { ValueType } from "realgrid";
|
||||
export const ExcretaTreatFactInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
|
||||
// 기본 정보
|
||||
|
||||
+43
-42
@@ -5,74 +5,75 @@ import { ValueType } from "realgrid";
|
||||
export const ExcretaRelatedIndustryInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_DSTR_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ADST_DONG', fieldName: '행정동', header: { text: '행정동' }, visible: false },
|
||||
{ name: 'RGN_NM', fieldName: '지역명', header: { text: '지역명' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 업체수(개소)
|
||||
{ name: 'ECSCS_SM', fieldName: '업체수(개소)', header: { text: '업체수(개소)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'bzentyCnt', fieldName: 'bzentyCnt', header: { text: '업체수(개소)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 종사인원(명)
|
||||
{ name: 'ECSCS_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'empNope', fieldName: 'empNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 시설(차량) 확보현황(대수)
|
||||
{ name: 'VHCLE_SM', fieldName: '계', header: { text: '계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'THREE_BELOW', fieldName: '3톤이하', header: { text: '3톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'FOUR_BELOW', fieldName: '4.5톤이하', header: { text: '4.5톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'EIGHT_BELOW', fieldName: '8톤이하', header: { text: '8톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{
|
||||
name: 'fcltSecrPrstCnt',
|
||||
fieldName: 'fcltSecrPrstCnt',
|
||||
header: { text: '계' },
|
||||
editable: false, footer:
|
||||
footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['n3TonUdrCnt', 'n4TonUdrCnt', 'n8TonUdrCnt', 'etcCnt'],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'n3TonUdrCnt', fieldName: 'n3TonUdrCnt', header: { text: '3톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'n4TonUdrCnt', fieldName: 'n4TonUdrCnt', header: { text: '4.5톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'n8TonUdrCnt', fieldName: 'n8TonUdrCnt', header: { text: '8톤이하' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 수집·운반 실적(m³/년)
|
||||
{ name: 'COLCT_TRSP_ACMSLT', fieldName: '수집·운반 실적(m³/년)', header: { text: '수집·운반 실적(m³/년)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'clctCnvncPrfmncQnt', fieldName: 'clctCnvncPrfmncQnt', header: { text: '수집·운반 실적(m³/년)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_ECSCS_SM', fieldName: 'CHK_ECSCS_SM', header: { text: 'CHK_ECSCS_SM' }, visible: false },
|
||||
{ name: 'CHK_ECSCS_BSMN', fieldName: 'CHK_ECSCS_BSMN', header: { text: 'CHK_ECSCS_BSMN' }, visible: false },
|
||||
{ name: 'CHK_VHCLE_SM', fieldName: 'CHK_VHCLE_SM', header: { text: 'CHK_VHCLE_SM' }, visible: false },
|
||||
{ name: 'CHK_THREE_BELOW', fieldName: 'CHK_THREE_BELOW', header: { text: 'CHK_THREE_BELOW' }, visible: false },
|
||||
{ name: 'CHK_FOUR_BELOW', fieldName: 'CHK_FOUR_BELOW', header: { text: 'CHK_FOUR_BELOW' }, visible: false },
|
||||
{ name: 'CHK_EIGHT_BELOW', fieldName: 'CHK_EIGHT_BELOW', header: { text: 'CHK_EIGHT_BELOW' }, visible: false },
|
||||
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
|
||||
{ name: 'CHK_COLCT_TRSP_ACMSLT', fieldName: 'CHK_COLCT_TRSP_ACMSLT', header: { text: 'CHK_COLCT_TRSP_ACMSLT' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'ECSCS_SM',
|
||||
'ECSCS_BSMN',
|
||||
'bzentyCnt',
|
||||
'empNope',
|
||||
{
|
||||
name: 'group_vehicle_status',
|
||||
header: { text: '시설(차량) 확보현황(대수)' },
|
||||
items: [
|
||||
'VHCLE_SM',
|
||||
'THREE_BELOW',
|
||||
'FOUR_BELOW',
|
||||
'EIGHT_BELOW',
|
||||
'ETC'
|
||||
'fcltSecrPrstCnt',
|
||||
'n3TonUdrCnt',
|
||||
'n4TonUdrCnt',
|
||||
'n8TonUdrCnt',
|
||||
'etcCnt'
|
||||
]
|
||||
},
|
||||
'COLCT_TRSP_ACMSLT',
|
||||
'RMK'
|
||||
'clctCnvncPrfmncQnt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 1,
|
||||
tabKey: 'excretaRelatedIndustryInp',
|
||||
fixedColumns: 0,
|
||||
tabKey: 'ST00120003',
|
||||
tabLabel: '분뇨수집·운반업'
|
||||
};
|
||||
+23
-46
@@ -5,82 +5,59 @@ import { ValueType } from "realgrid";
|
||||
export const PrivateSewageTreatRelatedIndustryInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_DONG', fieldName: '행정동', header: { text: '행정동' }, visible: false },
|
||||
{ name: 'RGN_NM', fieldName: '지역명', header: { text: '지역명' }, visible: false },
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 개인하수처리시설 설계·시공업
|
||||
{ name: 'CNSTRCT_ENTRPS', fieldName: '업소수', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CNSTRCT_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'designMdsrCnt', fieldName: 'designMdsrCnt', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'designMdsrNope', fieldName: 'designMdsrNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 개인하수처리시설 제조업
|
||||
{ name: 'MNFCTUR_ENTRPS', fieldName: '업소수', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'MNFCTUR_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'mfbizCnt', fieldName: 'mfbizCnt', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'mfbizMdsrNope', fieldName: 'mfbizMdsrNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 개인하수처리시설 관리업
|
||||
{ name: 'MGMT_ENTRPS', fieldName: '업소수', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'MGMT_BSMN', fieldName: '종사인원(명)', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'mngCnt', fieldName: 'mngCnt', header: { text: '업소수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'mngMdsrNope', fieldName: 'mngMdsrNope', header: { text: '종사인원(명)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: 추가 필드 (화면에 미노출이, DB 저장)
|
||||
{ name: 'CNSTRCT_FCT_CNT', fieldName: '설계시공시설개수', header: { text: '설계시공시설개수' }, visible: false },
|
||||
{ name: 'CNSTRCT_FCT_CPCTY', fieldName: '설계시공시설용량', header: { text: '설계시공시설용량' }, visible: false },
|
||||
{ name: 'MNFCTUR_STTY_CNT', fieldName: '제조정원', header: { text: '제조정원' }, visible: false },
|
||||
{ name: 'MNFCTUR_WRRTN_CNT', fieldName: '제조권원', header: { text: '제조권원' }, visible: false },
|
||||
{ name: 'MGMT_STTY_CNT', fieldName: '관리정원', header: { text: '관리정원' }, visible: false },
|
||||
{ name: 'MGMT_WRRTN_CNT', fieldName: '관리권원', header: { text: '관리권원' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_CNSTRCT_ENTRPS', fieldName: 'CHK_CNSTRCT_ENTRPS', header: { text: 'CHK_CNSTRCT_ENTRPS' }, visible: false },
|
||||
{ name: 'CHK_CNSTRCT_BSMN', fieldName: 'CHK_CNSTRCT_BSMN', header: { text: 'CHK_CNSTRCT_BSMN' }, visible: false },
|
||||
{ name: 'CHK_CNSTRCT_FCT_CNT', fieldName: 'CHK_CNSTRCT_FCT_CNT', header: { text: 'CHK_CNSTRCT_FCT_CNT' }, visible: false },
|
||||
{ name: 'CHK_CNSTRCT_FCT_CPCTY', fieldName: 'CHK_CNSTRCT_FCT_CPCTY', header: { text: 'CHK_CNSTRCT_FCT_CPCTY' }, visible: false },
|
||||
{ name: 'CHK_MNFCTUR_ENTRPS', fieldName: 'CHK_MNFCTUR_ENTRPS', header: { text: 'CHK_MNFCTUR_ENTRPS' }, visible: false },
|
||||
{ name: 'CHK_MNFCTUR_BSMN', fieldName: 'CHK_MNFCTUR_BSMN', header: { text: 'CHK_MNFCTUR_BSMN' }, visible: false },
|
||||
{ name: 'CHK_MNFCTUR_STTY_CNT', fieldName: 'CHK_MNFCTUR_STTY_CNT', header: { text: 'CHK_MNFCTUR_STTY_CNT' }, visible: false },
|
||||
{ name: 'CHK_MNFCTUR_WRRTN_CNT', fieldName: 'CHK_MNFCTUR_WRRTN_CNT', header: { text: 'CHK_MNFCTUR_WRRTN_CNT' }, visible: false },
|
||||
{ name: 'CHK_MGMT_ENTRPS', fieldName: 'CHK_MGMT_ENTRPS', header: { text: 'CHK_MGMT_ENTRPS' }, visible: false },
|
||||
{ name: 'CHK_MGMT_BSMN', fieldName: 'CHK_MGMT_BSMN', header: { text: 'CHK_MGMT_BSMN' }, visible: false },
|
||||
{ name: 'CHK_MGMT_STTY_CNT', fieldName: 'CHK_MGMT_STTY_CNT', header: { text: 'CHK_MGMT_STTY_CNT' }, visible: false },
|
||||
{ name: 'CHK_MGMT_WRRTN_CNT', fieldName: 'CHK_MGMT_WRRTN_CNT', header: { text: 'CHK_MGMT_WRRTN_CNT' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'group_design_construct',
|
||||
header: { text: '개인하수처리시설 설계·시공업' },
|
||||
items: ['CNSTRCT_ENTRPS', 'CNSTRCT_BSMN']
|
||||
items: ['designMdsrCnt', 'designMdsrNope']
|
||||
},
|
||||
{
|
||||
name: 'group_manufacture',
|
||||
header: { text: '개인하수처리시설 제조업' },
|
||||
items: ['MNFCTUR_ENTRPS', 'MNFCTUR_BSMN']
|
||||
items: ['mfbizCnt', 'mfbizMdsrNope']
|
||||
},
|
||||
{
|
||||
name: 'group_management',
|
||||
header: { text: '개인하수처리시설 관리업' },
|
||||
items: ['MGMT_ENTRPS', 'MGMT_BSMN']
|
||||
items: ['mngCnt', 'mngMdsrNope']
|
||||
},
|
||||
'RMK'
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 1,
|
||||
tabKey: 'privateSewageTreatRelatedIndustryInp',
|
||||
fixedColumns: 0,
|
||||
tabKey: 'ST00120004',
|
||||
tabLabel: '개인하수처리관련업'
|
||||
};
|
||||
+72
-51
@@ -5,86 +5,107 @@ import { ValueType } from "realgrid";
|
||||
export const PublicInstitutionExcretaIndustryInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 직제
|
||||
{ name: 'OCGNZ', fieldName: '직 제', header: { text: '직 제' } },
|
||||
{ name: 'ognzNm', fieldName: 'ognzNm', header: { text: '직 제' } },
|
||||
|
||||
// 직원총수
|
||||
{ name: 'TOT_WTR_QRM', fieldName: '직원총수', header: { text: '직원총수' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{
|
||||
name: 'empGrssCnt',
|
||||
fieldName: 'empGrssCnt',
|
||||
header: { text: '직원총수' },
|
||||
editable: false,
|
||||
footer: footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt', 'etcCnt'],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 행정직
|
||||
{ name: 'ADMINIST_JSSFC', fieldName: '행정직', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'pbadmsNope', fieldName: 'pbadmsNope', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기술직
|
||||
{ name: 'TCHNLGY_JSSFC_SM', fieldName: '계', header: { text: '계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ENGRK_JSSFC', fieldName: '토목', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'MCHN_JSSFC', fieldName: '기계', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ELCTY_JSSFC', fieldName: '전기', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CHMSTRY_JSSFC', fieldName: '화공', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ENVRN_JSSFC', fieldName: '환경', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'TCHNLGY_ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기능직 (hidden)
|
||||
{ name: 'TCNSRV', fieldName: '기능직', header: { text: '기능직' }, visible: false },
|
||||
{
|
||||
name: 'techWholNope',
|
||||
fieldName: 'techWholNope',
|
||||
header: { text: '계' },
|
||||
editable: false,
|
||||
footer: footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt'],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'engrkCnt', fieldName: 'engrkCnt', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'mchnCnt', fieldName: 'mchnCnt', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'prvtmCnt', fieldName: 'prvtmCnt', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'chmengCnt', fieldName: 'chmengCnt', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'envCnt', fieldName: 'envCnt', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'enjbEtcCnt', fieldName: 'enjbEtcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기타
|
||||
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_OCGNZ', fieldName: 'CHK_OCGNZ', header: { text: 'CHK_OCGNZ' }, visible: false },
|
||||
{ name: 'CHK_TOT_WTR_QRM', fieldName: 'CHK_TOT_WTR_QRM', header: { text: 'CHK_TOT_WTR_QRM' }, visible: false },
|
||||
{ name: 'CHK_ADMINIST_JSSFC', fieldName: 'CHK_ADMINIST_JSSFC', header: { text: 'CHK_ADMINIST_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_TCHNLGY_JSSFC_SM', fieldName: 'CHK_TCHNLGY_JSSFC_SM', header: { text: 'CHK_TCHNLGY_JSSFC_SM' }, visible: false },
|
||||
{ name: 'CHK_ENGRK_JSSFC', fieldName: 'CHK_ENGRK_JSSFC', header: { text: 'CHK_ENGRK_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_MCHN_JSSFC', fieldName: 'CHK_MCHN_JSSFC', header: { text: 'CHK_MCHN_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_ELCTY_JSSFC', fieldName: 'CHK_ELCTY_JSSFC', header: { text: 'CHK_ELCTY_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_CHMSTRY_JSSFC', fieldName: 'CHK_CHMSTRY_JSSFC', header: { text: 'CHK_CHMSTRY_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_ENVRN_JSSFC', fieldName: 'CHK_ENVRN_JSSFC', header: { text: 'CHK_ENVRN_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_TCHNLGY_ETC', fieldName: 'CHK_TCHNLGY_ETC', header: { text: 'CHK_TCHNLGY_ETC' }, visible: false },
|
||||
{ name: 'CHK_TCNSRV', fieldName: 'CHK_TCNSRV', header: { text: 'CHK_TCNSRV' }, visible: false },
|
||||
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'ognzSn', fieldName: 'ognzSn', header: { text: '조직일련번호' }, visible: false },
|
||||
{
|
||||
name: '__isNewArticle',
|
||||
fieldName: '__isNewArticle',
|
||||
header: { text: '신규항목' },
|
||||
visible: false,
|
||||
editable: false,
|
||||
valueType: ValueType.NUMBER,
|
||||
},
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'OCGNZ',
|
||||
'TOT_WTR_QRM',
|
||||
'ADMINIST_JSSFC',
|
||||
'ognzNm',
|
||||
'empGrssCnt',
|
||||
'pbadmsNope',
|
||||
{
|
||||
name: 'group_technology',
|
||||
header: { text: '기술직' },
|
||||
items: [
|
||||
'TCHNLGY_JSSFC_SM',
|
||||
'ENGRK_JSSFC',
|
||||
'MCHN_JSSFC',
|
||||
'ELCTY_JSSFC',
|
||||
'CHMSTRY_JSSFC',
|
||||
'ENVRN_JSSFC',
|
||||
'TCHNLGY_ETC'
|
||||
'techWholNope',
|
||||
'engrkCnt',
|
||||
'mchnCnt',
|
||||
'prvtmCnt',
|
||||
'chmengCnt',
|
||||
'envCnt',
|
||||
'enjbEtcCnt'
|
||||
]
|
||||
},
|
||||
'ETC',
|
||||
'RMK'
|
||||
'etcCnt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'ognzSn',
|
||||
'__isNewArticle',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'publicInstitutionExcretaIndustryInp',
|
||||
tabKey: 'ST00120002',
|
||||
tabLabel: '공공기관 분뇨분야'
|
||||
};
|
||||
+73
-52
@@ -5,86 +5,107 @@ import { ValueType } from "realgrid";
|
||||
export const PublicInstitutionSewerIndustryInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 직제
|
||||
{ name: 'OCGNZ', fieldName: '직 제', header: { text: '직 제' } },
|
||||
{ name: 'ognzNm', fieldName: 'ognzNm', header: { text: '직 제' } },
|
||||
|
||||
// 직원총수
|
||||
{ name: 'TOT_WTR_QRM', fieldName: '직원총수', header: { text: '직원총수' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{
|
||||
name: 'empGrssCnt',
|
||||
fieldName: 'empGrssCnt',
|
||||
header: { text: '직원총수' },
|
||||
editable: false,
|
||||
footer: footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt', 'etcCnt'],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 행정직
|
||||
{ name: 'ADMINIST_JSSFC', fieldName: '행정직', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'pbadmsNope', fieldName: 'pbadmsNope', header: { text: '행정직' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기술직
|
||||
{ name: 'TCHNLGY_JSSFC_SM', fieldName: '계', header: { text: '계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ENGRK_JSSFC', fieldName: '토목', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'MCHN_JSSFC', fieldName: '기계', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ELCTY_JSSFC', fieldName: '전기', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CHMSTRY_JSSFC', fieldName: '화공', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ENVRN_JSSFC', fieldName: '환경', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'TCHNLGY_ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기능직 (hidden)
|
||||
{ name: 'TCNSRV', fieldName: '기능직', header: { text: '기능직' }, visible: false },
|
||||
{
|
||||
name: 'techWholNope',
|
||||
fieldName: 'techWholNope',
|
||||
header: { text: '계' },
|
||||
editable: false,
|
||||
footer: footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['engrkCnt', 'mchnCnt', 'prvtmCnt', 'chmengCnt', 'envCnt', 'enjbEtcCnt'],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'engrkCnt', fieldName: 'engrkCnt', header: { text: '토목' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'mchnCnt', fieldName: 'mchnCnt', header: { text: '기계' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'prvtmCnt', fieldName: 'prvtmCnt', header: { text: '전기' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'chmengCnt', fieldName: 'chmengCnt', header: { text: '화공' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'envCnt', fieldName: 'envCnt', header: { text: '환경' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'enjbEtcCnt', fieldName: 'enjbEtcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기타
|
||||
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_OCGNZ', fieldName: 'CHK_OCGNZ', header: { text: 'CHK_OCGNZ' }, visible: false },
|
||||
{ name: 'CHK_TOT_WTR_QRM', fieldName: 'CHK_TOT_WTR_QRM', header: { text: 'CHK_TOT_WTR_QRM' }, visible: false },
|
||||
{ name: 'CHK_ADMINIST_JSSFC', fieldName: 'CHK_ADMINIST_JSSFC', header: { text: 'CHK_ADMINIST_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_TCHNLGY_JSSFC_SM', fieldName: 'CHK_TCHNLGY_JSSFC_SM', header: { text: 'CHK_TCHNLGY_JSSFC_SM' }, visible: false },
|
||||
{ name: 'CHK_ENGRK_JSSFC', fieldName: 'CHK_ENGRK_JSSFC', header: { text: 'CHK_ENGRK_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_MCHN_JSSFC', fieldName: 'CHK_MCHN_JSSFC', header: { text: 'CHK_MCHN_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_ELCTY_JSSFC', fieldName: 'CHK_ELCTY_JSSFC', header: { text: 'CHK_ELCTY_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_CHMSTRY_JSSFC', fieldName: 'CHK_CHMSTRY_JSSFC', header: { text: 'CHK_CHMSTRY_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_ENVRN_JSSFC', fieldName: 'CHK_ENVRN_JSSFC', header: { text: 'CHK_ENVRN_JSSFC' }, visible: false },
|
||||
{ name: 'CHK_TCHNLGY_ETC', fieldName: 'CHK_TCHNLGY_ETC', header: { text: 'CHK_TCHNLGY_ETC' }, visible: false },
|
||||
{ name: 'CHK_TCNSRV', fieldName: 'CHK_TCNSRV', header: { text: 'CHK_TCNSRV' }, visible: false },
|
||||
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'ognzSn', fieldName: 'ognzSn', header: { text: '조직일련번호' }, visible: false },
|
||||
{
|
||||
name: '__isNewArticle',
|
||||
fieldName: '__isNewArticle',
|
||||
header: { text: '신규항목' },
|
||||
visible: false,
|
||||
editable: false,
|
||||
valueType: ValueType.NUMBER,
|
||||
},
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'OCGNZ',
|
||||
'TOT_WTR_QRM',
|
||||
'ADMINIST_JSSFC',
|
||||
'ognzNm',
|
||||
'empGrssCnt',
|
||||
'pbadmsNope',
|
||||
{
|
||||
name: 'group_technology',
|
||||
header: { text: '기술직' },
|
||||
items: [
|
||||
'TCHNLGY_JSSFC_SM',
|
||||
'ENGRK_JSSFC',
|
||||
'MCHN_JSSFC',
|
||||
'ELCTY_JSSFC',
|
||||
'CHMSTRY_JSSFC',
|
||||
'ENVRN_JSSFC',
|
||||
'TCHNLGY_ETC'
|
||||
'techWholNope',
|
||||
'engrkCnt',
|
||||
'mchnCnt',
|
||||
'prvtmCnt',
|
||||
'chmengCnt',
|
||||
'envCnt',
|
||||
'enjbEtcCnt'
|
||||
]
|
||||
},
|
||||
'ETC',
|
||||
'RMK'
|
||||
'etcCnt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'ognzSn',
|
||||
'__isNewArticle',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 1,
|
||||
tabKey: 'publicInstitutionSewerIndustryInp',
|
||||
fixedColumns: 0,
|
||||
tabKey: 'ST00120001',
|
||||
tabLabel: '공공기관 하수분야'
|
||||
};
|
||||
+115
-48
@@ -1,91 +1,158 @@
|
||||
import type { ColumnConfig } from "@/components/type/DataGrid.type";
|
||||
import { footerDecimal1 } from "@/components/util/grid/footerSummary";
|
||||
import { ValueType } from "realgrid";
|
||||
|
||||
export const DIGESTOR_OPERATING_STATUS_YN_VALUES = ["Y", "N"] as const;
|
||||
export const DIGESTOR_OPERATING_STATUS_EN_YN_FIELD = "digstnEnYn" as const;
|
||||
|
||||
/** 소화조 유/무가 N이면 해당 행의 입력 셀을 잠근다(digstnEnYn 제외). */
|
||||
export function isDigestorOperatingRowDisabled(
|
||||
row: Record<string, string | number>,
|
||||
grid?: { getValue?: (itemIndex: number, fieldName: string) => unknown },
|
||||
rowIndex?: number,
|
||||
): boolean {
|
||||
const live =
|
||||
grid?.getValue != null && rowIndex != null && rowIndex >= 0
|
||||
? grid.getValue(rowIndex, DIGESTOR_OPERATING_STATUS_EN_YN_FIELD)
|
||||
: undefined;
|
||||
const raw =
|
||||
live !== undefined && live !== null
|
||||
? live
|
||||
: row[DIGESTOR_OPERATING_STATUS_EN_YN_FIELD];
|
||||
return String(raw ?? "").trim().toUpperCase() === "N";
|
||||
}
|
||||
|
||||
function dropdownColumn(
|
||||
col: Pick<ColumnConfig, "name" | "fieldName" | "header"> &
|
||||
Partial<ColumnConfig>,
|
||||
options: readonly string[],
|
||||
): ColumnConfig {
|
||||
const values = [...options];
|
||||
return {
|
||||
...col,
|
||||
values,
|
||||
labels: values,
|
||||
lookupDisplay: true,
|
||||
editor: {
|
||||
type: "dropdown",
|
||||
domainOnly: true,
|
||||
textReadOnly: true,
|
||||
commitOnSelect: true,
|
||||
dropDownWhenClick: true,
|
||||
values,
|
||||
labels: values,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
// 하수도 통계 관리 > 11. 하수 및 분뇨찌꺼기(슬러지)처리 > tab 2. 소화조 운영현황
|
||||
export const DigestorOperatingStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 하수처리장명
|
||||
{ name: 'BSC_FCT_NM', fieldName: '하수처리장명', header: { text: '하수처리장명' }, editable: false },
|
||||
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '하수처리장명' }, editable: false },
|
||||
|
||||
// 소화조 운영현황
|
||||
{ name: 'DGSTR_FNNC', fieldName: '소화조 유/무(Y/N)선택', header: { text: '소화조 유/무(Y/N)선택' } },
|
||||
{ name: 'DGSTR_CPC', fieldName: '설계용량(m³)', header: { text: '설계용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_OPR_CPC', fieldName: '실제운전용량(m³)', header: { text: '실제운전용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_IN', fieldName: '투입량(m³/일)', header: { text: '투입량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_TS', fieldName: '투입 TS 농도(%)', header: { text: '투입 TS 농도(%)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_YRSTP_RN_DYN', fieldName: '가동일수(연간)', header: { text: '가동일수(연간)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_OCCUR_GAS', fieldName: '발생가스량(m³/일)', header: { text: '발생가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'digstnEnYn',
|
||||
fieldName: 'digstnEnYn',
|
||||
header: { text: '소화조 유/무(Y/N)선택' },
|
||||
},
|
||||
DIGESTOR_OPERATING_STATUS_YN_VALUES,
|
||||
),
|
||||
{ name: 'digstnCpct', fieldName: 'digstnCpct', header: { text: '설계용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'actlDrvnCpct', fieldName: 'actlDrvnCpct', header: { text: '실제운전용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'digstnGasInputQnt', fieldName: 'digstnGasInputQnt', header: { text: '투입량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'digstnGasInputSldDnst', fieldName: 'digstnGasInputSldDnst', header: { text: '투입 TS 농도(%)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'digstnTnkOprtngDayCnt', fieldName: 'digstnTnkOprtngDayCnt', header: { text: '가동일수(연간)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ocrnGasQnt', fieldName: 'ocrnGasQnt', header: { text: '발생가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 소화조 운영현황 > 소화가스 이용현황(m³/일)
|
||||
{ name: 'DGSTR_SM', fieldName: '계', header: { text: '계' }, footer: footerDecimal1, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_SLE', fieldName: '판매', header: { text: '판매' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_ELTGNR', fieldName: '발전', header: { text: '발전' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_ONSLF', fieldName: '자체활용', header: { text: '자체활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'DGSTR_ETC', fieldName: '기타(CNG등)', header: { text: '기타(CNG등)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'digstnGasUtztnWholPrst',
|
||||
fieldName: 'digstnGasUtztnWholPrst',
|
||||
header: { text: '계' },
|
||||
footer: footerDecimal1,
|
||||
editable: false,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'digstnGasUtztnNtslQnt',
|
||||
'digstnGasUtztnEtgtQnt',
|
||||
'digstnGasUtztnItslfQnt',
|
||||
'digstnGasUtztnEtcQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'digstnGasUtztnNtslQnt', fieldName: 'digstnGasUtztnNtslQnt', header: { text: '판매' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'digstnGasUtztnEtgtQnt', fieldName: 'digstnGasUtztnEtgtQnt', header: { text: '발전' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'digstnGasUtztnItslfQnt', fieldName: 'digstnGasUtztnItslfQnt', header: { text: '자체활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'digstnGasUtztnEtcQnt', fieldName: 'digstnGasUtztnEtcQnt', header: { text: '기타(CNG등)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 소화조 운영현황 > 잉여가스량
|
||||
{ name: 'DGSTR_GAS', fieldName: '잉여가스량(m³/일)', header: { text: '잉여가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'surplsGasQnt', fieldName: 'surplsGasQnt', header: { text: '잉여가스량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'DGSTR_RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: Check fields for change detection
|
||||
{ name: 'CHK_DGSTR_FNNC', fieldName: 'CHK_DGSTR_FNNC', header: { text: 'CHK_DGSTR_FNNC' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_IN', fieldName: 'CHK_DGSTR_IN', header: { text: 'CHK_DGSTR_IN' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_TS', fieldName: 'CHK_DGSTR_TS', header: { text: 'CHK_DGSTR_TS' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_YRSTP_RN_DYN', fieldName: 'CHK_DGSTR_YRSTP_RN_DYN', header: { text: 'CHK_DGSTR_YRSTP_RN_DYN' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_OCCUR_GAS', fieldName: 'CHK_DGSTR_OCCUR_GAS', header: { text: 'CHK_DGSTR_OCCUR_GAS' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_CPC', fieldName: 'CHK_DGSTR_CPC', header: { text: 'CHK_DGSTR_CPC' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_OPR_CPC', fieldName: 'CHK_DGSTR_OPR_CPC', header: { text: 'CHK_DGSTR_OPR_CPC' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_SM', fieldName: 'CHK_DGSTR_SM', header: { text: 'CHK_DGSTR_SM' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_SLE', fieldName: 'CHK_DGSTR_SLE', header: { text: 'CHK_DGSTR_SLE' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_ELTGNR', fieldName: 'CHK_DGSTR_ELTGNR', header: { text: 'CHK_DGSTR_ELTGNR' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_ONSLF', fieldName: 'CHK_DGSTR_ONSLF', header: { text: 'CHK_DGSTR_ONSLF' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_ETC', fieldName: 'CHK_DGSTR_ETC', header: { text: 'CHK_DGSTR_ETC' }, visible: false },
|
||||
{ name: 'CHK_DGSTR_GAS', fieldName: 'CHK_DGSTR_GAS', header: { text: 'CHK_DGSTR_GAS' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
{ name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '처리장코드' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO_CD', 'ADST_CD']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'BSC_FCT_NM',
|
||||
'swtrmtFcltNm',
|
||||
{
|
||||
name: 'group_digestor_operating',
|
||||
header: { text: '소화조 운영현황' },
|
||||
items: [
|
||||
'DGSTR_FNNC',
|
||||
'DGSTR_CPC',
|
||||
'DGSTR_OPR_CPC',
|
||||
'DGSTR_IN',
|
||||
'DGSTR_TS',
|
||||
'DGSTR_YRSTP_RN_DYN',
|
||||
'DGSTR_OCCUR_GAS',
|
||||
'digstnEnYn',
|
||||
'digstnCpct',
|
||||
'actlDrvnCpct',
|
||||
'digstnGasInputQnt',
|
||||
'digstnGasInputSldDnst',
|
||||
'digstnTnkOprtngDayCnt',
|
||||
'ocrnGasQnt',
|
||||
{
|
||||
name: 'group_gas_usage',
|
||||
header: { text: '소화가스 이용현황(m³/일)' },
|
||||
items: [
|
||||
'DGSTR_SM',
|
||||
'DGSTR_SLE',
|
||||
'DGSTR_ELTGNR',
|
||||
'DGSTR_ONSLF',
|
||||
'DGSTR_ETC'
|
||||
'digstnGasUtztnWholPrst',
|
||||
'digstnGasUtztnNtslQnt',
|
||||
'digstnGasUtztnEtgtQnt',
|
||||
'digstnGasUtztnItslfQnt',
|
||||
'digstnGasUtztnEtcQnt'
|
||||
]
|
||||
},
|
||||
'DGSTR_GAS'
|
||||
'surplsGasQnt'
|
||||
]
|
||||
},
|
||||
'DGSTR_RMK'
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
'swtrmtFcltCd'
|
||||
],
|
||||
|
||||
rowStartNum: 3,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'digestorOperatingStatusInp',
|
||||
tabKey: 'ST00110002',
|
||||
tabLabel: '소화조 운영현황'
|
||||
};
|
||||
+81
-44
@@ -5,79 +5,116 @@ import { ValueType } from "realgrid";
|
||||
export const ExcretaSlurgeProcessingStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 분뇨처리장명
|
||||
{ name: 'ECSCS_NM', fieldName: '분 뇨 처리장명', header: { text: '분 뇨 처리장명' }, editable: false },
|
||||
{ name: 'fcltNm', fieldName: 'fcltNm', header: { text: '분뇨 처리장명' }, editable: false },
|
||||
|
||||
// 발생량
|
||||
{ name: 'OCTY', fieldName: '발생량 (A)=(B)+(C)', header: { text: '발생량 (A)=(B)+(C)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'gnam',
|
||||
fieldName: 'gnam',
|
||||
header: { text: '발생량 (A)=(B)+(C)' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'rcycQnt',
|
||||
'olandLfvlm',
|
||||
'incnrQnt',
|
||||
'oceanInputQnt',
|
||||
'fuelQnt',
|
||||
'etcQnt',
|
||||
'nondspsQnt'
|
||||
],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 처 분 량(톤/년)
|
||||
{ name: 'PROCESS_CPCTY_SM', fieldName: '계(B)', header: { text: '계(B)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'RUSE', fieldName: '재활용', header: { text: '재활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'LAND_RCLM', fieldName: '육상매립', header: { text: '육상매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'INCNR', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'OCEAN_DPSL', fieldName: '해양투기', header: { text: '해양투기' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'FUEL', fieldName: '연료화', header: { text: '연료화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ETC', fieldName: '기타', header: { text: '기타' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'wholDspsQnt',
|
||||
fieldName: 'wholDspsQnt',
|
||||
header: { text: '계(B)' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'rcycQnt',
|
||||
'olandLfvlm',
|
||||
'incnrQnt',
|
||||
'oceanInputQnt',
|
||||
'fuelQnt',
|
||||
'etcQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'rcycQnt', fieldName: 'rcycQnt', header: { text: '재활용' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'olandLfvlm', fieldName: 'olandLfvlm', header: { text: '육상매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'incnrQnt', fieldName: 'incnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'oceanInputQnt', fieldName: 'oceanInputQnt', header: { text: '해양투기' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'fuelQnt', fieldName: 'fuelQnt', header: { text: '연료화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'etcQnt', fieldName: 'etcQnt', header: { text: '기타' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 미처분량(이월량)(C)
|
||||
{ name: 'CYFD_CPCTY', fieldName: '미처분량(이월량)(C)', header: { text: '미처분량(이월량)(C)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'nondspsQnt', fieldName: 'nondspsQnt', header: { text: '미처분량(이월량)(C)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 타시설연계여부
|
||||
{ name: 'OUT_BSC_FCT_NM', fieldName: '타시설연계여부', header: { text: '타시설연계여부' } },
|
||||
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '타시설연계여부' } },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields for change detection
|
||||
{ name: 'CHK_ECSCS_NM', fieldName: 'CHK_ECSCS_NM', header: { text: 'CHK_ECSCS_NM' }, visible: false },
|
||||
{ name: 'CHK_OCTY', fieldName: 'CHK_OCTY', header: { text: 'CHK_OCTY' }, visible: false },
|
||||
{ name: 'CHK_PROCESS_CPCTY_SM', fieldName: 'CHK_PROCESS_CPCTY_SM', header: { text: 'CHK_PROCESS_CPCTY_SM' }, visible: false },
|
||||
{ name: 'CHK_RUSE', fieldName: 'CHK_RUSE', header: { text: 'CHK_RUSE' }, visible: false },
|
||||
{ name: 'CHK_LAND_RCLM', fieldName: 'CHK_LAND_RCLM', header: { text: 'CHK_LAND_RCLM' }, visible: false },
|
||||
{ name: 'CHK_INCNR', fieldName: 'CHK_INCNR', header: { text: 'CHK_INCNR' }, visible: false },
|
||||
{ name: 'CHK_OCEAN_DPSL', fieldName: 'CHK_OCEAN_DPSL', header: { text: 'CHK_OCEAN_DPSL' }, visible: false },
|
||||
{ name: 'CHK_FUEL', fieldName: 'CHK_FUEL', header: { text: 'CHK_FUEL' }, visible: false },
|
||||
{ name: 'CHK_ETC', fieldName: 'CHK_ETC', header: { text: 'CHK_ETC' }, visible: false },
|
||||
{ name: 'CHK_CYFD_CPCTY', fieldName: 'CHK_CYFD_CPCTY', header: { text: 'CHK_CYFD_CPCTY' }, visible: false },
|
||||
{ name: 'CHK_OUT_BSC_FCT_NM', fieldName: 'CHK_OUT_BSC_FCT_NM', header: { text: 'CHK_OUT_BSC_FCT_NM' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
{ name: 'fcltPstnCn', fieldName: 'fcltPstnCn', header: { text: '시설물위치내용' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO_CD', 'ADST_CD']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'ECSCS_NM',
|
||||
'OCTY',
|
||||
'fcltNm',
|
||||
'gnam',
|
||||
{
|
||||
name: 'group_process_amount',
|
||||
header: { text: '처 분 량(톤/년)' },
|
||||
items: [
|
||||
'PROCESS_CPCTY_SM',
|
||||
'RUSE',
|
||||
'LAND_RCLM',
|
||||
'INCNR',
|
||||
'OCEAN_DPSL',
|
||||
'FUEL',
|
||||
'ETC'
|
||||
'wholDspsQnt',
|
||||
'rcycQnt',
|
||||
'olandLfvlm',
|
||||
'incnrQnt',
|
||||
'oceanInputQnt',
|
||||
'fuelQnt',
|
||||
'etcQnt'
|
||||
]
|
||||
},
|
||||
'CYFD_CPCTY',
|
||||
'OUT_BSC_FCT_NM',
|
||||
'RMK'
|
||||
'nondspsQnt',
|
||||
'swtrmtFcltNm',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
'fcltPstnCn'
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 2,
|
||||
tabKey: 'excretaSlurgeProcessingStatusInp',
|
||||
tabKey: 'ST00110004',
|
||||
tabLabel: '분뇨찌꺼기(슬러지)처리현황'
|
||||
};
|
||||
+45
-28
@@ -5,22 +5,37 @@ import { ValueType } from "realgrid";
|
||||
export const SewageSlurgeProcessingFacStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 찌꺼기처리시설명
|
||||
{ name: 'SLG_FCT_NM', fieldName: '찌꺼기처리시설명', header: { text: '찌꺼기처리시설명' } },
|
||||
{ name: 'fcltNm', fieldName: 'fcltNm', header: { text: '찌꺼기처리시설명' } },
|
||||
|
||||
// 처리시설 운영현황
|
||||
{ name: 'TRT_METHOD', fieldName: '처리방식', header: { text: '처리방식' } },
|
||||
{ name: 'SLG_FCT_CPC', fieldName: '시설용량(톤/일)', header: { text: '시설용량(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'OPR_CPC', fieldName: '연간처리량(톤/년)', header: { text: '연간처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ODY_RN_TIME', fieldName: '일평균가동시간(1~24)', header: { text: '일평균가동시간(1~24)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'YRSTP_RN_DYN', fieldName: '연중 가동일(1~330)', header: { text: '연중 가동일(1~330)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'OPR_RT', fieldName: '가동율(%)', header: { text: '가동율(%)' }, footer: footerDecimal1, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'prcsMthExpln', fieldName: 'prcsMthExpln', header: { text: '처리방식' } },
|
||||
{ name: 'fcltCpct', fieldName: 'fcltCpct', header: { text: '시설용량(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'anlPrcsQnt', fieldName: 'anlPrcsQnt', header: { text: '연간처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dayAvgOprtngHr', fieldName: 'dayAvgOprtngHr', header: { text: '일평균가동시간(1~24)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'anlOprtngDayCnt', fieldName: 'anlOprtngDayCnt', header: { text: '연중 가동일(1~330)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{
|
||||
name: 'oprtngRt',
|
||||
fieldName: 'oprtngRt',
|
||||
header: { text: '가동율(%)' },
|
||||
footer: footerDecimal1,
|
||||
editable: false,
|
||||
styleName: 'rg-cell-total',
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
computed: {
|
||||
numeratorField: 'anlPrcsQnt',
|
||||
denominatorField: 'fcltCpct',
|
||||
multiplierField: 'anlOprtngDayCnt',
|
||||
type: 'quotientTimesMultiplierPercent' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 비고
|
||||
{ name: 'SLG_FCT_RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 기본 정보
|
||||
{ name: 'STPN_SEQ', fieldName: 'STPN_SEQ', header: { text: 'STPN_SEQ' }, visible: false },
|
||||
@@ -30,40 +45,42 @@ export const SewageSlurgeProcessingFacStatusInpColumn = {
|
||||
{ name: 'BSNM_CD', fieldName: 'BSNM_CD', header: { text: 'BSNM_CD' }, visible: false },
|
||||
{ name: 'BSC_FCT_CD', fieldName: 'BSC_FCT_CD', header: { text: 'BSC_FCT_CD' }, visible: false },
|
||||
|
||||
// Hidden: Check fields for change detection
|
||||
{ name: 'CHK_SLG_FCT_NM', fieldName: 'CHK_SLG_FCT_NM', header: { text: 'CHK_SLG_FCT_NM' }, visible: false },
|
||||
{ name: 'CHK_TRT_METHOD', fieldName: 'CHK_TRT_METHOD', header: { text: 'CHK_TRT_METHOD' }, visible: false },
|
||||
{ name: 'CHK_SLG_FCT_CPC', fieldName: 'CHK_SLG_FCT_CPC', header: { text: 'CHK_SLG_FCT_CPC' }, visible: false },
|
||||
{ name: 'CHK_OPR_CPC', fieldName: 'CHK_OPR_CPC', header: { text: 'CHK_OPR_CPC' }, visible: false },
|
||||
{ name: 'CHK_ODY_RN_TIME', fieldName: 'CHK_ODY_RN_TIME', header: { text: 'CHK_ODY_RN_TIME' }, visible: false },
|
||||
{ name: 'CHK_YRSTP_RN_DYN', fieldName: 'CHK_YRSTP_RN_DYN', header: { text: 'CHK_YRSTP_RN_DYN' }, visible: false },
|
||||
{ name: 'CHK_OPR_RT', fieldName: 'CHK_OPR_RT', header: { text: 'CHK_OPR_RT' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO_CD', 'ADST_CD']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'SLG_FCT_NM',
|
||||
'fcltNm',
|
||||
{
|
||||
name: 'group_processing_fac_operating',
|
||||
header: { text: '처리시설 운영현황' },
|
||||
items: [
|
||||
'TRT_METHOD',
|
||||
'SLG_FCT_CPC',
|
||||
'OPR_CPC',
|
||||
'ODY_RN_TIME',
|
||||
'YRSTP_RN_DYN',
|
||||
'OPR_RT'
|
||||
'prcsMthExpln',
|
||||
'fcltCpct',
|
||||
'anlPrcsQnt',
|
||||
'dayAvgOprtngHr',
|
||||
'anlOprtngDayCnt',
|
||||
'oprtngRt'
|
||||
]
|
||||
},
|
||||
'SLG_FCT_RMK'
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 1,
|
||||
tabKey: 'sewageSlurgeProcessingFacStatusInp',
|
||||
tabKey: 'ST00110003',
|
||||
tabLabel: '하수찌꺼기 처리시설 운영현황'
|
||||
};
|
||||
+256
-111
@@ -5,212 +5,357 @@ import { ValueType } from "realgrid";
|
||||
export const SlurgeProcessingFacStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO_CD', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'ADST_CD', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 하수처리장명
|
||||
{ name: 'BSC_FCT_NM', fieldName: '하수처리장명', header: { text: '하수처리장명' }, },
|
||||
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '하수처리장명' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 찌꺼기발생량(톤/년, 탈수기준)
|
||||
{ name: 'TOT_AMNT', fieldName: '합계', header: { text: '합계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'P_AMNT', fieldName: '자체', header: { text: '자체' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'OUT_AMNT', fieldName: '외부유입량', header: { text: '외부유입량' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'gnamWhol',
|
||||
fieldName: 'gnamWhol',
|
||||
header: { text: '합계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['itslfQnt', 'otsdInflwQnt'],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'itslfQnt', fieldName: 'itslfQnt', header: { text: '자체' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdInflwQnt', fieldName: 'otsdInflwQnt', header: { text: '외부유입량' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 이송처리장
|
||||
{ name: 'OUT_FCT_NM', fieldName: '이송처리장', header: { text: '이송처리장' } },
|
||||
{ name: 'transfTmplntNm', fieldName: 'transfTmplntNm', header: { text: '이송처리장' } },
|
||||
|
||||
// 이송처리량 - 쿼리에서 못찾음 (임의)
|
||||
{ name: 'a', fieldName: '이송처리량(m³/년)', header: { text: '이송처리량(m³/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'transfPrcsQnt', fieldName: 'transfPrcsQnt', header: { text: '이송처리량(m³/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 함수율
|
||||
{ name: 'DSP_MOIRAT', fieldName: '함수율(%, 탈수기준)', header: { text: '함수율(%, 탈수기준)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'srpFncRt', fieldName: 'srpFncRt', header: { text: '함수율(%, 탈수기준)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 찌꺼기처리량합계
|
||||
{ name: 'DSP_SM', fieldName: '찌꺼기처리량합계(톤/년)', header: { text: '찌꺼기처리량합계(톤/년)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'wholSrpPrcsQnt',
|
||||
fieldName: 'wholSrpPrcsQnt',
|
||||
header: { text: '찌꺼기처리량합계(톤/년)' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'itslfTs1RclmQnt',
|
||||
'itslfTs1IncnrQnt',
|
||||
'itslfTs1AltdQnt',
|
||||
'itslfTs1DryQnt',
|
||||
'itslfTs1FuelQnt',
|
||||
'itslfTs2CmpstgQnt',
|
||||
'otsdCnsgnRclmQnt',
|
||||
'otsdCnsgnIncnrQnt',
|
||||
'otsdCnsgnFuelPwplQnt',
|
||||
'otsdCnsgnPrdctRmtrlQnt',
|
||||
'otsdCnsgnFmlyrQnt',
|
||||
'otsdCnsgnCmpstgQnt',
|
||||
'cparTs1Whol',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
|
||||
// 자체 찌꺼기 처리량 > 자체찌꺼기처리량소계
|
||||
{ name: 'DSP_SELF_SM', fieldName: '자체찌꺼기처리량소계', header: { text: '자체찌꺼기처리량소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'itslfTs1Whol',
|
||||
fieldName: 'itslfTs1Whol',
|
||||
header: { text: '자체찌꺼기처리량소계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'itslfTs1RclmQnt',
|
||||
'itslfTs1IncnrQnt',
|
||||
'itslfTs1AltdQnt',
|
||||
'itslfTs1DryQnt',
|
||||
'itslfTs1FuelQnt',
|
||||
'itslfTs2CmpstgQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
|
||||
// 자체 찌꺼기 처리량 > 매립
|
||||
{ name: 'O_DSP_RCLM', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'itslfTs1RclmQnt', fieldName: 'itslfTs1RclmQnt', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 소각(1차)
|
||||
{ name: 'O_DSP_INCNR', fieldName: '소각(1차)', header: { text: '소각(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'itslfTs1IncnrQnt', fieldName: 'itslfTs1IncnrQnt', header: { text: '소각(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 소각 후 처리(2차) - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'b1', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'b2', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'b3', fieldName: '제품원료', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'b4', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'b5', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
|
||||
{
|
||||
name: 'incnrPrcsWhol',
|
||||
fieldName: 'incnrPrcsWhol',
|
||||
header: { text: '소계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'incnrPrcsLfvlm',
|
||||
'incnrPrcsPrdctRmtrlQnt',
|
||||
'incnrPrcsFmlyrQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
{ name: 'incnrPrcsLfvlm', fieldName: 'incnrPrcsLfvlm', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'incnrPrcsPrdctRmtrlQnt', fieldName: 'incnrPrcsPrdctRmtrlQnt', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'incnrPrcsFmlyrQnt', fieldName: 'incnrPrcsFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'incnrPrcsFcltNm', fieldName: 'incnrPrcsFcltNm', header: { text: '시설(업체명)' } },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 고화(1차) - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'c1', fieldName: '고화(1차)', header: { text: '고화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'itslfTs1AltdQnt', fieldName: 'itslfTs1AltdQnt', header: { text: '고화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 고화 후 처리(2차) - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'c2', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'c3', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'c4', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'c5', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
|
||||
{
|
||||
name: 'stbznPrcsWhol',
|
||||
fieldName: 'stbznPrcsWhol',
|
||||
header: { text: '소계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'stbznPrcsLfvlm',
|
||||
'stbznPrcsFmlyrQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
{ name: 'stbznPrcsLfvlm', fieldName: 'stbznPrcsLfvlm', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'stbznPrcsFmlyrQnt', fieldName: 'stbznPrcsFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'stbznPrcsFcltNm', fieldName: 'stbznPrcsFcltNm', header: { text: '시설(업체명)' } },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 건조(1차)
|
||||
{ name: 'DSP_DESIC', fieldName: '건조(1차)', header: { text: '건조(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'itslfTs1DryQnt', fieldName: 'itslfTs1DryQnt', header: { text: '건조(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 건조 후 처리(2차) - 쿼리에 없음
|
||||
{ name: 'd1', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd2', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd3', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd4', fieldName: '연료', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd5', fieldName: '제품원료', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd6', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd7', fieldName: '퇴비화', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'd8', fieldName: '시설(업체명)', header: { text: '시설(업체명)' }, editable: true },
|
||||
{
|
||||
name: 'dryPrcsWhol',
|
||||
fieldName: 'dryPrcsWhol',
|
||||
header: { text: '소계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'dryPrcsLfvlm',
|
||||
'dryPrcsIncnrQnt',
|
||||
'dryPrcsFuelQnt',
|
||||
'dryPrcsPrdctRmtrlQnt',
|
||||
'dryPrcsFmlyrQnt',
|
||||
'dryPrcsCmpstgQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
{ name: 'dryPrcsLfvlm', fieldName: 'dryPrcsLfvlm', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dryPrcsIncnrQnt', fieldName: 'dryPrcsIncnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dryPrcsFuelQnt', fieldName: 'dryPrcsFuelQnt', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dryPrcsPrdctRmtrlQnt', fieldName: 'dryPrcsPrdctRmtrlQnt', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dryPrcsFmlyrQnt', fieldName: 'dryPrcsFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dryPrcsCmpstgQnt', fieldName: 'dryPrcsCmpstgQnt', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'dryPrcsFcltNm', fieldName: 'dryPrcsFcltNm', header: { text: '시설(업체명)' }, editable: true },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 탄화(1차) - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'e1', fieldName: '탄화(1차)', header: { text: '탄화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'itslfTs1FuelQnt', fieldName: 'itslfTs1FuelQnt', header: { text: '탄화(1차)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 탄화 후 처리(2차) - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'e2', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'e3', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'e4', fieldName: '연료', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'e5', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
|
||||
{
|
||||
name: 'fuelPrcsWhol',
|
||||
fieldName: 'fuelPrcsWhol',
|
||||
header: { text: '소계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: ['fuelPrcsIncnrQnt', 'fuelPrcsFuelQnt'],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
{ name: 'fuelPrcsIncnrQnt', fieldName: 'fuelPrcsIncnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'fuelPrcsFuelQnt', fieldName: 'fuelPrcsFuelQnt', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'fuelPrcsFcltNm', fieldName: 'fuelPrcsFcltNm', header: { text: '시설(업체명)' } },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 퇴비화 - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'f1', fieldName: '퇴비화', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'itslfTs2CmpstgQnt', fieldName: 'itslfTs2CmpstgQnt', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 자체 찌꺼기 처리량 > 퇴비화 > 시설(업체명) - 쿼리에 없음 (임의 생성)
|
||||
{ name: 'f2', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
|
||||
{ name: 'cmpsPrcsFcltBzentyNm', fieldName: 'cmpsPrcsFcltBzentyNm', header: { text: '시설(업체명)' } },
|
||||
|
||||
// 외부위탁 처리량(톤/년)
|
||||
{ name: 'DSP_CONSIGNMENT', fieldName: '소계', header: { text: '소계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g1', fieldName: '매립', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g2', fieldName: '소각', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g3', fieldName: '연료', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g4', fieldName: '제품원료', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g5', fieldName: '복토재', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g6', fieldName: '퇴비화', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'g7', fieldName: '시설(업체명)', header: { text: '시설(업체명)' } },
|
||||
{
|
||||
name: 'otsdCnsgnWhol',
|
||||
fieldName: 'otsdCnsgnWhol',
|
||||
header: { text: '소계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'otsdCnsgnRclmQnt',
|
||||
'otsdCnsgnIncnrQnt',
|
||||
'otsdCnsgnFuelPwplQnt',
|
||||
'otsdCnsgnPrdctRmtrlQnt',
|
||||
'otsdCnsgnFmlyrQnt',
|
||||
'otsdCnsgnCmpstgQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
}
|
||||
},
|
||||
{ name: 'otsdCnsgnRclmQnt', fieldName: 'otsdCnsgnRclmQnt', header: { text: '매립' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdCnsgnIncnrQnt', fieldName: 'otsdCnsgnIncnrQnt', header: { text: '소각' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdCnsgnFuelPwplQnt', fieldName: 'otsdCnsgnFuelPwplQnt', header: { text: '연료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdCnsgnPrdctRmtrlQnt', fieldName: 'otsdCnsgnPrdctRmtrlQnt', header: { text: '제품원료' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdCnsgnFmlyrQnt', fieldName: 'otsdCnsgnFmlyrQnt', header: { text: '복토재' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdCnsgnCmpstgQnt', fieldName: 'otsdCnsgnCmpstgQnt', header: { text: '퇴비화' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'otsdCnsgnFcltNm', fieldName: 'otsdCnsgnFcltNm', header: { text: '시설(업체명)' } },
|
||||
|
||||
// 수도권광역위탁처리량
|
||||
{ name: 'DSP_WIDE', fieldName: '수도권광역위탁처리량(톤/년)', header: { text: '수도권광역위탁처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'cparTs1Whol', fieldName: 'cparTs1Whol', header: { text: '수도권광역위탁처리량(톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: Check fields
|
||||
{ name: 'CHK_TOT_AMNT', fieldName: 'CHK_TOT_AMNT', header: { text: 'CHK_TOT_AMNT' }, visible: false },
|
||||
{ name: 'CHK_P_AMNT', fieldName: 'CHK_P_AMNT', header: { text: 'CHK_P_AMNT' }, visible: false },
|
||||
{ name: 'CHK_OUT_AMNT', fieldName: 'CHK_OUT_AMNT', header: { text: 'CHK_OUT_AMNT' }, visible: false },
|
||||
{ name: 'CHK_DSP_MOIRAT', fieldName: 'CHK_DSP_MOIRAT', header: { text: 'CHK_DSP_MOIRAT' }, visible: false },
|
||||
{ name: 'CHK_DSP_SM', fieldName: 'CHK_DSP_SM', header: { text: 'CHK_DSP_SM' }, visible: false },
|
||||
{ name: 'CHK_DSP_SELF_SM', fieldName: 'CHK_DSP_SELF_SM', header: { text: 'CHK_DSP_SELF_SM' }, visible: false },
|
||||
{ name: 'CHK_O_DSP_RCLM', fieldName: 'CHK_O_DSP_RCLM', header: { text: 'CHK_O_DSP_RCLM' }, visible: false },
|
||||
{ name: 'CHK_O_DSP_INCNR', fieldName: 'CHK_O_DSP_INCNR', header: { text: 'CHK_O_DSP_INCNR' }, visible: false },
|
||||
{ name: 'CHK_DSP_DESIC', fieldName: 'CHK_DSP_DESIC', header: { text: 'CHK_DSP_DESIC' }, visible: false },
|
||||
{ name: 'CHK_DSP_CONSIGNMENT', fieldName: 'CHK_DSP_CONSIGNMENT', header: { text: 'CHK_DSP_CONSIGNMENT' }, visible: false },
|
||||
{ name: 'CHK_DSP_WIDE', fieldName: 'CHK_DSP_WIDE', header: { text: 'CHK_DSP_WIDE' }, visible: false },
|
||||
{ name: 'CHK_OUT_FCT_NM', fieldName: 'CHK_OUT_FCT_NM', header: { text: 'CHK_OUT_FCT_NM' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
{ name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '처리장코드' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO_CD', 'ADST_CD']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'BSC_FCT_NM',
|
||||
'swtrmtFcltNm',
|
||||
{
|
||||
name: 'group_occur_amount',
|
||||
header: { text: '찌꺼기발생량(톤/년, 탈수기준)' },
|
||||
items: [
|
||||
'TOT_AMNT',
|
||||
'P_AMNT',
|
||||
'OUT_AMNT'
|
||||
'gnamWhol',
|
||||
'itslfQnt',
|
||||
'otsdInflwQnt'
|
||||
]
|
||||
},
|
||||
'OUT_FCT_NM',
|
||||
'a',
|
||||
'DSP_MOIRAT',
|
||||
'DSP_SM',
|
||||
'transfTmplntNm',
|
||||
'transfPrcsQnt',
|
||||
'srpFncRt',
|
||||
'wholSrpPrcsQnt',
|
||||
{
|
||||
name: 'group_self_treatment',
|
||||
header: { text: '자체 찌꺼기 처리량(톤/년)' },
|
||||
items: [
|
||||
'DSP_SELF_SM',
|
||||
'O_DSP_RCLM',
|
||||
'O_DSP_INCNR',
|
||||
'itslfTs1Whol',
|
||||
'itslfTs1RclmQnt',
|
||||
'itslfTs1IncnrQnt',
|
||||
{
|
||||
name: 'group_incinerate_2nd',
|
||||
header: { text: '소각 후 처리(2차)' },
|
||||
items: [
|
||||
'b1',
|
||||
'b2',
|
||||
'b3',
|
||||
'b4',
|
||||
'b5'
|
||||
'incnrPrcsWhol',
|
||||
'incnrPrcsLfvlm',
|
||||
'incnrPrcsPrdctRmtrlQnt',
|
||||
'incnrPrcsFmlyrQnt',
|
||||
'incnrPrcsFcltNm'
|
||||
]
|
||||
},
|
||||
'c1',
|
||||
'itslfTs1AltdQnt',
|
||||
{
|
||||
name: 'group_solidify_2nd',
|
||||
header: { text: '고화 후 처리(2차)' },
|
||||
items: [
|
||||
'c2',
|
||||
'c3',
|
||||
'c4',
|
||||
'c5'
|
||||
'stbznPrcsWhol',
|
||||
'stbznPrcsLfvlm',
|
||||
'stbznPrcsFmlyrQnt',
|
||||
'stbznPrcsFcltNm'
|
||||
]
|
||||
},
|
||||
'DSP_DESIC',
|
||||
'itslfTs1DryQnt',
|
||||
{
|
||||
name: 'group_drying_2nd',
|
||||
header: { text: '건조 후 처리(2차)' },
|
||||
items: [
|
||||
'd1',
|
||||
'd2',
|
||||
'd3',
|
||||
'd4',
|
||||
'd5',
|
||||
'd6',
|
||||
'd7',
|
||||
'd8'
|
||||
'dryPrcsWhol',
|
||||
'dryPrcsLfvlm',
|
||||
'dryPrcsIncnrQnt',
|
||||
'dryPrcsFuelQnt',
|
||||
'dryPrcsPrdctRmtrlQnt',
|
||||
'dryPrcsFmlyrQnt',
|
||||
'dryPrcsCmpstgQnt',
|
||||
'dryPrcsFcltNm'
|
||||
]
|
||||
},
|
||||
'e1',
|
||||
'itslfTs1FuelQnt',
|
||||
{
|
||||
name: 'group_carbonize_2nd',
|
||||
header: { text: '탄화 후 처리(2차)' },
|
||||
items: [
|
||||
'e2',
|
||||
'e3',
|
||||
'e4',
|
||||
'e5'
|
||||
'fuelPrcsWhol',
|
||||
'fuelPrcsIncnrQnt',
|
||||
'fuelPrcsFuelQnt',
|
||||
'fuelPrcsFcltNm'
|
||||
]
|
||||
},
|
||||
'f1',
|
||||
'f2'
|
||||
'itslfTs2CmpstgQnt',
|
||||
'cmpsPrcsFcltBzentyNm'
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'group_external_treatment',
|
||||
header: { text: '외부위탁 처리량(톤/년)' },
|
||||
items: [
|
||||
'DSP_CONSIGNMENT',
|
||||
'g1',
|
||||
'g2',
|
||||
'g3',
|
||||
'g4',
|
||||
'g5',
|
||||
'g6',
|
||||
'g7'
|
||||
'otsdCnsgnWhol',
|
||||
'otsdCnsgnRclmQnt',
|
||||
'otsdCnsgnIncnrQnt',
|
||||
'otsdCnsgnFuelPwplQnt',
|
||||
'otsdCnsgnPrdctRmtrlQnt',
|
||||
'otsdCnsgnFmlyrQnt',
|
||||
'otsdCnsgnCmpstgQnt',
|
||||
'otsdCnsgnFcltNm'
|
||||
]
|
||||
},
|
||||
'DSP_WIDE',
|
||||
'RMK'
|
||||
'cparTs1Whol',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
'swtrmtFcltCd'
|
||||
],
|
||||
|
||||
rowStartNum: 3,
|
||||
fixedColumns: 2,
|
||||
tabKey: 'slurgeProcessingFacStatusInp',
|
||||
tabKey: 'ST00110001',
|
||||
tabLabel: '찌꺼기(슬러지)처리시설현황'
|
||||
};
|
||||
@@ -10,7 +10,7 @@ export const AdminAreaConnectionInpColumn = {
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, editable: false },
|
||||
// 연결여부
|
||||
{ name: 'isConnection', fieldName: 'isConnection', header: { text: '연결여부' }, editable: false },
|
||||
{ name: 'isAreaConnection', fieldName: 'isAreaConnection', header: { text: '연결여부' }, editable: false },
|
||||
// 연결하수처리장
|
||||
{ name: 'connectionBscFctNmList', fieldName: 'connectionBscFctNmList', header: { text: '연결하수처리장' }, editable: false },
|
||||
{
|
||||
@@ -28,7 +28,7 @@ export const AdminAreaConnectionInpColumn = {
|
||||
header: { text: '행정구역' },
|
||||
items: ['ctpvNm', 'sggNm', 'admdstNm'],
|
||||
},
|
||||
'isConnection',
|
||||
'isAreaConnection',
|
||||
'connectionBscFctNmList',
|
||||
'admdstCd'
|
||||
],
|
||||
|
||||
@@ -5,8 +5,8 @@ import { ValueType } from "realgrid";
|
||||
export const CauserBurdenInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 부과액
|
||||
{ name: 'levyEvntcsCnt', fieldName: 'levyEvntcsCnt', header: { text: '건수' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
@@ -5,8 +5,8 @@ import { ValueType } from "realgrid";
|
||||
export const SewerageChargeInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 요금
|
||||
{ name: 'anlLevyQnt', fieldName: 'anlLevyQnt', header: { text: '연간조정량(m³)(A)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ import { ValueType } from "realgrid";
|
||||
export const SewerageFinanceSettleInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 재정별 사업비
|
||||
{
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ import { ValueType } from "realgrid";
|
||||
export const SewerageUsageFeeInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 총계 > 부과액
|
||||
{
|
||||
|
||||
+71
-46
@@ -1,80 +1,105 @@
|
||||
import { footerInt, footerDecimal1 } from "@/components/util/grid/footerSummary";
|
||||
import { ValueType } from "realgrid";
|
||||
|
||||
const COMPLAINT_TYPE_COUNT_FIELDS = [
|
||||
'dschgWqCnt',
|
||||
'odorCnt',
|
||||
'ldsCnt',
|
||||
'plltnAcdntCnt',
|
||||
'swagePplCnt',
|
||||
'sewerCrgAmt',
|
||||
'etcCnt',
|
||||
] as const;
|
||||
|
||||
// 하수도 통계 관리 > 13. 하수도 서비스 수준 > tab 1: 민원
|
||||
export const ComplaintInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'ADST_DONG', fieldName: '행정구역명', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 하수처리인구(명)
|
||||
{ name: 'SWGE_PROC_POPLTN', fieldName: '하수처리인구(명)', header: { text: '하수처리인구(명)' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'swtrmtPpltnCnt', fieldName: 'swtrmtPpltnCnt', header: { text: '하수처리인구(명)' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0', styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 민원유형(건)
|
||||
{ name: 'CVPL_CM', fieldName: '총계', header: { text: '총계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_BSML', fieldName: '악취', header: { text: '악취' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_DCWTR_QLTWTR', fieldName: '하수관로', header: { text: '하수관로' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_FIVW', fieldName: '배수설비', header: { text: '배수설비' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_POLLUTN_ACDNT', fieldName: '맨홀', header: { text: '맨홀' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_SSOS', fieldName: '정화조', header: { text: '정화조' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_CHRGE', fieldName: '하수도요금', header: { text: '하수도요금' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CVPL_UNKD', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{
|
||||
name: 'whol',
|
||||
fieldName: 'whol',
|
||||
header: { text: '총계' },
|
||||
editable: false,
|
||||
styleName: 'rg-cell-total',
|
||||
footer: footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
computed: {
|
||||
fields: [...COMPLAINT_TYPE_COUNT_FIELDS],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'dschgWqCnt', fieldName: 'dschgWqCnt', header: { text: '악취' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'odorCnt', fieldName: 'odorCnt', header: { text: '하수관로' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ldsCnt', fieldName: 'ldsCnt', header: { text: '배수설비' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'plltnAcdntCnt', fieldName: 'plltnAcdntCnt', header: { text: '맨홀' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'swagePplCnt', fieldName: 'swagePplCnt', header: { text: '정화조' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'sewerCrgAmt', fieldName: 'sewerCrgAmt', header: { text: '하수도요금' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 기준인구당 민원건수(건/10,000명)
|
||||
{ name: 'STDR_POPLTN_PER_CVPL', fieldName: '기준인구당민원건수(건/10,000명)', header: { text: '기준인구당민원건수(건/10,000명)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
// 기준인구당 민원건수(건/10,000명) = 민원유형 합계 / 하수처리인구 × 10,000
|
||||
{
|
||||
name: 'crtrPpltnCvlcptEvntcsCnt',
|
||||
fieldName: 'crtrPpltnCvlcptEvntcsCnt',
|
||||
header: { text: '기준인구당민원건수(건/10,000명)' },
|
||||
editable: false,
|
||||
styleName: 'rg-cell-total',
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
computed: {
|
||||
numeratorFields: [...COMPLAINT_TYPE_COUNT_FIELDS],
|
||||
denominatorField: 'swtrmtPpltnCnt',
|
||||
type: 'sumPerTenThousand' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '작성자의견', header: { text: '작성자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_SWGE_PROC_POPLTN', fieldName: 'CHK_SWGE_PROC_POPLTN', header: { text: 'CHK_SWGE_PROC_POPLTN' }, visible: false },
|
||||
{ name: 'CHK_CVPL_CM', fieldName: 'CHK_CVPL_CM', header: { text: 'CHK_CVPL_CM' }, visible: false },
|
||||
{ name: 'CHK_CVPL_BSML', fieldName: 'CHK_CVPL_BSML', header: { text: 'CHK_CVPL_BSML' }, visible: false },
|
||||
{ name: 'CHK_CVPL_DCWTR_QLTWTR', fieldName: 'CHK_CVPL_DCWTR_QLTWTR', header: { text: 'CHK_CVPL_DCWTR_QLTWTR' }, visible: false },
|
||||
{ name: 'CHK_CVPL_FIVW', fieldName: 'CHK_CVPL_FIVW', header: { text: 'CHK_CVPL_FIVW' }, visible: false },
|
||||
{ name: 'CHK_CVPL_POLLUTN_ACDNT', fieldName: 'CHK_CVPL_POLLUTN_ACDNT', header: { text: 'CHK_CVPL_POLLUTN_ACDNT' }, visible: false },
|
||||
{ name: 'CHK_CVPL_SSOS', fieldName: 'CHK_CVPL_SSOS', header: { text: 'CHK_CVPL_SSOS' }, visible: false },
|
||||
{ name: 'CHK_CVPL_CHRGE', fieldName: 'CHK_CVPL_CHRGE', header: { text: 'CHK_CVPL_CHRGE' }, visible: false },
|
||||
{ name: 'CHK_CVPL_UNKD', fieldName: 'CHK_CVPL_UNKD', header: { text: 'CHK_CVPL_UNKD' }, visible: false },
|
||||
{ name: 'CHK_STDR_POPLTN_PER_CVPL', fieldName: 'CHK_STDR_POPLTN_PER_CVPL', header: { text: 'CHK_STDR_POPLTN_PER_CVPL' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'SWGE_PROC_POPLTN',
|
||||
'swtrmtPpltnCnt',
|
||||
{
|
||||
name: 'group_complaint_type',
|
||||
header: { text: '민원유형(건)' },
|
||||
items: [
|
||||
'CVPL_CM',
|
||||
'CVPL_BSML',
|
||||
'CVPL_DCWTR_QLTWTR',
|
||||
'CVPL_FIVW',
|
||||
'CVPL_POLLUTN_ACDNT',
|
||||
'CVPL_SSOS',
|
||||
'CVPL_CHRGE',
|
||||
'CVPL_UNKD'
|
||||
'whol',
|
||||
'dschgWqCnt',
|
||||
'odorCnt',
|
||||
'ldsCnt',
|
||||
'plltnAcdntCnt',
|
||||
'swagePplCnt',
|
||||
'sewerCrgAmt',
|
||||
'etcCnt'
|
||||
]
|
||||
},
|
||||
'STDR_POPLTN_PER_CVPL',
|
||||
'RMK'
|
||||
'crtrPpltnCvlcptEvntcsCnt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm'
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 1,
|
||||
tabKey: 'complaintInp',
|
||||
tabKey: 'ST00130001',
|
||||
tabLabel: '민원'
|
||||
};
|
||||
+65
-54
@@ -1,89 +1,100 @@
|
||||
import { footerInt, footerDecimal1 } from "@/components/util/grid/footerSummary";
|
||||
import { ValueType } from "realgrid";
|
||||
|
||||
const RESIDENT_FRIENDLY_FACILITY_AREA_FIELDS = [
|
||||
'brkFcltArea',
|
||||
'childFrshpSpacArea',
|
||||
'bdySportsFcltArea',
|
||||
'sportsFcltArea',
|
||||
'pkltArea',
|
||||
'eduMultiFcltArea',
|
||||
'wtlndMakeArea',
|
||||
'etcCnt',
|
||||
] as const;
|
||||
|
||||
// 하수도 통계 관리 > 13. 하수도 서비스 수준 > tab 2: 주민친화시설
|
||||
export const ResidentFriendlyFactInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 시설 기본 정보
|
||||
{ name: 'BSC_FCT_NM', fieldName: '처리장명', header: { text: '처리장명' }, editable: false },
|
||||
{ name: 'FCT_CPC', fieldName: '시설용량(m³/일)', header: { text: '시설용량(m³/일)' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '처리장명' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'fcltCpct', fieldName: 'fcltCpct', header: { text: '시설용량(m³/일)' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0', styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 처리장면적(㎡)
|
||||
{ name: 'PRCPLT_AR', fieldName: '처리장면적(㎡)', header: { text: '처리장면적(㎡)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'tmplntArea', fieldName: 'tmplntArea', header: { text: '처리장면적(㎡)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 주민친화시설 면적(㎡)
|
||||
{ name: 'TOTAL_AR', fieldName: '총계', header: { text: '총계' }, editable: false, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'RESTRM_AR', fieldName: '휴게시설', header: { text: '휴게시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CHILDPLAY_AR', fieldName: '어린이놀이공간', header: { text: '어린이놀이공간' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ALSFC_AR', fieldName: '체력단련시설', header: { text: '체력단련시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'PLGRND_AR', fieldName: '운동시설', header: { text: '운동시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'PRKPLCE_AR', fieldName: '주차장', header: { text: '주차장' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'CTLSTT_AR', fieldName: '교육 및 문화시설', header: { text: '교육 및 문화시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'NRPRK_AR', fieldName: '습지조성(생태공원)', header: { text: '습지조성(생태공원)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'ETC_AR', fieldName: '기타', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{
|
||||
name: 'whol',
|
||||
fieldName: 'whol',
|
||||
header: { text: '총계' },
|
||||
editable: false,
|
||||
styleName: 'rg-cell-total',
|
||||
footer: footerInt,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0',
|
||||
computed: {
|
||||
fields: [...RESIDENT_FRIENDLY_FACILITY_AREA_FIELDS],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'brkFcltArea', fieldName: 'brkFcltArea', header: { text: '휴게시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'childFrshpSpacArea', fieldName: 'childFrshpSpacArea', header: { text: '어린이놀이공간' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'bdySportsFcltArea', fieldName: 'bdySportsFcltArea', header: { text: '체력단련시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'sportsFcltArea', fieldName: 'sportsFcltArea', header: { text: '운동시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'pkltArea', fieldName: 'pkltArea', header: { text: '주차장' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'eduMultiFcltArea', fieldName: 'eduMultiFcltArea', header: { text: '교육 및 문화시설' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'wtlndMakeArea', fieldName: 'wtlndMakeArea', header: { text: '습지조성(생태공원)' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'etcCnt', fieldName: 'etcCnt', header: { text: '기타' }, footer: footerInt, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 시설 정보
|
||||
{ name: 'STPN_SEQ', fieldName: '일련번호', header: { text: '일련번호' }, visible: false },
|
||||
{ name: 'ADST_CD', fieldName: '행정동코드', header: { text: '행정동코드' }, visible: false },
|
||||
{ name: 'BSC_FCT_CD', fieldName: '기초시설코드', header: { text: '기초시설코드' }, visible: false },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '작성자의견', header: { text: '작성자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: 활용율 필드
|
||||
{ name: 'PRCUSE_RT', fieldName: '주민친화시설활용율(%)', header: { text: '주민친화시설활용율(%)' }, visible: false, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_PRCPLT_AR', fieldName: 'CHK_PRCPLT_AR', header: { text: 'CHK_PRCPLT_AR' }, visible: false },
|
||||
{ name: 'CHK_TOTAL_AR', fieldName: 'CHK_TOTAL_AR', header: { text: 'CHK_TOTAL_AR' }, visible: false },
|
||||
{ name: 'CHK_RESTRM_AR', fieldName: 'CHK_RESTRM_AR', header: { text: 'CHK_RESTRM_AR' }, visible: false },
|
||||
{ name: 'CHK_CHILDPLAY_AR', fieldName: 'CHK_CHILDPLAY_AR', header: { text: 'CHK_CHILDPLAY_AR' }, visible: false },
|
||||
{ name: 'CHK_ALSFC_AR', fieldName: 'CHK_ALSFC_AR', header: { text: 'CHK_ALSFC_AR' }, visible: false },
|
||||
{ name: 'CHK_PLGRND_AR', fieldName: 'CHK_PLGRND_AR', header: { text: 'CHK_PLGRND_AR' }, visible: false },
|
||||
{ name: 'CHK_PRKPLCE_AR', fieldName: 'CHK_PRKPLCE_AR', header: { text: 'CHK_PRKPLCE_AR' }, visible: false },
|
||||
{ name: 'CHK_CTLSTT_AR', fieldName: 'CHK_CTLSTT_AR', header: { text: 'CHK_CTLSTT_AR' }, visible: false },
|
||||
{ name: 'CHK_NRPRK_AR', fieldName: 'CHK_NRPRK_AR', header: { text: 'CHK_NRPRK_AR' }, visible: false },
|
||||
{ name: 'CHK_ETC_AR', fieldName: 'CHK_ETC_AR', header: { text: 'CHK_ETC_AR' }, visible: false },
|
||||
{ name: 'CHK_PRCUSE_RT', fieldName: 'CHK_PRCUSE_RT', header: { text: 'CHK_PRCUSE_RT' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
{ name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '처리장코드' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'BSC_FCT_NM',
|
||||
'FCT_CPC',
|
||||
'PRCPLT_AR',
|
||||
'swtrmtFcltNm',
|
||||
'fcltCpct',
|
||||
'tmplntArea',
|
||||
{
|
||||
name: 'group_resident_friendly_facility',
|
||||
header: { text: '주민친화시설 면적(㎡)' },
|
||||
items: [
|
||||
'TOTAL_AR',
|
||||
'RESTRM_AR',
|
||||
'CHILDPLAY_AR',
|
||||
'ALSFC_AR',
|
||||
'PLGRND_AR',
|
||||
'PRKPLCE_AR',
|
||||
'CTLSTT_AR',
|
||||
'NRPRK_AR',
|
||||
'ETC_AR'
|
||||
'whol',
|
||||
'brkFcltArea',
|
||||
'childFrshpSpacArea',
|
||||
'bdySportsFcltArea',
|
||||
'sportsFcltArea',
|
||||
'pkltArea',
|
||||
'eduMultiFcltArea',
|
||||
'wtlndMakeArea',
|
||||
'etcCnt'
|
||||
]
|
||||
},
|
||||
'RMK'
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
'swtrmtFcltCd',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 3,
|
||||
tabKey: 'residentFriendlyFactInp',
|
||||
tabKey: 'ST00130002',
|
||||
tabLabel: '주민친화시설'
|
||||
};
|
||||
+240
-93
@@ -1,176 +1,323 @@
|
||||
import type { ColumnConfig } from "@/components/type/DataGrid.type";
|
||||
import { footerDecimal1 } from "@/components/util/grid/footerSummary";
|
||||
import { ValueType } from "realgrid";
|
||||
|
||||
/** 법적의무대상(`lglYn`) */
|
||||
export const PUBLIC_SEWAGE_TREAT_WATER_REUSE_LGL_YN_VALUES = ["대상", "미대상"] as const;
|
||||
|
||||
/** 설치유무(`instlYn`) */
|
||||
export const PUBLIC_SEWAGE_TREAT_WATER_REUSE_INSTL_YN_VALUES = ["유", "무"] as const;
|
||||
|
||||
function dropdownColumn(
|
||||
col: Pick<ColumnConfig, "name" | "fieldName" | "header"> &
|
||||
Partial<ColumnConfig>,
|
||||
options: readonly string[],
|
||||
): ColumnConfig {
|
||||
const values = [...options];
|
||||
return {
|
||||
...col,
|
||||
values,
|
||||
labels: values,
|
||||
lookupDisplay: true,
|
||||
editor: {
|
||||
type: "dropdown",
|
||||
domainOnly: true,
|
||||
textReadOnly: true,
|
||||
commitOnSelect: true,
|
||||
dropDownWhenClick: true,
|
||||
values,
|
||||
labels: values,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/** 하수처리수 재이용현황(천톤/년) — 장내·장외 세부 항목 합산 필드 */
|
||||
const PUBLIC_SEWAGE_REUSE_USE_QNT_SUM_FIELDS = [
|
||||
'ithlClnQty',
|
||||
'ithlFrzgQty',
|
||||
'ithlLdhcUswtrQnt',
|
||||
'ithlDltnUswtrQnt',
|
||||
'ithlRuswtrQnt',
|
||||
'ithlEtcQnt',
|
||||
'ithlUnsdQnt',
|
||||
'otcntrClnRstrmQnt',
|
||||
'otcntrWshwtrQnt',
|
||||
'otcntrLdhcUswtrQnt',
|
||||
'otcntrHdrplUswtrQnt',
|
||||
'otcntrRvrKeepQnt',
|
||||
'agrcltUswtrPstnQnt',
|
||||
'ugwtrChargQnt',
|
||||
'mdsrUswtrQnt',
|
||||
] as const;
|
||||
|
||||
// 하수도 통계 관리 > 10. 물 재이용 > tab 1: 공공하수처리수 재이용
|
||||
export const PublicSewageTreatWaterReuseInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false, footer: { text: '합계' } },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
|
||||
// 하수처리장
|
||||
{ name: 'BSC_FCT_NM', fieldName: '시설명', header: { text: '시설명' }, editable: false },
|
||||
{ name: 'EQP_PRMS_DT', fieldName: '인가일(년/월/일)', header: { text: '인가일(년/월/일)' }, editable: false },
|
||||
{ name: 'FCT_CPC', fieldName: '시설용량(㎥/일)', header: { text: '시설용량(㎥/일)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'TPUT_TOTAL', fieldName: '연간하수처리량(천톤/년)', header: { text: '연간하수처리량(천톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'RSWTR_LAW_YN', fieldName: '법적의무대상(대상/미대상)', header: { text: '법적의무대상(대상/미대상)' } },
|
||||
{ name: 'swtrmtFcltNm', fieldName: 'swtrmtFcltNm', header: { text: '시설명' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{
|
||||
name: 'sncnYmd',
|
||||
fieldName: 'sncnYmd',
|
||||
header: { text: '인가일(년/월/일)' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editable: false,
|
||||
styleName: 'rg-cell-readonly',
|
||||
},
|
||||
{ name: 'prcsFcltCpct', fieldName: 'prcsFcltCpct', header: { text: '시설용량(㎥/일)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly' },
|
||||
{ name: 'wholPrcsQnt', fieldName: 'wholPrcsQnt', header: { text: '연간하수처리량(천톤/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'lglYn',
|
||||
fieldName: 'lglYn',
|
||||
header: { text: '법적의무대상(대상/미대상)' },
|
||||
},
|
||||
PUBLIC_SEWAGE_TREAT_WATER_REUSE_LGL_YN_VALUES,
|
||||
),
|
||||
|
||||
// 재이용시설 > 설치유무
|
||||
{ name: 'INST_YN', fieldName: '설치유무(유/무)', header: { text: '설치유무(유/무)' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'instlYn',
|
||||
fieldName: 'instlYn',
|
||||
header: { text: '설치유무(유/무)' },
|
||||
},
|
||||
PUBLIC_SEWAGE_TREAT_WATER_REUSE_INSTL_YN_VALUES,
|
||||
),
|
||||
|
||||
// 재이용시설 > 재이용시설 설치시
|
||||
{ name: 'RSWTR_RN_DT', fieldName: '가동개시일(yyyy-mm-dd)', header: { text: '가동개시일(yyyy-mm-dd)' } },
|
||||
{ name: 'RSWTR_PRMS_DT', fieldName: '설치승인일(yyyy-mm-dd)', header: { text: '설치승인일(yyyy-mm-dd)' } },
|
||||
{
|
||||
name: 'oprtngStrtYmd',
|
||||
fieldName: 'oprtngStrtYmd',
|
||||
header: { text: '가동개시일(yyyy-mm-dd)' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'instlAprvYmd',
|
||||
fieldName: 'instlAprvYmd',
|
||||
header: { text: '설치승인일(yyyy-mm-dd)' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
|
||||
// 재이용시설 > 재이용시설 설치시 > 재처리시설
|
||||
{ name: 'RSWTR_CPC', fieldName: '용량(톤/일)', header: { text: '용량(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'RSWTR_TRT_NM', fieldName: '공법/기자재', header: { text: '공법/기자재' } },
|
||||
{ name: 'rprcsFcltCpct', fieldName: 'rprcsFcltCpct', header: { text: '용량(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'mtcnsNm', fieldName: 'mtcnsNm', header: { text: '공법/기자재' } },
|
||||
|
||||
// 재이용시설 > 재이용시설 설치시
|
||||
{ name: 'RSWTR_PIPE', fieldName: '공급관로길이(km)', header: { text: '공급관로길이(km)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'RSWTR_PUMP', fieldName: '공급펌프(톤/일)', header: { text: '공급펌프(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ruswtPplLen', fieldName: 'ruswtPplLen', header: { text: '공급관로길이(km)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ruswtPumpLen', fieldName: 'ruswtPumpLen', header: { text: '공급펌프(톤/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 하수처리수 재이용현황 > 총계
|
||||
{ name: 'USE_AMNT_TOTAL', fieldName: '총계', header: { text: '총계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'wholUseQnt',
|
||||
fieldName: 'wholUseQnt',
|
||||
header: { text: '총계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [...PUBLIC_SEWAGE_REUSE_USE_QNT_SUM_FIELDS],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 하수처리수 재이용현황 > 장내용수
|
||||
{ name: 'USE_AMNT_D01', fieldName: '계', header: { text: '계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S01', fieldName: '세척수', header: { text: '세척수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S02', fieldName: '냉각수', header: { text: '냉각수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S03', fieldName: '청소수', header: { text: '청소수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S04', fieldName: '조경용수', header: { text: '조경용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' }, // (레거시) 식수대
|
||||
{ name: 'USE_AMNT_S05', fieldName: '희석용수', header: { text: '희석용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S06', fieldName: '장내중수도', header: { text: '장내중수도' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S07', fieldName: '장내기타용수', header: { text: '장내기타용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'ithlWshwtrQnt',
|
||||
fieldName: 'ithlWshwtrQnt',
|
||||
header: { text: '계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'ithlClnQty',
|
||||
'ithlFrzgQty',
|
||||
'ithlLdhcUswtrQnt',
|
||||
'ithlDltnUswtrQnt',
|
||||
'ithlRuswtrQnt',
|
||||
'ithlEtcQnt',
|
||||
'ithlUnsdQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'ithlClnQty', fieldName: 'ithlClnQty', header: { text: '세척수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ithlFrzgQty', fieldName: 'ithlFrzgQty', header: { text: '냉각수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ithlLdhcUswtrQnt', fieldName: 'ithlLdhcUswtrQnt', header: { text: '청소수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ithlDltnUswtrQnt', fieldName: 'ithlDltnUswtrQnt', header: { text: '조경용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ithlRuswtrQnt', fieldName: 'ithlRuswtrQnt', header: { text: '희석용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ithlEtcQnt', fieldName: 'ithlEtcQnt', header: { text: '장내중수도' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ithlUnsdQnt', fieldName: 'ithlUnsdQnt', header: { text: '장내기타용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
|
||||
// 하수처리수 재이용현황 > 장외용수
|
||||
{ name: 'USE_AMNT_D02', fieldName: '계', header: { text: '계' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S11', fieldName: '청소·화장실용수', header: { text: '청소·화장실용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S12', fieldName: '세척·살수용수', header: { text: '세척·살수용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S13', fieldName: '조경용수', header: { text: '조경용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S14', fieldName: '친수용수', header: { text: '친수용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S15', fieldName: '하천등유지용수', header: { text: '하천등유지용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S16', fieldName: '농업용수', header: { text: '농업용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S17', fieldName: '지하수충전', header: { text: '지하수충전' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'USE_AMNT_S18', fieldName: '공업용수', header: { text: '공업용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'otcntrUswtrWhol',
|
||||
fieldName: 'otcntrUswtrWhol',
|
||||
header: { text: '계' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
fields: [
|
||||
'otcntrClnRstrmQnt',
|
||||
'otcntrWshwtrQnt',
|
||||
'otcntrLdhcUswtrQnt',
|
||||
'otcntrHdrplUswtrQnt',
|
||||
'otcntrRvrKeepQnt',
|
||||
'agrcltUswtrPstnQnt',
|
||||
'ugwtrChargQnt',
|
||||
'mdsrUswtrQnt',
|
||||
],
|
||||
type: 'sum' as const,
|
||||
},
|
||||
},
|
||||
{ name: 'otcntrClnRstrmQnt', fieldName: 'otcntrClnRstrmQnt', header: { text: '청소·화장실용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'otcntrWshwtrQnt', fieldName: 'otcntrWshwtrQnt', header: { text: '세척·살수용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'otcntrLdhcUswtrQnt', fieldName: 'otcntrLdhcUswtrQnt', header: { text: '조경용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'otcntrHdrplUswtrQnt', fieldName: 'otcntrHdrplUswtrQnt', header: { text: '친수용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'otcntrRvrKeepQnt', fieldName: 'otcntrRvrKeepQnt', header: { text: '하천등유지용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'agrcltUswtrPstnQnt', fieldName: 'agrcltUswtrPstnQnt', header: { text: '농업용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'ugwtrChargQnt', fieldName: 'ugwtrChargQnt', header: { text: '지하수충전' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
{ name: 'mdsrUswtrQnt', fieldName: 'mdsrUswtrQnt', header: { text: '공업용수' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0', styleName: 'rg-cell-readonly', editable: false },
|
||||
|
||||
// 재이용률
|
||||
{ name: 'REUSE_RT', fieldName: '재이용률(%)', header: { text: '재이용률(%)' }, editable: false, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{
|
||||
name: 'rtlztnRt',
|
||||
fieldName: 'rtlztnRt',
|
||||
header: { text: '재이용률(%)' },
|
||||
editable: false,
|
||||
footer: footerDecimal1,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: '#,##0.0',
|
||||
styleName: 'rg-cell-total',
|
||||
computed: {
|
||||
numeratorFields: [...PUBLIC_SEWAGE_REUSE_USE_QNT_SUM_FIELDS],
|
||||
denominatorFields: ['wholPrcsQnt'],
|
||||
type: 'pblswrgPopltnSuprtRate' as const,
|
||||
},
|
||||
},
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_RSWTR_LAW_YN', fieldName: 'CHK_RSWTR_LAW_YN', header: { text: 'CHK_RSWTR_LAW_YN' }, visible: false },
|
||||
{ name: 'CHK_INST_YN', fieldName: 'CHK_INST_YN', header: { text: 'CHK_INST_YN' }, visible: false },
|
||||
{ name: 'CHK_RSWTR_RN_DT', fieldName: 'CHK_RSWTR_RN_DT', header: { text: 'CHK_RSWTR_RN_DT' }, visible: false },
|
||||
{ name: 'CHK_RSWTR_PRMS_DT', fieldName: 'CHK_RSWTR_PRMS_DT', header: { text: 'CHK_RSWTR_PRMS_DT' }, visible: false },
|
||||
{ name: 'CHK_RSWTR_CPC', fieldName: 'CHK_RSWTR_CPC', header: { text: 'CHK_RSWTR_CPC' }, visible: false },
|
||||
{ name: 'CHK_RSWTR_TRT_NM', fieldName: 'CHK_RSWTR_TRT_NM', header: { text: 'CHK_RSWTR_TRT_NM' }, visible: false },
|
||||
{ name: 'CHK_RSWTR_PIPE', fieldName: 'CHK_RSWTR_PIPE', header: { text: 'CHK_RSWTR_PIPE' }, visible: false },
|
||||
{ name: 'CHK_RSWTR_PUMP', fieldName: 'CHK_RSWTR_PUMP', header: { text: 'CHK_RSWTR_PUMP' }, visible: false },
|
||||
{ name: 'CHK_TPUT_TOTAL', fieldName: 'CHK_TPUT_TOTAL', header: { text: 'CHK_TPUT_TOTAL' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S01', fieldName: 'CHK_USE_AMNT_S01', header: { text: 'CHK_USE_AMNT_S01' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S02', fieldName: 'CHK_USE_AMNT_S02', header: { text: 'CHK_USE_AMNT_S02' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S03', fieldName: 'CHK_USE_AMNT_S03', header: { text: 'CHK_USE_AMNT_S03' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S04', fieldName: 'CHK_USE_AMNT_S04', header: { text: 'CHK_USE_AMNT_S04' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S05', fieldName: 'CHK_USE_AMNT_S05', header: { text: 'CHK_USE_AMNT_S05' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S06', fieldName: 'CHK_USE_AMNT_S06', header: { text: 'CHK_USE_AMNT_S06' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S07', fieldName: 'CHK_USE_AMNT_S07', header: { text: 'CHK_USE_AMNT_S07' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S11', fieldName: 'CHK_USE_AMNT_S11', header: { text: 'CHK_USE_AMNT_S11' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S12', fieldName: 'CHK_USE_AMNT_S12', header: { text: 'CHK_USE_AMNT_S12' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S13', fieldName: 'CHK_USE_AMNT_S13', header: { text: 'CHK_USE_AMNT_S13' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S14', fieldName: 'CHK_USE_AMNT_S14', header: { text: 'CHK_USE_AMNT_S14' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S15', fieldName: 'CHK_USE_AMNT_S15', header: { text: 'CHK_USE_AMNT_S15' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S16', fieldName: 'CHK_USE_AMNT_S16', header: { text: 'CHK_USE_AMNT_S16' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S17', fieldName: 'CHK_USE_AMNT_S17', header: { text: 'CHK_USE_AMNT_S17' }, visible: false },
|
||||
{ name: 'CHK_USE_AMNT_S18', fieldName: 'CHK_USE_AMNT_S18', header: { text: 'CHK_USE_AMNT_S18' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
{ name: 'swtrmtFcltCd', fieldName: 'swtrmtFcltCd', header: { text: '처리장코드' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'group_facility',
|
||||
header: { text: '하수처리장' },
|
||||
items: [
|
||||
'BSC_FCT_NM',
|
||||
'EQP_PRMS_DT',
|
||||
'FCT_CPC',
|
||||
'RSWTR_LAW_YN'
|
||||
'swtrmtFcltNm',
|
||||
'sncnYmd',
|
||||
'prcsFcltCpct',
|
||||
'lglYn'
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'group_reuse_facility',
|
||||
header: { text: '재이용시설' },
|
||||
items: [
|
||||
'INST_YN',
|
||||
'instlYn',
|
||||
{
|
||||
name: 'group_reuse_install',
|
||||
header: { text: '재이용시설 설치시' },
|
||||
items: [
|
||||
'RSWTR_RN_DT',
|
||||
'RSWTR_PRMS_DT',
|
||||
'oprtngStrtYmd',
|
||||
'instlAprvYmd',
|
||||
{
|
||||
name: 'group_treatment_facility',
|
||||
header: { text: '처리시설' },
|
||||
items: [
|
||||
'RSWTR_CPC',
|
||||
'RSWTR_TRT_NM'
|
||||
'rprcsFcltCpct',
|
||||
'mtcnsNm'
|
||||
]
|
||||
},
|
||||
'RSWTR_PIPE',
|
||||
'RSWTR_PUMP'
|
||||
'ruswtPplLen',
|
||||
'ruswtPumpLen'
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
'TPUT_TOTAL',
|
||||
'wholPrcsQnt',
|
||||
{
|
||||
name: 'group_reuse_current',
|
||||
header: { text: '하수처리수 재이용현황(천톤/년)' },
|
||||
items: [
|
||||
'USE_AMNT_TOTAL',
|
||||
'wholUseQnt',
|
||||
{
|
||||
name: 'group_indoor_use',
|
||||
header: { text: '장 내 용 수' },
|
||||
items: [
|
||||
'USE_AMNT_D01',
|
||||
'USE_AMNT_S01',
|
||||
'USE_AMNT_S02',
|
||||
'USE_AMNT_S03',
|
||||
'USE_AMNT_S04',
|
||||
'USE_AMNT_S05',
|
||||
'USE_AMNT_S06',
|
||||
'USE_AMNT_S07'
|
||||
'ithlWshwtrQnt',
|
||||
'ithlClnQty',
|
||||
'ithlFrzgQty',
|
||||
'ithlLdhcUswtrQnt',
|
||||
'ithlDltnUswtrQnt',
|
||||
'ithlRuswtrQnt',
|
||||
'ithlEtcQnt',
|
||||
'ithlUnsdQnt'
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'group_outdoor_use',
|
||||
header: { text: '장 외 용 수' },
|
||||
items: [
|
||||
'USE_AMNT_D02',
|
||||
'USE_AMNT_S11',
|
||||
'USE_AMNT_S12',
|
||||
'USE_AMNT_S13',
|
||||
'USE_AMNT_S14',
|
||||
'USE_AMNT_S15',
|
||||
'USE_AMNT_S16',
|
||||
'USE_AMNT_S17',
|
||||
'USE_AMNT_S18'
|
||||
'otcntrUswtrWhol',
|
||||
'otcntrClnRstrmQnt',
|
||||
'otcntrWshwtrQnt',
|
||||
'otcntrLdhcUswtrQnt',
|
||||
'otcntrHdrplUswtrQnt',
|
||||
'otcntrRvrKeepQnt',
|
||||
'agrcltUswtrPstnQnt',
|
||||
'ugwtrChargQnt',
|
||||
'mdsrUswtrQnt'
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
'REUSE_RT',
|
||||
'RMK'
|
||||
'rtlztnRt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
'swtrmtFcltCd'
|
||||
],
|
||||
|
||||
rowStartNum: 4,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'publicSewageTreatWaterReuseInp',
|
||||
tabKey: 'ST00100001',
|
||||
tabLabel: '공공하수처리수 재이용'
|
||||
};
|
||||
+123
-74
@@ -1,120 +1,169 @@
|
||||
import type { ColumnConfig } from "@/components/type/DataGrid.type";
|
||||
import { footerDecimal1 } from "@/components/util/grid/footerSummary";
|
||||
import { ValueType } from "realgrid";
|
||||
|
||||
/** 건축물용도(`bdstTypCn`) */
|
||||
export const RAINFALL_UTIL_FACT_BDST_TYP_VALUES = [
|
||||
"종합운동장",
|
||||
"실내체육관",
|
||||
"공공업무시설",
|
||||
"공공기관청사",
|
||||
"공동주택",
|
||||
"학교",
|
||||
"대규모점포",
|
||||
"골프장",
|
||||
"기타",
|
||||
] as const;
|
||||
|
||||
/** 법적의무대상여부(`lglTrgtYn`) */
|
||||
export const RAINFALL_UTIL_FACT_LGL_TRGT_YN_VALUES = ["대상", "미대상"] as const;
|
||||
|
||||
/** 이용용도(`exlnUtlzUsgExpln`) */
|
||||
export const RAINFALL_UTIL_FACT_EXLN_UTLZ_USG_VALUES = [
|
||||
"청소화장실용수",
|
||||
"세척살수용수",
|
||||
"조경용수",
|
||||
"친수용수",
|
||||
"농업용수",
|
||||
"공업용수",
|
||||
"기타",
|
||||
] as const;
|
||||
|
||||
function dropdownColumn(
|
||||
col: Pick<ColumnConfig, "name" | "fieldName" | "header"> &
|
||||
Partial<ColumnConfig>,
|
||||
options: readonly string[],
|
||||
): ColumnConfig {
|
||||
const values = [...options];
|
||||
return {
|
||||
...col,
|
||||
values,
|
||||
labels: values,
|
||||
lookupDisplay: true,
|
||||
editor: {
|
||||
type: "dropdown",
|
||||
domainOnly: true,
|
||||
textReadOnly: true,
|
||||
commitOnSelect: true,
|
||||
dropDownWhenClick: true,
|
||||
values,
|
||||
labels: values,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
// 하수도 통계 관리 > 10. 물 재이용 > tab 3: 빗물이용시설현황
|
||||
export const RainFallUtilFactStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ADST_DSTR_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'ST_RWR_REUSE_FCT_SEQ', fieldName: '일련번호', header: { text: '일련번호' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
|
||||
// 시설명
|
||||
{ name: 'RWR_REUSE_FCT_NM', fieldName: '시설명', header: { text: '시설명' } },
|
||||
{ name: 'fcltNm', fieldName: 'fcltNm', header: { text: '시설명' } },
|
||||
|
||||
// 건축물용도
|
||||
{ name: 'BILD_TP', fieldName: '건축물용도', header: { text: '건축물용도' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'bdstTypCn',
|
||||
fieldName: 'bdstTypCn',
|
||||
header: { text: '건축물용도' },
|
||||
},
|
||||
RAINFALL_UTIL_FACT_BDST_TYP_VALUES,
|
||||
),
|
||||
|
||||
// 위치(주소)
|
||||
{ name: 'ADDR', fieldName: '위치(주소)', header: { text: '위치(주소)' } },
|
||||
{ name: 'fcltPstnCn', fieldName: 'fcltPstnCn', header: { text: '위치(주소)' } },
|
||||
|
||||
// 법적의무대상여부(대상/미대상)
|
||||
{ name: 'LAW_YN', fieldName: '법적의무대상여부(대상/미대상)', header: { text: '법적의무대상여부(대상/미대상)' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'lglTrgtYn',
|
||||
fieldName: 'lglTrgtYn',
|
||||
header: { text: '법적의무대상여부(대상/미대상)' },
|
||||
},
|
||||
RAINFALL_UTIL_FACT_LGL_TRGT_YN_VALUES,
|
||||
),
|
||||
|
||||
// 설치완료일 yyyy-mm-dd
|
||||
{ name: 'RN_DT', fieldName: '설치완료일 yyyy-mm-dd', header: { text: '설치완료일 yyyy-mm-dd' } },
|
||||
{
|
||||
name: 'cmptYmd',
|
||||
fieldName: 'cmptYmd',
|
||||
header: { text: '설치완료일 yyyy-mm-dd' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
|
||||
// 설치비(백만원)
|
||||
{ name: 'INSTL_CT', fieldName: '설치비(백만원)', header: { text: '설치비(백만원)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'instlAmt', fieldName: 'instlAmt', header: { text: '설치비(백만원)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 집수면 종류
|
||||
{ name: 'CCM', fieldName: '집수면 종류', header: { text: '집수면 종류' } },
|
||||
{ name: 'rcptMynCn', fieldName: 'rcptMynCn', header: { text: '집수면 종류' } },
|
||||
|
||||
// 여과등처리시설유무(유:처리시설종류,무:미설치)
|
||||
{ name: 'TRTFC_ENNC', fieldName: '여과등처리시설유무(유:처리시설종류,무:미설치)', header: { text: '여과등처리시설유무(유:처리시설종류,무:미설치)' } },
|
||||
{ name: 'filtrPrcsFcltYnExpln', fieldName: 'filtrPrcsFcltYnExpln', header: { text: '여과등처리시설유무(유:처리시설종류,무:미설치)' } },
|
||||
|
||||
// 저류조용량(m³)
|
||||
{ name: 'SGBS_CPCTY', fieldName: '저류조용량(m³)', header: { text: '저류조용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'impdCpct', fieldName: 'impdCpct', header: { text: '저류조용량(m³)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 연간이용량(m³/년)
|
||||
{ name: 'FYER_USEQTY', fieldName: '연간이용량(m³/년)', header: { text: '연간이용량(m³/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'anlUseQnt', fieldName: 'anlUseQnt', header: { text: '연간이용량(m³/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 이용용도
|
||||
{ name: 'RWR_PRCUSE_PRPPOS', fieldName: '이용용도', header: { text: '이용용도' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'exlnUtlzUsgExpln',
|
||||
fieldName: 'exlnUtlzUsgExpln',
|
||||
header: { text: '이용용도' },
|
||||
},
|
||||
RAINFALL_UTIL_FACT_EXLN_UTLZ_USG_VALUES,
|
||||
),
|
||||
|
||||
// 연간운영비(백만원/년)
|
||||
{ name: 'FYER_OPER_CT', fieldName: '연간운영비(백만원/년)', header: { text: '연간운영비(백만원/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'anlOperAmt', fieldName: 'anlOperAmt', header: { text: '연간운영비(백만원/년)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'WRTER_OPINION', fieldName: '작성자의견', header: { text: '작성자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: 용도별 이용량 (화면에 표시 안 함)
|
||||
{ name: 'FYER_USE_01', fieldName: '빗물사용 1', header: { text: '빗물사용 1' }, visible: false },
|
||||
{ name: 'FYER_USE_02', fieldName: '빗물사용 2', header: { text: '빗물사용 2' }, visible: false },
|
||||
{ name: 'FYER_USE_03', fieldName: '빗물사용 3', header: { text: '빗물사용 3' }, visible: false },
|
||||
{ name: 'FYER_USE_04', fieldName: '빗물사용 4', header: { text: '빗물사용 4' }, visible: false },
|
||||
{ name: 'FYER_USE_05', fieldName: '빗물사용 5', header: { text: '빗물사용 5' }, visible: false },
|
||||
{ name: 'FYER_USE_06', fieldName: '빗물사용 6', header: { text: '빗물사용 6' }, visible: false },
|
||||
{ name: 'FYER_USE_07', fieldName: '빗물사용 7', header: { text: '빗물사용 7' }, visible: false },
|
||||
|
||||
// Hidden: 인가일 (화면에 표시 안 함)
|
||||
{ name: 'PERMIT_DT', fieldName: '인가일', header: { text: '인가일' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_RWR_REUSE_FCT_NM', fieldName: 'CHK_RWR_REUSE_FCT_NM', header: { text: 'CHK_RWR_REUSE_FCT_NM' }, visible: false },
|
||||
{ name: 'CHK_ADDR', fieldName: 'CHK_ADDR', header: { text: 'CHK_ADDR' }, visible: false },
|
||||
{ name: 'CHK_RN_DT', fieldName: 'CHK_RN_DT', header: { text: 'CHK_RN_DT' }, visible: false },
|
||||
{ name: 'CHK_INSTL_CT', fieldName: 'CHK_INSTL_CT', header: { text: 'CHK_INSTL_CT' }, visible: false },
|
||||
{ name: 'CHK_CCM', fieldName: 'CHK_CCM', header: { text: 'CHK_CCM' }, visible: false },
|
||||
{ name: 'CHK_CCM_AR', fieldName: 'CHK_CCM_AR', header: { text: 'CHK_CCM_AR' }, visible: false },
|
||||
{ name: 'CHK_TRTFC_ENNC', fieldName: 'CHK_TRTFC_ENNC', header: { text: 'CHK_TRTFC_ENNC' }, visible: false },
|
||||
{ name: 'CHK_SGBS_CPCTY', fieldName: 'CHK_SGBS_CPCTY', header: { text: 'CHK_SGBS_CPCTY' }, visible: false },
|
||||
{ name: 'CHK_FYER_USEQTY', fieldName: 'CHK_FYER_USEQTY', header: { text: 'CHK_FYER_USEQTY' }, visible: false },
|
||||
{ name: 'CHK_RWR_PRCUSE_PRPPOS', fieldName: 'CHK_RWR_PRCUSE_PRPPOS', header: { text: 'CHK_RWR_PRCUSE_PRPPOS' }, visible: false },
|
||||
{ name: 'CHK_FYER_OPER_CT', fieldName: 'CHK_FYER_OPER_CT', header: { text: 'CHK_FYER_OPER_CT' }, visible: false },
|
||||
{ name: 'CHK_LAW_YN', fieldName: 'CHK_LAW_YN', header: { text: 'CHK_LAW_YN' }, visible: false },
|
||||
{ name: 'CHK_BILD_TP', fieldName: 'CHK_BILD_TP', header: { text: 'CHK_BILD_TP' }, visible: false },
|
||||
{ name: 'CHK_PERMIT_DT', fieldName: 'CHK_PERMIT_DT', header: { text: 'CHK_PERMIT_DT' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_01', fieldName: 'CHK_FYER_USE_01', header: { text: 'CHK_FYER_USE_01' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_02', fieldName: 'CHK_FYER_USE_02', header: { text: 'CHK_FYER_USE_02' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_03', fieldName: 'CHK_FYER_USE_03', header: { text: 'CHK_FYER_USE_03' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_04', fieldName: 'CHK_FYER_USE_04', header: { text: 'CHK_FYER_USE_04' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_05', fieldName: 'CHK_FYER_USE_05', header: { text: 'CHK_FYER_USE_05' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_06', fieldName: 'CHK_FYER_USE_06', header: { text: 'CHK_FYER_USE_06' }, visible: false },
|
||||
{ name: 'CHK_FYER_USE_07', fieldName: 'CHK_FYER_USE_07', header: { text: 'CHK_FYER_USE_07' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'RWR_REUSE_FCT_NM',
|
||||
'BILD_TP',
|
||||
'ADDR',
|
||||
'LAW_YN',
|
||||
'RN_DT',
|
||||
'INSTL_CT',
|
||||
'CCM',
|
||||
'TRTFC_ENNC',
|
||||
'SGBS_CPCTY',
|
||||
'FYER_USEQTY',
|
||||
'RWR_PRCUSE_PRPPOS',
|
||||
'FYER_OPER_CT',
|
||||
'RMK'
|
||||
'fcltNm',
|
||||
'bdstTypCn',
|
||||
'fcltPstnCn',
|
||||
'lglTrgtYn',
|
||||
'cmptYmd',
|
||||
'instlAmt',
|
||||
'rcptMynCn',
|
||||
'filtrPrcsFcltYnExpln',
|
||||
'impdCpct',
|
||||
'anlUseQnt',
|
||||
'exlnUtlzUsgExpln',
|
||||
'anlOperAmt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'rainFallUtilFactStatusInp',
|
||||
tabKey: 'ST00100003',
|
||||
tabLabel: '빗물이용시설현황'
|
||||
};
|
||||
};
|
||||
|
||||
+142
-57
@@ -1,109 +1,194 @@
|
||||
import type { ColumnConfig } from "@/components/type/DataGrid.type";
|
||||
import { footerDecimal1 } from "@/components/util/grid/footerSummary";
|
||||
import { ValueType } from "realgrid";
|
||||
|
||||
/** 시설물용도/개발사업종류(`bldgSeCn`) */
|
||||
export const RECYCLED_WATER_BLDG_SE_VALUES = [
|
||||
"숙박업",
|
||||
"목욕장업",
|
||||
"공장",
|
||||
"발전시설",
|
||||
"대규모점포",
|
||||
"물류시설",
|
||||
"운수시설",
|
||||
"업무시설",
|
||||
"교정시설",
|
||||
"방송국",
|
||||
"전신전화국",
|
||||
"기타제반법령에의한시설물",
|
||||
"관광단지의개발사업",
|
||||
"도시개발사업",
|
||||
"산업단지개발사업",
|
||||
"택지개발사업",
|
||||
"기타",
|
||||
] as const;
|
||||
|
||||
/** 법적의무대상여부(`lglTrgtYn`) */
|
||||
export const RECYCLED_WATER_LGL_TRGT_YN_VALUES = ["대상", "미대상"] as const;
|
||||
|
||||
/** 중수도용도(`mnUsgCn`) */
|
||||
export const RECYCLED_WATER_MN_USG_VALUES = [
|
||||
"청소화장실용수",
|
||||
"세척살수용수",
|
||||
"조경용수",
|
||||
"친수용수",
|
||||
"하천등유지용수",
|
||||
"공업용수",
|
||||
] as const;
|
||||
|
||||
function dropdownColumn(
|
||||
col: Pick<ColumnConfig, "name" | "fieldName" | "header"> &
|
||||
Partial<ColumnConfig>,
|
||||
options: readonly string[],
|
||||
): ColumnConfig {
|
||||
const values = [...options];
|
||||
return {
|
||||
...col,
|
||||
values,
|
||||
labels: values,
|
||||
lookupDisplay: true,
|
||||
editor: {
|
||||
type: "dropdown",
|
||||
domainOnly: true,
|
||||
textReadOnly: true,
|
||||
commitOnSelect: true,
|
||||
dropDownWhenClick: true,
|
||||
values,
|
||||
labels: values,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
// 하수도 통계 관리 > 10. 물 재이용 > tab 2: 중수도 현황
|
||||
export const RecycledWaterStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, footer: { text: '합계' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ADST_DSTR_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'RUSWTR_FCT_SEQ', fieldName: '일련번호', header: { text: '일련번호' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
|
||||
// 건축물명/개발사업명
|
||||
{ name: 'BILD_NM', fieldName: '건축물명/개발사업명', header: { text: '건축물명/개발사업명' } },
|
||||
{ name: 'fcltNm', fieldName: 'fcltNm', header: { text: '건축물명/개발사업명' } },
|
||||
|
||||
// 시설물용도/개발사업종류
|
||||
{ name: 'BILD_TP', fieldName: '시설물용도/개발사업종류', header: { text: '시설물용도/개발사업종류' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'bldgSeCn',
|
||||
fieldName: 'bldgSeCn',
|
||||
header: { text: '시설물용도/개발사업종류' },
|
||||
},
|
||||
RECYCLED_WATER_BLDG_SE_VALUES,
|
||||
),
|
||||
|
||||
// 주소
|
||||
{ name: 'ADDR', fieldName: '주소', header: { text: '주소' } },
|
||||
{ name: 'fcltPstnCn', fieldName: 'fcltPstnCn', header: { text: '주소' } },
|
||||
|
||||
// 법적의무대상여부(대상/미대상)
|
||||
{ name: 'LAW_YN', fieldName: '법적의무대상여부(대상/미대상)', header: { text: '법적의무대상여부(대상/미대상)' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'lglTrgtYn',
|
||||
fieldName: 'lglTrgtYn',
|
||||
header: { text: '법적의무대상여부(대상/미대상)' },
|
||||
},
|
||||
RECYCLED_WATER_LGL_TRGT_YN_VALUES,
|
||||
),
|
||||
|
||||
// 설치완료일(년-월-일)
|
||||
{ name: 'COMP_DT', fieldName: '설치완료일(년-월-일)', header: { text: '설치완료일(년-월-일)' } },
|
||||
{
|
||||
name: 'cmptnStrtYmd',
|
||||
fieldName: 'cmptnStrtYmd',
|
||||
header: { text: '설치완료일(년-월-일)' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
|
||||
// 가동개시일(년-월-일)
|
||||
{ name: 'RN_DT', fieldName: '가동개시일(년-월-일)', header: { text: '가동개시일(년-월-일)' } },
|
||||
{
|
||||
name: 'oprtngStrtYmd',
|
||||
fieldName: 'oprtngStrtYmd',
|
||||
header: { text: '가동개시일(년-월-일)' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
|
||||
// 시설현황
|
||||
{ name: 'TOTAR', fieldName: '건축연면적(m²)', header: { text: '건축연면적(m²)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'PROC_CPCTY', fieldName: '처리용량(m³/일)', header: { text: '처리용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'archWholArea', fieldName: 'archWholArea', header: { text: '건축연면적(m²)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'prcsCpct', fieldName: 'prcsCpct', header: { text: '처리용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 물 사용량(m³/일)
|
||||
{ name: 'WATER_USE_CPCTY', fieldName: '물 사용량(m³/일)', header: { text: '물 사용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'wtrUseQnt', fieldName: 'wtrUseQnt', header: { text: '물 사용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 중수도이용량(m³/일)
|
||||
{ name: 'RUSWTR_USE_CPCTY', fieldName: '중수도이용량(m³/일)', header: { text: '중수도이용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ruswtrUtztnQnt', fieldName: 'ruswtrUtztnQnt', header: { text: '중수도이용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 대체수이용량(m³/일)
|
||||
{ name: 'SUB_USE_CPCTY', fieldName: '대체수이용량(m³/일)', header: { text: '대체수이용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'sbstCntUtztnQnt', fieldName: 'sbstCntUtztnQnt', header: { text: '대체수이용량(m³/일)' }, footer: footerDecimal1, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 중수도용도
|
||||
{ name: 'RUSWTR_PRPOS', fieldName: '중수도용도', header: { text: '중수도용도' } },
|
||||
dropdownColumn(
|
||||
{
|
||||
name: 'mnUsgCn',
|
||||
fieldName: 'mnUsgCn',
|
||||
header: { text: '중수도용도' },
|
||||
},
|
||||
RECYCLED_WATER_MN_USG_VALUES,
|
||||
),
|
||||
|
||||
// 연간운영비(백만원/년)
|
||||
{ name: 'FYER_OPER_CT', fieldName: '연간운영비(백만원/년)', header: { text: '연간운영비(백만원/년)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
{ name: 'ruswtrOperAmt', fieldName: 'ruswtrOperAmt', header: { text: '연간운영비(백만원/년)' }, valueType: ValueType.NUMBER, dataFormat: '#,##0.0' },
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 사용자의견, 검토자의견
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_BILD_NM', fieldName: 'CHK_BILD_NM', header: { text: 'CHK_BILD_NM' }, visible: false },
|
||||
{ name: 'CHK_ADDR', fieldName: 'CHK_ADDR', header: { text: 'CHK_ADDR' }, visible: false },
|
||||
{ name: 'CHK_TOTAR', fieldName: 'CHK_TOTAR', header: { text: 'CHK_TOTAR' }, visible: false },
|
||||
{ name: 'CHK_PROC_CPCTY', fieldName: 'CHK_PROC_CPCTY', header: { text: 'CHK_PROC_CPCTY' }, visible: false },
|
||||
{ name: 'CHK_RUSWTR_USE_CPCTY', fieldName: 'CHK_RUSWTR_USE_CPCTY', header: { text: 'CHK_RUSWTR_USE_CPCTY' }, visible: false },
|
||||
{ name: 'CHK_COMP_DT', fieldName: 'CHK_COMP_DT', header: { text: 'CHK_COMP_DT' }, visible: false },
|
||||
{ name: 'CHK_RN_DT', fieldName: 'CHK_RN_DT', header: { text: 'CHK_RN_DT' }, visible: false },
|
||||
{ name: 'CHK_RUSWTR_PRPOS', fieldName: 'CHK_RUSWTR_PRPOS', header: { text: 'CHK_RUSWTR_PRPOS' }, visible: false },
|
||||
{ name: 'CHK_LAW_YN', fieldName: 'CHK_LAW_YN', header: { text: 'CHK_LAW_YN' }, visible: false },
|
||||
{ name: 'CHK_BILD_TP', fieldName: 'CHK_BILD_TP', header: { text: 'CHK_BILD_TP' }, visible: false },
|
||||
{ name: 'CHK_PERMIT_DT', fieldName: 'CHK_PERMIT_DT', header: { text: 'CHK_PERMIT_DT' }, visible: false },
|
||||
{ name: 'CHK_FYER_OPER_CT', fieldName: 'CHK_FYER_OPER_CT', header: { text: 'CHK_FYER_OPER_CT' }, visible: false },
|
||||
{ name: 'CHK_WATER_USE_CPCTY', fieldName: 'CHK_WATER_USE_CPCTY', header: { text: 'CHK_WATER_USE_CPCTY' }, visible: false },
|
||||
{ name: 'CHK_SUB_USE_CPCTY', fieldName: 'CHK_SUB_USE_CPCTY', header: { text: 'CHK_SUB_USE_CPCTY' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'fcltSn', fieldName: 'fcltSn', header: { text: '시설물일련번호' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'BILD_NM',
|
||||
'BILD_TP',
|
||||
'ADDR',
|
||||
'LAW_YN',
|
||||
'COMP_DT',
|
||||
'RN_DT',
|
||||
'fcltNm',
|
||||
'bldgSeCn',
|
||||
'fcltPstnCn',
|
||||
'lglTrgtYn',
|
||||
'cmptnStrtYmd',
|
||||
'oprtngStrtYmd',
|
||||
{
|
||||
name: 'group_facility_status',
|
||||
header: { text: '시설현황' },
|
||||
items: [
|
||||
'TOTAR',
|
||||
'PROC_CPCTY'
|
||||
'archWholArea',
|
||||
'prcsCpct'
|
||||
]
|
||||
},
|
||||
'WATER_USE_CPCTY',
|
||||
'RUSWTR_USE_CPCTY',
|
||||
'SUB_USE_CPCTY',
|
||||
'RUSWTR_PRPOS',
|
||||
'FYER_OPER_CT',
|
||||
'RMK'
|
||||
'wtrUseQnt',
|
||||
'ruswtrUtztnQnt',
|
||||
'sbstCntUtztnQnt',
|
||||
'mnUsgCn',
|
||||
'ruswtrOperAmt',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'fcltSn',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'recycledWaterStatusInp',
|
||||
tabKey: 'ST00100002',
|
||||
tabLabel: '중수도 현황'
|
||||
};
|
||||
};
|
||||
|
||||
+34
-29
@@ -2,56 +2,61 @@
|
||||
export const TreatWaterReuseBusinessApprStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' } },
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ADST_DSTR_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'SIDO_CD', fieldName: '시도코드', header: { text: '시도코드' }, visible: false },
|
||||
{ name: 'REUSE_CMPN_SEQ', fieldName: '일련번호', header: { text: '일련번호' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
|
||||
// 상호(명칭)
|
||||
{ name: 'CMPNM', fieldName: '상호(명칭)', header: { text: '상호(명칭)' } },
|
||||
{ name: 'bplcNm', fieldName: 'bplcNm', header: { text: '상호(명칭)' } },
|
||||
|
||||
// 대표자
|
||||
{ name: 'RPRSNTV', fieldName: '대표자', header: { text: '대표자' } },
|
||||
{ name: 'rprsvNm', fieldName: 'rprsvNm', header: { text: '대표자' } },
|
||||
|
||||
// 주소
|
||||
{ name: 'ADDR', fieldName: '주소', header: { text: '주소' } },
|
||||
{ name: 'bplcPstnCn', fieldName: 'bplcPstnCn', header: { text: '주소' } },
|
||||
|
||||
// 인가일
|
||||
{ name: 'CMPN_RGSDE', fieldName: '인가일 yyyy-mm-dd', header: { text: '인가일 yyyy-mm-dd' } },
|
||||
{
|
||||
name: 'coRegYmd',
|
||||
fieldName: 'coRegYmd',
|
||||
header: { text: '인가일 yyyy-mm-dd' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_CMPNM', fieldName: 'CHK_CMPNM', header: { text: 'CHK_CMPNM' }, visible: false },
|
||||
{ name: 'CHK_RPRSNTV', fieldName: 'CHK_RPRSNTV', header: { text: 'CHK_RPRSNTV' }, visible: false },
|
||||
{ name: 'CHK_ADDR', fieldName: 'CHK_ADDR', header: { text: 'CHK_ADDR' }, visible: false },
|
||||
{ name: 'CHK_CMPN_RGSDE', fieldName: 'CHK_CMPN_RGSDE', header: { text: 'CHK_CMPN_RGSDE' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'bplcSn', fieldName: 'bplcSn', header: { text: '사업장일련번호' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'CMPNM',
|
||||
'RPRSNTV',
|
||||
'ADDR',
|
||||
'CMPN_RGSDE',
|
||||
'RMK'
|
||||
'bplcNm',
|
||||
'rprsvNm',
|
||||
'bplcPstnCn',
|
||||
'coRegYmd',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'bplcSn',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'treatWaterReuseBusinessApprStatusInp',
|
||||
tabKey: 'ST00100005',
|
||||
tabLabel: '하·폐수처리수 재이용사업 인가현황'
|
||||
};
|
||||
+34
-29
@@ -2,56 +2,61 @@
|
||||
export const TreatWaterReuseDesignConstStatusInpColumn = {
|
||||
columns: [
|
||||
// 행정구역
|
||||
{ name: 'SIDO', fieldName: '시도', header: { text: '시도' }, editable: false },
|
||||
{ name: 'GUGUN', fieldName: '시군구', header: { text: '시군구' }, editable: false }, // editable 임의로
|
||||
|
||||
// 행정코드 (hidden)
|
||||
{ name: 'ADST_CD', fieldName: '행정코드', header: { text: '행정코드' }, visible: false },
|
||||
{ name: 'ADST_DSTR_CD', fieldName: '행정구역코드', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'SIDO_CD', fieldName: '시도코드', header: { text: '시도코드' }, visible: false },
|
||||
{ name: 'PLCST_CMPNY_SEQ', fieldName: '일련번호', header: { text: '일련번호' }, visible: false },
|
||||
{ name: 'ctpvNm', fieldName: 'ctpvNm', header: { text: '시도' }, footer: { text: '합계' }, editable: false, styleName: 'rg-cell-readonly' },
|
||||
{ name: 'sggNm', fieldName: 'sggNm', header: { text: '시군구' } },
|
||||
|
||||
// 상호(명칭)
|
||||
{ name: 'CMPNM', fieldName: '상호(명칭)', header: { text: '상호(명칭)' } },
|
||||
{ name: 'bplcNm', fieldName: 'bplcNm', header: { text: '상호(명칭)' } },
|
||||
|
||||
// 대표자
|
||||
{ name: 'RPRSNTV', fieldName: '대표자', header: { text: '대표자' } },
|
||||
{ name: 'rprsvNm', fieldName: 'rprsvNm', header: { text: '대표자' } },
|
||||
|
||||
// 주소
|
||||
{ name: 'ADDR', fieldName: '주소', header: { text: '주소' } },
|
||||
{ name: 'bplcPstnCn', fieldName: 'bplcPstnCn', header: { text: '주소' } },
|
||||
|
||||
// 등록일 yyyy-mm-dd
|
||||
{ name: 'CMPN_RGSDE', fieldName: '등록일 yyyy-mm-dd', header: { text: '등록일 yyyy-mm-dd' } },
|
||||
{
|
||||
name: 'coRegYmd',
|
||||
fieldName: 'coRegYmd',
|
||||
header: { text: '등록일 yyyy-mm-dd' },
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
editor: {
|
||||
type: 'date' as const,
|
||||
dropDownWhenClick: true,
|
||||
datetimeFormat: 'yyyy-MM-dd',
|
||||
},
|
||||
},
|
||||
|
||||
// 비고
|
||||
{ name: 'RMK', fieldName: '비고', header: { text: '비고' } },
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
// Hidden: 의견 필드
|
||||
{ name: 'CHCKER_OPINION', fieldName: '검토자의견', header: { text: '검토자의견' }, visible: false },
|
||||
{ name: 'WRTER_OPINION', fieldName: '사용자의견', header: { text: '사용자의견' }, visible: false },
|
||||
|
||||
// Hidden: Check fields : 데이터 변경 여부를 판단하는 필드로, UI에서 숨김 처리
|
||||
{ name: 'CHK_CMPNM', fieldName: 'CHK_CMPNM', header: { text: 'CHK_CMPNM' }, visible: false },
|
||||
{ name: 'CHK_RPRSNTV', fieldName: 'CHK_RPRSNTV', header: { text: 'CHK_RPRSNTV' }, visible: false },
|
||||
{ name: 'CHK_ADDR', fieldName: 'CHK_ADDR', header: { text: 'CHK_ADDR' }, visible: false },
|
||||
{ name: 'CHK_CMPN_RGSDE', fieldName: 'CHK_CMPN_RGSDE', header: { text: 'CHK_CMPN_RGSDE' }, visible: false },
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false, },
|
||||
{ name: 'admdstNm', fieldName: 'admdstNm', header: { text: '행정구역명' }, visible: false },
|
||||
{ name: 'bplcSn', fieldName: 'bplcSn', header: { text: '사업장일련번호' }, visible: false },
|
||||
],
|
||||
|
||||
columnLayout: [
|
||||
{
|
||||
name: 'group_admin',
|
||||
header: { text: '행정구역' },
|
||||
items: ['SIDO', 'GUGUN']
|
||||
items: [
|
||||
{ column: 'ctpvNm', footerUserSpans: [{ colspan: 2 }] },
|
||||
'sggNm',
|
||||
],
|
||||
},
|
||||
'CMPNM',
|
||||
'RPRSNTV',
|
||||
'ADDR',
|
||||
'CMPN_RGSDE',
|
||||
'RMK'
|
||||
'bplcNm',
|
||||
'rprsvNm',
|
||||
'bplcPstnCn',
|
||||
'coRegYmd',
|
||||
'rmrk',
|
||||
'admdstCd',
|
||||
'admdstNm',
|
||||
'bplcSn',
|
||||
],
|
||||
|
||||
rowStartNum: 2,
|
||||
fixedColumns: 0,
|
||||
tabKey: 'treatWaterReuseDesignConstStatusInp',
|
||||
tabKey: 'ST00100004',
|
||||
tabLabel: '하·폐수처리수 재이용시설 설계시공업 등록현황'
|
||||
};
|
||||
@@ -192,11 +192,6 @@ export const PublicSewageFacilityColumn = {
|
||||
{ name: 'intgPrcsFcltCn', fieldName: 'intgPrcsFcltCn', header: { text: '중심처리시설' }, editable: false },
|
||||
{ name: 'wholNope', fieldName: 'wholNope', header: { text: '직원총수\n(명)' }, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
{ name: 'sftyAcdntEvntcsCnt', fieldName: 'sftyAcdntEvntcsCnt', header: { text: '안전사고건수' }, editable: false, valueType: ValueType.NUMBER, dataFormat: '#,##0' },
|
||||
|
||||
// hidden
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정구역코드' }, visible: false },
|
||||
{ name: 'rowType', fieldName: 'rowType', header: { text: '데이터구분' }, visible: false },
|
||||
{ name: 'statsYr', fieldName: 'statsYr', header: { text: '통계연도' }, visible: false },
|
||||
].map((col) => ({ ...col, editable: false })),
|
||||
|
||||
columnLayout: [
|
||||
@@ -291,8 +286,5 @@ export const PublicSewageFacilityColumn = {
|
||||
'intgPrcsFcltCn',
|
||||
'wholNope',
|
||||
'sftyAcdntEvntcsCnt',
|
||||
'admdstCd',
|
||||
'rowType',
|
||||
'statsYr',
|
||||
],
|
||||
};
|
||||
@@ -139,9 +139,6 @@ export const SeweragePentrationRateTotColumn = {
|
||||
|
||||
// 비고
|
||||
{ name: 'rmrk', fieldName: 'rmrk', header: { text: '비고' } },
|
||||
|
||||
{ name: 'swagePplPsplyRt', fieldName: 'swagePplPsplyRt', header: { text: '하수관로보급률(%)' }, visible: false },
|
||||
{ name: 'admdstCd', fieldName: 'admdstCd', header: { text: '행정코드' }, visible: false },
|
||||
].map((col) => ({ ...col, editable: false })),
|
||||
|
||||
columnLayout: [
|
||||
@@ -205,7 +202,5 @@ export const SeweragePentrationRateTotColumn = {
|
||||
'sewerInstlRt',
|
||||
'rurPsplyRt',
|
||||
'rmrk',
|
||||
'swagePplPsplyRt',
|
||||
'admdstCd',
|
||||
]
|
||||
};
|
||||
@@ -299,6 +299,20 @@ export function createQuotientRatioPercentValueCallback(
|
||||
};
|
||||
}
|
||||
|
||||
/** Σ(numeratorFields) / denominatorField × 10,000 — 기준인구당 건수(건/10,000명) */
|
||||
export function createSumPerTenThousandValueCallback(
|
||||
numeratorFields: string[],
|
||||
denominatorField: string,
|
||||
): DataFieldValueCallback {
|
||||
return (_prod, _dataRow, _fieldName, fieldNamesArr, values) => {
|
||||
const sum = sumFieldValues(numeratorFields, fieldNamesArr, values);
|
||||
const denIdx = fieldNamesArr.indexOf(denominatorField);
|
||||
const den = denIdx >= 0 ? toNum(values[denIdx]) : 0;
|
||||
if (den === 0) return 0;
|
||||
return truncateToFirstDecimal((sum / den) * 10000);
|
||||
};
|
||||
}
|
||||
|
||||
/** 나눗셈: fields[0] / fields[1] (분모 0이면 0) */
|
||||
export function createQuotientValueCallback(fields: string[]): DataFieldValueCallback {
|
||||
const numeratorField = fields[0] ?? "";
|
||||
@@ -314,6 +328,25 @@ export function createQuotientValueCallback(fields: string[]): DataFieldValueCal
|
||||
};
|
||||
}
|
||||
|
||||
/** (numerator / denominator) × multiplier × 100 — 분모 0이면 0 */
|
||||
export function createQuotientTimesMultiplierPercentValueCallback(
|
||||
numeratorField: string,
|
||||
denominatorField: string,
|
||||
multiplierField: string,
|
||||
): DataFieldValueCallback {
|
||||
return (_prod, _dataRow, _fieldName, fieldNamesArr, values) => {
|
||||
const getVal = (field: string) => {
|
||||
const idx = fieldNamesArr.indexOf(field);
|
||||
return idx >= 0 ? toNum(values[idx]) : 0;
|
||||
};
|
||||
const denominator = getVal(denominatorField);
|
||||
if (denominator === 0) return 0;
|
||||
const quotient = getVal(numeratorField) / denominator;
|
||||
const multiplier = getVal(multiplierField);
|
||||
return truncateToFirstDecimal(quotient * multiplier * 100);
|
||||
};
|
||||
}
|
||||
|
||||
/** 연산 타입에 맞는 valueCallback 반환 */
|
||||
export function getComputedValueCallback(config: ComputedFieldConfig): DataFieldValueCallback {
|
||||
switch (config.type) {
|
||||
@@ -365,5 +398,16 @@ export function getComputedValueCallback(config: ComputedFieldConfig): DataField
|
||||
return createPumpGrossPpqtyValueCallback(config.pumpGroups);
|
||||
case 'bodPrcsRt':
|
||||
return createBodPrcsRtValueCallback(config.inflwField, config.dschgField);
|
||||
case 'sumPerTenThousand':
|
||||
return createSumPerTenThousandValueCallback(
|
||||
config.numeratorFields,
|
||||
config.denominatorField,
|
||||
);
|
||||
case 'quotientTimesMultiplierPercent':
|
||||
return createQuotientTimesMultiplierPercentValueCallback(
|
||||
config.numeratorField,
|
||||
config.denominatorField,
|
||||
config.multiplierField,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
import { stClient } from "@/shared/api/client";
|
||||
import { withAuthHeader } from "@/shared/api/with-auth-header";
|
||||
import { ENDPOINT } from "@/shared/config";
|
||||
|
||||
import type {
|
||||
ExcretaRelatedIndustryApiResponse,
|
||||
ExcretaRelatedIndustrySaveRequest,
|
||||
ExcretaRelatedIndustrySubmitRequest,
|
||||
PrivateSewageTreatRelatedIndustryApiResponse,
|
||||
PrivateSewageTreatRelatedIndustrySaveRequest,
|
||||
PrivateSewageTreatRelatedIndustrySubmitRequest,
|
||||
PublicInstitutionExcretaIndustryApiResponse,
|
||||
PublicInstitutionExcretaIndustrySaveRequest,
|
||||
PublicInstitutionExcretaIndustrySubmitRequest,
|
||||
PublicInstitutionSewerIndustryApiResponse,
|
||||
PublicInstitutionSewerIndustrySaveRequest,
|
||||
PublicInstitutionSewerIndustrySubmitRequest,
|
||||
SewageExcretaRelatedRequestParams,
|
||||
SewageExcretaRelatedSaveResponse,
|
||||
SewageExcretaRelatedSubmitResponse,
|
||||
StatisticsInputSewageExcretaRelatedService,
|
||||
} from "../../model/input/statistics-input-sewage-excreta-related-interface";
|
||||
|
||||
const BASE = `${ENDPOINT.ST_SERVICE.INPUT}/sewage-excreta-related`;
|
||||
|
||||
export class StatisticsInputSewageExcretaRelatedApiService
|
||||
implements StatisticsInputSewageExcretaRelatedService
|
||||
{
|
||||
/** 공공기관 하수분야 조회 — ST00120001 */
|
||||
public async getPublicInstitutionSewerIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<PublicInstitutionSewerIndustryApiResponse> {
|
||||
const response = await stClient.get<PublicInstitutionSewerIndustryApiResponse>(
|
||||
`${BASE}/public-institution-sewer-industry`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공기관 하수분야 저장 — ST00120001 */
|
||||
public async savePublicInstitutionSewerIndustry(
|
||||
request: PublicInstitutionSewerIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
|
||||
`${BASE}/public-institution-sewer-industry/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공기관 하수분야 제출 — ST00120001 */
|
||||
public async submitPublicInstitutionSewerIndustry(
|
||||
request: PublicInstitutionSewerIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
|
||||
`${BASE}/public-institution-sewer-industry/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공기관 분뇨분야 조회 — ST00120002 */
|
||||
public async getPublicInstitutionExcretaIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<PublicInstitutionExcretaIndustryApiResponse> {
|
||||
const response = await stClient.get<PublicInstitutionExcretaIndustryApiResponse>(
|
||||
`${BASE}/public-institution-excreta-industry`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공기관 분뇨분야 저장 — ST00120002 */
|
||||
public async savePublicInstitutionExcretaIndustry(
|
||||
request: PublicInstitutionExcretaIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
|
||||
`${BASE}/public-institution-excreta-industry/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공기관 분뇨분야 제출 — ST00120002 */
|
||||
public async submitPublicInstitutionExcretaIndustry(
|
||||
request: PublicInstitutionExcretaIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
|
||||
`${BASE}/public-institution-excreta-industry/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 분뇨수집·운반업 조회 — ST00120003 */
|
||||
public async getExcretaRelatedIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<ExcretaRelatedIndustryApiResponse> {
|
||||
const response = await stClient.get<ExcretaRelatedIndustryApiResponse>(
|
||||
`${BASE}/excreta-related-industry`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 분뇨수집·운반업 저장 — ST00120003 */
|
||||
public async saveExcretaRelatedIndustry(
|
||||
request: ExcretaRelatedIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
|
||||
`${BASE}/excreta-related-industry/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 분뇨수집·운반업 제출 — ST00120003 */
|
||||
public async submitExcretaRelatedIndustry(
|
||||
request: ExcretaRelatedIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
|
||||
`${BASE}/excreta-related-industry/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 개인하수처리관련업 조회 — ST00120004 */
|
||||
public async getPrivateSewageTreatRelatedIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<PrivateSewageTreatRelatedIndustryApiResponse> {
|
||||
const response = await stClient.get<PrivateSewageTreatRelatedIndustryApiResponse>(
|
||||
`${BASE}/private-sewage-treat-related-industry`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 개인하수처리관련업 저장 — ST00120004 */
|
||||
public async savePrivateSewageTreatRelatedIndustry(
|
||||
request: PrivateSewageTreatRelatedIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSaveResponse>(
|
||||
`${BASE}/private-sewage-treat-related-industry/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 개인하수처리관련업 제출 — ST00120004 */
|
||||
public async submitPrivateSewageTreatRelatedIndustry(
|
||||
request: PrivateSewageTreatRelatedIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse> {
|
||||
const response = await stClient.put<SewageExcretaRelatedSubmitResponse>(
|
||||
`${BASE}/private-sewage-treat-related-industry/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const statisticsInputSewageExcretaRelatedApi =
|
||||
new StatisticsInputSewageExcretaRelatedApiService();
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
import { stClient } from "@/shared/api/client";
|
||||
import { withAuthHeader } from "@/shared/api/with-auth-header";
|
||||
import { ENDPOINT } from "@/shared/config";
|
||||
|
||||
import type {
|
||||
DigestorOperatingStatusApiResponse,
|
||||
DigestorOperatingStatusSaveRequest,
|
||||
DigestorOperatingStatusSaveResponse,
|
||||
DigestorOperatingStatusSubmitRequest,
|
||||
DigestorOperatingStatusSubmitResponse,
|
||||
ExcretaSlurgeProcessingStatusApiResponse,
|
||||
ExcretaSlurgeProcessingStatusSaveRequest,
|
||||
ExcretaSlurgeProcessingStatusSaveResponse,
|
||||
ExcretaSlurgeProcessingStatusSubmitRequest,
|
||||
ExcretaSlurgeProcessingStatusSubmitResponse,
|
||||
PublicSewageFacilitiesListApiResponse,
|
||||
PublicSewageFacilitiesListRequest,
|
||||
SewageExcretaSlurgeRequestParams,
|
||||
SewageSlurgeProcessingFacStatusApiResponse,
|
||||
SewageSlurgeProcessingFacStatusSaveRequest,
|
||||
SewageSlurgeProcessingFacStatusSaveResponse,
|
||||
SewageSlurgeProcessingFacStatusSubmitRequest,
|
||||
SewageSlurgeProcessingFacStatusSubmitResponse,
|
||||
SlurgeProcessingFacStatusApiResponse,
|
||||
SlurgeProcessingFacStatusSaveRequest,
|
||||
SlurgeProcessingFacStatusSaveResponse,
|
||||
SlurgeProcessingFacStatusSubmitRequest,
|
||||
SlurgeProcessingFacStatusSubmitResponse,
|
||||
StatisticsInputSewageExcretaSlurgeService,
|
||||
} from "../../model/input/statistics-input-sewage-excreta-slurge-interface";
|
||||
|
||||
const BASE = `${ENDPOINT.ST_SERVICE.INPUT}/sewage-excreta-slurge`;
|
||||
|
||||
export class StatisticsInputSewageExcretaSlurgeApiService
|
||||
implements StatisticsInputSewageExcretaSlurgeService
|
||||
{
|
||||
/** 찌꺼기(슬러지)처리시설현황 조회 — ST00110001 */
|
||||
public async getSlurgeProcessingFacStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<SlurgeProcessingFacStatusApiResponse> {
|
||||
const response = await stClient.get<SlurgeProcessingFacStatusApiResponse>(
|
||||
`${BASE}/slurge-processing-fac-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 찌꺼기(슬러지)처리시설현황 저장 — ST00110001 */
|
||||
public async saveSlurgeProcessingFacStatus(
|
||||
request: SlurgeProcessingFacStatusSaveRequest,
|
||||
): Promise<SlurgeProcessingFacStatusSaveResponse> {
|
||||
const response = await stClient.put<SlurgeProcessingFacStatusSaveResponse>(
|
||||
`${BASE}/slurge-processing-fac-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 찌꺼기(슬러지)처리시설현황 제출 — ST00110001 */
|
||||
public async submitSlurgeProcessingFacStatus(
|
||||
request: SlurgeProcessingFacStatusSubmitRequest,
|
||||
): Promise<SlurgeProcessingFacStatusSubmitResponse> {
|
||||
const response = await stClient.put<SlurgeProcessingFacStatusSubmitResponse>(
|
||||
`${BASE}/slurge-processing-fac-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 소화조 운영현황 조회 — ST00110002 */
|
||||
public async getDigestorOperatingStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<DigestorOperatingStatusApiResponse> {
|
||||
const response = await stClient.get<DigestorOperatingStatusApiResponse>(
|
||||
`${BASE}/digestor-operating-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 소화조 운영현황 저장 — ST00110002 */
|
||||
public async saveDigestorOperatingStatus(
|
||||
request: DigestorOperatingStatusSaveRequest,
|
||||
): Promise<DigestorOperatingStatusSaveResponse> {
|
||||
const response = await stClient.put<DigestorOperatingStatusSaveResponse>(
|
||||
`${BASE}/digestor-operating-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 소화조 운영현황 제출 — ST00110002 */
|
||||
public async submitDigestorOperatingStatus(
|
||||
request: DigestorOperatingStatusSubmitRequest,
|
||||
): Promise<DigestorOperatingStatusSubmitResponse> {
|
||||
const response = await stClient.put<DigestorOperatingStatusSubmitResponse>(
|
||||
`${BASE}/digestor-operating-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수찌꺼기 처리시설 운영현황 조회 — ST00110003 */
|
||||
public async getSewageSlurgeProcessingFacStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<SewageSlurgeProcessingFacStatusApiResponse> {
|
||||
const response = await stClient.get<SewageSlurgeProcessingFacStatusApiResponse>(
|
||||
`${BASE}/sewage-slurge-processing-fac-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수찌꺼기 처리시설 운영현황 저장 — ST00110003 */
|
||||
public async saveSewageSlurgeProcessingFacStatus(
|
||||
request: SewageSlurgeProcessingFacStatusSaveRequest,
|
||||
): Promise<SewageSlurgeProcessingFacStatusSaveResponse> {
|
||||
const response = await stClient.put<SewageSlurgeProcessingFacStatusSaveResponse>(
|
||||
`${BASE}/sewage-slurge-processing-fac-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수찌꺼기 처리시설 운영현황 제출 — ST00110003 */
|
||||
public async submitSewageSlurgeProcessingFacStatus(
|
||||
request: SewageSlurgeProcessingFacStatusSubmitRequest,
|
||||
): Promise<SewageSlurgeProcessingFacStatusSubmitResponse> {
|
||||
const response = await stClient.put<SewageSlurgeProcessingFacStatusSubmitResponse>(
|
||||
`${BASE}/sewage-slurge-processing-fac-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 분뇨찌꺼기(슬러지)처리현황 조회 — ST00110004 */
|
||||
public async getExcretaSlurgeProcessingStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<ExcretaSlurgeProcessingStatusApiResponse> {
|
||||
const response = await stClient.get<ExcretaSlurgeProcessingStatusApiResponse>(
|
||||
`${BASE}/excreta-slurge-processing-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 분뇨찌꺼기(슬러지)처리현황 저장 — ST00110004 */
|
||||
public async saveExcretaSlurgeProcessingStatus(
|
||||
request: ExcretaSlurgeProcessingStatusSaveRequest,
|
||||
): Promise<ExcretaSlurgeProcessingStatusSaveResponse> {
|
||||
const response = await stClient.put<ExcretaSlurgeProcessingStatusSaveResponse>(
|
||||
`${BASE}/excreta-slurge-processing-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 분뇨찌꺼기(슬러지)처리현황 제출 — ST00110004 */
|
||||
public async submitExcretaSlurgeProcessingStatus(
|
||||
request: ExcretaSlurgeProcessingStatusSubmitRequest,
|
||||
): Promise<ExcretaSlurgeProcessingStatusSubmitResponse> {
|
||||
const response = await stClient.put<ExcretaSlurgeProcessingStatusSubmitResponse>(
|
||||
`${BASE}/excreta-slurge-processing-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공하수처리시설 목록 조회 */
|
||||
public async getPublicSewageFacilitiesList(
|
||||
params: PublicSewageFacilitiesListRequest,
|
||||
): Promise<PublicSewageFacilitiesListApiResponse> {
|
||||
const response = await stClient.get<PublicSewageFacilitiesListApiResponse>(
|
||||
`${BASE}/public-sewage-facilities`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const statisticsInputSewageExcretaSlurgeApi =
|
||||
new StatisticsInputSewageExcretaSlurgeApiService();
|
||||
+50
@@ -7,18 +7,24 @@ import {
|
||||
type CauserBurdenRequestParams,
|
||||
type CauserBurdenSaveRequest,
|
||||
type CauserBurdenSaveResponse,
|
||||
type CauserBurdenSubmitRequest,
|
||||
type SewerageChargeApiResponse,
|
||||
type SewerageChargeRequestParams,
|
||||
type SewerageChargeSaveRequest,
|
||||
type SewerageChargeSaveResponse,
|
||||
type SewerageChargeSubmitRequest,
|
||||
type SewerageFinanceSettleApiResponse,
|
||||
type SewerageFinanceSettleRequestParams,
|
||||
type SewerageFinanceSettleSaveRequest,
|
||||
type SewerageFinanceSettleSaveResponse,
|
||||
type SewerageFinanceSettleSubmitRequest,
|
||||
type SewerageFinanceSettleSubmitResponse,
|
||||
type SewerageFinanceSubmitResponse,
|
||||
type SewerageUsageFeeApiResponse,
|
||||
type SewerageUsageFeeRequestParams,
|
||||
type SewerageUsageFeeSaveRequest,
|
||||
type SewerageUsageFeeSaveResponse,
|
||||
type SewerageUsageFeeSubmitRequest,
|
||||
type StatisticsInputSewerageFinanceService,
|
||||
} from "../../model/input/statistics-input-sewerage-finance-interface";
|
||||
|
||||
@@ -49,6 +55,17 @@ export class StatisticsInputSewerageFinanceApiService
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수도재정 결산 제출 — ST00090001 */
|
||||
public async submitSewerageFinanceSettle(
|
||||
request: SewerageFinanceSettleSubmitRequest,
|
||||
): Promise<SewerageFinanceSettleSubmitResponse> {
|
||||
const response = await stClient.put<SewerageFinanceSettleSubmitResponse>(
|
||||
`${BASE}/settle/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수도 요금 조회 — ST00090002 */
|
||||
public async getSewerageChargeList(
|
||||
params: SewerageChargeRequestParams,
|
||||
@@ -71,6 +88,17 @@ export class StatisticsInputSewerageFinanceApiService
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수도 요금 제출 — ST00090002 */
|
||||
public async submitSewerageCharge(
|
||||
request: SewerageChargeSubmitRequest,
|
||||
): Promise<SewerageFinanceSubmitResponse> {
|
||||
const response = await stClient.put<SewerageFinanceSubmitResponse>(
|
||||
`${BASE}/charge/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수도 사용료 조회 — ST00090003 */
|
||||
public async getSewerageUsageFeeList(
|
||||
params: SewerageUsageFeeRequestParams,
|
||||
@@ -93,6 +121,17 @@ export class StatisticsInputSewerageFinanceApiService
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수도 사용료 제출 — ST00090003 */
|
||||
public async submitSewerageUsageFee(
|
||||
request: SewerageUsageFeeSubmitRequest,
|
||||
): Promise<SewerageFinanceSubmitResponse> {
|
||||
const response = await stClient.put<SewerageFinanceSubmitResponse>(
|
||||
`${BASE}/usage-fee/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 원인자 부담금 조회 — ST00090004 */
|
||||
public async getCauserBurdenList(
|
||||
params: CauserBurdenRequestParams,
|
||||
@@ -114,6 +153,17 @@ export class StatisticsInputSewerageFinanceApiService
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 원인자 부담금 제출 — ST00090004 */
|
||||
public async submitCauserBurden(
|
||||
request: CauserBurdenSubmitRequest,
|
||||
): Promise<SewerageFinanceSubmitResponse> {
|
||||
const response = await stClient.put<SewerageFinanceSubmitResponse>(
|
||||
`${BASE}/causer-burden/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const statisticsInputSewerageFinanceApi =
|
||||
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
import { stClient } from "@/shared/api/client";
|
||||
import { withAuthHeader } from "@/shared/api/with-auth-header";
|
||||
import { ENDPOINT } from "@/shared/config";
|
||||
|
||||
import {
|
||||
type SewerageServiceLevelComplaintApiResponse,
|
||||
type SewerageServiceLevelComplaintRequestParams,
|
||||
type SewerageServiceLevelComplaintSaveRequest,
|
||||
type SewerageServiceLevelComplaintSaveResponse,
|
||||
type SewerageServiceLevelComplaintSubmitRequest,
|
||||
type SewerageServiceLevelResidentFriendlyFactApiResponse,
|
||||
type SewerageServiceLevelResidentFriendlyFactRequestParams,
|
||||
type SewerageServiceLevelResidentFriendlyFactSaveRequest,
|
||||
type SewerageServiceLevelResidentFriendlyFactSaveResponse,
|
||||
type SewerageServiceLevelResidentFriendlyFactSubmitRequest,
|
||||
type SewerageServiceLevelSubmitResponse,
|
||||
type StatisticsInputSewerageServiceLevelService,
|
||||
} from "../../model/input/statistics-input-sewerage-service-level-interface";
|
||||
|
||||
const BASE = `${ENDPOINT.ST_SERVICE.INPUT}/sewerage-service-level`;
|
||||
|
||||
export class StatisticsInputSewerageServiceLevelApiService
|
||||
implements StatisticsInputSewerageServiceLevelService
|
||||
{
|
||||
/** 민원 조회 — ST00130001 */
|
||||
public async getComplaintList(
|
||||
params: SewerageServiceLevelComplaintRequestParams,
|
||||
): Promise<SewerageServiceLevelComplaintApiResponse> {
|
||||
const response = await stClient.get<SewerageServiceLevelComplaintApiResponse>(
|
||||
`${BASE}/complaint`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 주민친화시설 조회 — ST00130002 */
|
||||
public async getResidentFriendlyFactList(
|
||||
params: SewerageServiceLevelResidentFriendlyFactRequestParams,
|
||||
): Promise<SewerageServiceLevelResidentFriendlyFactApiResponse> {
|
||||
const response =
|
||||
await stClient.get<SewerageServiceLevelResidentFriendlyFactApiResponse>(
|
||||
`${BASE}/resident-friendly-fact`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 민원 저장 — ST00130001 */
|
||||
public async saveComplaintList(
|
||||
request: SewerageServiceLevelComplaintSaveRequest,
|
||||
): Promise<SewerageServiceLevelComplaintSaveResponse> {
|
||||
const response = await stClient.put<SewerageServiceLevelComplaintSaveResponse>(
|
||||
`${BASE}/complaint/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 주민친화시설 저장 — ST00130002 */
|
||||
public async saveResidentFriendlyFactList(
|
||||
request: SewerageServiceLevelResidentFriendlyFactSaveRequest,
|
||||
): Promise<SewerageServiceLevelResidentFriendlyFactSaveResponse> {
|
||||
const response = await stClient.put<SewerageServiceLevelResidentFriendlyFactSaveResponse>(
|
||||
`${BASE}/resident-friendly-fact/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 민원 제출 — ST00130001 */
|
||||
public async submitComplaintList(
|
||||
request: SewerageServiceLevelComplaintSubmitRequest,
|
||||
): Promise<SewerageServiceLevelSubmitResponse> {
|
||||
const response = await stClient.put<SewerageServiceLevelSubmitResponse>(
|
||||
`${BASE}/complaint/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 주민친화시설 제출 — ST00130002 */
|
||||
public async submitResidentFriendlyFactList(
|
||||
request: SewerageServiceLevelResidentFriendlyFactSubmitRequest,
|
||||
): Promise<SewerageServiceLevelSubmitResponse> {
|
||||
const response = await stClient.put<SewerageServiceLevelSubmitResponse>(
|
||||
`${BASE}/resident-friendly-fact/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const statisticsInputSewerageServiceLevelApi =
|
||||
new StatisticsInputSewerageServiceLevelApiService();
|
||||
@@ -0,0 +1,204 @@
|
||||
import { stClient } from "@/shared/api/client";
|
||||
import { withAuthHeader } from "@/shared/api/with-auth-header";
|
||||
import { ENDPOINT } from "@/shared/config";
|
||||
|
||||
import {
|
||||
type PublicSewageTreatWaterReuseApiResponse,
|
||||
type PublicSewageTreatWaterReuseSaveRequest,
|
||||
type PublicSewageTreatWaterReuseSaveResponse,
|
||||
type PublicSewageTreatWaterReuseSubmitRequest,
|
||||
type PublicSewageTreatWaterReuseSubmitResponse,
|
||||
type RainFallUtilFactStatusApiResponse,
|
||||
type RainFallUtilFactStatusSaveRequest,
|
||||
type RainFallUtilFactStatusSaveResponse,
|
||||
type RainFallUtilFactStatusSubmitRequest,
|
||||
type RainFallUtilFactStatusSubmitResponse,
|
||||
type RecycledWaterStatusApiResponse,
|
||||
type RecycledWaterStatusSaveRequest,
|
||||
type RecycledWaterStatusSaveResponse,
|
||||
type RecycledWaterStatusSubmitRequest,
|
||||
type RecycledWaterStatusSubmitResponse,
|
||||
type StatisticsInputWaterReuseService,
|
||||
type TreatWaterReuseBusinessApprStatusApiResponse,
|
||||
type TreatWaterReuseBusinessApprStatusSaveRequest,
|
||||
type TreatWaterReuseBusinessApprStatusSaveResponse,
|
||||
type TreatWaterReuseBusinessApprStatusSubmitRequest,
|
||||
type TreatWaterReuseBusinessApprStatusSubmitResponse,
|
||||
type TreatWaterReuseDesignConstStatusApiResponse,
|
||||
type TreatWaterReuseDesignConstStatusSaveRequest,
|
||||
type TreatWaterReuseDesignConstStatusSaveResponse,
|
||||
type TreatWaterReuseDesignConstStatusSubmitRequest,
|
||||
type TreatWaterReuseDesignConstStatusSubmitResponse,
|
||||
type WaterReuseRequestParams,
|
||||
} from "../../model/input/statistics-input-water-reuse-interface";
|
||||
|
||||
const BASE = `${ENDPOINT.ST_SERVICE.INPUT}/water-reuse`;
|
||||
|
||||
export class StatisticsInputWaterReuseApiService implements StatisticsInputWaterReuseService {
|
||||
/** 공공하수처리수 재이용 조회 — ST00100001 */
|
||||
public async getPublicSewageTreatWaterReuseList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<PublicSewageTreatWaterReuseApiResponse> {
|
||||
const response = await stClient.get<PublicSewageTreatWaterReuseApiResponse>(
|
||||
`${BASE}/public-sewage`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공하수처리수 재이용 저장 — ST00100001 */
|
||||
public async savePublicSewageTreatWaterReuse(
|
||||
request: PublicSewageTreatWaterReuseSaveRequest,
|
||||
): Promise<PublicSewageTreatWaterReuseSaveResponse> {
|
||||
const response = await stClient.put<PublicSewageTreatWaterReuseSaveResponse>(
|
||||
`${BASE}/public-sewage/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 공공하수처리수 재이용 제출 — ST00100001 */
|
||||
public async submitPublicSewageTreatWaterReuse(
|
||||
request: PublicSewageTreatWaterReuseSubmitRequest,
|
||||
): Promise<PublicSewageTreatWaterReuseSubmitResponse> {
|
||||
const response = await stClient.put<PublicSewageTreatWaterReuseSubmitResponse>(
|
||||
`${BASE}/public-sewage/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 중수도 현황 조회 — ST00100002 */
|
||||
public async getRecycledWaterStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<RecycledWaterStatusApiResponse> {
|
||||
const response = await stClient.get<RecycledWaterStatusApiResponse>(
|
||||
`${BASE}/recycled-water`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 중수도 현황 저장 — ST00100002 */
|
||||
public async saveRecycledWaterStatus(
|
||||
request: RecycledWaterStatusSaveRequest,
|
||||
): Promise<RecycledWaterStatusSaveResponse> {
|
||||
const response = await stClient.put<RecycledWaterStatusSaveResponse>(
|
||||
`${BASE}/recycled-water/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 중수도 현황 제출 — ST00100002 */
|
||||
public async submitRecycledWaterStatus(
|
||||
request: RecycledWaterStatusSubmitRequest,
|
||||
): Promise<RecycledWaterStatusSubmitResponse> {
|
||||
const response = await stClient.put<RecycledWaterStatusSubmitResponse>(
|
||||
`${BASE}/recycled-water/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 빗물이용시설현황 조회 — ST00100003 */
|
||||
public async getRainFallUtilFactStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<RainFallUtilFactStatusApiResponse> {
|
||||
const response = await stClient.get<RainFallUtilFactStatusApiResponse>(
|
||||
`${BASE}/rainfall-util-fact-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 빗물이용시설현황 저장 — ST00100003 */
|
||||
public async saveRainFallUtilFactStatus(
|
||||
request: RainFallUtilFactStatusSaveRequest,
|
||||
): Promise<RainFallUtilFactStatusSaveResponse> {
|
||||
const response = await stClient.put<RainFallUtilFactStatusSaveResponse>(
|
||||
`${BASE}/rainfall-util-fact-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 빗물이용시설현황 제출 — ST00100003 */
|
||||
public async submitRainFallUtilFactStatus(
|
||||
request: RainFallUtilFactStatusSubmitRequest,
|
||||
): Promise<RainFallUtilFactStatusSubmitResponse> {
|
||||
const response = await stClient.put<RainFallUtilFactStatusSubmitResponse>(
|
||||
`${BASE}/rainfall-util-fact-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하·폐수처리수 재이용시설 설계시공업 등록현황 조회 — ST00100004 */
|
||||
public async getTreatWaterReuseDesignConstStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<TreatWaterReuseDesignConstStatusApiResponse> {
|
||||
const response = await stClient.get<TreatWaterReuseDesignConstStatusApiResponse>(
|
||||
`${BASE}/treat-water-reuse-design-const-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하·폐수처리수 재이용시설 설계시공업 등록현황 저장 — ST00100004 */
|
||||
public async saveTreatWaterReuseDesignConstStatus(
|
||||
request: TreatWaterReuseDesignConstStatusSaveRequest,
|
||||
): Promise<TreatWaterReuseDesignConstStatusSaveResponse> {
|
||||
const response = await stClient.put<TreatWaterReuseDesignConstStatusSaveResponse>(
|
||||
`${BASE}/treat-water-reuse-design-const-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하·폐수처리수 재이용시설 설계시공업 등록현황 제출 — ST00100004 */
|
||||
public async submitTreatWaterReuseDesignConstStatus(
|
||||
request: TreatWaterReuseDesignConstStatusSubmitRequest,
|
||||
): Promise<TreatWaterReuseDesignConstStatusSubmitResponse> {
|
||||
const response = await stClient.put<TreatWaterReuseDesignConstStatusSubmitResponse>(
|
||||
`${BASE}/treat-water-reuse-design-const-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하·폐수처리수 재이용사업 인가현황 조회 — ST00100005 */
|
||||
public async getTreatWaterReuseBusinessApprStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<TreatWaterReuseBusinessApprStatusApiResponse> {
|
||||
const response = await stClient.get<TreatWaterReuseBusinessApprStatusApiResponse>(
|
||||
`${BASE}/treat-water-reuse-business-appr-status`,
|
||||
withAuthHeader({ params }),
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하·폐수처리수 재이용사업 인가현황 저장 — ST00100005 */
|
||||
public async saveTreatWaterReuseBusinessApprStatus(
|
||||
request: TreatWaterReuseBusinessApprStatusSaveRequest,
|
||||
): Promise<TreatWaterReuseBusinessApprStatusSaveResponse> {
|
||||
const response = await stClient.put<TreatWaterReuseBusinessApprStatusSaveResponse>(
|
||||
`${BASE}/treat-water-reuse-business-appr-status/save`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하·폐수처리수 재이용사업 인가현황 제출 — ST00100005 */
|
||||
public async submitTreatWaterReuseBusinessApprStatus(
|
||||
request: TreatWaterReuseBusinessApprStatusSubmitRequest,
|
||||
): Promise<TreatWaterReuseBusinessApprStatusSubmitResponse> {
|
||||
const response = await stClient.put<TreatWaterReuseBusinessApprStatusSubmitResponse>(
|
||||
`${BASE}/treat-water-reuse-business-appr-status/submit`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const statisticsInputWaterReuseApi = new StatisticsInputWaterReuseApiService();
|
||||
@@ -0,0 +1,104 @@
|
||||
import { stClient } from "@/shared/api/client";
|
||||
|
||||
import {
|
||||
SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME,
|
||||
type SewerageAggregateSummaryDownloadRequest,
|
||||
type SewerageAggregateSummaryDownloadResult,
|
||||
type SewerageAggregateSummaryTabListResponse,
|
||||
type StatisticsSewerageAggregateSummaryService,
|
||||
} from "../model/statistics-total/statistics-sewerage-aggregate-summary-interface";
|
||||
|
||||
const INDICATORS_URL = "/st-management-service/api/v1/summary-excel/indicators";
|
||||
/** middleware `/server` rewrite 대신 장시간 blob용 API Route 프록시 */
|
||||
const DOWNLOAD_URL = "/api/st/summary-excel/download";
|
||||
/** 확인 안내와 동일 — 최대 1시간 대기 */
|
||||
const DOWNLOAD_TIMEOUT_MS = 3_600_000;
|
||||
|
||||
function parseDownloadFileName(contentDisposition: string): string | undefined {
|
||||
if (!contentDisposition) return undefined;
|
||||
|
||||
const utf8Match = contentDisposition.match(/filename\*\s*=\s*UTF-8''([^;]+)/i);
|
||||
if (utf8Match?.[1]) {
|
||||
return decodeURIComponent(utf8Match[1].trim());
|
||||
}
|
||||
|
||||
const plainMatch = contentDisposition.match(/filename\s*=\s*"?([^";]+)"?/i);
|
||||
return plainMatch?.[1]?.trim();
|
||||
}
|
||||
|
||||
async function toExcelBlob(data: Blob): Promise<Blob> {
|
||||
if (data.type === SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME) {
|
||||
return data;
|
||||
}
|
||||
return new Blob([data], { type: SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME });
|
||||
}
|
||||
|
||||
async function parseBlobErrorMessage(data: Blob): Promise<string> {
|
||||
const fallback = "엑셀 내려받기 중 오류가 발생했습니다.";
|
||||
try {
|
||||
const text = await data.text();
|
||||
const json = JSON.parse(text) as { message?: string };
|
||||
return json.message?.trim() || fallback;
|
||||
} catch {
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
export class StatisticsSewerageAggregateSummaryApiService
|
||||
implements StatisticsSewerageAggregateSummaryService
|
||||
{
|
||||
/** 하수도 통계 총괄표 — 통계항목(탭) 목록 */
|
||||
public async getAggregateSummaryTabList(): Promise<SewerageAggregateSummaryTabListResponse> {
|
||||
const response =
|
||||
await stClient.get<SewerageAggregateSummaryTabListResponse>(INDICATORS_URL);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/** 하수도 통계 총괄표 — 엑셀 내려받기 (`Content-Type`: xlsx, `Content-Disposition`: 파일명) */
|
||||
public async downloadAggregateSummary(
|
||||
request: SewerageAggregateSummaryDownloadRequest,
|
||||
): Promise<SewerageAggregateSummaryDownloadResult> {
|
||||
try {
|
||||
const response = await fetch(DOWNLOAD_URL, {
|
||||
method: "POST",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Accept: SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME,
|
||||
},
|
||||
body: JSON.stringify(request),
|
||||
signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS),
|
||||
});
|
||||
|
||||
const contentType = String(response.headers.get("content-type") ?? "");
|
||||
const contentDisposition = String(response.headers.get("content-disposition") ?? "");
|
||||
const data = await response.blob();
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(await parseBlobErrorMessage(data));
|
||||
}
|
||||
|
||||
if (contentType.includes("application/json")) {
|
||||
throw new Error(await parseBlobErrorMessage(data));
|
||||
}
|
||||
|
||||
return {
|
||||
blob: await toExcelBlob(data),
|
||||
fileName: parseDownloadFileName(contentDisposition),
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof DOMException && error.name === "TimeoutError") {
|
||||
throw new Error(
|
||||
"엑셀 생성 시간이 초과되었습니다. 선택 항목을 줄이거나 잠시 후 다시 시도해주세요.",
|
||||
);
|
||||
}
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error("엑셀 내려받기 중 오류가 발생했습니다.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const statisticsSewerageAggregateSummaryApi =
|
||||
new StatisticsSewerageAggregateSummaryApiService();
|
||||
+328
@@ -0,0 +1,328 @@
|
||||
import type { ApiResponse, SewerageStatusInfo } from "../statistics-interface";
|
||||
|
||||
/** 하수·분뇨관련산업 — 공공기관 하수분야(ST00120001) `PublicInstitutionSewerIndustryInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_PUBLIC_INSTITUTION_SEWER_STATS_CD = "ST00120001" as const;
|
||||
|
||||
/** 검증 결과 한 건 */
|
||||
export interface SewageExcretaRelatedVerificationResultItem {
|
||||
vrfcCd: string;
|
||||
rsnExpln: string;
|
||||
nowVlCn: string;
|
||||
compVlCn: string;
|
||||
}
|
||||
|
||||
/** 필드명 → 검증 결과 배열 */
|
||||
export type SewageExcretaRelatedVerificationResult = Record<
|
||||
string,
|
||||
SewageExcretaRelatedVerificationResultItem[]
|
||||
>;
|
||||
|
||||
/** 조회 `data.commonInfo` */
|
||||
export interface SewageExcretaRelatedCommonInfo {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sewerBzmnCd: string;
|
||||
statsCd: string;
|
||||
verificationResult?: SewageExcretaRelatedVerificationResult;
|
||||
}
|
||||
|
||||
/** 하수·분뇨관련산업 조회 요청 파라미터 */
|
||||
export interface SewageExcretaRelatedRequestParams {
|
||||
ctpvNm?: string;
|
||||
sggNm?: string;
|
||||
sewerBzmnCd?: string;
|
||||
statsYr?: string;
|
||||
mode?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00120001 조회 `data.publicInstitutionSewerIndustryList[]` 한 행.
|
||||
* `PublicInstitutionSewerIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface PublicInstitutionSewerIndustryItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
ognzSn: string;
|
||||
ognzNm: string;
|
||||
empGrssCnt: number;
|
||||
pbadmsNope: number;
|
||||
techWholNope: number;
|
||||
engrkCnt: number;
|
||||
mchnCnt: number;
|
||||
prvtmCnt: number;
|
||||
chmengCnt: number;
|
||||
envCnt: number;
|
||||
enjbEtcCnt: number;
|
||||
etcCnt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaRelatedVerificationResult;
|
||||
}
|
||||
|
||||
export interface PublicInstitutionSewerIndustryResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaRelatedCommonInfo;
|
||||
publicInstitutionSewerIndustryList: PublicInstitutionSewerIndustryItem[];
|
||||
}
|
||||
|
||||
export type PublicInstitutionSewerIndustryApiResponse =
|
||||
ApiResponse<PublicInstitutionSewerIndustryResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** 하수·분뇨관련산업 — 공공기관 분뇨분야(ST00120002) `PublicInstitutionExcretaIndustryInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_PUBLIC_INSTITUTION_EXCRETA_STATS_CD = "ST00120002" as const;
|
||||
|
||||
/**
|
||||
* ST00120002 조회 `data.publicInstitutionExcretaIndustryList[]` 한 행.
|
||||
* `PublicInstitutionExcretaIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface PublicInstitutionExcretaIndustryItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
ognzSn: string;
|
||||
ognzNm: string;
|
||||
empGrssCnt: number;
|
||||
pbadmsNope: number;
|
||||
techWholNope: number;
|
||||
engrkCnt: number;
|
||||
mchnCnt: number;
|
||||
prvtmCnt: number;
|
||||
chmengCnt: number;
|
||||
envCnt: number;
|
||||
enjbEtcCnt: number;
|
||||
etcCnt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaRelatedVerificationResult;
|
||||
}
|
||||
|
||||
export interface PublicInstitutionExcretaIndustryResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaRelatedCommonInfo;
|
||||
publicInstitutionExcretaIndustryList: PublicInstitutionExcretaIndustryItem[];
|
||||
}
|
||||
|
||||
export type PublicInstitutionExcretaIndustryApiResponse =
|
||||
ApiResponse<PublicInstitutionExcretaIndustryResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** 하수·분뇨관련산업 — 분뇨수집·운반업(ST00120003) `ExcretaRelatedIndustryInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_EXCRETA_RELATED_INDUSTRY_STATS_CD = "ST00120003" as const;
|
||||
|
||||
/**
|
||||
* ST00120003 조회 `data.excretaRelatedIndustryList[]` 한 행.
|
||||
* `ExcretaRelatedIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface ExcretaRelatedIndustryItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
bzentyCnt: number;
|
||||
empNope: number;
|
||||
fcltSecrPrstCnt: number;
|
||||
n3TonUdrCnt: number;
|
||||
n4TonUdrCnt: number;
|
||||
n8TonUdrCnt: number;
|
||||
etcCnt: number;
|
||||
clctCnvncPrfmncQnt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaRelatedVerificationResult;
|
||||
}
|
||||
|
||||
export interface ExcretaRelatedIndustryResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaRelatedCommonInfo;
|
||||
excretaRelatedIndustryList: ExcretaRelatedIndustryItem[];
|
||||
}
|
||||
|
||||
export type ExcretaRelatedIndustryApiResponse = ApiResponse<ExcretaRelatedIndustryResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** 하수·분뇨관련산업 — 개인하수처리관련업(ST00120004) `PrivateSewageTreatRelatedIndustryInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_PRIVATE_SEWAGE_TREAT_RELATED_INDUSTRY_STATS_CD = "ST00120004" as const;
|
||||
|
||||
/**
|
||||
* ST00120004 조회 `data.privateSewageTreatRelatedIndustryList[]` 한 행.
|
||||
* `PrivateSewageTreatRelatedIndustryInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface PrivateSewageTreatRelatedIndustryItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
designMdsrCnt: number;
|
||||
designMdsrNope: number;
|
||||
mfbizCnt: number;
|
||||
mfbizMdsrNope: number;
|
||||
mngCnt: number;
|
||||
mngMdsrNope: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaRelatedVerificationResult;
|
||||
}
|
||||
|
||||
export interface PrivateSewageTreatRelatedIndustryResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaRelatedCommonInfo;
|
||||
privateSewageTreatRelatedIndustryList: PrivateSewageTreatRelatedIndustryItem[];
|
||||
}
|
||||
|
||||
export type PrivateSewageTreatRelatedIndustryApiResponse =
|
||||
ApiResponse<PrivateSewageTreatRelatedIndustryResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00120001·ST00120002 저장 — `saveList` / `deleteList` 항목 (`sggNm`·계산필드·검증결과 제외) */
|
||||
export type PublicInstitutionSewerIndustrySaveItem = Omit<
|
||||
PublicInstitutionSewerIndustryItem,
|
||||
"sggNm" | "verificationResult" | "empGrssCnt" | "techWholNope"
|
||||
>;
|
||||
|
||||
export type PublicInstitutionExcretaIndustrySaveItem = Omit<
|
||||
PublicInstitutionExcretaIndustryItem,
|
||||
"sggNm" | "verificationResult" | "empGrssCnt" | "techWholNope"
|
||||
>;
|
||||
|
||||
/** ST00120003·ST00120004 저장 — `saveList` 항목 (`sggNm`·계산필드·검증결과 제외) */
|
||||
export type ExcretaRelatedIndustrySaveItem = Omit<
|
||||
ExcretaRelatedIndustryItem,
|
||||
"sggNm" | "verificationResult" | "fcltSecrPrstCnt"
|
||||
>;
|
||||
|
||||
export type PrivateSewageTreatRelatedIndustrySaveItem = Omit<
|
||||
PrivateSewageTreatRelatedIndustryItem,
|
||||
"sggNm" | "verificationResult"
|
||||
>;
|
||||
|
||||
export interface SewageExcretaRelatedSaveRequestBase {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
}
|
||||
|
||||
export interface PublicInstitutionSewerIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
|
||||
noApplicable?: boolean;
|
||||
saveList: PublicInstitutionSewerIndustrySaveItem[];
|
||||
deleteList: PublicInstitutionSewerIndustrySaveItem[];
|
||||
}
|
||||
|
||||
export interface PublicInstitutionExcretaIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
|
||||
noApplicable?: boolean;
|
||||
saveList: PublicInstitutionExcretaIndustrySaveItem[];
|
||||
deleteList: PublicInstitutionExcretaIndustrySaveItem[];
|
||||
}
|
||||
|
||||
export interface ExcretaRelatedIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
|
||||
saveList: ExcretaRelatedIndustrySaveItem[];
|
||||
}
|
||||
|
||||
export interface PrivateSewageTreatRelatedIndustrySaveRequest extends SewageExcretaRelatedSaveRequestBase {
|
||||
saveList: PrivateSewageTreatRelatedIndustrySaveItem[];
|
||||
}
|
||||
|
||||
export type SewageExcretaRelatedSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export interface SewageExcretaRelatedSubmitRequestBase extends SewageExcretaRelatedSaveRequestBase {
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
}
|
||||
|
||||
export type PublicInstitutionSewerIndustrySubmitItem = PublicInstitutionSewerIndustrySaveItem;
|
||||
|
||||
export interface PublicInstitutionSewerIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
|
||||
noApplicable?: boolean;
|
||||
submitList: PublicInstitutionSewerIndustrySubmitItem[];
|
||||
deleteList: PublicInstitutionSewerIndustrySubmitItem[];
|
||||
}
|
||||
|
||||
export type PublicInstitutionExcretaIndustrySubmitItem = PublicInstitutionExcretaIndustrySaveItem;
|
||||
|
||||
export interface PublicInstitutionExcretaIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
|
||||
noApplicable?: boolean;
|
||||
submitList: PublicInstitutionExcretaIndustrySubmitItem[];
|
||||
deleteList: PublicInstitutionExcretaIndustrySubmitItem[];
|
||||
}
|
||||
|
||||
export type ExcretaRelatedIndustrySubmitItem = ExcretaRelatedIndustrySaveItem;
|
||||
|
||||
export interface ExcretaRelatedIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
|
||||
submitList: ExcretaRelatedIndustrySubmitItem[];
|
||||
}
|
||||
|
||||
export type PrivateSewageTreatRelatedIndustrySubmitItem = PrivateSewageTreatRelatedIndustrySaveItem;
|
||||
|
||||
export interface PrivateSewageTreatRelatedIndustrySubmitRequest extends SewageExcretaRelatedSubmitRequestBase {
|
||||
submitList: PrivateSewageTreatRelatedIndustrySubmitItem[];
|
||||
}
|
||||
|
||||
export interface SewageExcretaRelatedSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface StatisticsInputSewageExcretaRelatedService {
|
||||
/** 공공기관 하수분야 조회 — ST00120001 */
|
||||
getPublicInstitutionSewerIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<PublicInstitutionSewerIndustryApiResponse>;
|
||||
/** 공공기관 하수분야 저장 — ST00120001 */
|
||||
savePublicInstitutionSewerIndustry(
|
||||
request: PublicInstitutionSewerIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse>;
|
||||
/** 공공기관 하수분야 제출 — ST00120001 */
|
||||
submitPublicInstitutionSewerIndustry(
|
||||
request: PublicInstitutionSewerIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse>;
|
||||
/** 공공기관 분뇨분야 조회 — ST00120002 */
|
||||
getPublicInstitutionExcretaIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<PublicInstitutionExcretaIndustryApiResponse>;
|
||||
/** 공공기관 분뇨분야 저장 — ST00120002 */
|
||||
savePublicInstitutionExcretaIndustry(
|
||||
request: PublicInstitutionExcretaIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse>;
|
||||
/** 공공기관 분뇨분야 제출 — ST00120002 */
|
||||
submitPublicInstitutionExcretaIndustry(
|
||||
request: PublicInstitutionExcretaIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse>;
|
||||
/** 분뇨수집·운반업 조회 — ST00120003 */
|
||||
getExcretaRelatedIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<ExcretaRelatedIndustryApiResponse>;
|
||||
/** 분뇨수집·운반업 저장 — ST00120003 */
|
||||
saveExcretaRelatedIndustry(
|
||||
request: ExcretaRelatedIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse>;
|
||||
/** 분뇨수집·운반업 제출 — ST00120003 */
|
||||
submitExcretaRelatedIndustry(
|
||||
request: ExcretaRelatedIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse>;
|
||||
/** 개인하수처리관련업 조회 — ST00120004 */
|
||||
getPrivateSewageTreatRelatedIndustryList(
|
||||
params: SewageExcretaRelatedRequestParams,
|
||||
): Promise<PrivateSewageTreatRelatedIndustryApiResponse>;
|
||||
/** 개인하수처리관련업 저장 — ST00120004 */
|
||||
savePrivateSewageTreatRelatedIndustry(
|
||||
request: PrivateSewageTreatRelatedIndustrySaveRequest,
|
||||
): Promise<SewageExcretaRelatedSaveResponse>;
|
||||
/** 개인하수처리관련업 제출 — ST00120004 */
|
||||
submitPrivateSewageTreatRelatedIndustry(
|
||||
request: PrivateSewageTreatRelatedIndustrySubmitRequest,
|
||||
): Promise<SewageExcretaRelatedSubmitResponse>;
|
||||
}
|
||||
+539
@@ -0,0 +1,539 @@
|
||||
import type { ApiResponse, SewerageStatusInfo } from "../statistics-interface";
|
||||
|
||||
/** 슬러지 처리 — 찌꺼기(슬러지)처리시설현황(ST00110001) `SlurgeProcessingFacStatusInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_SLURGE_PROCESSING_FAC_STATUS_STATS_CD = "ST00110001" as const;
|
||||
|
||||
/** 슬러지 처리 — 소화조 운영현황(ST00110002) `DigestorOperatingStatusInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_DIGESTOR_OPERATING_STATS_CD = "ST00110002" as const;
|
||||
|
||||
/** 슬러지 처리 — 하수찌꺼기 처리시설 운영현황(ST00110003) `SewageSlurgeProcessingFacStatusInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_SEWAGE_SLURGE_FAC_STATUS_STATS_CD = "ST00110003" as const;
|
||||
|
||||
/** 슬러지 처리 — 분뇨찌꺼기(슬러지)처리현황(ST00110004) `ExcretaSlurgeProcessingStatusInpColumn.tabKey` */
|
||||
export const SEWAGE_EXCRETA_EXCRETA_SLURGE_PROCESSING_STATS_CD = "ST00110004" as const;
|
||||
|
||||
/** 검증 결과 한 건 */
|
||||
export interface SewageExcretaSlurgeVerificationResultItem {
|
||||
vrfcCd: string;
|
||||
rsnExpln: string;
|
||||
nowVlCn: string;
|
||||
compVlCn: string;
|
||||
}
|
||||
|
||||
/** 필드명 → 검증 결과 배열 */
|
||||
export type SewageExcretaSlurgeVerificationResult = Record<
|
||||
string,
|
||||
SewageExcretaSlurgeVerificationResultItem[]
|
||||
>;
|
||||
|
||||
/** 조회 `data.commonInfo` */
|
||||
export interface SewageExcretaSlurgeCommonInfo {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sewerBzmnCd: string;
|
||||
statsCd: string;
|
||||
verificationResult?: SewageExcretaSlurgeVerificationResult;
|
||||
}
|
||||
|
||||
/** 슬러지 처리 조회 요청 파라미터 */
|
||||
export interface SewageExcretaSlurgeRequestParams {
|
||||
ctpvNm?: string;
|
||||
sggNm?: string;
|
||||
sewerBzmnCd?: string;
|
||||
statsYr?: string;
|
||||
fcltNm?: string;
|
||||
mode?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00110001 조회 `data.slurgeProcessingFacStatusList[]` 한 행.
|
||||
* `SlurgeProcessingFacStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface SlurgeProcessingFacStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
swtrmtFcltNm: string;
|
||||
swtrmtFcltCd: string;
|
||||
gnamWhol: number;
|
||||
itslfQnt: number;
|
||||
otsdInflwQnt: number;
|
||||
transfTmplntNm: string;
|
||||
transfPrcsQnt: number;
|
||||
srpFncRt: number;
|
||||
wholSrpPrcsQnt: number;
|
||||
itslfTs1Whol: number;
|
||||
itslfTs1RclmQnt: number;
|
||||
itslfTs1IncnrQnt: number;
|
||||
incnrPrcsWhol: number;
|
||||
incnrPrcsLfvlm: number;
|
||||
incnrPrcsPrdctRmtrlQnt: number;
|
||||
incnrPrcsFmlyrQnt: number;
|
||||
incnrPrcsFcltNm: string;
|
||||
itslfTs1AltdQnt: number;
|
||||
stbznPrcsWhol: number;
|
||||
stbznPrcsLfvlm: number;
|
||||
stbznPrcsFmlyrQnt: number;
|
||||
stbznPrcsFcltNm: string;
|
||||
itslfTs1DryQnt: number;
|
||||
dryPrcsWhol: number;
|
||||
dryPrcsLfvlm: number;
|
||||
dryPrcsIncnrQnt: number;
|
||||
dryPrcsFuelQnt: number;
|
||||
dryPrcsPrdctRmtrlQnt: number;
|
||||
dryPrcsFmlyrQnt: number;
|
||||
dryPrcsCmpstgQnt: number;
|
||||
dryPrcsFcltNm: string;
|
||||
itslfTs1FuelQnt: number;
|
||||
fuelPrcsWhol: number;
|
||||
fuelPrcsIncnrQnt: number;
|
||||
fuelPrcsFuelQnt: number;
|
||||
fuelPrcsFcltNm: string;
|
||||
itslfTs2CmpstgQnt: number;
|
||||
cmpsPrcsFcltBzentyNm: string;
|
||||
otsdCnsgnWhol: number;
|
||||
otsdCnsgnRclmQnt: number;
|
||||
otsdCnsgnIncnrQnt: number;
|
||||
otsdCnsgnFuelPwplQnt: number;
|
||||
otsdCnsgnPrdctRmtrlQnt: number;
|
||||
otsdCnsgnFmlyrQnt: number;
|
||||
otsdCnsgnCmpstgQnt: number;
|
||||
otsdCnsgnFcltNm: string;
|
||||
cparTs1Whol: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaSlurgeVerificationResult;
|
||||
}
|
||||
|
||||
export interface SlurgeProcessingFacStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaSlurgeCommonInfo;
|
||||
slurgeProcessingFacStatusList: SlurgeProcessingFacStatusItem[];
|
||||
}
|
||||
|
||||
export type SlurgeProcessingFacStatusApiResponse =
|
||||
ApiResponse<SlurgeProcessingFacStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* ST00110001 저장 — `saveList` / `deleteList` 항목.
|
||||
* `sggNm`·계산필드·검증결과는 저장 요청에서 제외.
|
||||
*/
|
||||
export type SlurgeProcessingFacStatusSaveItem = Omit<
|
||||
SlurgeProcessingFacStatusItem,
|
||||
| "sggNm"
|
||||
| "verificationResult"
|
||||
| "gnamWhol"
|
||||
| "wholSrpPrcsQnt"
|
||||
| "itslfTs1Whol"
|
||||
| "incnrPrcsWhol"
|
||||
| "stbznPrcsWhol"
|
||||
| "dryPrcsWhol"
|
||||
| "fuelPrcsWhol"
|
||||
| "otsdCnsgnWhol"
|
||||
>;
|
||||
|
||||
/** ST00110001 저장 API 요청 */
|
||||
export interface SlurgeProcessingFacStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: SlurgeProcessingFacStatusSaveItem[];
|
||||
deleteList: SlurgeProcessingFacStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type SlurgeProcessingFacStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type SlurgeProcessingFacStatusSubmitItem = SlurgeProcessingFacStatusSaveItem;
|
||||
|
||||
/** ST00110001 제출 API 요청 */
|
||||
export interface SlurgeProcessingFacStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: SlurgeProcessingFacStatusSubmitItem[];
|
||||
deleteList: SlurgeProcessingFacStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface SlurgeProcessingFacStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00110002 조회 `data.digestorOperatingStatusList[]` 한 행.
|
||||
* `DigestorOperatingStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface DigestorOperatingStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
swtrmtFcltCd: string;
|
||||
swtrmtFcltNm: string;
|
||||
digstnEnYn: string;
|
||||
digstnCpct: number;
|
||||
actlDrvnCpct: number;
|
||||
digstnGasInputQnt: number;
|
||||
digstnGasInputSldDnst: number;
|
||||
digstnTnkOprtngDayCnt: number;
|
||||
ocrnGasQnt: number;
|
||||
digstnGasUtztnWholPrst: number;
|
||||
digstnGasUtztnNtslQnt: number;
|
||||
digstnGasUtztnEtgtQnt: number;
|
||||
digstnGasUtztnItslfQnt: number;
|
||||
digstnGasUtztnEtcQnt: number;
|
||||
surplsGasQnt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaSlurgeVerificationResult;
|
||||
}
|
||||
|
||||
export interface DigestorOperatingStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaSlurgeCommonInfo;
|
||||
digestorOperatingStatusList: DigestorOperatingStatusItem[];
|
||||
}
|
||||
|
||||
export type DigestorOperatingStatusApiResponse =
|
||||
ApiResponse<DigestorOperatingStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* ST00110002 저장 — `saveList` 항목.
|
||||
* `sggNm`·계산필드·검증결과는 저장 요청에서 제외.
|
||||
*/
|
||||
export type DigestorOperatingStatusSaveItem = Omit<
|
||||
DigestorOperatingStatusItem,
|
||||
"sggNm" | "verificationResult" | "digstnGasUtztnWholPrst"
|
||||
>;
|
||||
|
||||
/** ST00110002 저장 API 요청 */
|
||||
export interface DigestorOperatingStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: DigestorOperatingStatusSaveItem[];
|
||||
deleteList?: DigestorOperatingStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type DigestorOperatingStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type DigestorOperatingStatusSubmitItem = DigestorOperatingStatusSaveItem;
|
||||
|
||||
/** ST00110002 제출 API 요청 */
|
||||
export interface DigestorOperatingStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: DigestorOperatingStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface DigestorOperatingStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00110003 조회 `data.sewageSlurgeProcessingFacStatusList[]` 한 행.
|
||||
* `SewageSlurgeProcessingFacStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface SewageSlurgeProcessingFacStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
fcltNm: string;
|
||||
prcsMthExpln: string;
|
||||
fcltCpct: number;
|
||||
anlPrcsQnt: number;
|
||||
dayAvgOprtngHr: number;
|
||||
anlOprtngDayCnt: number;
|
||||
oprtngRt: number;
|
||||
rmrk: string | null;
|
||||
fcltPstnCn: string;
|
||||
verificationResult?: SewageExcretaSlurgeVerificationResult;
|
||||
}
|
||||
|
||||
export interface SewageSlurgeProcessingFacStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaSlurgeCommonInfo;
|
||||
sewageSlurgeProcessingFacStatusList: SewageSlurgeProcessingFacStatusItem[];
|
||||
}
|
||||
|
||||
export type SewageSlurgeProcessingFacStatusApiResponse =
|
||||
ApiResponse<SewageSlurgeProcessingFacStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* ST00110003 저장 — `saveList` / `deleteList` 항목.
|
||||
* `sggNm`·계산필드·검증결과·`fcltPstnCn`은 저장 요청에서 제외.
|
||||
*/
|
||||
export type SewageSlurgeProcessingFacStatusSaveItem = Omit<
|
||||
SewageSlurgeProcessingFacStatusItem,
|
||||
"sggNm" | "verificationResult" | "oprtngRt" | "fcltPstnCn"
|
||||
>;
|
||||
|
||||
/** ST00110003 저장 API 요청 */
|
||||
export interface SewageSlurgeProcessingFacStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: SewageSlurgeProcessingFacStatusSaveItem[];
|
||||
deleteList: SewageSlurgeProcessingFacStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type SewageSlurgeProcessingFacStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type SewageSlurgeProcessingFacStatusSubmitItem =
|
||||
SewageSlurgeProcessingFacStatusSaveItem;
|
||||
|
||||
/** ST00110003 제출 API 요청 */
|
||||
export interface SewageSlurgeProcessingFacStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: SewageSlurgeProcessingFacStatusSubmitItem[];
|
||||
deleteList: SewageSlurgeProcessingFacStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface SewageSlurgeProcessingFacStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00110004 조회 `data.excretaSlurgeProcessingStatusList[]` 한 행.
|
||||
* `ExcretaSlurgeProcessingStatusInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface ExcretaSlurgeProcessingStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
fcltNm: string;
|
||||
fcltPstnCn: string;
|
||||
gnam: number;
|
||||
wholDspsQnt: number;
|
||||
rcycQnt: number;
|
||||
olandLfvlm: number;
|
||||
incnrQnt: number;
|
||||
oceanInputQnt: number;
|
||||
fuelQnt: number;
|
||||
etcQnt: number;
|
||||
nondspsQnt: number;
|
||||
swtrmtFcltNm: string;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewageExcretaSlurgeVerificationResult;
|
||||
}
|
||||
|
||||
export interface ExcretaSlurgeProcessingStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewageExcretaSlurgeCommonInfo;
|
||||
excretaSlurgeProcessingStatusList: ExcretaSlurgeProcessingStatusItem[];
|
||||
}
|
||||
|
||||
export type ExcretaSlurgeProcessingStatusApiResponse =
|
||||
ApiResponse<ExcretaSlurgeProcessingStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* ST00110004 저장 — `saveList` 항목.
|
||||
* `sggNm`·계산필드(`gnam`, `wholDspsQnt`)·검증결과는 저장 요청에서 제외.
|
||||
*/
|
||||
export type ExcretaSlurgeProcessingStatusSaveItem = Omit<
|
||||
ExcretaSlurgeProcessingStatusItem,
|
||||
"sggNm" | "verificationResult" | "gnam" | "wholDspsQnt"
|
||||
>;
|
||||
|
||||
/** ST00110004 저장 API 요청 */
|
||||
export interface ExcretaSlurgeProcessingStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: ExcretaSlurgeProcessingStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type ExcretaSlurgeProcessingStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type ExcretaSlurgeProcessingStatusSubmitItem = ExcretaSlurgeProcessingStatusSaveItem;
|
||||
|
||||
/** ST00110004 제출 API 요청 */
|
||||
export interface ExcretaSlurgeProcessingStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: ExcretaSlurgeProcessingStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface ExcretaSlurgeProcessingStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/** `public-sewage-facilities` 조회 요청 */
|
||||
export interface PublicSewageFacilitiesListRequest {
|
||||
statsYr: string;
|
||||
sewerBzmnCd: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
}
|
||||
|
||||
/** `public-sewage-facilities` 조회 `data[]` 한 행 */
|
||||
export interface PublicSewageFacilityItem {
|
||||
admdstCd: string;
|
||||
admdstNm: string;
|
||||
swtrmtFcltCd: string;
|
||||
swtrmtFcltNm: string;
|
||||
fcltSn: string;
|
||||
}
|
||||
|
||||
export type PublicSewageFacilitiesListApiResponse = ApiResponse<PublicSewageFacilityItem[]> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
export interface StatisticsInputSewageExcretaSlurgeService {
|
||||
/** 찌꺼기(슬러지)처리시설현황 조회 — ST00110001 */
|
||||
getSlurgeProcessingFacStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<SlurgeProcessingFacStatusApiResponse>;
|
||||
/** 찌꺼기(슬러지)처리시설현황 저장 — ST00110001 */
|
||||
saveSlurgeProcessingFacStatus(
|
||||
request: SlurgeProcessingFacStatusSaveRequest,
|
||||
): Promise<SlurgeProcessingFacStatusSaveResponse>;
|
||||
/** 찌꺼기(슬러지)처리시설현황 제출 — ST00110001 */
|
||||
submitSlurgeProcessingFacStatus(
|
||||
request: SlurgeProcessingFacStatusSubmitRequest,
|
||||
): Promise<SlurgeProcessingFacStatusSubmitResponse>;
|
||||
/** 소화조 운영현황 조회 — ST00110002 */
|
||||
getDigestorOperatingStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<DigestorOperatingStatusApiResponse>;
|
||||
/** 소화조 운영현황 저장 — ST00110002 */
|
||||
saveDigestorOperatingStatus(
|
||||
request: DigestorOperatingStatusSaveRequest,
|
||||
): Promise<DigestorOperatingStatusSaveResponse>;
|
||||
/** 소화조 운영현황 제출 — ST00110002 */
|
||||
submitDigestorOperatingStatus(
|
||||
request: DigestorOperatingStatusSubmitRequest,
|
||||
): Promise<DigestorOperatingStatusSubmitResponse>;
|
||||
/** 하수찌꺼기 처리시설 운영현황 조회 — ST00110003 */
|
||||
getSewageSlurgeProcessingFacStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<SewageSlurgeProcessingFacStatusApiResponse>;
|
||||
/** 하수찌꺼기 처리시설 운영현황 저장 — ST00110003 */
|
||||
saveSewageSlurgeProcessingFacStatus(
|
||||
request: SewageSlurgeProcessingFacStatusSaveRequest,
|
||||
): Promise<SewageSlurgeProcessingFacStatusSaveResponse>;
|
||||
/** 하수찌꺼기 처리시설 운영현황 제출 — ST00110003 */
|
||||
submitSewageSlurgeProcessingFacStatus(
|
||||
request: SewageSlurgeProcessingFacStatusSubmitRequest,
|
||||
): Promise<SewageSlurgeProcessingFacStatusSubmitResponse>;
|
||||
/** 분뇨찌꺼기(슬러지)처리현황 조회 — ST00110004 */
|
||||
getExcretaSlurgeProcessingStatusList(
|
||||
params: SewageExcretaSlurgeRequestParams,
|
||||
): Promise<ExcretaSlurgeProcessingStatusApiResponse>;
|
||||
/** 분뇨찌꺼기(슬러지)처리현황 저장 — ST00110004 */
|
||||
saveExcretaSlurgeProcessingStatus(
|
||||
request: ExcretaSlurgeProcessingStatusSaveRequest,
|
||||
): Promise<ExcretaSlurgeProcessingStatusSaveResponse>;
|
||||
/** 분뇨찌꺼기(슬러지)처리현황 제출 — ST00110004 */
|
||||
submitExcretaSlurgeProcessingStatus(
|
||||
request: ExcretaSlurgeProcessingStatusSubmitRequest,
|
||||
): Promise<ExcretaSlurgeProcessingStatusSubmitResponse>;
|
||||
/** 공공하수처리시설 목록 조회 */
|
||||
getPublicSewageFacilitiesList(
|
||||
params: PublicSewageFacilitiesListRequest,
|
||||
): Promise<PublicSewageFacilitiesListApiResponse>;
|
||||
}
|
||||
+92
-3
@@ -143,6 +143,61 @@ export interface SewerageFinanceSettleSaveResponse {
|
||||
data?: string;
|
||||
}
|
||||
|
||||
/** ST00090001 제출 API 요청 */
|
||||
export interface SewerageFinanceSettleSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
submitList: SewerageFinanceSettleSaveItem[];
|
||||
}
|
||||
|
||||
export interface SewerageFinanceSettleSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/** 하수도재정 입력 제출 공통 본문 (`submitList` 제외) */
|
||||
export interface SewerageFinanceSubmitRequestBase {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
}
|
||||
|
||||
export interface SewerageFinanceSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/** 하수도 요금(ST00090002) — `SewerageChargeInpColumn.tabKey` */
|
||||
export const SEWERAGE_CHARGE_STATS_CD = "ST00090002" as const;
|
||||
|
||||
@@ -193,7 +248,7 @@ export interface SewerageChargeRequestParams {
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00090002 저장 API `saveList[]` 한 행.
|
||||
* ST00090002 저장·제출 API `saveList` / `submitList[]` 한 행.
|
||||
* `SewerageChargeInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 요청 `ctpvNm` 시도명).
|
||||
*/
|
||||
export interface SewerageChargeSaveItem {
|
||||
@@ -226,6 +281,13 @@ export interface SewerageChargeSaveResponse {
|
||||
data?: string;
|
||||
}
|
||||
|
||||
/** ST00090002 제출 API 요청 (`submitList` 행은 `SewerageChargeSaveItem`과 동일) */
|
||||
export interface SewerageChargeSubmitRequest extends SewerageFinanceSubmitRequestBase {
|
||||
submitList: SewerageChargeSaveItem[];
|
||||
}
|
||||
|
||||
export type SewerageChargeSubmitItem = SewerageChargeSaveItem;
|
||||
|
||||
/** 하수도 사용료(ST00090003) — `SewerageUsageFeeInpColumn.tabKey` */
|
||||
export const SEWERAGE_USAGE_FEE_STATS_CD = "ST00090003" as const;
|
||||
|
||||
@@ -293,7 +355,7 @@ export interface SewerageUsageFeeRequestParams {
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00090003 저장 API `saveList[]` 한 행.
|
||||
* ST00090003 저장·제출 API `saveList` / `submitList[]` 한 행.
|
||||
* `SewerageUsageFeeInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 요청 `ctpvNm` 시도명).
|
||||
*/
|
||||
export interface SewerageUsageFeeSaveItem {
|
||||
@@ -343,6 +405,13 @@ export interface SewerageUsageFeeSaveResponse {
|
||||
data?: string;
|
||||
}
|
||||
|
||||
/** ST00090003 제출 API 요청 (`submitList` 행은 `SewerageUsageFeeSaveItem`과 동일) */
|
||||
export interface SewerageUsageFeeSubmitRequest extends SewerageFinanceSubmitRequestBase {
|
||||
submitList: SewerageUsageFeeSaveItem[];
|
||||
}
|
||||
|
||||
export type SewerageUsageFeeSubmitItem = SewerageUsageFeeSaveItem;
|
||||
|
||||
/** 원인자 부담금(ST00090004) — `CauserBurdenInpColumn.tabKey` */
|
||||
export const CAUSER_BURDEN_STATS_CD = "ST00090004" as const;
|
||||
|
||||
@@ -395,8 +464,9 @@ export interface CauserBurdenRequestParams {
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00090004 저장 API `saveList[]` 한 행.
|
||||
* ST00090004 저장·제출 API `saveList` / `submitList[]` 한 행.
|
||||
* `CauserBurdenInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 요청 `ctpvNm` 시도명).
|
||||
* `trgtByWholClctnEvntcsCnt`는 조회·그리드 전용이며 저장·제출 요청에는 포함하지 않음.
|
||||
*/
|
||||
export interface CauserBurdenSaveItem {
|
||||
admdstCd: string;
|
||||
@@ -429,6 +499,13 @@ export interface CauserBurdenSaveResponse {
|
||||
data?: string;
|
||||
}
|
||||
|
||||
/** ST00090004 제출 API 요청 (`submitList` 행은 `CauserBurdenSaveItem`과 동일) */
|
||||
export interface CauserBurdenSubmitRequest extends SewerageFinanceSubmitRequestBase {
|
||||
submitList: CauserBurdenSaveItem[];
|
||||
}
|
||||
|
||||
export type CauserBurdenSubmitItem = CauserBurdenSaveItem;
|
||||
|
||||
/** 하수도재정 조회 공통 요청 파라미터 */
|
||||
export interface SewerageFinanceRequestParams {
|
||||
ctpvNm?: string;
|
||||
@@ -445,22 +522,34 @@ export interface StatisticsInputSewerageFinanceService {
|
||||
saveSewerageFinanceSettle(
|
||||
request: SewerageFinanceSettleSaveRequest,
|
||||
): Promise<SewerageFinanceSettleSaveResponse>;
|
||||
submitSewerageFinanceSettle(
|
||||
request: SewerageFinanceSettleSubmitRequest,
|
||||
): Promise<SewerageFinanceSettleSubmitResponse>;
|
||||
getSewerageChargeList(
|
||||
params: SewerageChargeRequestParams,
|
||||
): Promise<SewerageChargeApiResponse>;
|
||||
saveSewerageCharge(
|
||||
request: SewerageChargeSaveRequest,
|
||||
): Promise<SewerageChargeSaveResponse>;
|
||||
submitSewerageCharge(
|
||||
request: SewerageChargeSubmitRequest,
|
||||
): Promise<SewerageFinanceSubmitResponse>;
|
||||
getSewerageUsageFeeList(
|
||||
params: SewerageUsageFeeRequestParams,
|
||||
): Promise<SewerageUsageFeeApiResponse>;
|
||||
saveSewerageUsageFee(
|
||||
request: SewerageUsageFeeSaveRequest,
|
||||
): Promise<SewerageUsageFeeSaveResponse>;
|
||||
submitSewerageUsageFee(
|
||||
request: SewerageUsageFeeSubmitRequest,
|
||||
): Promise<SewerageFinanceSubmitResponse>;
|
||||
getCauserBurdenList(
|
||||
params: CauserBurdenRequestParams,
|
||||
): Promise<CauserBurdenApiResponse>;
|
||||
saveCauserBurden(
|
||||
request: CauserBurdenSaveRequest,
|
||||
): Promise<CauserBurdenSaveResponse>;
|
||||
submitCauserBurden(
|
||||
request: CauserBurdenSubmitRequest,
|
||||
): Promise<SewerageFinanceSubmitResponse>;
|
||||
}
|
||||
|
||||
+280
@@ -0,0 +1,280 @@
|
||||
import type { ApiResponse, SewerageStatusInfo } from "../statistics-interface";
|
||||
|
||||
/** 하수도 서비스 수준 — 민원(ST00130001) `ComplaintInpColumn.tabKey` */
|
||||
export const SEWERAGE_SERVICE_LEVEL_COMPLAINT_STATS_CD = "ST00130001" as const;
|
||||
|
||||
/** 검증 결과 한 건 */
|
||||
export interface SewerageServiceLevelVerificationResultItem {
|
||||
vrfcCd: string;
|
||||
rsnExpln: string;
|
||||
nowVlCn: string;
|
||||
compVlCn: string;
|
||||
}
|
||||
|
||||
/** 필드명 → 검증 결과 배열 */
|
||||
export type SewerageServiceLevelVerificationResult = Record<
|
||||
string,
|
||||
SewerageServiceLevelVerificationResultItem[]
|
||||
>;
|
||||
|
||||
/** ST00130001 조회 `data.commonInfo` */
|
||||
export interface SewerageServiceLevelComplaintCommonInfo {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sewerBzmnCd: string;
|
||||
statsCd: string;
|
||||
verificationResult?: SewerageServiceLevelVerificationResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00130001 조회 `data.complaintList[]` 한 행.
|
||||
* `ComplaintInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface SewerageServiceLevelComplaintItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
swtrmtPpltnCnt: number;
|
||||
whol: number;
|
||||
dschgWqCnt: number;
|
||||
odorCnt: number;
|
||||
ldsCnt: number;
|
||||
plltnAcdntCnt: number;
|
||||
swagePplCnt: number;
|
||||
sewerCrgAmt: number;
|
||||
etcCnt: number;
|
||||
crtrPpltnCvlcptEvntcsCnt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewerageServiceLevelVerificationResult;
|
||||
}
|
||||
|
||||
export interface SewerageServiceLevelComplaintResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewerageServiceLevelComplaintCommonInfo;
|
||||
complaintList: SewerageServiceLevelComplaintItem[];
|
||||
}
|
||||
|
||||
export type SewerageServiceLevelComplaintApiResponse =
|
||||
ApiResponse<SewerageServiceLevelComplaintResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00130001 조회 요청 파라미터 */
|
||||
export interface SewerageServiceLevelComplaintRequestParams {
|
||||
ctpvNm?: string;
|
||||
sggNm?: string;
|
||||
sewerBzmnCd?: string;
|
||||
statsYr?: string;
|
||||
mode?: string;
|
||||
}
|
||||
|
||||
/** 하수도 서비스 수준 — 주민친화시설(ST00130002) `ResidentFriendlyFactInpColumn.tabKey` */
|
||||
export const SEWERAGE_SERVICE_LEVEL_RESIDENT_FRIENDLY_FACT_STATS_CD = "ST00130002" as const;
|
||||
|
||||
/** ST00130002 조회 `data.commonInfo` */
|
||||
export interface SewerageServiceLevelResidentFriendlyFactCommonInfo {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sewerBzmnCd: string;
|
||||
statsCd: string;
|
||||
verificationResult?: SewerageServiceLevelVerificationResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00130002 조회 `data.residentFriendlyFactList[]` 한 행.
|
||||
* `ResidentFriendlyFactInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface SewerageServiceLevelResidentFriendlyFactItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: number;
|
||||
swtrmtFcltCd: string;
|
||||
swtrmtFcltNm: string;
|
||||
fcltCpct: number;
|
||||
tmplntArea: number;
|
||||
whol: number;
|
||||
brkFcltArea: number;
|
||||
childFrshpSpacArea: number;
|
||||
bdySportsFcltArea: number;
|
||||
sportsFcltArea: number;
|
||||
pkltArea: number;
|
||||
eduMultiFcltArea: number;
|
||||
wtlndMakeArea: number;
|
||||
etcCnt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: SewerageServiceLevelVerificationResult;
|
||||
}
|
||||
|
||||
export interface SewerageServiceLevelResidentFriendlyFactResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: SewerageServiceLevelResidentFriendlyFactCommonInfo;
|
||||
residentFriendlyFactList: SewerageServiceLevelResidentFriendlyFactItem[];
|
||||
}
|
||||
|
||||
export type SewerageServiceLevelResidentFriendlyFactApiResponse =
|
||||
ApiResponse<SewerageServiceLevelResidentFriendlyFactResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00130002 조회 요청 파라미터 */
|
||||
export interface SewerageServiceLevelResidentFriendlyFactRequestParams {
|
||||
ctpvNm?: string;
|
||||
sggNm?: string;
|
||||
sewerBzmnCd?: string;
|
||||
statsYr?: string;
|
||||
mode?: string;
|
||||
}
|
||||
|
||||
/** ST00130001 저장 `saveList[]` 한 행 */
|
||||
export interface SewerageServiceLevelComplaintSaveItem {
|
||||
admdstCd: string;
|
||||
admdstNm: string;
|
||||
swtrmtPpltnCnt: number;
|
||||
dschgWqCnt: number;
|
||||
odorCnt: number;
|
||||
ldsCnt: number;
|
||||
plltnAcdntCnt: number;
|
||||
swagePplCnt: number;
|
||||
sewerCrgAmt: number;
|
||||
etcCnt: number;
|
||||
rmrk: string | null;
|
||||
whol: number;
|
||||
crtrPpltnCvlcptEvntcsCnt: number;
|
||||
}
|
||||
|
||||
/** ST00130001 저장 API 요청 */
|
||||
export interface SewerageServiceLevelComplaintSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
saveList: SewerageServiceLevelComplaintSaveItem[];
|
||||
}
|
||||
|
||||
export interface SewerageServiceLevelComplaintSaveResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: string;
|
||||
}
|
||||
|
||||
/** ST00130002 저장 `saveList[]` 한 행 */
|
||||
export interface SewerageServiceLevelResidentFriendlyFactSaveItem {
|
||||
admdstCd: string;
|
||||
admdstNm: string;
|
||||
swtrmtFcltCd: string;
|
||||
swtrmtFcltNm: string;
|
||||
fcltSn: string;
|
||||
tmplntArea: number;
|
||||
brkFcltArea: number;
|
||||
childFrshpSpacArea: number;
|
||||
bdySportsFcltArea: number;
|
||||
sportsFcltArea: number;
|
||||
pkltArea: number;
|
||||
eduMultiFcltArea: number;
|
||||
wtlndMakeArea: number;
|
||||
etcCnt: number;
|
||||
rmrk: string | null;
|
||||
}
|
||||
|
||||
/** ST00130002 저장 API 요청 */
|
||||
export interface SewerageServiceLevelResidentFriendlyFactSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable: boolean;
|
||||
saveList: SewerageServiceLevelResidentFriendlyFactSaveItem[];
|
||||
}
|
||||
|
||||
export interface SewerageServiceLevelResidentFriendlyFactSaveResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: string;
|
||||
}
|
||||
|
||||
/** ST00130001 제출 `submitList[]` 한 행 */
|
||||
export type SewerageServiceLevelComplaintSubmitItem = SewerageServiceLevelComplaintSaveItem;
|
||||
|
||||
/** ST00130001 제출 API 요청 */
|
||||
export interface SewerageServiceLevelComplaintSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
submitList: SewerageServiceLevelComplaintSubmitItem[];
|
||||
}
|
||||
|
||||
/** ST00130002 제출 `submitList[]` 한 행 */
|
||||
export type SewerageServiceLevelResidentFriendlyFactSubmitItem =
|
||||
SewerageServiceLevelResidentFriendlyFactSaveItem;
|
||||
|
||||
/** ST00130002 제출 API 요청 */
|
||||
export interface SewerageServiceLevelResidentFriendlyFactSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
noApplicable: boolean;
|
||||
submitList: SewerageServiceLevelResidentFriendlyFactSubmitItem[];
|
||||
}
|
||||
|
||||
export interface SewerageServiceLevelSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface StatisticsInputSewerageServiceLevelService {
|
||||
/** 민원 조회 — ST00130001 */
|
||||
getComplaintList(
|
||||
params: SewerageServiceLevelComplaintRequestParams,
|
||||
): Promise<SewerageServiceLevelComplaintApiResponse>;
|
||||
/** 주민친화시설 조회 — ST00130002 */
|
||||
getResidentFriendlyFactList(
|
||||
params: SewerageServiceLevelResidentFriendlyFactRequestParams,
|
||||
): Promise<SewerageServiceLevelResidentFriendlyFactApiResponse>;
|
||||
/** 민원 저장 — ST00130001 */
|
||||
saveComplaintList(
|
||||
request: SewerageServiceLevelComplaintSaveRequest,
|
||||
): Promise<SewerageServiceLevelComplaintSaveResponse>;
|
||||
/** 주민친화시설 저장 — ST00130002 */
|
||||
saveResidentFriendlyFactList(
|
||||
request: SewerageServiceLevelResidentFriendlyFactSaveRequest,
|
||||
): Promise<SewerageServiceLevelResidentFriendlyFactSaveResponse>;
|
||||
/** 민원 제출 — ST00130001 */
|
||||
submitComplaintList(
|
||||
request: SewerageServiceLevelComplaintSubmitRequest,
|
||||
): Promise<SewerageServiceLevelSubmitResponse>;
|
||||
/** 주민친화시설 제출 — ST00130002 */
|
||||
submitResidentFriendlyFactList(
|
||||
request: SewerageServiceLevelResidentFriendlyFactSubmitRequest,
|
||||
): Promise<SewerageServiceLevelSubmitResponse>;
|
||||
}
|
||||
+584
@@ -0,0 +1,584 @@
|
||||
import type { ApiResponse, SewerageStatusInfo } from "../statistics-interface";
|
||||
|
||||
/** 물 재이용 — 공공하수처리수 재이용(ST00100001) `PublicSewageTreatWaterReuseInpColumn.tabKey` */
|
||||
export const WATER_REUSE_PUBLIC_SEWAGE_TREAT_STATS_CD = "ST00100001" as const;
|
||||
|
||||
/** 물 재이용 — 중수도 현황(ST00100002) `RecycledWaterStatusInpColumn.tabKey` */
|
||||
export const WATER_REUSE_RECYCLED_WATER_STATS_CD = "ST00100002" as const;
|
||||
|
||||
/** 물 재이용 — 빗물이용시설현황(ST00100003) `RainFallUtilFactStatusInpColumn.tabKey` */
|
||||
export const WATER_REUSE_RAINFALL_UTIL_FACT_STATS_CD = "ST00100003" as const;
|
||||
|
||||
/** 물 재이용 — 하·폐수처리수 재이용시설 설계시공업 등록현황(ST00100004) */
|
||||
export const WATER_REUSE_DESIGN_CONST_STATS_CD = "ST00100004" as const;
|
||||
|
||||
/** 물 재이용 — 하·폐수처리수 재이용사업 인가현황(ST00100005) */
|
||||
export const WATER_REUSE_BUSINESS_APPR_STATS_CD = "ST00100005" as const;
|
||||
|
||||
/** 검증 결과 한 건 */
|
||||
export interface WaterReuseVerificationResultItem {
|
||||
vrfcCd: string;
|
||||
rsnExpln: string;
|
||||
nowVlCn: string;
|
||||
compVlCn: string;
|
||||
}
|
||||
|
||||
/** 필드명 → 검증 결과 배열 */
|
||||
export type WaterReuseVerificationResult = Record<
|
||||
string,
|
||||
WaterReuseVerificationResultItem[]
|
||||
>;
|
||||
|
||||
/** 조회 `data.commonInfo` */
|
||||
export interface WaterReuseCommonInfo {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sewerBzmnCd: string;
|
||||
statsCd: string;
|
||||
verificationResult?: WaterReuseVerificationResult;
|
||||
}
|
||||
|
||||
/** 물 재이용 조회 요청 파라미터 */
|
||||
export interface WaterReuseRequestParams {
|
||||
ctpvNm?: string;
|
||||
sggNm?: string;
|
||||
sewerBzmnCd?: string;
|
||||
statsYr?: string;
|
||||
mode?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00100001 조회 `data.publicSewageTreatWaterReuseList[]` 한 행.
|
||||
* `PublicSewageTreatWaterReuseInpColumn` fieldName과 동일 (`ctpvNm` 그리드 값은 `commonInfo.ctpvNm` 시도명).
|
||||
*/
|
||||
export interface PublicSewageTreatWaterReuseItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
swtrmtFcltCd: string;
|
||||
swtrmtFcltNm: string;
|
||||
sncnYmd: string;
|
||||
prcsFcltCpct: number;
|
||||
wholPrcsQnt: number;
|
||||
lglYn: string;
|
||||
instlYn: string;
|
||||
oprtngStrtYmd: string;
|
||||
instlAprvYmd: string;
|
||||
rprcsFcltCpct: number;
|
||||
mtcnsNm: string;
|
||||
ruswtPplLen: number;
|
||||
ruswtPumpLen: number;
|
||||
wholUseQnt: number;
|
||||
ithlWshwtrQnt: number;
|
||||
ithlClnQty: number;
|
||||
ithlFrzgQty: number;
|
||||
ithlLdhcUswtrQnt: number;
|
||||
ithlDltnUswtrQnt: number;
|
||||
ithlRuswtrQnt: number;
|
||||
ithlEtcQnt: number;
|
||||
ithlUnsdQnt: number;
|
||||
otcntrUswtrWhol: number;
|
||||
otcntrClnRstrmQnt: number;
|
||||
otcntrWshwtrQnt: number;
|
||||
otcntrLdhcUswtrQnt: number;
|
||||
otcntrHdrplUswtrQnt: number;
|
||||
otcntrRvrKeepQnt: number;
|
||||
agrcltUswtrPstnQnt: number;
|
||||
ugwtrChargQnt: number;
|
||||
mdsrUswtrQnt: number;
|
||||
rtlztnRt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: WaterReuseVerificationResult;
|
||||
}
|
||||
|
||||
export interface PublicSewageTreatWaterReuseResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: WaterReuseCommonInfo;
|
||||
publicSewageTreatWaterReuseList: PublicSewageTreatWaterReuseItem[];
|
||||
}
|
||||
|
||||
export type PublicSewageTreatWaterReuseApiResponse =
|
||||
ApiResponse<PublicSewageTreatWaterReuseResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00100001 저장 — `saveList` 항목 */
|
||||
export interface PublicSewageTreatWaterReuseSaveItem {
|
||||
admdstCd: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
swtrmtFcltCd: string;
|
||||
swtrmtFcltNm: string;
|
||||
wholPrcsQnt: number;
|
||||
lglYn: string;
|
||||
instlYn: string;
|
||||
oprtngStrtYmd: string;
|
||||
instlAprvYmd: string;
|
||||
rprcsFcltCpct: number;
|
||||
mtcnsNm: string;
|
||||
ruswtPplLen: number;
|
||||
ruswtPumpLen: number;
|
||||
rmrk: string | null;
|
||||
rtlztnRt: number;
|
||||
}
|
||||
|
||||
/** ST00100001 저장 API 요청 */
|
||||
export interface PublicSewageTreatWaterReuseSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: PublicSewageTreatWaterReuseSaveItem[];
|
||||
}
|
||||
|
||||
export type PublicSewageTreatWaterReuseSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type PublicSewageTreatWaterReuseSubmitItem = PublicSewageTreatWaterReuseSaveItem;
|
||||
|
||||
/** ST00100001 제출 API 요청 (`submitList` 행은 저장과 동일) */
|
||||
export interface PublicSewageTreatWaterReuseSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: PublicSewageTreatWaterReuseSubmitItem[];
|
||||
}
|
||||
|
||||
export interface PublicSewageTreatWaterReuseSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00100002 조회 `data.recycledWaterList[]` 한 행.
|
||||
* `RecycledWaterStatusInpColumn` fieldName과 동일.
|
||||
*/
|
||||
export interface RecycledWaterStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
fcltNm: string;
|
||||
bldgSeCn: string;
|
||||
fcltPstnCn: string;
|
||||
lglTrgtYn: string;
|
||||
cmptnStrtYmd: string;
|
||||
oprtngStrtYmd: string;
|
||||
archWholArea: number;
|
||||
prcsCpct: number;
|
||||
wtrUseQnt: number;
|
||||
ruswtrUtztnQnt: number;
|
||||
sbstCntUtztnQnt: number;
|
||||
mnUsgCn: string;
|
||||
ruswtrOperAmt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: WaterReuseVerificationResult;
|
||||
}
|
||||
|
||||
export interface RecycledWaterStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: WaterReuseCommonInfo;
|
||||
recycledWaterList: RecycledWaterStatusItem[];
|
||||
}
|
||||
|
||||
export type RecycledWaterStatusApiResponse = ApiResponse<RecycledWaterStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00100002 저장 — `saveList` / `deleteList` 항목 (`sggNm`·검증결과 제외) */
|
||||
export type RecycledWaterStatusSaveItem = Omit<
|
||||
RecycledWaterStatusItem,
|
||||
"sggNm" | "verificationResult"
|
||||
>;
|
||||
|
||||
/** ST00100002 저장 API 요청 */
|
||||
export interface RecycledWaterStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: RecycledWaterStatusSaveItem[];
|
||||
deleteList: RecycledWaterStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type RecycledWaterStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type RecycledWaterStatusSubmitItem = RecycledWaterStatusSaveItem;
|
||||
|
||||
/** ST00100002 제출 API 요청 */
|
||||
export interface RecycledWaterStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: RecycledWaterStatusSubmitItem[];
|
||||
deleteList: RecycledWaterStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface RecycledWaterStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00100003 조회 `data.rainFallUtilFactStatusList[]` 한 행.
|
||||
* `RainFallUtilFactStatusInpColumn` fieldName과 동일.
|
||||
*/
|
||||
export interface RainFallUtilFactStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
fcltSn: string;
|
||||
fcltNm: string;
|
||||
bdstTypCn: string;
|
||||
fcltPstnCn: string;
|
||||
lglTrgtYn: string;
|
||||
cmptYmd: string;
|
||||
instlAmt: number;
|
||||
rcptMynCn: string;
|
||||
filtrPrcsFcltYnExpln: string;
|
||||
impdCpct: number;
|
||||
anlUseQnt: number;
|
||||
exlnUtlzUsgExpln: string;
|
||||
anlOperAmt: number;
|
||||
rmrk: string | null;
|
||||
verificationResult?: WaterReuseVerificationResult;
|
||||
}
|
||||
|
||||
export interface RainFallUtilFactStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: WaterReuseCommonInfo;
|
||||
rainFallUtilFactStatusList: RainFallUtilFactStatusItem[];
|
||||
}
|
||||
|
||||
export type RainFallUtilFactStatusApiResponse =
|
||||
ApiResponse<RainFallUtilFactStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00100003 저장 — `saveList` / `deleteList` 항목 (`sggNm`·검증결과 제외) */
|
||||
export type RainFallUtilFactStatusSaveItem = Omit<
|
||||
RainFallUtilFactStatusItem,
|
||||
"sggNm" | "verificationResult"
|
||||
>;
|
||||
|
||||
/** ST00100003 저장 API 요청 */
|
||||
export interface RainFallUtilFactStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: RainFallUtilFactStatusSaveItem[];
|
||||
deleteList: RainFallUtilFactStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type RainFallUtilFactStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type RainFallUtilFactStatusSubmitItem = RainFallUtilFactStatusSaveItem;
|
||||
|
||||
/** ST00100003 제출 API 요청 */
|
||||
export interface RainFallUtilFactStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: RainFallUtilFactStatusSubmitItem[];
|
||||
deleteList: RainFallUtilFactStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface RainFallUtilFactStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00100004 조회 `data.treatWaterReuseDesignConstStatusList[]` 한 행.
|
||||
* `TreatWaterReuseDesignConstStatusInpColumn` fieldName과 동일.
|
||||
*/
|
||||
export interface TreatWaterReuseDesignConstStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
bplcSn: string;
|
||||
bplcNm: string;
|
||||
rprsvNm: string;
|
||||
bplcPstnCn: string;
|
||||
coRegYmd: string;
|
||||
rmrk: string | null;
|
||||
verificationResult?: WaterReuseVerificationResult;
|
||||
}
|
||||
|
||||
export interface TreatWaterReuseDesignConstStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: WaterReuseCommonInfo;
|
||||
treatWaterReuseDesignConstStatusList: TreatWaterReuseDesignConstStatusItem[];
|
||||
}
|
||||
|
||||
export type TreatWaterReuseDesignConstStatusApiResponse =
|
||||
ApiResponse<TreatWaterReuseDesignConstStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00100004 저장 — `saveList` / `deleteList` 항목 (`sggNm`·검증결과 제외) */
|
||||
export type TreatWaterReuseDesignConstStatusSaveItem = Omit<
|
||||
TreatWaterReuseDesignConstStatusItem,
|
||||
"sggNm" | "verificationResult"
|
||||
>;
|
||||
|
||||
/** ST00100004 저장 API 요청 */
|
||||
export interface TreatWaterReuseDesignConstStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: TreatWaterReuseDesignConstStatusSaveItem[];
|
||||
deleteList: TreatWaterReuseDesignConstStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type TreatWaterReuseDesignConstStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type TreatWaterReuseDesignConstStatusSubmitItem =
|
||||
TreatWaterReuseDesignConstStatusSaveItem;
|
||||
|
||||
/** ST00100004 제출 API 요청 */
|
||||
export interface TreatWaterReuseDesignConstStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: TreatWaterReuseDesignConstStatusSubmitItem[];
|
||||
deleteList: TreatWaterReuseDesignConstStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface TreatWaterReuseDesignConstStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ST00100005 조회 `data.treatWaterReuseBusinessApprStatusList[]` 한 행.
|
||||
* `TreatWaterReuseBusinessApprStatusInpColumn` fieldName과 동일.
|
||||
*/
|
||||
export interface TreatWaterReuseBusinessApprStatusItem {
|
||||
admdstCd: string;
|
||||
sggNm: string;
|
||||
admdstNm: string;
|
||||
bplcSn: string;
|
||||
bplcNm: string;
|
||||
rprsvNm: string;
|
||||
bplcPstnCn: string;
|
||||
coRegYmd: string;
|
||||
rmrk: string | null;
|
||||
verificationResult?: WaterReuseVerificationResult;
|
||||
}
|
||||
|
||||
export interface TreatWaterReuseBusinessApprStatusResponseData {
|
||||
statusInfo: SewerageStatusInfo;
|
||||
commonInfo: WaterReuseCommonInfo;
|
||||
treatWaterReuseBusinessApprStatusList: TreatWaterReuseBusinessApprStatusItem[];
|
||||
}
|
||||
|
||||
export type TreatWaterReuseBusinessApprStatusApiResponse =
|
||||
ApiResponse<TreatWaterReuseBusinessApprStatusResponseData> & {
|
||||
message: string;
|
||||
};
|
||||
|
||||
/** ST00100005 저장 — `saveList` / `deleteList` 항목 (`sggNm`·검증결과 제외) */
|
||||
export type TreatWaterReuseBusinessApprStatusSaveItem = Omit<
|
||||
TreatWaterReuseBusinessApprStatusItem,
|
||||
"sggNm" | "verificationResult"
|
||||
>;
|
||||
|
||||
/** ST00100005 저장 API 요청 */
|
||||
export interface TreatWaterReuseBusinessApprStatusSaveRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
saveList: TreatWaterReuseBusinessApprStatusSaveItem[];
|
||||
deleteList: TreatWaterReuseBusinessApprStatusSaveItem[];
|
||||
}
|
||||
|
||||
export type TreatWaterReuseBusinessApprStatusSaveResponse = ApiResponse<unknown> & {
|
||||
message?: string;
|
||||
};
|
||||
|
||||
export type TreatWaterReuseBusinessApprStatusSubmitItem =
|
||||
TreatWaterReuseBusinessApprStatusSaveItem;
|
||||
|
||||
/** ST00100005 제출 API 요청 */
|
||||
export interface TreatWaterReuseBusinessApprStatusSubmitRequest {
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
userId: string;
|
||||
laePicNm: string;
|
||||
laePicTelNo: string;
|
||||
laeKbrdrDeptNm: string;
|
||||
laeKbrdrJbgdNm: string;
|
||||
laeIdfrNm: string;
|
||||
laeIdfrTelNo: string;
|
||||
laeIdfrDeptNm: string;
|
||||
laeIdfrJbgdNm: string;
|
||||
superAdmin?: string;
|
||||
noApplicable?: boolean;
|
||||
submitList: TreatWaterReuseBusinessApprStatusSubmitItem[];
|
||||
deleteList: TreatWaterReuseBusinessApprStatusSubmitItem[];
|
||||
}
|
||||
|
||||
export interface TreatWaterReuseBusinessApprStatusSubmitResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: {
|
||||
finalStatus: string;
|
||||
nvpassed: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface StatisticsInputWaterReuseService {
|
||||
/** 공공하수처리수 재이용 조회 — ST00100001 */
|
||||
getPublicSewageTreatWaterReuseList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<PublicSewageTreatWaterReuseApiResponse>;
|
||||
/** 공공하수처리수 재이용 저장 — ST00100001 */
|
||||
savePublicSewageTreatWaterReuse(
|
||||
request: PublicSewageTreatWaterReuseSaveRequest,
|
||||
): Promise<PublicSewageTreatWaterReuseSaveResponse>;
|
||||
/** 공공하수처리수 재이용 제출 — ST00100001 */
|
||||
submitPublicSewageTreatWaterReuse(
|
||||
request: PublicSewageTreatWaterReuseSubmitRequest,
|
||||
): Promise<PublicSewageTreatWaterReuseSubmitResponse>;
|
||||
/** 중수도 현황 조회 — ST00100002 */
|
||||
getRecycledWaterStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<RecycledWaterStatusApiResponse>;
|
||||
/** 중수도 현황 저장 — ST00100002 */
|
||||
saveRecycledWaterStatus(
|
||||
request: RecycledWaterStatusSaveRequest,
|
||||
): Promise<RecycledWaterStatusSaveResponse>;
|
||||
/** 중수도 현황 제출 — ST00100002 */
|
||||
submitRecycledWaterStatus(
|
||||
request: RecycledWaterStatusSubmitRequest,
|
||||
): Promise<RecycledWaterStatusSubmitResponse>;
|
||||
/** 빗물이용시설현황 조회 — ST00100003 */
|
||||
getRainFallUtilFactStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<RainFallUtilFactStatusApiResponse>;
|
||||
/** 빗물이용시설현황 저장 — ST00100003 */
|
||||
saveRainFallUtilFactStatus(
|
||||
request: RainFallUtilFactStatusSaveRequest,
|
||||
): Promise<RainFallUtilFactStatusSaveResponse>;
|
||||
/** 빗물이용시설현황 제출 — ST00100003 */
|
||||
submitRainFallUtilFactStatus(
|
||||
request: RainFallUtilFactStatusSubmitRequest,
|
||||
): Promise<RainFallUtilFactStatusSubmitResponse>;
|
||||
/** 하·폐수처리수 재이용시설 설계시공업 등록현황 조회 — ST00100004 */
|
||||
getTreatWaterReuseDesignConstStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<TreatWaterReuseDesignConstStatusApiResponse>;
|
||||
/** 하·폐수처리수 재이용시설 설계시공업 등록현황 저장 — ST00100004 */
|
||||
saveTreatWaterReuseDesignConstStatus(
|
||||
request: TreatWaterReuseDesignConstStatusSaveRequest,
|
||||
): Promise<TreatWaterReuseDesignConstStatusSaveResponse>;
|
||||
/** 하·폐수처리수 재이용시설 설계시공업 등록현황 제출 — ST00100004 */
|
||||
submitTreatWaterReuseDesignConstStatus(
|
||||
request: TreatWaterReuseDesignConstStatusSubmitRequest,
|
||||
): Promise<TreatWaterReuseDesignConstStatusSubmitResponse>;
|
||||
/** 하·폐수처리수 재이용사업 인가현황 조회 — ST00100005 */
|
||||
getTreatWaterReuseBusinessApprStatusList(
|
||||
params: WaterReuseRequestParams,
|
||||
): Promise<TreatWaterReuseBusinessApprStatusApiResponse>;
|
||||
/** 하·폐수처리수 재이용사업 인가현황 저장 — ST00100005 */
|
||||
saveTreatWaterReuseBusinessApprStatus(
|
||||
request: TreatWaterReuseBusinessApprStatusSaveRequest,
|
||||
): Promise<TreatWaterReuseBusinessApprStatusSaveResponse>;
|
||||
/** 하·폐수처리수 재이용사업 인가현황 제출 — ST00100005 */
|
||||
submitTreatWaterReuseBusinessApprStatus(
|
||||
request: TreatWaterReuseBusinessApprStatusSubmitRequest,
|
||||
): Promise<TreatWaterReuseBusinessApprStatusSubmitResponse>;
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/** 하수도 통계 총괄표 — 통계항목(탭) 목록 API `data[]` 한 행 */
|
||||
export interface SewerageAggregateSummaryTabItem {
|
||||
statsCd: string;
|
||||
tabNm: string;
|
||||
}
|
||||
|
||||
export interface SewerageAggregateSummaryTabListResponse {
|
||||
status: string;
|
||||
message: string;
|
||||
data: SewerageAggregateSummaryTabItem[];
|
||||
}
|
||||
|
||||
/** 하수도 통계 총괄표 — 엑셀 내려받기 API `Content-Type` */
|
||||
export const SEWERAGE_AGGREGATE_SUMMARY_EXCEL_MIME =
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" as const;
|
||||
|
||||
/** 하수도 통계 총괄표 — 엑셀 내려받기 API 응답 */
|
||||
export interface SewerageAggregateSummaryDownloadResult {
|
||||
blob: Blob;
|
||||
fileName?: string;
|
||||
}
|
||||
|
||||
/** 하수도 통계 총괄표 — 엑셀 내려받기 API 요청 */
|
||||
export interface SewerageAggregateSummaryDownloadRequest {
|
||||
statsCdList: string[];
|
||||
statsYr: string;
|
||||
ctpvNm: string;
|
||||
sggNm: string;
|
||||
sewerBzmnCd: string;
|
||||
summaryYearCnt: number;
|
||||
}
|
||||
|
||||
export interface StatisticsSewerageAggregateSummaryService {
|
||||
getAggregateSummaryTabList(): Promise<SewerageAggregateSummaryTabListResponse>;
|
||||
downloadAggregateSummary(
|
||||
request: SewerageAggregateSummaryDownloadRequest,
|
||||
): Promise<SewerageAggregateSummaryDownloadResult>;
|
||||
}
|
||||
Reference in New Issue
Block a user