From 1ac42ddc9c5d119bfeddeb0987cc7cf8a3bcb421 Mon Sep 17 00:00:00 2001 From: Mina Choi Date: Mon, 6 Jul 2026 17:27:59 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20negodata:=20=ED=98=91=EB=A0=A5?= =?UTF-8?q?=EC=82=AC=20=EC=B4=9D=EB=A7=A4=EC=B6=9C=EC=95=A1(total=5Frevenu?= =?UTF-8?q?e)=20=EC=B6=94=EA=B0=80=20+=20=EC=9A=B0=EC=84=A0=EC=84=A0?= =?UTF-8?q?=EC=A0=95(priority)=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Helped-By: Claude Opus 4.8 --- .../backend/common/database/model/models.py | 2 +- negodata/backend/crud/supplier_crud.py | 6 +-- .../backend/router/v1/supplier/protocol.py | 6 +-- .../backend/router/v1/supplier/supplier.py | 3 +- negodata/backend/services/supplier_service.py | 6 +-- .../front/src/api/generated/model/index.ts | 6 +-- .../generated/model/listSuppliersParams.ts | 4 -- .../api/generated/model/reqCreateSupplier.ts | 4 +- ...ty.ts => reqCreateSupplierTotalRevenue.ts} | 2 +- .../api/generated/model/reqUpdateSupplier.ts | 4 +- ...ty.ts => reqUpdateSupplierTotalRevenue.ts} | 2 +- .../src/api/generated/model/supplierData.ts | 4 +- ...riority.ts => supplierDataTotalRevenue.ts} | 2 +- .../partners/components/ExcelUploadModal.tsx | 12 +++--- .../partners/components/PartnerFormSheet.tsx | 42 +++++++------------ .../partners/components/PartnerTable.tsx | 23 ++-------- negodata/front/src/features/partners/types.ts | 10 ----- .../components/QuotationCreateModal.tsx | 9 +--- .../QuotationDetailSheet/RegenerateModal.tsx | 2 +- .../front/src/features/quotations/types.ts | 1 - negodata/front/src/pages/partners.tsx | 24 ++--------- negodata/front/src/types.ts | 1 - ...7061655.sql => 01-schema_202607061714.sql} | 2 +- ...07061655.sql => 04-alter_202607061714.sql} | 8 ++++ 24 files changed, 61 insertions(+), 124 deletions(-) rename negodata/front/src/api/generated/model/{reqCreateSupplierPriority.ts => reqCreateSupplierTotalRevenue.ts} (67%) rename negodata/front/src/api/generated/model/{reqUpdateSupplierPriority.ts => reqUpdateSupplierTotalRevenue.ts} (67%) rename negodata/front/src/api/generated/model/{supplierDataPriority.ts => supplierDataTotalRevenue.ts} (69%) rename postgres-init/{01-schema_202607061655.sql => 01-schema_202607061714.sql} (99%) rename postgres-init/{04-alter_202607061655.sql => 04-alter_202607061714.sql} (93%) diff --git a/negodata/backend/common/database/model/models.py b/negodata/backend/common/database/model/models.py index da91915..caffd17 100644 --- a/negodata/backend/common/database/model/models.py +++ b/negodata/backend/common/database/model/models.py @@ -124,7 +124,7 @@ class suppliers(MainTableMixin, MAIN_BASE): manager_name = Column(String(50), nullable=True) manager_email = Column(String(255), nullable=True) manager_contact_number = Column(String(20), nullable=True) # ERD 오타(manger) 교정 - priority = Column(String(10), nullable=True) # True/False 가 아닌 string value 가능 + total_revenue = Column(BigInteger, nullable=True) # 총매출액(원) class nego_cards(MainTableMixin, MAIN_BASE): diff --git a/negodata/backend/crud/supplier_crud.py b/negodata/backend/crud/supplier_crud.py index e0178a7..84e54a5 100644 --- a/negodata/backend/crud/supplier_crud.py +++ b/negodata/backend/crud/supplier_crud.py @@ -14,7 +14,7 @@ from common.utils.gtime import GTime # 협력사 CRUD. 모든 조회/변경은 company_id 로 스코프된다(멀티테넌트). class ISupplierCRUD(ABC): @abstractmethod - async def search(self, cdb: AsyncSession, company_id, search, priority, skip, limit) -> Tuple[ErrorType, list, int]: + async def search(self, cdb: AsyncSession, company_id, search, skip, limit) -> Tuple[ErrorType, list, int]: pass @abstractmethod @@ -44,7 +44,7 @@ class ISupplierCRUD(ABC): class SupplierCRUD(ISupplierCRUD): async def search( - self, cdb: AsyncSession, company_id, search: Optional[str], priority: Optional[str], skip: int, limit: int + self, cdb: AsyncSession, company_id, search: Optional[str], skip: int, limit: int ) -> Tuple[ErrorType, list, int]: try: conditions = [suppliers.deleted == False, suppliers.company_id == company_id] # noqa: E712 @@ -56,8 +56,6 @@ class SupplierCRUD(ISupplierCRUD): suppliers.manager_name.ilike(f"%{search}%"), ) ) - if priority: - conditions.append(suppliers.priority == priority) where = and_(*conditions) cnt_err, cnt_rows = await DB_SESSION_MNG.execute(cdb, select(func.count()).select_from(suppliers).where(where)) diff --git a/negodata/backend/router/v1/supplier/protocol.py b/negodata/backend/router/v1/supplier/protocol.py index c4b5165..5340c74 100644 --- a/negodata/backend/router/v1/supplier/protocol.py +++ b/negodata/backend/router/v1/supplier/protocol.py @@ -17,7 +17,7 @@ class Req_CreateSupplier(SupplierProtocol): manager_name: Optional[str] = None manager_email: Optional[str] = None manager_contact_number: Optional[str] = None - priority: Optional[str] = None + total_revenue: Optional[int] = None # 총매출액(원) class Req_UpdateSupplier(SupplierProtocol): @@ -26,7 +26,7 @@ class Req_UpdateSupplier(SupplierProtocol): manager_name: Optional[str] = None manager_email: Optional[str] = None manager_contact_number: Optional[str] = None - priority: Optional[str] = None + total_revenue: Optional[int] = None class SupplierData(WebPacketProtocol): @@ -40,7 +40,7 @@ class SupplierData(WebPacketProtocol): manager_name: Optional[str] = None manager_email: Optional[str] = None manager_contact_number: Optional[str] = None - priority: Optional[str] = None + total_revenue: Optional[int] = None # 총매출액(원) created_at: Optional[datetime] = None updated_at: Optional[datetime] = None diff --git a/negodata/backend/router/v1/supplier/supplier.py b/negodata/backend/router/v1/supplier/supplier.py index a556670..d1d81a9 100644 --- a/negodata/backend/router/v1/supplier/supplier.py +++ b/negodata/backend/router/v1/supplier/supplier.py @@ -24,10 +24,9 @@ async def list_suppliers( service: SupplierService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken), search: str | None = Query(None, description="협력사명/코드/담당자명 검색"), - priority: str | None = Query(None, description="우선순위 필터(HIGH/MEDIUM/LOW)"), pg: PageParams = Depends(), ): - return RemoveNoneResponse(await service.list_suppliers(user_info.company_id, search, priority, pg)) + return RemoveNoneResponse(await service.list_suppliers(user_info.company_id, search, pg)) @router.post(path="/create", response_model=Res_Supplier, summary="협력사 등록") diff --git a/negodata/backend/services/supplier_service.py b/negodata/backend/services/supplier_service.py index 54941c2..6b52403 100644 --- a/negodata/backend/services/supplier_service.py +++ b/negodata/backend/services/supplier_service.py @@ -38,14 +38,14 @@ class SupplierService: return ErrorType.SUPPLIER_NOT_FOUND, None return ErrorType.SUCCESS, supplier - async def list_suppliers(self, company_id: str, search, priority, pg: PageParams) -> Res_SupplierList: + async def list_suppliers(self, company_id: str, search, pg: PageParams) -> Res_SupplierList: res = Res_SupplierList(page=pg.page, size=pg.size) company_uuid = uuid.UUID(company_id) err_type, rows, total = await DB_SESSION_MNG.execute_lambda( suppliers.DBType(), DBWRType.DB_READ.value, - lambda s: self.supplier_crud.search(s, company_uuid, search, priority, pg.skip, pg.size), + lambda s: self.supplier_crud.search(s, company_uuid, search, pg.skip, pg.size), ) if err_type != ErrorType.SUCCESS: res.result.SetResult(err_type) @@ -105,7 +105,7 @@ class SupplierService: manager_name=req.manager_name, manager_email=req.manager_email, manager_contact_number=req.manager_contact_number, - priority=req.priority, + total_revenue=req.total_revenue, ) err_type = await DB_SESSION_MNG.execute_lambda_run( [suppliers.DBType()], diff --git a/negodata/front/src/api/generated/model/index.ts b/negodata/front/src/api/generated/model/index.ts index 38259d4..91d6398 100644 --- a/negodata/front/src/api/generated/model/index.ts +++ b/negodata/front/src/api/generated/model/index.ts @@ -163,7 +163,7 @@ export * from './reqCreateSupplierCode'; export * from './reqCreateSupplierManagerContactNumber'; export * from './reqCreateSupplierManagerEmail'; export * from './reqCreateSupplierManagerName'; -export * from './reqCreateSupplierPriority'; +export * from './reqCreateSupplierTotalRevenue'; export * from './reqLogin'; export * from './reqRegenerateQuotation'; export * from './reqUpdateCard'; @@ -216,7 +216,7 @@ export * from './reqUpdateSupplierManagerContactNumber'; export * from './reqUpdateSupplierManagerEmail'; export * from './reqUpdateSupplierManagerName'; export * from './reqUpdateSupplierName'; -export * from './reqUpdateSupplierPriority'; +export * from './reqUpdateSupplierTotalRevenue'; export * from './resCard'; export * from './resCardCard'; export * from './resCardList'; @@ -339,7 +339,7 @@ export * from './supplierDataCreatedAt'; export * from './supplierDataManagerContactNumber'; export * from './supplierDataManagerEmail'; export * from './supplierDataManagerName'; -export * from './supplierDataPriority'; +export * from './supplierDataTotalRevenue'; export * from './supplierDataUpdatedAt'; export * from './supplierType'; export * from './targetCandidate'; diff --git a/negodata/front/src/api/generated/model/listSuppliersParams.ts b/negodata/front/src/api/generated/model/listSuppliersParams.ts index 856b4f6..f5e4545 100644 --- a/negodata/front/src/api/generated/model/listSuppliersParams.ts +++ b/negodata/front/src/api/generated/model/listSuppliersParams.ts @@ -10,10 +10,6 @@ export type ListSuppliersParams = { * 협력사명/코드/담당자명 검색 */ search?: string | null; -/** - * 우선순위 필터(HIGH/MEDIUM/LOW) - */ -priority?: string | null; /** * @minimum 1 */ diff --git a/negodata/front/src/api/generated/model/reqCreateSupplier.ts b/negodata/front/src/api/generated/model/reqCreateSupplier.ts index 9333986..6a47f23 100644 --- a/negodata/front/src/api/generated/model/reqCreateSupplier.ts +++ b/negodata/front/src/api/generated/model/reqCreateSupplier.ts @@ -8,7 +8,7 @@ import type { ReqCreateSupplierCode } from './reqCreateSupplierCode'; import type { ReqCreateSupplierManagerName } from './reqCreateSupplierManagerName'; import type { ReqCreateSupplierManagerEmail } from './reqCreateSupplierManagerEmail'; import type { ReqCreateSupplierManagerContactNumber } from './reqCreateSupplierManagerContactNumber'; -import type { ReqCreateSupplierPriority } from './reqCreateSupplierPriority'; +import type { ReqCreateSupplierTotalRevenue } from './reqCreateSupplierTotalRevenue'; export interface ReqCreateSupplier { name?: string; @@ -16,5 +16,5 @@ export interface ReqCreateSupplier { manager_name?: ReqCreateSupplierManagerName; manager_email?: ReqCreateSupplierManagerEmail; manager_contact_number?: ReqCreateSupplierManagerContactNumber; - priority?: ReqCreateSupplierPriority; + total_revenue?: ReqCreateSupplierTotalRevenue; } diff --git a/negodata/front/src/api/generated/model/reqCreateSupplierPriority.ts b/negodata/front/src/api/generated/model/reqCreateSupplierTotalRevenue.ts similarity index 67% rename from negodata/front/src/api/generated/model/reqCreateSupplierPriority.ts rename to negodata/front/src/api/generated/model/reqCreateSupplierTotalRevenue.ts index fbb2d3b..0935deb 100644 --- a/negodata/front/src/api/generated/model/reqCreateSupplierPriority.ts +++ b/negodata/front/src/api/generated/model/reqCreateSupplierTotalRevenue.ts @@ -5,4 +5,4 @@ * OpenAPI spec version: 0.1.0 */ -export type ReqCreateSupplierPriority = string | null; +export type ReqCreateSupplierTotalRevenue = number | null; diff --git a/negodata/front/src/api/generated/model/reqUpdateSupplier.ts b/negodata/front/src/api/generated/model/reqUpdateSupplier.ts index 952c2ca..312fe03 100644 --- a/negodata/front/src/api/generated/model/reqUpdateSupplier.ts +++ b/negodata/front/src/api/generated/model/reqUpdateSupplier.ts @@ -9,7 +9,7 @@ import type { ReqUpdateSupplierCode } from './reqUpdateSupplierCode'; import type { ReqUpdateSupplierManagerName } from './reqUpdateSupplierManagerName'; import type { ReqUpdateSupplierManagerEmail } from './reqUpdateSupplierManagerEmail'; import type { ReqUpdateSupplierManagerContactNumber } from './reqUpdateSupplierManagerContactNumber'; -import type { ReqUpdateSupplierPriority } from './reqUpdateSupplierPriority'; +import type { ReqUpdateSupplierTotalRevenue } from './reqUpdateSupplierTotalRevenue'; export interface ReqUpdateSupplier { name?: ReqUpdateSupplierName; @@ -17,5 +17,5 @@ export interface ReqUpdateSupplier { manager_name?: ReqUpdateSupplierManagerName; manager_email?: ReqUpdateSupplierManagerEmail; manager_contact_number?: ReqUpdateSupplierManagerContactNumber; - priority?: ReqUpdateSupplierPriority; + total_revenue?: ReqUpdateSupplierTotalRevenue; } diff --git a/negodata/front/src/api/generated/model/reqUpdateSupplierPriority.ts b/negodata/front/src/api/generated/model/reqUpdateSupplierTotalRevenue.ts similarity index 67% rename from negodata/front/src/api/generated/model/reqUpdateSupplierPriority.ts rename to negodata/front/src/api/generated/model/reqUpdateSupplierTotalRevenue.ts index 08a6ed6..cdbf249 100644 --- a/negodata/front/src/api/generated/model/reqUpdateSupplierPriority.ts +++ b/negodata/front/src/api/generated/model/reqUpdateSupplierTotalRevenue.ts @@ -5,4 +5,4 @@ * OpenAPI spec version: 0.1.0 */ -export type ReqUpdateSupplierPriority = string | null; +export type ReqUpdateSupplierTotalRevenue = number | null; diff --git a/negodata/front/src/api/generated/model/supplierData.ts b/negodata/front/src/api/generated/model/supplierData.ts index ed9f4ee..6da4f05 100644 --- a/negodata/front/src/api/generated/model/supplierData.ts +++ b/negodata/front/src/api/generated/model/supplierData.ts @@ -8,7 +8,7 @@ import type { SupplierDataCode } from './supplierDataCode'; import type { SupplierDataManagerName } from './supplierDataManagerName'; import type { SupplierDataManagerEmail } from './supplierDataManagerEmail'; import type { SupplierDataManagerContactNumber } from './supplierDataManagerContactNumber'; -import type { SupplierDataPriority } from './supplierDataPriority'; +import type { SupplierDataTotalRevenue } from './supplierDataTotalRevenue'; import type { SupplierDataCreatedAt } from './supplierDataCreatedAt'; import type { SupplierDataUpdatedAt } from './supplierDataUpdatedAt'; @@ -21,7 +21,7 @@ export interface SupplierData { manager_name?: SupplierDataManagerName; manager_email?: SupplierDataManagerEmail; manager_contact_number?: SupplierDataManagerContactNumber; - priority?: SupplierDataPriority; + total_revenue?: SupplierDataTotalRevenue; created_at?: SupplierDataCreatedAt; updated_at?: SupplierDataUpdatedAt; } diff --git a/negodata/front/src/api/generated/model/supplierDataPriority.ts b/negodata/front/src/api/generated/model/supplierDataTotalRevenue.ts similarity index 69% rename from negodata/front/src/api/generated/model/supplierDataPriority.ts rename to negodata/front/src/api/generated/model/supplierDataTotalRevenue.ts index 33093cf..c20ccdf 100644 --- a/negodata/front/src/api/generated/model/supplierDataPriority.ts +++ b/negodata/front/src/api/generated/model/supplierDataTotalRevenue.ts @@ -5,4 +5,4 @@ * OpenAPI spec version: 0.1.0 */ -export type SupplierDataPriority = string | null; +export type SupplierDataTotalRevenue = number | null; diff --git a/negodata/front/src/features/partners/components/ExcelUploadModal.tsx b/negodata/front/src/features/partners/components/ExcelUploadModal.tsx index 58b6b03..2a9e4e3 100644 --- a/negodata/front/src/features/partners/components/ExcelUploadModal.tsx +++ b/negodata/front/src/features/partners/components/ExcelUploadModal.tsx @@ -17,13 +17,13 @@ type RawRow = { code: string; managerName: string; managerEmail: string; - priority: string; + totalRevenue: string; }; type ValidatedRow = RawRow & { status: '정상' | '오류'; message: string }; // 업로드 양식 한 줄(예시 행) -type TemplateRow = { name: string; code: string; managerName: string; managerEmail: string; priority: string }; +type TemplateRow = { name: string; code: string; managerName: string; managerEmail: string; totalRevenue: string }; type ExcelUploadModalProps = { open: boolean; @@ -68,7 +68,7 @@ function toSupplierCreate(row: RawRow): SupplierCreate { manager_name: row.managerName, manager_email: row.managerEmail, manager_contact_number: '010-0000-0000', - priority: row.priority, + total_revenue: row.totalRevenue?.trim() ? Number(row.totalRevenue.replace(/[^0-9]/g, '')) : undefined, }; } @@ -81,9 +81,9 @@ export function downloadPartnerTemplate() { { header: '식별코드', value: (r) => r.code }, { header: '담당자명', value: (r) => r.managerName }, { header: '담당자이메일', value: (r) => r.managerEmail }, - { header: '우선순위', value: (r) => r.priority }, + { header: '총매출액', value: (r) => r.totalRevenue }, ], - [{ name: '예시) (주)한빛정밀', code: 'PART-EXAMPLE-001', managerName: '김철수 과장', managerEmail: 'cs.kim@example.com', priority: 'HIGH' }], + [{ name: '예시) (주)한빛정밀', code: 'PART-EXAMPLE-001', managerName: '김철수 과장', managerEmail: 'cs.kim@example.com', totalRevenue: '5000000000' }], ); } @@ -123,7 +123,7 @@ export function ExcelUploadModal({ open, partners, onConfirm, onClose }: ExcelUp code: r['식별코드'] ?? '', managerName: r['담당자명'] ?? '', managerEmail: r['담당자이메일'] ?? '', - priority: r['우선순위'] ?? 'MEDIUM', + totalRevenue: r['총매출액'] ?? '', })); setExcelFile(file.name); setRows(loaded); diff --git a/negodata/front/src/features/partners/components/PartnerFormSheet.tsx b/negodata/front/src/features/partners/components/PartnerFormSheet.tsx index 61269e9..2c27569 100644 --- a/negodata/front/src/features/partners/components/PartnerFormSheet.tsx +++ b/negodata/front/src/features/partners/components/PartnerFormSheet.tsx @@ -1,4 +1,4 @@ -import { useForm, Controller } from 'react-hook-form'; +import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Trash2 } from 'lucide-react'; @@ -9,8 +9,7 @@ import { Typography } from '@/components/ui/typography'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Sheet } from '@/components/ui/sheet'; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { type Partner, priorityOptions } from '../types'; +import { type Partner } from '../types'; const schema = z.object({ name: z.string().trim().min(1, '회사명/협력사명을 작성해 주십시오.'), @@ -18,7 +17,7 @@ const schema = z.object({ managerName: z.string().trim().min(1, '담당자명을 입력해 주십시오.'), managerEmail: z.string().trim().email('정확한 담당자 이메일 형식을 점검해 주십시오.'), managerPhone: z.string().trim().min(1, '담당자 연락처를 입력해 주십시오.'), - priority: z.string(), + totalRevenue: z.string().trim().optional(), // 총매출액(원) }); type FormValues = z.infer; @@ -42,7 +41,7 @@ function buildDefaults(mode: 'create' | 'edit', partner: Partner | null): FormVa managerName: partner.manager_name || '', managerEmail: partner.manager_email || '', managerPhone: partner.manager_contact_number || '', - priority: partner.priority || 'MEDIUM', + totalRevenue: partner.total_revenue != null ? String(partner.total_revenue) : '', }; } return { @@ -51,7 +50,7 @@ function buildDefaults(mode: 'create' | 'edit', partner: Partner | null): FormVa managerName: '', managerEmail: '', managerPhone: '010-', - priority: 'MEDIUM', + totalRevenue: '', }; } @@ -68,7 +67,6 @@ export function PartnerFormSheet({ }: PartnerFormSheetProps) { const { register, - control, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ @@ -83,7 +81,7 @@ export function PartnerFormSheet({ manager_name: v.managerName, manager_email: v.managerEmail, manager_contact_number: v.managerPhone, - priority: v.priority, + total_revenue: v.totalRevenue?.trim() ? Number(v.totalRevenue.replace(/[^0-9]/g, '')) : undefined, }; if (mode === 'create') { @@ -138,26 +136,16 @@ export function PartnerFormSheet({ /> {errors.code &&

{errors.code.message}

} - {/* Priority */} + {/* 총매출액 */}
- 우선 선정 대상자 - ( - - )} + 총매출액 (원, 선택) +
diff --git a/negodata/front/src/features/partners/components/PartnerTable.tsx b/negodata/front/src/features/partners/components/PartnerTable.tsx index f9f8a09..0807259 100644 --- a/negodata/front/src/features/partners/components/PartnerTable.tsx +++ b/negodata/front/src/features/partners/components/PartnerTable.tsx @@ -1,4 +1,3 @@ -import { Badge } from '@/components/ui/badge'; import { DataTable } from '@/components/ui/data-table'; import { TablePagination } from '@/components/ui/table-pagination'; import type { Partner } from '../types'; @@ -13,14 +12,6 @@ type PartnerTableProps = { onPageChange: (page: number) => void; }; -// 우선순위 배지 색상 — HIGH(빨강)/MEDIUM(주황)/그외(회색) -const priorityBadgeClass = (priority?: string | null) => - priority === 'HIGH' - ? 'bg-red-50 text-red-700 dark:bg-rose-950/20 dark:text-rose-400 border border-red-200' - : priority === 'MEDIUM' - ? 'bg-amber-50 text-amber-700 dark:bg-amber-950/20 dark:text-amber-400 border border-amber-200' - : 'bg-zinc-100 text-zinc-600 border border-zinc-300'; - export function PartnerTable({ data, onRowClick, @@ -74,16 +65,10 @@ export function PartnerTable({ ), }, { - header: '우선 선정 대상자', - align: 'center', - cell: (part) => ( - - {part.priority} - - ), + header: '총매출액', + align: 'right', + cellClassName: 'font-mono text-muted-foreground', + cell: (part) => (part.total_revenue != null ? `₩${Number(part.total_revenue).toLocaleString()}` : '-'), }, ]} /> diff --git a/negodata/front/src/features/partners/types.ts b/negodata/front/src/features/partners/types.ts index 3608843..279bbd8 100644 --- a/negodata/front/src/features/partners/types.ts +++ b/negodata/front/src/features/partners/types.ts @@ -1,11 +1 @@ export type { Partner } from '@/types'; - -// 우선순위 필터 목록. 'ALL'은 필터 전용(폼에서는 제외). -export const prioritiesList = ['ALL', 'HIGH', 'MEDIUM', 'LOW']; - -// 폼 우선순위 선택지(라벨 포함). -export const priorityOptions: { value: string; label: string }[] = [ - { value: 'HIGH', label: 'HIGH (핵심 조달처)' }, - { value: 'MEDIUM', label: 'MEDIUM (일반 벤더)' }, - { value: 'LOW', label: 'LOW (서브 보조처)' }, -]; diff --git a/negodata/front/src/features/quotations/components/QuotationCreateModal.tsx b/negodata/front/src/features/quotations/components/QuotationCreateModal.tsx index 380f7e1..b06cf7c 100644 --- a/negodata/front/src/features/quotations/components/QuotationCreateModal.tsx +++ b/negodata/front/src/features/quotations/components/QuotationCreateModal.tsx @@ -345,16 +345,9 @@ export function QuotationCreateModal({ />
{part.name} - 이메일: {part.managerEmail} · 등급: {part.rank} + 이메일: {part.managerEmail}
- - {part.priority} - ); })} diff --git a/negodata/front/src/features/quotations/components/QuotationDetailSheet/RegenerateModal.tsx b/negodata/front/src/features/quotations/components/QuotationDetailSheet/RegenerateModal.tsx index b3923c1..6fbc367 100644 --- a/negodata/front/src/features/quotations/components/QuotationDetailSheet/RegenerateModal.tsx +++ b/negodata/front/src/features/quotations/components/QuotationDetailSheet/RegenerateModal.tsx @@ -78,7 +78,7 @@ export function RegenerateModal({ open, partners, sessionStatusBySupplier, defau
{part.name} - 이메일: {part.managerEmail} · 등급: {part.rank} + 이메일: {part.managerEmail}
diff --git a/negodata/front/src/features/quotations/types.ts b/negodata/front/src/features/quotations/types.ts index 2e8be07..e84fb3b 100644 --- a/negodata/front/src/features/quotations/types.ts +++ b/negodata/front/src/features/quotations/types.ts @@ -55,7 +55,6 @@ export function mapSupplier(sp: SupplierData): Partner { managerName: sp.manager_name || '', managerEmail: sp.manager_email || '', managerPhone: sp.manager_contact_number || '', - rank: sp.priority === 'HIGH' ? 'S' : sp.priority === 'MEDIUM' ? 'A' : 'B', status: 'ACTIVE', }; } diff --git a/negodata/front/src/pages/partners.tsx b/negodata/front/src/pages/partners.tsx index 75590b5..a2b2b1b 100644 --- a/negodata/front/src/pages/partners.tsx +++ b/negodata/front/src/pages/partners.tsx @@ -4,7 +4,6 @@ import { showToast } from '@/lib/notify'; import { confirm } from '@/lib/confirm'; import { PageContainer } from '@/components/layout/PageContainer'; import { PageToolbar, SearchInput } from '@/components/layout/PageToolbar'; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@/components/ui/dropdown-menu'; import { useServerList } from '@/lib/useServerList'; @@ -13,15 +12,13 @@ import type { ListSuppliersParams } from '@/api/generated/model/listSuppliersPar import { PartnerTable } from '@/features/partners/components/PartnerTable'; import { PartnerFormSheet } from '@/features/partners/components/PartnerFormSheet'; import { ExcelUploadModal, downloadPartnerTemplate } from '@/features/partners/components/ExcelUploadModal'; -import { prioritiesList, type Partner } from '@/features/partners/types'; +import { type Partner } from '@/features/partners/types'; export default function PartnersPage() { - // 검색/우선순위/페이지 상태(재사용 훅) → 서버 쿼리 파라미터로 변환. - const list = useServerList({ pageSize: 10, initialFilters: { priority: 'ALL' } }); - const priorityFilter = list.filters.priority; + // 검색/페이지 상태(재사용 훅) → 서버 쿼리 파라미터로 변환. + const list = useServerList({ pageSize: 10 }); const params: ListSuppliersParams = { search: list.debouncedSearch || undefined, - priority: priorityFilter !== 'ALL' ? priorityFilter : undefined, page: list.page, size: list.pageSize, }; @@ -91,21 +88,6 @@ export default function PartnersPage() { onClear={list.clearSearch} placeholder="협력사명, 코드 또는 담당자명으로 추적 검색..." /> - -