feat: 대시보드 구분선 디자인 전환, 폰트 확대 및 버그 수정

This commit is contained in:
2026-06-12 08:49:04 +09:00
parent 0c1977f707
commit 8a3727ea61
22 changed files with 2238 additions and 1813 deletions

View File

@@ -1,23 +1,46 @@
import { state } from '../../core/state';
import { openHwModal } from '../../components/Modal/HWModal';
import { sortAssets, formatInline } from '../../core/utils';
import { sortAssets, formatInline, calculatePcScoreDeductive, getPcGrade } from '../../core/utils';
import { ASSET_SCHEMA } from '../../core/schema';
import { createListView } from './ListFactory';
export function renderPcList(container: HTMLElement) {
createListView(container, {
title: 'PC',
dataSource: () => sortAssets((state.masterData.pc || []).filter((a: any) => a.asset_type !== '서버PC')),
dataSource: () => {
const list = (state.masterData.pc || []).filter((a: any) => a.asset_type !== '서버PC');
list.forEach((a: any) => {
a['_pc_score'] = calculatePcScoreDeductive(a[ASSET_SCHEMA.CPU.key], a[ASSET_SCHEMA.RAM.key], a[ASSET_SCHEMA.GPU.key], a.purchase_date);
});
return sortAssets(list);
},
searchKeys: ['CURRENT_DEPT', 'CURRENT_USER', 'MODEL_NAME', 'MAC_ADDR', 'MANAGER_MAIN', 'ASSET_TYPE'],
filterOptions: {
keywordLabel: `통합 검색 (${ASSET_SCHEMA.MODEL_NAME.ui}/${ASSET_SCHEMA.MANAGER_MAIN.ui}/${ASSET_SCHEMA.CURRENT_USER.ui})`,
showLoc: true,
showDept: true,
showType: true
showType: true,
showStatus: true
},
onRowClick: (asset) => openHwModal(asset, 'view'),
columns: [
{
header: ASSET_SCHEMA.HW_STATUS.ui,
sortKey: ASSET_SCHEMA.HW_STATUS.key,
align: 'center',
width: '8%',
render: a => {
const status = a[ASSET_SCHEMA.HW_STATUS.key] || '재고';
let badgeClass = 'badge-light';
if (status === '운영') badgeClass = 'b-green';
else if (status === '재고') badgeClass = 'b-yellow';
else if (status === '수리') badgeClass = 'b-purple';
else if (status === '폐기') badgeClass = 'badge-muted';
return `<span class="badge ${badgeClass}">${status}</span>`;
}
},
{ header: ASSET_SCHEMA.CURRENT_USER.ui, sortKey: ASSET_SCHEMA.CURRENT_USER.key, align: 'center', render: a => a[ASSET_SCHEMA.CURRENT_USER.key] || '-' },
{ header: ASSET_SCHEMA.USER_POSITION.ui, sortKey: ASSET_SCHEMA.USER_POSITION.key, align: 'center', render: a => a[ASSET_SCHEMA.USER_POSITION.key] || '-' },
{ header: ASSET_SCHEMA.ASSET_TYPE.ui, sortKey: ASSET_SCHEMA.ASSET_TYPE.key, align: 'center', width: '10%', render: a => a[ASSET_SCHEMA.ASSET_TYPE.key] || '-' },
{ header: ASSET_SCHEMA.CPU.ui, sortKey: ASSET_SCHEMA.CPU.key, align: 'center', render: a => a[ASSET_SCHEMA.CPU.key] || '' },
{ header: ASSET_SCHEMA.MAINBOARD.ui, sortKey: ASSET_SCHEMA.MAINBOARD.key, align: 'center', render: a => a[ASSET_SCHEMA.MAINBOARD.key] || '-' },
@@ -27,13 +50,35 @@ export function renderPcList(container: HTMLElement) {
header: 'SSD',
align: 'center',
width: '8%',
render: a => [a[ASSET_SCHEMA.SSD1.key], a[ASSET_SCHEMA.SSD2.key]].filter(Boolean).join(' / ') || '-'
render: a => {
try {
const vols = a.volumes ? (typeof a.volumes === 'string' ? JSON.parse(a.volumes) : a.volumes) : [];
if (Array.isArray(vols)) {
const ssds = vols.filter((v: any) => v && String(v.type).toUpperCase() === 'SSD');
if (ssds.length > 0) {
return ssds.map((v: any) => `${v.capacity || ''}${v.unit || 'GB'}`).join(' / ');
}
}
} catch (e) {}
return '-';
}
},
{
header: 'HDD',
align: 'center',
width: '12%',
render: a => [a[ASSET_SCHEMA.HDD1.key], a[ASSET_SCHEMA.HDD2.key], a[ASSET_SCHEMA.HDD3.key], a[ASSET_SCHEMA.HDD4.key]].filter(Boolean).join(' / ') || '-'
render: a => {
try {
const vols = a.volumes ? (typeof a.volumes === 'string' ? JSON.parse(a.volumes) : a.volumes) : [];
if (Array.isArray(vols)) {
const hdds = vols.filter((v: any) => v && String(v.type).toUpperCase() === 'HDD');
if (hdds.length > 0) {
return hdds.map((v: any) => `${v.capacity || ''}${v.unit || 'GB'}`).join(' / ');
}
}
} catch (e) {}
return '-';
}
},
{
header: ASSET_SCHEMA.MAC_ADDR.ui,
@@ -41,7 +86,17 @@ export function renderPcList(container: HTMLElement) {
align: 'center',
render: a => `<span style="font-family:monospace; font-size:11px;">${a[ASSET_SCHEMA.MAC_ADDR.key] || '-'}</span>`
},
{ header: ASSET_SCHEMA.MEMO.ui, sortKey: ASSET_SCHEMA.MEMO.key, className: 'col-memo', width: '30%', render: a => formatInline(a[ASSET_SCHEMA.MEMO.key] || '-') }
{
header: '성능 등급',
sortKey: '_pc_score',
align: 'center',
width: '8%',
render: a => {
const score = a._pc_score !== undefined ? a._pc_score : calculatePcScoreDeductive(a[ASSET_SCHEMA.CPU.key], a[ASSET_SCHEMA.RAM.key], a[ASSET_SCHEMA.GPU.key], a.purchase_date);
const grade = getPcGrade(score);
return `<span class="badge ${grade.class}" title="성능 점수: ${score}점">${grade.name}</span>`;
}
}
]
});
}