From 089c70ffbe2303ab5e2611a152ddd3aed0e6e718 Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Mon, 1 Sep 2025 09:09:15 +0000
Subject: (최겸) 구매 pq, 기본정보 수정
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 components/pq-input/pq-input-tabs.tsx | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

(limited to 'components/pq-input/pq-input-tabs.tsx')

diff --git a/components/pq-input/pq-input-tabs.tsx b/components/pq-input/pq-input-tabs.tsx
index 0c3b2276..7ae6d16a 100644
--- a/components/pq-input/pq-input-tabs.tsx
+++ b/components/pq-input/pq-input-tabs.tsx
@@ -159,6 +159,27 @@ export function PQInputTabs({
 
   const shouldDisableInput = isReadOnly;
 
+  // 코드 순서로 정렬하는 함수 (1-1-1, 1-1-2, 1-2-1 순서)
+  const sortByCode = (items: any[]) => {
+    return [...items].sort((a, b) => {
+      const parseCode = (code: string) => {
+        return code.split('-').map(part => parseInt(part, 10))
+      }
+      
+      const aCode = parseCode(a.code)
+      const bCode = parseCode(b.code)
+      
+      for (let i = 0; i < Math.max(aCode.length, bCode.length); i++) {
+        const aPart = aCode[i] || 0
+        const bPart = bCode[i] || 0
+        if (aPart !== bPart) {
+          return aPart - bPart
+        }
+      }
+      return 0
+    })
+  }
+
   // ----------------------------------------------------------------------
   // A) Create initial form values
   //     Mark items as "saved" if they have existing answer or attachments
@@ -167,7 +188,10 @@ export function PQInputTabs({
     const answers: PQFormValues["answers"] = []
 
     data.forEach((group) => {
-      group.items.forEach((item) => {
+      // 그룹 내 아이템들을 코드 순서로 정렬
+      const sortedItems = sortByCode(group.items)
+      
+      sortedItems.forEach((item) => {
         // Check if the server item is already "complete"
         const hasExistingAnswer = item.answer && item.answer.trim().length > 0
         const hasExistingAttachments = item.attachments && item.attachments.length > 0
@@ -634,7 +658,7 @@ export function PQInputTabs({
                 disabled={isSaving || !isAnyItemDirty || shouldDisableInput}
                 onClick={handleSaveAll}
               >
-                {isSaving ? "Saving..." : "Save All"}
+                {isSaving ? "Saving..." : "임시 저장"}
                 <Save className="ml-2 h-4 w-4" />
               </Button>
 
@@ -644,7 +668,7 @@ export function PQInputTabs({
                 disabled={!allSaved || isSubmitting || shouldDisableInput}
                 onClick={handleSubmitPQ}
               >
-                {isSubmitting ? "Submitting..." : "Submit PQ"}
+                {isSubmitting ? "Submitting..." : "최종 제출"}
                 <CheckCircle2 className="ml-2 h-4 w-4" />
               </Button>
             </div>
@@ -655,7 +679,7 @@ export function PQInputTabs({
             <TabsContent key={group.groupName} value={group.groupName}>
               {/* 2-column grid */}
               <div className="grid grid-cols-1 md:grid-cols-2 gap-4 pb-4">
-                {group.items.map((item) => {
+                {sortByCode(group.items).map((item) => {
                   const { criteriaId, code, checkPoint, description, contractInfo, additionalRequirement } = item
                   const answerIndex = getAnswerIndex(criteriaId)
                   if (answerIndex === -1) return null
@@ -670,7 +694,7 @@ export function PQInputTabs({
             
 
                   return (
-                    <Collapsible key={criteriaId} defaultOpen={!isSaved} className="w-full">
+                    <Collapsible key={criteriaId} defaultOpen={isReadOnly || !isSaved} className="w-full">
                       <Card className={isSaved ? "border-green-200" : ""}>
                         <CardHeader className="pb-1">
                           <div className="flex justify-between">
-- 
cgit v1.2.3

