개발관리·생산관리 — 3D/2D/PDF 카운트 컬럼을 폴더 아이콘으로 통일
사용자 보고: "품명/3D 컬럼이 좁아서 겹쳐 보임 + 폴더 모양(파랑/투명)으로 표시해줘"
운영판 wace 견적현황·partMng 폴더 아이콘 패턴 1:1 적용:
- 값 > 0 → 파란 폴더 (fill-[#1a73e8])
- 값 = 0 → 흰색 폴더 (투명 효과, fill-white + muted text)
수정:
- app/(main)/COMPANY_16/development/part-regist/page.tsx — 3D/2D/PDF (60→70px, center, folder)
- app/(main)/COMPANY_16/development/part-search/page.tsx — 3D/2D/PDF (60→70px, center, folder)
- app/(main)/COMPANY_16/development/ebom-search/page.tsx — 3D/2D/PDF (60→70px width 통일)
- components/development/BomReportTreeDialog.tsx — "Y/공백" → FolderCell
- components/production/MbomDetailDialog.tsx — "Y/공백" → FolderCell
sales/{order,sale,revenue}.tsx 의 cu01_cnt 는 "주문서첨부" clip 아이콘이라 별 의미라 미수정.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -148,9 +148,9 @@ export default function EbomSearchPage() {
|
||||
{ key: "pm_part_name", label: "품명", minWidth: "min-w-[200px]" },
|
||||
{ key: "qty", label: "수량", width: "w-[70px]", align: "right", formatNumber: true },
|
||||
{ key: "p_qty", label: "항목수량", width: "w-[80px]", align: "right", formatNumber: true },
|
||||
{ key: "cu01_cnt", label: "3D", width: "w-[60px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu02_cnt", label: "2D", width: "w-[60px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu03_cnt", label: "PDF", width: "w-[60px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu01_cnt", label: "3D", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu02_cnt", label: "2D", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu03_cnt", label: "PDF", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "material", label: "재료", width: "w-[100px]" },
|
||||
{ key: "heat_treatment_hardness", label: "열처리경도", width: "w-[110px]" },
|
||||
{ key: "heat_treatment_method", label: "열처리방법", width: "w-[110px]" },
|
||||
|
||||
@@ -25,9 +25,9 @@ import { DevPartSelect } from "@/components/development/DevPartSelect";
|
||||
const GRID_COLUMNS: DataGridColumn[] = [
|
||||
{ key: "part_no", label: "품번", width: "w-[140px]", frozen: true },
|
||||
{ key: "part_name", label: "품명", minWidth: "min-w-[220px]" },
|
||||
{ key: "cu01_cnt", label: "3D", width: "w-[60px]", align: "right", formatNumber: true },
|
||||
{ key: "cu02_cnt", label: "2D", width: "w-[60px]", align: "right", formatNumber: true },
|
||||
{ key: "cu03_cnt", label: "PDF", width: "w-[60px]", align: "right", formatNumber: true },
|
||||
{ key: "cu01_cnt", label: "3D", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu02_cnt", label: "2D", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu03_cnt", label: "PDF", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "material", label: "재료", width: "w-[100px]" },
|
||||
{ key: "heat_treatment_hardness", label: "열처리경도", width: "w-[110px]" },
|
||||
{ key: "heat_treatment_method", label: "열처리방법", width: "w-[110px]" },
|
||||
|
||||
@@ -24,9 +24,9 @@ import { DevPartSelect } from "@/components/development/DevPartSelect";
|
||||
const GRID_COLUMNS: DataGridColumn[] = [
|
||||
{ key: "part_no", label: "품번", width: "w-[140px]", frozen: true },
|
||||
{ key: "part_name", label: "품명", minWidth: "min-w-[220px]" },
|
||||
{ key: "cu01_cnt", label: "3D", width: "w-[60px]", align: "right", formatNumber: true },
|
||||
{ key: "cu02_cnt", label: "2D", width: "w-[60px]", align: "right", formatNumber: true },
|
||||
{ key: "cu03_cnt", label: "PDF", width: "w-[60px]", align: "right", formatNumber: true },
|
||||
{ key: "cu01_cnt", label: "3D", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu02_cnt", label: "2D", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "cu03_cnt", label: "PDF", width: "w-[70px]", align: "center", renderType: "folder" },
|
||||
{ key: "material", label: "재료", width: "w-[100px]" },
|
||||
{ key: "heat_treatment_hardness", label: "열처리경도", width: "w-[110px]" },
|
||||
{ key: "heat_treatment_method", label: "열처리방법", width: "w-[110px]" },
|
||||
|
||||
@@ -14,7 +14,7 @@ import {
|
||||
Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter,
|
||||
} from "@/components/ui/dialog";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Loader2, FileSpreadsheet } from "lucide-react";
|
||||
import { Loader2, FileSpreadsheet, Folder } from "lucide-react";
|
||||
import { toast } from "sonner";
|
||||
import { devBomApi, BomReportRow, BomTreeFullRow } from "@/lib/api/devBom";
|
||||
import { cn } from "@/lib/utils";
|
||||
@@ -158,9 +158,9 @@ export function BomReportTreeDialog({ open, onOpenChange, bomReport }: Props) {
|
||||
<td className="border px-2 py-0.5">{r.pm_part_name}</td>
|
||||
<td className="border px-2 py-0.5 text-right">{r.qty}</td>
|
||||
<td className="border px-2 py-0.5 text-right">{r.p_qty}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{Number(r.cu01_cnt ?? 0) > 0 ? "Y" : ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{Number(r.cu02_cnt ?? 0) > 0 ? "Y" : ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{Number(r.cu03_cnt ?? 0) > 0 ? "Y" : ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center"><FolderCell n={r.cu01_cnt} /></td>
|
||||
<td className="border px-2 py-0.5 text-center"><FolderCell n={r.cu02_cnt} /></td>
|
||||
<td className="border px-2 py-0.5 text-center"><FolderCell n={r.cu03_cnt} /></td>
|
||||
<td className="border px-2 py-0.5">{r.material}</td>
|
||||
<td className="border px-2 py-0.5">{r.heat_treatment_hardness}</td>
|
||||
<td className="border px-2 py-0.5">{r.heat_treatment_method}</td>
|
||||
@@ -184,6 +184,16 @@ export function BomReportTreeDialog({ open, onOpenChange, bomReport }: Props) {
|
||||
);
|
||||
}
|
||||
|
||||
function FolderCell({ n }: { n: any }) {
|
||||
const has = Number(n ?? 0) > 0;
|
||||
return (
|
||||
<span className="inline-flex items-center justify-center">
|
||||
<Folder className={cn("w-4 h-4",
|
||||
has ? "fill-[#1a73e8] text-[#1a73e8]" : "fill-white text-muted-foreground/40")} />
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
function MetaRow({ label, value }: { label: string; value: any }) {
|
||||
return (
|
||||
<div className="flex items-baseline gap-2">
|
||||
|
||||
@@ -20,7 +20,7 @@ import {
|
||||
Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter,
|
||||
} from "@/components/ui/dialog";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Loader2 } from "lucide-react";
|
||||
import { Loader2, Folder } from "lucide-react";
|
||||
import { toast } from "sonner";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { mbomApi, MbomDetail, MbomTreeResponse, MbomBomDataType, MbomTreeRow } from "@/lib/api/mbom";
|
||||
@@ -184,9 +184,9 @@ export function MbomDetailDialog({ open, onOpenChange, projectObjid }: Props) {
|
||||
<td className="border px-2 py-0.5">{r.processing_vendor_name ?? r.processing_vendor ?? ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{r.processing_deadline ?? ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{r.grinding_deadline ?? ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{Number(r.cu01_cnt ?? 0) > 0 ? "Y" : ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{Number(r.cu02_cnt ?? 0) > 0 ? "Y" : ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center">{Number(r.cu03_cnt ?? 0) > 0 ? "Y" : ""}</td>
|
||||
<td className="border px-2 py-0.5 text-center"><FolderCell n={r.cu01_cnt} /></td>
|
||||
<td className="border px-2 py-0.5 text-center"><FolderCell n={r.cu02_cnt} /></td>
|
||||
<td className="border px-2 py-0.5 text-center"><FolderCell n={r.cu03_cnt} /></td>
|
||||
<td className="border px-2 py-0.5">{r.remark ?? ""}</td>
|
||||
</tr>
|
||||
);
|
||||
@@ -204,6 +204,16 @@ export function MbomDetailDialog({ open, onOpenChange, projectObjid }: Props) {
|
||||
);
|
||||
}
|
||||
|
||||
function FolderCell({ n }: { n: any }) {
|
||||
const has = Number(n ?? 0) > 0;
|
||||
return (
|
||||
<span className="inline-flex items-center justify-center">
|
||||
<Folder className={cn("w-4 h-4",
|
||||
has ? "fill-[#1a73e8] text-[#1a73e8]" : "fill-white text-muted-foreground/40")} />
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
function MetaRow({ label, value, numeric }: { label: string; value: any; numeric?: boolean }) {
|
||||
return (
|
||||
<div className="flex items-baseline gap-2">
|
||||
|
||||
Reference in New Issue
Block a user