feat: ESLint 정리 및 전체 코드 품질 개선
- eslint.config.mjs 규칙 강화 및 정리 - 전역 unused import/변수 제거 (312개 파일) - next.config.ts, middleware, proxy route 개선 - CopyableCell molecule 추가 - 회계/결재/HR/생산/건설/품질/영업 등 전 도메인 lint 정리 - IntegratedListTemplateV2, DataTable, MobileCard 등 공통 컴포넌트 개선 - execute-server-action 에러 핸들링 보강
This commit is contained in:
@@ -139,7 +139,7 @@ export function ShipmentDetail({ id }: ShipmentDetailProps) {
|
||||
loadData();
|
||||
}, [loadData]);
|
||||
|
||||
const handleGoBack = useCallback(() => {
|
||||
const _handleGoBack = useCallback(() => {
|
||||
router.push('/ko/outbound/shipments');
|
||||
}, [router]);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ import {
|
||||
SHIPMENT_STATUS_STYLES,
|
||||
DELIVERY_METHOD_LABELS,
|
||||
} from './types';
|
||||
import type { ShipmentItem, ShipmentStatus, ShipmentStats } from './types';
|
||||
import type { ShipmentItem, ShipmentStatus } from './types';
|
||||
import { parseISO } from 'date-fns';
|
||||
import { getLocalDateString } from '@/lib/utils/date';
|
||||
import { isNextRedirectError } from '@/lib/utils/redirect-error';
|
||||
@@ -228,16 +228,16 @@ export function ShipmentList() {
|
||||
// 테이블 컬럼 (11개)
|
||||
columns: [
|
||||
{ key: 'no', label: '번호', className: 'w-[50px] text-center' },
|
||||
{ key: 'lotNo', label: '로트번호', className: 'min-w-[120px]' },
|
||||
{ key: 'siteName', label: '현장명', className: 'min-w-[100px]' },
|
||||
{ key: 'orderCustomer', label: '수주처', className: 'min-w-[100px]' },
|
||||
{ key: 'receiver', label: '수신자', className: 'w-[80px] text-center' },
|
||||
{ key: 'receiverAddress', label: '수신주소', className: 'min-w-[140px]' },
|
||||
{ key: 'receiverCompany', label: '수신처', className: 'min-w-[100px]' },
|
||||
{ key: 'lotNo', label: '로트번호', className: 'min-w-[120px]', copyable: true },
|
||||
{ key: 'siteName', label: '현장명', className: 'min-w-[100px]', copyable: true },
|
||||
{ key: 'orderCustomer', label: '수주처', className: 'min-w-[100px]', copyable: true },
|
||||
{ key: 'receiver', label: '수신자', className: 'w-[80px] text-center', copyable: true },
|
||||
{ key: 'receiverAddress', label: '수신주소', className: 'min-w-[140px]', copyable: true },
|
||||
{ key: 'receiverCompany', label: '수신처', className: 'min-w-[100px]', copyable: true },
|
||||
{ key: 'status', label: '상태', className: 'w-[80px] text-center' },
|
||||
{ key: 'dispatch', label: '배차', className: 'w-[80px] text-center' },
|
||||
{ key: 'writer', label: '작성자', className: 'w-[80px] text-center' },
|
||||
{ key: 'shipmentDate', label: '출고일', className: 'w-[100px] text-center' },
|
||||
{ key: 'dispatch', label: '배차', className: 'w-[80px] text-center', copyable: true },
|
||||
{ key: 'writer', label: '작성자', className: 'w-[80px] text-center', copyable: true },
|
||||
{ key: 'shipmentDate', label: '출고일', className: 'w-[100px] text-center', copyable: true },
|
||||
],
|
||||
|
||||
// 배송방식 필터
|
||||
|
||||
@@ -16,7 +16,7 @@ interface TransactionStatementProps {
|
||||
|
||||
export function TransactionStatement({ data }: TransactionStatementProps) {
|
||||
// 제품 합계 계산
|
||||
const totalAmount = data.products.reduce((sum, product) => {
|
||||
const totalAmount = data.products.reduce((sum, _product) => {
|
||||
// 실제로는 단가 * 수량
|
||||
return sum + 0;
|
||||
}, 0);
|
||||
@@ -107,7 +107,7 @@ export function TransactionStatement({ data }: TransactionStatementProps) {
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{data.products.map((product, index) => (
|
||||
{data.products.map((product, _index) => (
|
||||
<tr key={product.id}>
|
||||
<td className="border px-2 py-2 text-center">{product.no}</td>
|
||||
<td className="border px-2 py-2">{product.itemName}</td>
|
||||
|
||||
@@ -163,18 +163,18 @@ export function VehicleDispatchList() {
|
||||
// 테이블 컬럼 (13개)
|
||||
columns: [
|
||||
{ key: 'no', label: 'No.', className: 'w-[50px] text-center' },
|
||||
{ key: 'dispatchNo', label: '배차번호', className: 'min-w-[130px]' },
|
||||
{ key: 'lotNo', label: '로트번호', className: 'min-w-[120px]' },
|
||||
{ key: 'siteName', label: '현장명', className: 'min-w-[100px]' },
|
||||
{ key: 'orderCustomer', label: '수주처', className: 'min-w-[100px]' },
|
||||
{ key: 'logisticsCompany', label: '물류업체', className: 'min-w-[90px]' },
|
||||
{ key: 'supplyAmount', label: '공급가액', className: 'w-[100px] text-right' },
|
||||
{ key: 'vat', label: '부가세', className: 'w-[90px] text-right' },
|
||||
{ key: 'totalAmount', label: '합계', className: 'w-[100px] text-right' },
|
||||
{ key: 'freightCostType', label: '선/착불', className: 'w-[70px] text-center' },
|
||||
{ key: 'writer', label: '작성자', className: 'w-[80px] text-center' },
|
||||
{ key: 'dispatchNo', label: '배차번호', className: 'min-w-[130px]', copyable: true },
|
||||
{ key: 'lotNo', label: '로트번호', className: 'min-w-[120px]', copyable: true },
|
||||
{ key: 'siteName', label: '현장명', className: 'min-w-[100px]', copyable: true },
|
||||
{ key: 'orderCustomer', label: '수주처', className: 'min-w-[100px]', copyable: true },
|
||||
{ key: 'logisticsCompany', label: '물류업체', className: 'min-w-[90px]', copyable: true },
|
||||
{ key: 'supplyAmount', label: '공급가액', className: 'w-[100px] text-right', copyable: true },
|
||||
{ key: 'vat', label: '부가세', className: 'w-[90px] text-right', copyable: true },
|
||||
{ key: 'totalAmount', label: '합계', className: 'w-[100px] text-right', copyable: true },
|
||||
{ key: 'freightCostType', label: '선/착불', className: 'w-[70px] text-center', copyable: true },
|
||||
{ key: 'writer', label: '작성자', className: 'w-[80px] text-center', copyable: true },
|
||||
{ key: 'status', label: '상태', className: 'w-[80px] text-center' },
|
||||
{ key: 'remarks', label: '비고', className: 'min-w-[100px]' },
|
||||
{ key: 'remarks', label: '비고', className: 'min-w-[100px]', copyable: true },
|
||||
],
|
||||
|
||||
// 상태 필터
|
||||
|
||||
Reference in New Issue
Block a user