Files
hjjeong c9adfd7327 개발관리>설계변경 리스트 메뉴 신설 (PR-C) — wace partMng 1:1 이식
backend (M5, read-only):
- devEoHistoryService: list + getByObjid
- partMngHistList SQL 1:1 (NVL→COALESCE, PART_MNG.OBJID bigint cast, CODE_NAME→LEFT JOIN comm_code)
- 동적 필터 10종 (Year/contract_objid/unit_code/part_no/part_name/change_option/eo_start~end/change_type/part_type/writer_id)
- 신규등록 제외 가드: NOT (HIS_STATUS='DEPLOY' AND CHANGE_TYPE IS NULL AND REVISION='RE') + BOM_STATUS='deploy'
- 품번변경(CHANGE_OPTION=0001790) 'A->B' 머지 CASE (part_no_disp/part_name_disp/revision_disp)

frontend (M5):
- change-list/page.tsx: 16셀 그리드 + 검색 8필드 + 페이징
- PartHisDetailDialog: 모든 필드 disabled, 4 섹션 (EO/프로젝트/PART/수량)
- AdminPageRenderer dynamic 임포트 + 기존 menu_info URL 그대로 사용

개발관리 5개 메뉴 (M1~M5) baseline 완료.

본 PR 제외 (별 PR): writer SmartSelect, change_type/change_option comm_code 그룹 SmartSelect (그룹 ID 확정 후)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:27:37 +09:00

107 lines
3.0 KiB
TypeScript

import { apiClient } from "./client";
// ============================================================
// 개발관리 설계변경 리스트 (M5, read-only) — wace partMngHistList 1:1
// 라우트: /api/development/eo-history/*
// ============================================================
export interface EoHistoryListFilter {
Year?: string;
contract_objid?: string;
unit_code?: string;
part_no?: string;
part_name?: string;
change_option?: string;
eo_start_date?: string;
eo_end_date?: string;
change_type?: string;
part_type?: string;
writer_id?: string;
page?: number;
page_size?: number;
}
export interface EoHistoryRow {
objid: string;
eo_no: string | null;
year: string | null;
project_no: string | null;
project_name: string | null;
unit_name: string | null;
parent_part_info: string | null;
part_no_disp: string | null;
part_name_disp: string | null;
part_no: string | null;
part_name: string | null;
bom_qty_status: string | null;
qty: string | null;
qty_temp: string | null;
change_type: string | null;
change_type_name: string | null;
change_option: string | null;
change_option_name: string | null;
revision_disp: string | null;
revision: string | null;
eo_date: string | null;
part_type: string | null;
part_type_name: string | null;
writer: string | null;
writer_name: string | null;
his_reg_date_title: string | null;
bom_deploy_date: string | null;
bom_deploy_date_title: string | null;
}
export interface EoHistoryListResponse {
rows: EoHistoryRow[];
total: number;
page: number;
pageSize: number;
}
export interface EoHistoryDetail extends EoHistoryRow {
// raw PART_MNG_HISTORY 추가 필드
product_mgmt_objid?: string | null;
upg_no?: string | null;
unit?: string | null;
spec?: string | null;
material?: string | null;
weight?: string | null;
remark?: string | null;
es_spec?: string | null;
ms_spec?: string | null;
design_apply_point?: string | null;
management_flag?: string | null;
status?: string | null;
reg_date?: string | null;
is_last?: string | null;
sourcing_code?: string | null;
sub_material?: string | null;
thickness?: string | null;
width?: string | null;
height?: string | null;
out_diameter?: string | null;
in_diameter?: string | null;
length?: string | null;
supply_code?: string | null;
contract_objid?: string | null;
maker?: string | null;
his_status?: string | null;
bom_status?: string | null;
heat_treatment_hardness?: string | null;
heat_treatment_method?: string | null;
surface_treatment?: string | null;
customer_project_name?: string | null;
}
export const devEoHistoryApi = {
async list(filter: EoHistoryListFilter = {}): Promise<EoHistoryListResponse> {
const res = await apiClient.get("/development/eo-history/list", { params: filter });
return res.data?.data as EoHistoryListResponse;
},
async detail(objid: string): Promise<EoHistoryDetail | null> {
const res = await apiClient.get(`/development/eo-history/${objid}`);
return res.data?.data ?? null;
},
};