[st] feat: 검증 항목 관리 페이지 작업
This commit is contained in:
+144
-141
@@ -6,180 +6,183 @@ import {
|
||||
imrArticleColumnInfo,
|
||||
validationArticleColumnInfo,
|
||||
} from "@/entities/statistics/model/verification-article-column";
|
||||
import {
|
||||
hbArticleMockData,
|
||||
imrArticleMockData,
|
||||
validationArticleMockData,
|
||||
} from "@/entities/statistics/model/verification-article-mock";
|
||||
import {
|
||||
Button,
|
||||
Input,
|
||||
Label,
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
Tabs,
|
||||
TabsContent,
|
||||
TabsList,
|
||||
TabsTrigger,
|
||||
} from "@common/components";
|
||||
import { CodeSelect } from "@/entities/code/ui/code-select";
|
||||
import { verificationTargetManagementApi } from "@/entities/statistics/api/verification-target-management-service";
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { useState } from "react";
|
||||
import { ENDPOINT } from "@/shared/config";
|
||||
import type { VerificationTargetManagementSearchParams } from "@/entities/statistics/model/verification-target-management-interface";
|
||||
|
||||
const VerificationArticleManagement = () => {
|
||||
const [statsItm, setStatsItm] = useState("통계항목");
|
||||
const [vrfcNm, setVrfcNm] = useState("");
|
||||
const TAB_CONFIG = {
|
||||
HB: { value: "HB", label: "H-B", columnInfo: hbArticleColumnInfo },
|
||||
IMR: { value: "IMR", label: "I-MR", columnInfo: imrArticleColumnInfo },
|
||||
VV: {
|
||||
value: "VV",
|
||||
label: "Validation",
|
||||
columnInfo: validationArticleColumnInfo,
|
||||
},
|
||||
} as const;
|
||||
|
||||
// 각 탭별 데이터
|
||||
const [hbRowData, setHbRowData] = useState<
|
||||
Record<string, string | number>[]
|
||||
>(hbArticleMockData as unknown as Record<string, string | number>[]);
|
||||
type TabValue = keyof typeof TAB_CONFIG;
|
||||
|
||||
const [imrRowData, setImrRowData] = useState<
|
||||
Record<string, string | number>[]
|
||||
>(imrArticleMockData as unknown as Record<string, string | number>[]);
|
||||
function VerificationArticleManagement() {
|
||||
const [activeTab, setActiveTab] = useState<TabValue>("HB");
|
||||
const [statsCd, setStatsCd] = useState("");
|
||||
const [vrfcTrgtNm, setVrfcTrgtNm] = useState("");
|
||||
const [searchParams, setSearchParams] =
|
||||
useState<VerificationTargetManagementSearchParams>({
|
||||
vrfcMthdCd: activeTab,
|
||||
statsCd,
|
||||
vrfcTrgtNm,
|
||||
});
|
||||
|
||||
const [validationRowData, setValidationRowData] = useState<
|
||||
Record<string, string | number>[]
|
||||
>(
|
||||
validationArticleMockData as unknown as Record<
|
||||
string,
|
||||
string | number
|
||||
>[],
|
||||
);
|
||||
const { data: verificationData } = useQuery({
|
||||
queryKey: [ENDPOINT.STATVERIFY_SERVICE.VRFCTGT_MNG, searchParams],
|
||||
queryFn: async () => {
|
||||
const response =
|
||||
await verificationTargetManagementApi.getVerificationTargetManagementList(
|
||||
{
|
||||
vrfcMthdCd: searchParams.vrfcMthdCd,
|
||||
statsCd: searchParams.statsCd || undefined,
|
||||
vrfcTrgtNm: searchParams.vrfcTrgtNm || undefined,
|
||||
},
|
||||
);
|
||||
return response;
|
||||
},
|
||||
});
|
||||
|
||||
const handleSearch = () => {
|
||||
console.log("조회", { statsItm, vrfcNm });
|
||||
};
|
||||
const rowData = (verificationData?.content || []) as unknown as Record<
|
||||
string,
|
||||
string | number
|
||||
>[];
|
||||
const columnInfo = TAB_CONFIG[activeTab].columnInfo;
|
||||
|
||||
const handleReset = () => {
|
||||
setStatsItm("통계항목");
|
||||
setVrfcNm("");
|
||||
};
|
||||
function handleSearch() {
|
||||
setSearchParams({
|
||||
vrfcMthdCd: activeTab,
|
||||
statsCd,
|
||||
vrfcTrgtNm,
|
||||
});
|
||||
}
|
||||
|
||||
const handleInitialize = () => {
|
||||
console.log("초기화");
|
||||
};
|
||||
function handleInitialize() {
|
||||
setStatsCd("");
|
||||
setVrfcTrgtNm("");
|
||||
setSearchParams({
|
||||
vrfcMthdCd: activeTab,
|
||||
statsCd: "",
|
||||
vrfcTrgtNm: "",
|
||||
});
|
||||
}
|
||||
|
||||
const handleSave = () => {
|
||||
console.log("저장");
|
||||
};
|
||||
function handleTabChange(value: string) {
|
||||
const newTab = value as TabValue;
|
||||
setActiveTab(newTab);
|
||||
setSearchParams({
|
||||
vrfcMthdCd: newTab,
|
||||
statsCd,
|
||||
vrfcTrgtNm,
|
||||
});
|
||||
}
|
||||
|
||||
const handleDelete = () => {
|
||||
console.log("등록");
|
||||
};
|
||||
|
||||
// 행 클릭 이벤트 핸들러
|
||||
const handleRowClick = (rowData: Record<string, string | number>) => {
|
||||
function handleRowClick(rowData: Record<string, string | number>) {
|
||||
console.log("클릭한 행 데이터:", rowData);
|
||||
// 여기에 필요한 로직 추가 (예: 상세 정보 표시, 수정 모달 열기 등)
|
||||
};
|
||||
}
|
||||
|
||||
function handleSubmit(e: React.FormEvent) {
|
||||
e.preventDefault();
|
||||
handleSearch();
|
||||
}
|
||||
|
||||
return (
|
||||
<Tabs defaultValue="HB">
|
||||
{/* 탭 리스트 */}
|
||||
<Tabs
|
||||
defaultValue="HB"
|
||||
value={activeTab}
|
||||
onValueChange={handleTabChange}
|
||||
>
|
||||
<TabsList>
|
||||
<TabsTrigger
|
||||
value="HB"
|
||||
className="!px-[2rem] !py-[0.8rem] !text-[1.2rem]"
|
||||
>
|
||||
H-B
|
||||
</TabsTrigger>
|
||||
<TabsTrigger
|
||||
value="IMR"
|
||||
className="!px-[2rem] !py-[0.8rem] !text-[1.2rem]"
|
||||
>
|
||||
I-MR
|
||||
</TabsTrigger>
|
||||
<TabsTrigger
|
||||
value="VALIDATION"
|
||||
className="!px-[2rem] !py-[0.8rem] !text-[1.2rem]"
|
||||
>
|
||||
Validation
|
||||
</TabsTrigger>
|
||||
{Object.entries(TAB_CONFIG).map(([key, config]) => (
|
||||
<TabsTrigger
|
||||
key={key}
|
||||
value={config.value}
|
||||
className="!px-[2rem] !py-[0.8rem] !text-[1.2rem]"
|
||||
>
|
||||
{config.label}
|
||||
</TabsTrigger>
|
||||
))}
|
||||
</TabsList>
|
||||
|
||||
<div className="card card-border !mx-0">
|
||||
<div className="flex items-center gap-4">
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div className="flex items-center gap-4">
|
||||
<Label className="whitespace-nowrap px-4 text-label">
|
||||
통계항목
|
||||
</Label>
|
||||
<Select value={statsItm} onValueChange={setStatsItm}>
|
||||
<SelectTrigger className="w-[16rem]">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="통계항목">
|
||||
통계항목
|
||||
</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<Label className="whitespace-nowrap px-4 text-label">
|
||||
통계항목
|
||||
</Label>
|
||||
<CodeSelect
|
||||
upCd="STITEM"
|
||||
value={statsCd}
|
||||
onValueChange={setStatsCd}
|
||||
placeholder="통계항목"
|
||||
className="w-[16rem]"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-4">
|
||||
<Label className="whitespace-nowrap px-4 text-label">
|
||||
검증명
|
||||
</Label>
|
||||
<Input
|
||||
value={vrfcNm}
|
||||
onChange={(e) => setVrfcNm(e.target.value)}
|
||||
placeholder="검증명"
|
||||
className="w-[20rem]"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<Label className="whitespace-nowrap px-4 text-label">
|
||||
검증명
|
||||
</Label>
|
||||
<Input
|
||||
value={vrfcTrgtNm}
|
||||
onChange={(e) => setVrfcTrgtNm(e.target.value)}
|
||||
placeholder="검증명"
|
||||
className="w-[20rem]"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="ml-auto flex gap-2">
|
||||
<Button
|
||||
color="green"
|
||||
className="h-[3.6rem] w-[80px]"
|
||||
onClick={handleSearch}
|
||||
>
|
||||
조회
|
||||
</Button>
|
||||
<Button
|
||||
color="gray"
|
||||
className="h-[3.6rem] w-[80px]"
|
||||
onClick={handleInitialize}
|
||||
>
|
||||
초기화
|
||||
</Button>
|
||||
<div className="ml-auto flex gap-2">
|
||||
<Button
|
||||
type="submit"
|
||||
color="green"
|
||||
className="h-[3.6rem] w-[80px]"
|
||||
>
|
||||
조회
|
||||
</Button>
|
||||
<Button
|
||||
type="button"
|
||||
color="gray"
|
||||
className="h-[3.6rem] w-[80px]"
|
||||
onClick={handleInitialize}
|
||||
>
|
||||
초기화
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{/* H-B 탭 콘텐츠 */}
|
||||
<TabsContent value="HB">
|
||||
<DataGrid
|
||||
columnInfo={hbArticleColumnInfo}
|
||||
rowData={hbRowData}
|
||||
setRowData={setHbRowData}
|
||||
onRowClick={handleRowClick}
|
||||
/>
|
||||
</TabsContent>
|
||||
|
||||
{/* I-MR 탭 콘텐츠 */}
|
||||
<TabsContent value="IMR">
|
||||
<DataGrid
|
||||
columnInfo={imrArticleColumnInfo}
|
||||
rowData={imrRowData}
|
||||
setRowData={setImrRowData}
|
||||
onRowClick={handleRowClick}
|
||||
/>
|
||||
</TabsContent>
|
||||
|
||||
{/* Validation 탭 콘텐츠 */}
|
||||
<TabsContent value="VALIDATION">
|
||||
<DataGrid
|
||||
columnInfo={validationArticleColumnInfo}
|
||||
rowData={validationRowData}
|
||||
setRowData={setValidationRowData}
|
||||
onRowClick={handleRowClick}
|
||||
/>
|
||||
</TabsContent>
|
||||
{Object.entries(TAB_CONFIG).map(([key, config]) => (
|
||||
<TabsContent key={key} value={config.value}>
|
||||
<DataGrid
|
||||
columnInfo={columnInfo}
|
||||
rowData={rowData}
|
||||
setRowData={() => {}}
|
||||
onRowClick={handleRowClick}
|
||||
isExcelImport={false}
|
||||
/>
|
||||
</TabsContent>
|
||||
))}
|
||||
</Tabs>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
export default VerificationArticleManagement;
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
import { client } from "@/shared/api";
|
||||
import { ENDPOINT } from "@/shared/config";
|
||||
|
||||
import type {
|
||||
VerificationTargetManagementService,
|
||||
VerificationTargetManagementSearchParams,
|
||||
VerificationTargetManagementListApiResponse,
|
||||
VerificationTargetManagementDetailApiResponse,
|
||||
VerificationTargetManagementSaveRequest,
|
||||
VerificationTargetManagementSaveApiResponse,
|
||||
VerificationTargetManagementUpdateRequest,
|
||||
VerificationTargetManagementUpdateApiResponse,
|
||||
VerificationTargetManagementDeleteApiResponse,
|
||||
} from "../model/verification-target-management-interface";
|
||||
|
||||
export class VerificationTargetManagementApiService implements VerificationTargetManagementService {
|
||||
/**
|
||||
* 검증 대상 목록 조회
|
||||
* @param params 검색 조건 (vrfcMthdCd, statsCd, tblNm, colNm, vrfcTrgtNm, useYn, page, size, sort)
|
||||
*/
|
||||
public async getVerificationTargetManagementList(
|
||||
params: VerificationTargetManagementSearchParams,
|
||||
): Promise<VerificationTargetManagementListApiResponse> {
|
||||
const response =
|
||||
await client.get<VerificationTargetManagementListApiResponse>(
|
||||
`${ENDPOINT.STATVERIFY_SERVICE.VRFCTGT_MNG}`,
|
||||
{ params },
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 검증 대상 상세 조회
|
||||
* @param vrfcTrgtSn 검증 대상 일련번호
|
||||
*/
|
||||
public async getVerificationTargetManagementById(
|
||||
vrfcTrgtSn: number,
|
||||
): Promise<VerificationTargetManagementDetailApiResponse> {
|
||||
const response =
|
||||
await client.get<VerificationTargetManagementDetailApiResponse>(
|
||||
`${ENDPOINT.STATVERIFY_SERVICE.VRFCTGT_MNG}/${vrfcTrgtSn}`,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 검증 대상 등록
|
||||
* @param request 등록 요청 데이터
|
||||
*/
|
||||
public async saveVerificationTargetManagement(
|
||||
request: VerificationTargetManagementSaveRequest,
|
||||
): Promise<VerificationTargetManagementSaveApiResponse> {
|
||||
const response =
|
||||
await client.post<VerificationTargetManagementSaveApiResponse>(
|
||||
`${ENDPOINT.STATVERIFY_SERVICE.VRFCTGT_MNG}`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 검증 대상 수정
|
||||
* @param vrfcTrgtSn 검증 대상 일련번호
|
||||
* @param request 수정 요청 데이터
|
||||
*/
|
||||
public async updateVerificationTargetManagement(
|
||||
vrfcTrgtSn: number,
|
||||
request: VerificationTargetManagementUpdateRequest,
|
||||
): Promise<VerificationTargetManagementUpdateApiResponse> {
|
||||
const response =
|
||||
await client.put<VerificationTargetManagementUpdateApiResponse>(
|
||||
`${ENDPOINT.STATVERIFY_SERVICE.VRFCTGT_MNG}/${vrfcTrgtSn}`,
|
||||
request,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 검증 대상 삭제
|
||||
* @param vrfcTrgtSn 검증 대상 일련번호
|
||||
*/
|
||||
public async deleteVerificationTargetManagement(
|
||||
vrfcTrgtSn: number,
|
||||
): Promise<VerificationTargetManagementDeleteApiResponse> {
|
||||
const response =
|
||||
await client.delete<VerificationTargetManagementDeleteApiResponse>(
|
||||
`${ENDPOINT.STATVERIFY_SERVICE.VRFCTGT_MNG}/${vrfcTrgtSn}`,
|
||||
);
|
||||
return response.data;
|
||||
}
|
||||
}
|
||||
|
||||
// 통합 인스턴스 수출
|
||||
export const verificationTargetManagementApi =
|
||||
new VerificationTargetManagementApiService();
|
||||
@@ -1,27 +1,26 @@
|
||||
import { ValueType } from "realgrid";
|
||||
import type { ColumnInfo } from "@rsone/components";
|
||||
|
||||
/** H-B 탭 그리드 컬럼 설정 */
|
||||
export const hbArticleColumnInfo: ColumnInfo = {
|
||||
columns: [
|
||||
{
|
||||
name: "statsItmNm",
|
||||
fieldName: "statsItmNm",
|
||||
header: { text: "통계 항목" },
|
||||
name: "statsNm",
|
||||
fieldName: "statsNm",
|
||||
header: { text: "통계항목" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "vrfcItmNm",
|
||||
fieldName: "vrfcItmNm",
|
||||
header: { text: "검증 항목" },
|
||||
name: "vrfcTrgtNm",
|
||||
fieldName: "vrfcTrgtNm",
|
||||
header: { text: "검증명" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "tblNm",
|
||||
fieldName: "tblNm",
|
||||
header: { text: "테이블" },
|
||||
header: { text: "테이블명" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
@@ -33,8 +32,8 @@ export const hbArticleColumnInfo: ColumnInfo = {
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "percentileVal",
|
||||
fieldName: "percentileVal",
|
||||
name: "pctlCrtrVl",
|
||||
fieldName: "pctlCrtrVl",
|
||||
header: { text: "Percentile" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -42,8 +41,8 @@ export const hbArticleColumnInfo: ColumnInfo = {
|
||||
dataFormat: "#,##0.##",
|
||||
},
|
||||
{
|
||||
name: "aVal",
|
||||
fieldName: "aVal",
|
||||
name: "scopCntCntVl",
|
||||
fieldName: "scopCntCntVl",
|
||||
header: { text: "A" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -51,8 +50,8 @@ export const hbArticleColumnInfo: ColumnInfo = {
|
||||
dataFormat: "#,##0.###",
|
||||
},
|
||||
{
|
||||
name: "cVal",
|
||||
fieldName: "cVal",
|
||||
name: "thrsCntVl",
|
||||
fieldName: "thrsCntVl",
|
||||
header: { text: "C" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -60,8 +59,8 @@ export const hbArticleColumnInfo: ColumnInfo = {
|
||||
dataFormat: "#,##0.###",
|
||||
},
|
||||
{
|
||||
name: "regNm",
|
||||
fieldName: "regNm",
|
||||
name: "rgtrNm",
|
||||
fieldName: "rgtrNm",
|
||||
header: { text: "등록자" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -69,37 +68,36 @@ export const hbArticleColumnInfo: ColumnInfo = {
|
||||
{
|
||||
name: "regDt",
|
||||
fieldName: "regDt",
|
||||
header: { text: "등록일" },
|
||||
header: { text: "등록일시" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
],
|
||||
columnLayout: [
|
||||
"statsItmNm",
|
||||
"vrfcItmNm",
|
||||
"statsNm",
|
||||
"vrfcTrgtNm",
|
||||
"tblNm",
|
||||
"colNm",
|
||||
"percentileVal",
|
||||
"aVal",
|
||||
"cVal",
|
||||
"regNm",
|
||||
"pctlCrtrVl",
|
||||
"scopCntCntVl",
|
||||
"thrsCntVl",
|
||||
"rgtrNm",
|
||||
"regDt",
|
||||
],
|
||||
};
|
||||
|
||||
/** I-MR 탭 그리드 컬럼 설정 */
|
||||
export const imrArticleColumnInfo: ColumnInfo = {
|
||||
columns: [
|
||||
{
|
||||
name: "statsItmNm",
|
||||
fieldName: "statsItmNm",
|
||||
header: { text: "통계 항목" },
|
||||
name: "statsNm",
|
||||
fieldName: "statsNm",
|
||||
header: { text: "통계항목" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "vrfcNm",
|
||||
fieldName: "vrfcNm",
|
||||
name: "vrfcTrgtNm",
|
||||
fieldName: "vrfcTrgtNm",
|
||||
header: { text: "검증명" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -119,8 +117,17 @@ export const imrArticleColumnInfo: ColumnInfo = {
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "regNm",
|
||||
fieldName: "regNm",
|
||||
name: "ipcrCntVl",
|
||||
fieldName: "ipcrCntVl",
|
||||
header: { text: "μ" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
valueType: ValueType.NUMBER,
|
||||
dataFormat: "#,##0.###",
|
||||
},
|
||||
{
|
||||
name: "rgtrNm",
|
||||
fieldName: "rgtrNm",
|
||||
header: { text: "등록자" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -128,34 +135,34 @@ export const imrArticleColumnInfo: ColumnInfo = {
|
||||
{
|
||||
name: "regDt",
|
||||
fieldName: "regDt",
|
||||
header: { text: "등록일" },
|
||||
header: { text: "등록일시" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
],
|
||||
columnLayout: ["statsItmNm", "vrfcNm", "tblNm", "colNm", "regNm", "regDt"],
|
||||
columnLayout: [
|
||||
"statsNm",
|
||||
"vrfcTrgtNm",
|
||||
"tblNm",
|
||||
"colNm",
|
||||
"ipcrCntVl",
|
||||
"rgtrNm",
|
||||
"regDt",
|
||||
],
|
||||
};
|
||||
|
||||
/** Validation 탭 그리드 컬럼 설정 */
|
||||
export const validationArticleColumnInfo: ColumnInfo = {
|
||||
columns: [
|
||||
{
|
||||
name: "no",
|
||||
fieldName: "no",
|
||||
header: { text: "순번" },
|
||||
name: "statsNm",
|
||||
fieldName: "statsNm",
|
||||
header: { text: "통계항목" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "statsItmNm",
|
||||
fieldName: "statsItmNm",
|
||||
header: { text: "통계 항목" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "vrfcNm",
|
||||
fieldName: "vrfcNm",
|
||||
name: "vrfcTrgtNm",
|
||||
fieldName: "vrfcTrgtNm",
|
||||
header: { text: "검증명" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
@@ -175,35 +182,19 @@ export const validationArticleColumnInfo: ColumnInfo = {
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "cmpTblNm",
|
||||
fieldName: "cmpTblNm",
|
||||
header: { text: "비교 테이블명" },
|
||||
name: "rgtrNm",
|
||||
fieldName: "rgtrNm",
|
||||
header: { text: "등록자" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "cmpColNm",
|
||||
fieldName: "cmpColNm",
|
||||
header: { text: "비교 컬럼명" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
{
|
||||
name: "bscRul",
|
||||
fieldName: "bscRul",
|
||||
header: { text: "기본규칙" },
|
||||
name: "regDt",
|
||||
fieldName: "regDt",
|
||||
header: { text: "등록일시" },
|
||||
editable: false,
|
||||
sortdisable: false,
|
||||
},
|
||||
],
|
||||
columnLayout: [
|
||||
"no",
|
||||
"statsItmNm",
|
||||
"vrfcNm",
|
||||
"tblNm",
|
||||
"colNm",
|
||||
"cmpTblNm",
|
||||
"cmpColNm",
|
||||
"bscRul",
|
||||
],
|
||||
columnLayout: ["statsNm", "vrfcTrgtNm", "tblNm", "colNm", "rgtrNm", "regDt"],
|
||||
};
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
import type { PageableList } from "@/shared/model";
|
||||
import type { ApiResponse } from "./statistics-interface";
|
||||
|
||||
// 검증 대상 관리 응답 DTO
|
||||
export interface VerificationTargetManagementResponse {
|
||||
vrfcTrgtSn: number; // 검증 대상 일련번호
|
||||
vrfcMthdCd: string; // 검증 방법 코드
|
||||
vrfcMthdNm: string; // 검증 방법 명
|
||||
statsCd: string; // 통계 코드
|
||||
statsNm: string; // 통계 항목 명
|
||||
schmNm: string; // 스키마 명
|
||||
tblNm: string; // 테이블 명
|
||||
colNm: string; // 컬럼 명
|
||||
pkColNm: string; // pk 컬럼 명
|
||||
ipcrCntVl: number | null; // 중요도 개수 값 (mu)
|
||||
pctlCrtrVl: number | null; // 백분위 기준 값 (percentile)
|
||||
scopCntCntVl: number | null; // 범위 조정 개수 값 (A)
|
||||
thrsCntVl: number | null; // 임계 개수 값 (C)
|
||||
useYn: string; // 사용 여부
|
||||
vrfcTrgtNm: string; // 검증대상명
|
||||
rgtr: string | null; // 등록자 ID
|
||||
regDt: string | null; // 등록 일시
|
||||
mdfr: string | null; // 수정자 ID
|
||||
rgtrNm: string | null; // 등록자명
|
||||
mdfrNm: string | null; // 수정자명
|
||||
mdfcn: string | null; // 수정 일시
|
||||
}
|
||||
|
||||
// 검증 대상 관리 검색 DTO
|
||||
export interface VerificationTargetManagementSearchParams {
|
||||
vrfcMthdCd?: string; // 검증 방법 코드
|
||||
statsCd?: string; // 통계 코드
|
||||
tblNm?: string; // 테이블 명
|
||||
colNm?: string; // 컬럼 명
|
||||
vrfcTrgtNm?: string; // 검증대상명
|
||||
useYn?: string; // 사용 여부
|
||||
page?: number; // 페이지 번호 (0부터 시작)
|
||||
size?: number; // 페이지 크기
|
||||
sort?: string; // 정렬 조건 (예: "vrfcTrgtSn,desc")
|
||||
}
|
||||
|
||||
// 검증 대상 관리 저장 요청 DTO
|
||||
export interface VerificationTargetManagementSaveRequest {
|
||||
vrfcMthdCd: string; // 검증 방법 코드 (필수, 최대 10자)
|
||||
statsCd: string; // 통계 코드 (필수, 최대 10자)
|
||||
schmNm: string; // 스키마 명 (필수, 최대 150자)
|
||||
tblNm: string; // 테이블 명 (필수, 최대 150자)
|
||||
colNm: string; // 컬럼 명 (필수, 최대 150자)
|
||||
pkColNm: string; // pk 컬럼 명 (필수, 최대 150자)
|
||||
ipcrCntVl?: number | null; // 중요도 개수 값 (mu)
|
||||
pctlCrtrVl?: number | null; // 백분위 기준 값 (percentile)
|
||||
scopCntCntVl?: number | null; // 범위 조정 개수 값 (A)
|
||||
thrsCntVl?: number | null; // 임계 개수 값 (C)
|
||||
useYn?: string; // 사용 여부 (Y/N, 최대 1자)
|
||||
vrfcTrgtNm?: string; // 검증대상명 (최대 150자)
|
||||
}
|
||||
|
||||
// 검증 대상 관리 수정 요청 DTO
|
||||
export interface VerificationTargetManagementUpdateRequest {
|
||||
vrfcMthdCd: string; // 검증 방법 코드 (필수, 최대 10자)
|
||||
statsCd: string; // 통계 코드 (필수, 최대 10자)
|
||||
schmNm: string; // 스키마 명 (필수, 최대 150자)
|
||||
tblNm: string; // 테이블 명 (필수, 최대 150자)
|
||||
colNm: string; // 컬럼 명 (필수, 최대 150자)
|
||||
pkColNm: string; // pk 컬럼 명 (필수, 최대 150자)
|
||||
ipcrCntVl?: number | null; // 중요도 개수 값 (mu)
|
||||
pctlCrtrVl?: number | null; // 백분위 기준 값 (percentile)
|
||||
scopCntCntVl?: number | null; // 범위 조정 개수 값 (A)
|
||||
thrsCntVl?: number | null; // 임계 개수 값 (C)
|
||||
useYn?: string; // 사용 여부 (Y/N, 최대 1자)
|
||||
vrfcTrgtNm?: string; // 검증대상명 (최대 150자)
|
||||
}
|
||||
|
||||
// API 응답 타입
|
||||
export type VerificationTargetManagementListApiResponse =
|
||||
PageableList<VerificationTargetManagementResponse>;
|
||||
export type VerificationTargetManagementDetailApiResponse =
|
||||
ApiResponse<VerificationTargetManagementResponse>;
|
||||
export type VerificationTargetManagementSaveApiResponse = ApiResponse<number>;
|
||||
export type VerificationTargetManagementUpdateApiResponse = ApiResponse<number>;
|
||||
export type VerificationTargetManagementDeleteApiResponse = ApiResponse<number>;
|
||||
|
||||
// 서비스 인터페이스
|
||||
export interface VerificationTargetManagementService {
|
||||
getVerificationTargetManagementList(
|
||||
params: VerificationTargetManagementSearchParams,
|
||||
): Promise<VerificationTargetManagementListApiResponse>;
|
||||
|
||||
getVerificationTargetManagementById(
|
||||
vrfcTrgtSn: number,
|
||||
): Promise<VerificationTargetManagementDetailApiResponse>;
|
||||
|
||||
saveVerificationTargetManagement(
|
||||
request: VerificationTargetManagementSaveRequest,
|
||||
): Promise<VerificationTargetManagementSaveApiResponse>;
|
||||
|
||||
updateVerificationTargetManagement(
|
||||
vrfcTrgtSn: number,
|
||||
request: VerificationTargetManagementUpdateRequest,
|
||||
): Promise<VerificationTargetManagementUpdateApiResponse>;
|
||||
|
||||
deleteVerificationTargetManagement(
|
||||
vrfcTrgtSn: number,
|
||||
): Promise<VerificationTargetManagementDeleteApiResponse>;
|
||||
}
|
||||
@@ -3,73 +3,76 @@ import { PROXY_HOST } from "./env";
|
||||
export const BASE_URL = `${PROXY_HOST}/server`;
|
||||
|
||||
export const ENDPOINT = {
|
||||
ATTACH_SERVICE: {
|
||||
TUS_UPLOAD: "/attach-service/api/v1/tus/upload",
|
||||
EDITOR_UPLOAD: "/attach-service/api/v1/upload/editor",
|
||||
IMAGES: "/attach-service/api/v1/images",
|
||||
MOVIE_THUMBNAIL: "/attach-service/api/v1/movie/thumbnail",
|
||||
ATTACHMENTS: "/attach-service/api/v1/atfl/attachments",
|
||||
DOWNLOAD: "/attach-service/api/v1/atflcd/download",
|
||||
STREAM_VIDEO: "/attach-service/api/v1/stream/video",
|
||||
},
|
||||
USER_SERVICE: {
|
||||
LOGIN: "/user-service/login",
|
||||
USERS: "/user-service/api/v1/users",
|
||||
SILENT_REFRESH: "/user-service/api/v1/users/token/refresh",
|
||||
AUTHORIZATIONS: "/user-service/api/v1/authorizations",
|
||||
ROLE_AUTHORIZATIONS: "/user-service/api/v1/role-authorizations",
|
||||
ROLES: "/user-service/api/v1/roles",
|
||||
LOGINLOG: "/user-service/api/v1/login-logs",
|
||||
PRIVACYLOG: "/user-service//api/v1/prvc-inq-logs",
|
||||
},
|
||||
CMS_SERVICE: {
|
||||
DASHBOARD: "/cms-service/api/v1/dashboard",
|
||||
SITES: "/cms-service/api/v1/sites",
|
||||
IPS: "/cms-service/api/v1/site-ips",
|
||||
DOMAINS: "/cms-service/api/v1/site-dmns",
|
||||
POSTINGS: "/cms-service/api/v1/site-pstgs",
|
||||
CODE: "/cms-service/api/v1/code/cache",
|
||||
MENUS: "/cms-service/api/v1/menus",
|
||||
MENU_ROLES: "/cms-service/api/v1/menu-roles",
|
||||
MENU_AUTHRTS: "/cms-service/api/v1/menu-authrts",
|
||||
MENU_TEMPORARY_STORAGE: "/cms-service/api/v1/menu-tmpr-strg",
|
||||
MENU_HISTORY: "/cms-service/api/v1/menu-hstry",
|
||||
CONTENTS: "/cms-service/api/v1/contents",
|
||||
CONTENTS_DETAILS: "/cms-service/api/v1/contents-details",
|
||||
ORGANIZATIONS: "/cms-service/api/v1/ognzs",
|
||||
USER_ORGANIZATION: "/cms-service/api/v1/user-ognz",
|
||||
IMAGES: "/cms-service/api/v1/images",
|
||||
BANNERS: "/cms-service/api/v1/bnrs",
|
||||
TEMPLATE: "/cms-service/api/v1/tmplt",
|
||||
TERMS: "/cms-service/api/v1/trms",
|
||||
LWPO_CODE: "/cms-service/api/v1/lwpo-cds",
|
||||
UP_CODE: "/cms-service/api/v1/up-codes",
|
||||
POPUPS: "/cms-service/api/v1/popups",
|
||||
SCHEDULES: "/cms-service/api/v1/schdls",
|
||||
SURVEY: "/cms-service/api/v1/srvy",
|
||||
SURVEY_QUESTION: "/cms-service/api/v1/srvy-qitem",
|
||||
SURVEY_ARTICLE: "/cms-service/api/v1/srvy-artcl",
|
||||
ZIPS: "/cms-service/api/v1/zips",
|
||||
GROUPS: "/cms-service/api/v1/groups",
|
||||
GROUP_USERS: "/cms-service/api/v1/group-users",
|
||||
MANAGER_IP: "/cms-service/api/v1/mgrip",
|
||||
APILOG: "/cms-service/api/v1/api-logs",
|
||||
SITE_AUTHORITY: "/cms-service/api/v1/site-authrt",
|
||||
CONNECTION_LOG: "/cms-service/api/v1/cntnlog",
|
||||
},
|
||||
BOARD_SERVICE: {
|
||||
BBS: "/board-service/api/v1/bbs",
|
||||
BBS_TEMPLATES: "/board-service/api/v1/bbsTmplt",
|
||||
POSTS: "/board-service/api/v1/posts",
|
||||
POSTS_COMMENTS: "/board-service/api/v1/posts-cmnts",
|
||||
POST_EVALUATION: "/board-service/api/v1/pstEvl",
|
||||
},
|
||||
ST_SERVICE: {
|
||||
COMMON: "/st-management-service/api/v1/common",
|
||||
INPUT: "/st-input-service/api/v1/input",
|
||||
REVIEW: "/st-management-service/api/v1/review",
|
||||
INPUTCOMMON: "/st-input-service/api/v1/common",
|
||||
}
|
||||
ATTACH_SERVICE: {
|
||||
TUS_UPLOAD: "/attach-service/api/v1/tus/upload",
|
||||
EDITOR_UPLOAD: "/attach-service/api/v1/upload/editor",
|
||||
IMAGES: "/attach-service/api/v1/images",
|
||||
MOVIE_THUMBNAIL: "/attach-service/api/v1/movie/thumbnail",
|
||||
ATTACHMENTS: "/attach-service/api/v1/atfl/attachments",
|
||||
DOWNLOAD: "/attach-service/api/v1/atflcd/download",
|
||||
STREAM_VIDEO: "/attach-service/api/v1/stream/video",
|
||||
},
|
||||
USER_SERVICE: {
|
||||
LOGIN: "/user-service/login",
|
||||
USERS: "/user-service/api/v1/users",
|
||||
SILENT_REFRESH: "/user-service/api/v1/users/token/refresh",
|
||||
AUTHORIZATIONS: "/user-service/api/v1/authorizations",
|
||||
ROLE_AUTHORIZATIONS: "/user-service/api/v1/role-authorizations",
|
||||
ROLES: "/user-service/api/v1/roles",
|
||||
LOGINLOG: "/user-service/api/v1/login-logs",
|
||||
PRIVACYLOG: "/user-service//api/v1/prvc-inq-logs",
|
||||
},
|
||||
CMS_SERVICE: {
|
||||
DASHBOARD: "/cms-service/api/v1/dashboard",
|
||||
SITES: "/cms-service/api/v1/sites",
|
||||
IPS: "/cms-service/api/v1/site-ips",
|
||||
DOMAINS: "/cms-service/api/v1/site-dmns",
|
||||
POSTINGS: "/cms-service/api/v1/site-pstgs",
|
||||
CODE: "/cms-service/api/v1/code/cache",
|
||||
MENUS: "/cms-service/api/v1/menus",
|
||||
MENU_ROLES: "/cms-service/api/v1/menu-roles",
|
||||
MENU_AUTHRTS: "/cms-service/api/v1/menu-authrts",
|
||||
MENU_TEMPORARY_STORAGE: "/cms-service/api/v1/menu-tmpr-strg",
|
||||
MENU_HISTORY: "/cms-service/api/v1/menu-hstry",
|
||||
CONTENTS: "/cms-service/api/v1/contents",
|
||||
CONTENTS_DETAILS: "/cms-service/api/v1/contents-details",
|
||||
ORGANIZATIONS: "/cms-service/api/v1/ognzs",
|
||||
USER_ORGANIZATION: "/cms-service/api/v1/user-ognz",
|
||||
IMAGES: "/cms-service/api/v1/images",
|
||||
BANNERS: "/cms-service/api/v1/bnrs",
|
||||
TEMPLATE: "/cms-service/api/v1/tmplt",
|
||||
TERMS: "/cms-service/api/v1/trms",
|
||||
LWPO_CODE: "/cms-service/api/v1/lwpo-cds",
|
||||
UP_CODE: "/cms-service/api/v1/up-codes",
|
||||
POPUPS: "/cms-service/api/v1/popups",
|
||||
SCHEDULES: "/cms-service/api/v1/schdls",
|
||||
SURVEY: "/cms-service/api/v1/srvy",
|
||||
SURVEY_QUESTION: "/cms-service/api/v1/srvy-qitem",
|
||||
SURVEY_ARTICLE: "/cms-service/api/v1/srvy-artcl",
|
||||
ZIPS: "/cms-service/api/v1/zips",
|
||||
GROUPS: "/cms-service/api/v1/groups",
|
||||
GROUP_USERS: "/cms-service/api/v1/group-users",
|
||||
MANAGER_IP: "/cms-service/api/v1/mgrip",
|
||||
APILOG: "/cms-service/api/v1/api-logs",
|
||||
SITE_AUTHORITY: "/cms-service/api/v1/site-authrt",
|
||||
CONNECTION_LOG: "/cms-service/api/v1/cntnlog",
|
||||
},
|
||||
BOARD_SERVICE: {
|
||||
BBS: "/board-service/api/v1/bbs",
|
||||
BBS_TEMPLATES: "/board-service/api/v1/bbsTmplt",
|
||||
POSTS: "/board-service/api/v1/posts",
|
||||
POSTS_COMMENTS: "/board-service/api/v1/posts-cmnts",
|
||||
POST_EVALUATION: "/board-service/api/v1/pstEvl",
|
||||
},
|
||||
ST_SERVICE: {
|
||||
COMMON: "/st-management-service/api/v1/common",
|
||||
INPUT: "/st-input-service/api/v1/input",
|
||||
REVIEW: "/st-management-service/api/v1/review",
|
||||
INPUTCOMMON: "/st-input-service/api/v1/common",
|
||||
},
|
||||
STATVERIFY_SERVICE: {
|
||||
VRFCTGT_MNG: "/statverify-service/api/v1/vrfc-trgt-mng",
|
||||
},
|
||||
};
|
||||
|
||||
export const JWT_EXPIRATION_TIME = 1800000;
|
||||
|
||||
Reference in New Issue
Block a user