67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
import { state } from '../../core/state';
|
|
import { openPartsMasterModal } from '../../components/Modal/PartsMasterModal';
|
|
import { formatInline } from '../../core/utils';
|
|
import { createListView } from './ListFactory';
|
|
|
|
export function renderPartsMasterList(container: HTMLElement) {
|
|
createListView(container, {
|
|
title: '부품 마스터',
|
|
dataSource: () => state.masterData.partsMaster || [],
|
|
searchKeys: ['component_name', 'category', 'score_tier'],
|
|
filterOptions: {
|
|
keywordLabel: '부품명 / 등급 검색',
|
|
showLoc: false,
|
|
showDept: false,
|
|
showType: false
|
|
},
|
|
onRowClick: (component) => openPartsMasterModal(component, 'view'),
|
|
columns: [
|
|
{
|
|
header: 'ID',
|
|
sortKey: 'id',
|
|
align: 'center',
|
|
width: '5%',
|
|
render: c => c.id.toString()
|
|
},
|
|
{
|
|
header: '분류',
|
|
sortKey: 'category',
|
|
align: 'center',
|
|
width: '15%',
|
|
render: c => {
|
|
let badgeClass = 'badge-primary';
|
|
if (c.category === 'CPU') badgeClass = 'b-primary';
|
|
else if (c.category === 'GPU') badgeClass = 'b-purple';
|
|
else if (c.category === 'RAM') badgeClass = 'b-green';
|
|
return `<span class="badge ${badgeClass}">${c.category}</span>`;
|
|
}
|
|
},
|
|
{
|
|
header: '부품 표준 명칭',
|
|
sortKey: 'component_name',
|
|
render: c => formatInline(c.component_name || '-')
|
|
},
|
|
{
|
|
header: '성능 등급',
|
|
sortKey: 'score_tier',
|
|
align: 'center',
|
|
width: '15%',
|
|
render: c => c.score_tier || '-'
|
|
},
|
|
{
|
|
header: '감점 점수',
|
|
sortKey: 'deduction',
|
|
align: 'center',
|
|
width: '15%',
|
|
render: c => {
|
|
const score = c.deduction || 0;
|
|
let color = '#3b82f6'; // blue
|
|
if (score >= 20) color = '#ef4444'; // red
|
|
else if (score >= 10) color = '#f59e0b'; // orange
|
|
return `<strong style="color: ${color}; font-size: 14px;">-${score}점</strong>`;
|
|
}
|
|
}
|
|
]
|
|
});
|
|
}
|