최정임 최정임 03-20
250320 최정임 사진기록물 퍼블리싱
@2c68f894bcc9c059b4f7dc61391a25743213a619
client/resources/css/common/common.css
--- client/resources/css/common/common.css
+++ client/resources/css/common/common.css
@@ -2,13 +2,12 @@
     padding: 0; margin: 0;  color: #000;
     font-family: "Pretendard-R";
 }
-
 html{font-size: 10px;}
 
 a{text-decoration: none; display: block;}
 li{list-style: none;}
 button{border: 0; background: none; cursor: pointer;}
-input{border: 0;}
+input{border: 0; flex-shrink: 0;}
 input::placeholder{color: #999999;}
 input[type="checkbox"]{
     width: 15px;
@@ -40,9 +39,14 @@
 .wfull{width: -webkit-fill-available;}
 
 .flex{display: flex;}
+.align-center{align-items: center;}
 .flex-end{
     display: flex;
     justify-content: end;
+}
+.flex-center{
+    display: flex;
+    justify-content: center;
 }
 .flex-sp-bw{
     display: flex;
@@ -51,6 +55,7 @@
 
 .mt-5{margin-top: 5px;}
 
+.mb-5{margin-bottom: 5px;}
 .mb-10{margin-bottom: 10px;}
 .mb-15{margin-bottom: 15px;}
 .mb-20{margin-bottom: 20px;}
client/resources/css/user/layout.css
--- client/resources/css/user/layout.css
+++ client/resources/css/user/layout.css
@@ -1,5 +1,4 @@
 .container{
-    min-height: 100vh;
 }
 .header-container{
     width: 1500px;
client/resources/css/user/main.css
--- client/resources/css/user/main.css
+++ client/resources/css/user/main.css
@@ -1,17 +1,20 @@
-.visual{position: relative;}
-.pagination{
-    color: #fff;
-    font-size: 20px;
-    position: absolute;
-    bottom: 10.5rem;
-    right: 58rem;
-    z-index: 50;
-    display: flex;
-    .page-count{color: #fff;}
-    button .anticon {
-        font-size: 20px;  color: #fff;
+.visual{
+    position: relative;
+    .pagination{
+        color: #fff;
+        font-size: 20px;
+        position: absolute;
+        bottom: 10.5rem;
+        right: 58rem;
+        z-index: 50;
+        display: flex;
+        .page-count{color: #fff;}
+        button .anticon {
+            font-size: 20px;  color: #fff;
+        }
     }
 }
+
 .search-wrap{
     position: absolute;
     bottom: 174px;
client/resources/css/user/sub.css
--- client/resources/css/user/sub.css
+++ client/resources/css/user/sub.css
@@ -26,15 +26,38 @@
             position: absolute;
         }
     }
-    .gopage{
+
+    .gopage {
         font-family: "Pretendard-L";
         font-size: 17px;
         text-align: right;
-        
+
     }
-    .gopage::after{
+
+    .gopage::after {
         content: '\2192';
         font-size: 18px;
+    }
+
+    .pagination {
+        margin-top: 20px;
+        display: flex;
+        align-items: center;
+    }
+
+    .pagination select {
+        margin-right: 10px;
+    }
+
+    .pagination button {
+        padding: 5px 10px;
+        margin: 0 5px;
+        cursor: pointer;
+    }
+
+    .pagination button:disabled {
+        background-color: #ccc;
+        cursor: not-allowed;
     }
 }
 
@@ -53,8 +76,21 @@
 
     li {
         font-size: 16px;
-        font-family: "Pretendard-SB";
-        color: #000;
+
+        p {
+            font-size: 16px;
+            color: #000;
+            font-family: "Pretendard-L";
+        }
+
+        &:first-child {
+            display: flex;
+            align-items: center;
+        }
+
+        &:last-child {
+            font-family: "Pretendard-SB";
+        }
     }
 }
 
@@ -68,6 +104,63 @@
         border: 1px solid #dddddd;
         border-radius: 5px;
         font-size: 16px;
+        width: inherit;
+    }
+
+    dd {
+        display: flex;
+        align-items: center;
+    }
+
+    label {
+        position: relative;
+        width: 200px;
+        display: block;
+        font-size: 18px;
+        flex-shrink: 0;
+
+        &.require::after {
+            position: absolute;
+            top: 5px;
+            padding-left: 3px;
+            content: "*";
+            color: #df2d2d;
+        }
+    }
+
+    .hr {
+        background-color: #eeeeee;
+        margin: 10px 0;
+        width: 100%;
+        height: 1px;
+    }
+}
+
+/* 카테고리 */
+.category {
+    display: flex;
+    gap: 5px;
+
+    li {
+        width: fit-content;
+        border-radius: 3px;
+        padding: 5px 10px;
+        font-family: "Pretendard-SB" !important;
+        font-size: 14px;
+
+        &.category1 {
+            color: #a5067b;
+            border: 1px solid #a5067b;
+        }
+
+        &.category2 {
+            color: #007ac3;
+            border: 1px solid #007ac3;
+        }
+
+        button {
+            margin-left: 15px;
+        }
     }
 }
 
@@ -111,34 +204,8 @@
 /* 내정보 */
 .info-form,
 .pwchange-form {
-    dd {
-        display: flex;
-        align-items: center;
-    }
 
     padding: 30px 50px;
-
-    label {
-        position: relative;
-        width: 200px;
-        display: block;
-        font-size: 18px;
-
-        &.require::after {
-            position: absolute;
-            top: 5px;
-            padding-left: 3px;
-            content: "*";
-            color: #df2d2d;
-        }
-    }
-
-    .hr {
-        background-color: #eeeeee;
-        margin: 10px 0;
-        width: 100%;
-        height: 1px;
-    }
 
 }
 
@@ -171,33 +238,42 @@
 
 /* 통합검색 */
 .search-form {
-    dl{
+    dl {
         padding: 35px 75px;
-        dd{
+
+        dd {
             display: flex;
             align-items: center;
+
             p {
                 font-size: 18px;
                 font-family: "Pretendard-SB";
                 width: 180px;
+                flex-shrink: 0;
             }
         }
-        .mark{width: fit-content; margin: 0 11px;}
+
+        .mark {
+            width: fit-content;
+            margin: 0 11px;
+        }
 
     }
-    
+
     background-image: linear-gradient(#fff, #fff),
-        linear-gradient(-45deg, #ca3e49, #3f355c);
+    linear-gradient(-45deg, #ca3e49, #3f355c);
     background-origin: border-box;
-    background-clip: content-box, border-box;
+    background-clip: content-box,
+    border-box;
     border: 3px solid transparent;
     border-radius: 32px;
 
-  
-    .btn-group{
+
+    .btn-group {
         display: flex;
         justify-content: center;
-        button{
+
+        button {
             display: flex;
             align-items: center;
             justify-content: center;
@@ -206,45 +282,62 @@
             font-family: "Pretendard-B";
             font-size: 16px;
             border-radius: 30px;
-            &.reset{
-                border: 1px solid #ccc;                
+
+            &.reset {
+                border: 1px solid #ccc;
             }
-            &.search{                
+
+            &.search {
                 background: linear-gradient(132deg, #3e355c, #763954);
-                p{
+
+                p {
                     color: #fff;
                 }
             }
         }
     }
-    ul{display: flex; gap: 15px;}
-    li{display: flex; align-items: center; width: 125px; gap: 12px;}
-   
 
-    input[type="text"]{
+    ul {
+        display: flex;
+        gap: 15px;
+    }
+
+    li {
+        display: flex;
+        align-items: center;
+        width: 125px;
+        gap: 12px;
+    }
+
+
+    input[type="text"] {
         background-color: #f6f6f6;
-        width: 84%;
         border: 0;
     }
-    input[type="date"]{
+
+    input[type="date"] {
         position: relative;
         width: 158px;
         border-radius: 8px;
-        background: url(../../images/icon/calendar.png) no-repeat right 10px center /
-     auto;
+        background: url(../../images/icon/calendar.png) no-repeat right 10px center / auto;
     }
-    input[type="date"]::placeholder{color: #fff;;}
+
+    input[type="date"]::placeholder {
+        color: #fff;
+        ;
+    }
+
     input[type='date']::-webkit-calendar-picker-indicator {
-        position: absolute; 
+        position: absolute;
         left: 0;
         top: 0;
         width: 100%;
         height: 100%;
-        background: transparent; 
-        color: transparent; 
+        background: transparent;
+        color: transparent;
         cursor: pointer;
-      }
-      
+    }
+
     input[type="checkbox"] {
         position: relative;
         width: 22px;
@@ -261,7 +354,6 @@
         appearance: none;
         /* Remove the default checkbox appearance */
         cursor: pointer;
-        /* Optional: cursor pointer to indicate it is clickable */
     }
 
     /* Checked state of the checkbox */
@@ -271,6 +363,7 @@
         border-color: #544483;
         /* Custom border color when checked */
     }
+
     input[type="checkbox"]:checked::before {
         content: '';
         background-image: url(../../images/check.png);
@@ -281,113 +374,224 @@
         width: 15px;
         height: 11px;
     }
-    input[type="checkbox"]:checked + label {
-        color: rgba(0, 0, 0, 0.12); /* Change the label color when checkbox is checked */
+
+    input[type="checkbox"]:checked+label {
+        color: rgba(0, 0, 0, 0.12);
+        /* Change the label color when checkbox is checked */
     }
 
-    label{
+    label {
         font-size: 17px;
         font-family: "Pretendard-L";
     }
-   
-/* 기본스타일 제거, 버튼 모양 재설정 */
-input[type='radio'] {
-    flex-shrink:0;
-    -webkit-appearance: none; /* 웹킷 브라우저에서 기본 스타일 제거*/
-    -moz-appearance: none; /* 모질라 브라우저에서 기본 스타일 제거*/ 
-    appearance: none; /*기본 브라우저에서 기본 스타일 제거*/
-    width: 22px;
-    height: 22px;
-    padding: 0;
-    border: 1px solid #ccc; /*체크되지 않았을 때의 테두리 색상*/
-    border-radius: 50%;
-    outline: none; /*focus 시에 나타나는 기본 스타일 제거*/
-    cursor: pointer;
-  }
-  /* 체크 시 버튼 모양 스타일*/
-  input[type='radio']:checked {
-    background-color: #544483; /*체크 시 내부 원 색상*/
-    border: 4px solid #fff; /*라인이 아닌, 라인과 원 사이 색상*/
-    box-shadow: 0 0 0 1px #ccc; /*라인*/
-  }
+
+    /* 기본스타일 제거, 버튼 모양 재설정 */
+    input[type='radio'] {
+        flex-shrink: 0;
+        -webkit-appearance: none;
+        /* 웹킷 브라우저에서 기본 스타일 제거*/
+        -moz-appearance: none;
+        /* 모질라 브라우저에서 기본 스타일 제거*/
+        appearance: none;
+        /*기본 브라우저에서 기본 스타일 제거*/
+        width: 22px;
+        height: 22px;
+        padding: 0;
+        border: 1px solid #ccc;
+        /*체크되지 않았을 때의 테두리 색상*/
+        border-radius: 50%;
+        outline: none;
+        /*focus 시에 나타나는 기본 스타일 제거*/
+        cursor: pointer;
+    }
+
+    /* 체크 시 버튼 모양 스타일*/
+    input[type='radio']:checked {
+        background-color: #544483;
+        /*체크 시 내부 원 색상*/
+        border: 4px solid #fff;
+        /*라인이 아닌, 라인과 원 사이 색상*/
+        box-shadow: 0 0 0 1px #ccc;
+        /*라인*/
+    }
+
 
 }
-.search-result{
-    .resultext{
-        .main-img{
+
+.search-result {
+    select {
+        width: 72px;
+    }
+
+    .resultext {
+        .main-img {
             width: 320px;
             height: 220px;
             border-radius: 24px;
         }
+
         display: flex;
-        p{
+
+        p {
+            width: max-content;
             font-family: "Pretendard-L";
             font-size: 17px;
-            b{
+
+            b {
                 color: #ce3e48;
             }
         }
-        img{object-fit: contain;}
+
+        img {
+            object-fit: contain;
+        }
     }
-   .result-box{
-    display: flex;
-    justify-content: space-between;
-    border: 1px solid #ddd;
-    border-radius: 24px;
-    padding: 30px;
-    .text-box{
-        p,li{font-family: "Pretendard-L";}
-        .text{
-            width: 1048px;
-            font-size: 16px;
-            color: #555555;
-            overflow: hidden; /* Hide any overflow */
-            text-overflow: ellipsis; /* Add an ellipsis at the end */
-            display: -webkit-box;
-            -webkit-line-clamp: 2; /* Limit to 2 lines */
-            -webkit-box-orient: vertical;
-            margin-bottom: 20px;
-        }
-        h5{
-            font-family: "Pretendard-B";
-            font-size: 25px;          
-            margin-bottom: 20px;  
-        }
-        .address{            
-            font-size: 20px;
-            margin-bottom: 18px;
-        }
-        .category {
-            margin-bottom: 20px;
-            ul{
-                display: flex;
-                gap: 5px;
+
+    .result-box {
+        display: flex;
+        justify-content: space-between;
+        border: 1px solid #ddd;
+        border-radius: 24px;
+        padding: 30px;
+
+        .text-box {
+
+            p,
+            li {
+                font-family: "Pretendard-L";
             }
-            li{
-                width: fit-content;
-                border-radius: 3px;
-                padding: 5px 10px;
-                font-family: "Pretendard-SB";
-                font-size: 14px;  
-                &.category1{
-                    color: #a5067b;
-                    border: 1px solid #a5067b;
+
+            .text {
+                width: 1048px;
+                font-size: 16px;
+                color: #555555;
+                overflow: hidden;
+                /* Hide any overflow */
+                text-overflow: ellipsis;
+                /* Add an ellipsis at the end */
+                display: -webkit-box;
+                -webkit-line-clamp: 2;
+                /* Limit to 2 lines */
+                -webkit-box-orient: vertical;
+                margin-bottom: 20px;
+            }
+
+            h5 {
+                font-family: "Pretendard-B";
+                font-size: 25px;
+                margin-bottom: 20px;
+            }
+
+            .address {
+                font-size: 20px;
+                margin-bottom: 18px;
+            }
+
+            .date {
+                ul {
+                    display: flex;
+                    gap: 20px;
                 }
-                &.category2{
-                    color: #007ac3;
-                    border: 1px solid #007ac3;
+
+                li {
+                    font-size: 17px;
+
+                    b {
+                        margin-left: 5px;
+                    }
                 }
             }
         }
-        .date{
-            ul{display: flex; gap: 20px;}
-            li{font-size: 17px;
-                b{margin-left: 5px;}
-            }
-        }
+
     }
-    
-   }
-    
+
 }
 
+/* 등록페이지 */
+.insert-form {
+    padding: 10px 0;
+    border-top: 2px solid #000;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #eee;
+    border-radius: 0;
+
+    dl {
+        dd {
+            padding: 0 24px;
+
+            li {
+                p {
+                    font-family: "Pretendard-L";
+                    font-size: 16px;
+                }
+            }
+        }
+
+        textarea {
+            min-height: 425px;
+            width: 100%;
+        }
+
+        .category-add {
+            width: 72px;
+            height: 29px;
+            color: #fff;
+            background-color: #000;
+            border-radius: 15px;
+            margin-left: 10px;
+        }
+    }
+
+    .invalid-feedback {
+        border: 0;
+        background-color: transparent;
+        margin-left: 0;
+    }
+
+}
+
+.file-input {
+    display: none;
+}
+
+/* Style the custom label (the clickable button) */
+.file-label {
+    display: inline-block;
+    padding: 25px 0px;
+    width: 100%;
+    background-color: #f6f6f6;
+    border: 2px dashed #dadada;
+    color: white;
+    font-size: 16px;
+    border-radius: 10px;
+    cursor: pointer;
+    text-align: center;
+    transition: background-color 0.3s ease;
+    
+}
+.file-label > div p {
+    font-family: "Pretendard-B" !important;
+    font-size: 20px !important;
+}
+/* Style the label on hover */
+.file-label:hover {}
+
+/* Style for the file names display */
+.file-names {
+    display: block; /* Make each file name appear on a new line */
+    font-size: 16px;
+    color: #333;
+    span{color: #dadada;}
+    .file-wrap{
+        border: 1px solid #dadada;
+        border-radius: 10px;
+        padding: 12px;
+        .file-name{
+            display: flex;
+            align-items: center;
+            img{margin-right: 10px;}
+
+        }
+    }
+}
(파일 끝에 줄바꿈 문자 없음)
 
client/resources/images/icon/excelicon.png (Binary) (added)
+++ client/resources/images/icon/excelicon.png
Binary file is not shown
 
client/resources/images/icon/file.png (Binary) (added)
+++ client/resources/images/icon/file.png
Binary file is not shown
 
client/resources/images/icon/hwpicon.png (Binary) (added)
+++ client/resources/images/icon/hwpicon.png
Binary file is not shown
 
client/resources/images/icon/imgicon.png (Binary) (added)
+++ client/resources/images/icon/imgicon.png
Binary file is not shown
 
client/resources/images/icon/pdficon.png (Binary) (added)
+++ client/resources/images/icon/pdficon.png
Binary file is not shown
 
client/resources/images/icon/zipicon.png (Binary) (added)
+++ client/resources/images/icon/zipicon.png
Binary file is not shown
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -8,7 +8,8 @@
 import NotFound from "./etc/NotFound.vue";
 
 import TotalSearch from "./user/TotalSearch.vue";
-import PicHistory from "./user/PicHistory.vue";
+import PicHistorySearch from "./user/PicHistorySearch.vue";
+import PicHistoryInsert from "./user/PicHistoryInsert.vue";
 
 const routes = [
   { path: "/", name: "MainPage", component: Main, meta: { authorization: ['ROLE_ADMIN', 'ROLE_USER']} },
@@ -17,7 +18,8 @@
   { path: "/notFound.page", name: "NotFoundPage", component: NotFound },
 
   { path: "/TotalSearch.page", name: "TotalSearch", component: TotalSearch },
-  { path: "/PicHistory.page", name: "PicHistory", component: PicHistory },
+  { path: "/PicHistorySearch.page", name: "PicHistorySearch", component: PicHistorySearch },
+  { path: "/PicHistoryInsert.page", name: "PicHistoryInsert", component: PicHistoryInsert },
 
 
 ];
client/views/pages/login/Login.vue
--- client/views/pages/login/Login.vue
+++ client/views/pages/login/Login.vue
@@ -5,7 +5,7 @@
             <div class="breadcrumb-list">
                 <ul>
                     <!-- Bind the image source dynamically for homeicon -->
-                    <li><img :src="homeicon" alt="Home Icon"></li>
+                    <li><img :src="homeicon" alt="Home Icon"><p></p></li>
                     <li><img :src="righticon" alt="Home Icon"></li>
                     <li>로그인</li>
                 </ul>
client/views/pages/user/MyInfo.vue
--- client/views/pages/user/MyInfo.vue
+++ client/views/pages/user/MyInfo.vue
@@ -4,7 +4,7 @@
             <h2>내 정보 수정</h2>
             <div class="breadcrumb-list">
                 <ul>
-                    <li><img :src="homeicon" alt="Home Icon"></li>
+                    <li><img :src="homeicon" alt="Home Icon"><p></p></li>
                     <li><img :src="righticon" alt="Home Icon"></li>
                     <li>내 정보 수정</li>
                 </ul>
 
client/views/pages/user/PicHistoryInsert.vue (added)
+++ client/views/pages/user/PicHistoryInsert.vue
@@ -0,0 +1,142 @@
+<template>
+    <div class="content">
+        <div class="sub-title-area mb-30">
+            <h2>사진 기록물</h2>
+            <div class="breadcrumb-list">
+                <ul>
+                    <li><img :src="homeicon" alt="Home Icon">
+                        <p>기록물</p>
+                    </li>
+                    <li><img :src="righticon" alt=""></li>
+                    <li>사진 기록물</li>
+                </ul>
+            </div>
+        </div>
+        <form action="" class="insert-form mb-50">
+            <dl>
+                <dd>
+                    <label for="id" class="require">제목</label>
+                    <div class="wfull"><input type="text" id="id" value="" placeholder="제목을 입력하세요." ></div>
+                </dd>
+                <div class="hr"></div>
+                <dd>
+                    <label for="year">생산연도</label>
+                    <input type="text" id="year" value="" placeholder="생산연도를 입력하세요">
+
+                </dd>
+                <div class="hr"></div>
+                <dd>
+                    <label for="address">주소</label>
+                    <div class="wfull"><input type="text" id="address" value="" placeholder="주소를 입력하세요" ></div>
+
+                </dd>
+                <div class="hr"></div>
+                <dd>
+                    <label for="text">내용</label>
+                    <textarea name="" id=""></textarea>
+
+                </dd>
+                <div class="hr"></div>
+                <dd>
+                    <label for="category" class="flex align-center">
+                        <p>카테고리</p><button class="category-add">추가하기</button>
+                    </label>
+                    <ul class="category">
+                        <li class="category1">카테고리1 <button class="cancel"><b>✕</b></button></li>
+                        <li class="category2">카테고리2 <button class="cancel"><b>✕</b></button></li>
+                    </ul>
+
+                </dd>
+                <div class="hr"></div>
+                <dd>
+                    <label for="file" class="require">파일</label>
+                    <ul class="wfull">
+                        <li class="flex align-center">
+                            <p>파일첨부</p>
+                            <div class="invalid-feedback"><img :src="erroricon" alt=""><span>첨부파일은 10건까지 등록 가능하며, 건당 최대
+                                    100MB를 초과할 수 없습니다.</span></div>
+                        </li>
+                        <li class="file-insert">
+                            <input type="file" id="fileInput" class="file-input" multiple @change="showFileNames">
+                            <label for="fileInput" class="file-label mb-20">
+                                <div class="flex-center align-center"><img :src="fileicon" alt="">
+                                    <p>파일첨부하기</p>
+                                </div>
+                                <p>파일을 첨부하시려면 이 영역으로 파일을 끌고 오거나 클릭해주세요</p>
+                            </label>
+                            <p class="mb-10">파일목록</p>
+                            <div id="fileNames" class="file-names">
+                                <span v-if="fileNames.length === 0">선택된 파일이 없습니다.</span>
+                                <div v-for="(file, index) in fileNames" :key="index" class="flex-sp-bw mb-5 file-wrap">
+                                    <div class="file-name">
+                                        <!-- Corrected here: Use file.icon instead of fileicons.img -->
+                                        <img :src="file.icon" alt="fileicon">
+                                        <p>{{ file.name }}</p>
+                                    </div>
+                                    <button class="cancel" @click="removeFile(index)"><b>✕</b></button>
+                                </div>
+                            </div>
+                        </li>
+
+                    </ul>
+
+                </dd>
+            </dl>
+        </form>
+
+        <div class="btn-group flex-center">
+            <button class="signout">회원탈퇴</button>
+            <button class="update">수정</button>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            // Define the image sources
+            homeicon: 'client/resources/images/icon/home.png',
+            erroricon: 'client/resources/images/icon/error.png',
+            righticon: 'client/resources/images/icon/right.png',
+            fileicon: 'client/resources/images/icon/file.png',
+            fileNames: [],
+        };
+    },
+    methods: {
+        showFileNames(event) {
+            const files = event.target.files;
+            this.fileNames = [];  // Clear previous file names
+
+            for (let i = 0; i < files.length; i++) {
+                const file = files[i];
+                const fileType = file.name.split('.').pop().toLowerCase();  // Get file extension
+
+                // Set default icon
+                let iconPath = this.fileicons;
+
+                // Determine the icon based on file type
+                if (['jpg', 'jpeg', 'png', 'gif'].includes(fileType)) {
+                    iconPath = 'client/resources/images/icon/imgicon.png';  // Example for image files
+                } else if (['pdf'].includes(fileType)) {
+                    iconPath = 'client/resources/images/icon/pdficon.png';  // Example for PDF files
+                } else if (['xls'].includes(fileType)) {
+                    iconPath = 'client/resources/images/icon/excelicon.png';  // Example for audio files
+                } else if (['hwp'].includes(fileType)) {
+                    iconPath = 'client/resources/images/icon/hwpicon.png';  // Example for video files
+                }
+
+                // Push the file name and corresponding icon to the fileNames array
+                this.fileNames.push({
+                    name: file.name,
+                    icon: iconPath
+                });
+            }
+        },
+        removeFile(index) {
+            // Remove file from the list
+            this.fileNames.splice(index, 1);
+        }
+    }
+};
+</script>
client/views/pages/user/PicHistorySearch.vue (Renamed from client/views/pages/user/PicHistory.vue)
--- client/views/pages/user/PicHistory.vue
+++ client/views/pages/user/PicHistorySearch.vue
@@ -5,7 +5,7 @@
             <div class="breadcrumb-list">
                 <ul>
                     <!-- Bind the image source dynamically for homeicon -->
-                    <li><img :src="homeicon" alt="Home Icon"></li>
+                    <li><img :src="homeicon" alt="Home Icon"><p>기록물</p></li>
                     <li><img :src="righticon" alt=""></li>
                     <li>통합검색</li>
                 </ul>
@@ -13,15 +13,6 @@
         </div>
         <form action="search" class="search-form mb-40">
             <dl>
-                <dd class="mb-15">
-                    <p>기록유형</p>
-                    <ul>
-                        <li v-for="(option, index) in checkOptions" :key="index">
-                            <input type="checkbox" :id="'check_button_' + index" :name="'check_button_' + index" />
-                            <label :for="'check_button_' + index">{{ option }}</label>
-                        </li>
-                    </ul>
-                </dd>
                 <dd class="mb-15">
                     <p>검색범위</p>
                     <ul>
@@ -33,7 +24,7 @@
                 </dd>
                 <dd class="mb-15">
                     <p>검색어</p>
-                    <input type="text">
+                    <div class="wfull"><input type="text"></div>
                 </dd>
                 <dd class="mb-15">
                     <p>생산연도</p>
@@ -73,24 +64,30 @@
         </form>
         <div class="search-result">
             <ul>
-                <li v-for="(resultitem, index) in resultitems" :key="index" class="mb-30">
-                    <div class="flex-sp-bw mb-20">
-                        <div class="resultext">
-                            <img :src="resulticon" alt="">
-                            <p>총 <b>{{ resultitem.count }}개</b>의 사진 기록물이 검색되었습니다. </p>
-                        </div>
-                        <router-link :to="{ path: '/' }" class="gopage">모두보기</router-link>
+                <div class="flex-sp-bw mb-20">
+                    <div class="resultext wfull">
+                        <img :src="resulticon" alt="">
+                        <p>총 <b>{{ count }}개</b>의 사진 기록물이 검색되었습니다. </p>
                     </div>
+                    <select v-model="itemsPerPage" @change="changeItemsPerPage">
+                    <option :value="5" selected>5개</option>
+                    <option :value="10">10개</option>
+                    <option :value="15">15개</option>
+                </select>
+
+                </div>
+                <li v-for="(resultitem, index) in paginatedItems" :key="index" class="mb-30">
+
                     <div class="result-box">
                         <div class="main-img"><img :src="resultitem.img" alt=""></div>
                         <div class="text-box">
                             <h5>{{ resultitem.title }}</h5>
                             <p class="address">{{ resultitem.address }}</p>
                             <p class="text">{{ resultitem.content }}</p>
-                            <div class="category">
-                                <ul>
+                            <div class="mb-20">
+                                <ul class="category">
                                     <li v-if="resultitem.category1" class="category1">카테고리1</li>
-            <li v-if="resultitem.category2" class="category2">카테고리2</li>
+                                    <li v-if="resultitem.category2" class="category2">카테고리2</li>
                                 </ul>
                             </div>
                             <div class="date">
@@ -104,6 +101,14 @@
                     </div>
                 </li>
             </ul>
+            <button> <router-link :to="{ path: '/PicHistoryInsert.page' }" class="insert">등록</router-link></button>
+            <div class="pagination">
+              
+                <!-- Previous and Next Page Buttons -->
+                <button @click="previousPage" :disabled="currentPage === 1">Prev</button>
+                <span>{{ currentPage }} / {{ totalPages }}</span>
+                <button @click="nextPage" :disabled="currentPage === totalPages">Next</button>
+            </div>
         </div>
     </div>
 </template>
@@ -112,11 +117,14 @@
 export default {
     data() {
         return {
+            currentPage: 1, // Current page number
+            itemsPerPage: 5,
             resulticon: "client/resources/images/icon/r-check.png",
             homeicon: 'client/resources/images/icon/home.png',
             searchicon: 'client/resources/images/icon/search.png',
             reseticon: 'client/resources/images/icon/reset.png',
             righticon: 'client/resources/images/icon/right.png',
+            count: 23,
             checkOptions: [
                 '전체',
                 '사진',
@@ -143,7 +151,6 @@
             ],
             resultitems: [
                 {
-                    count: 5,
                     img: 'client/resources/images/img6.png',
                     title: '사진 기록물 제목',
                     address: '경상북도 구미시 송정대로 55',
@@ -154,7 +161,6 @@
                     date: '2021-01-01'
                 },
                 {
-                    count: 3,
                     img: 'client/resources/images/img6.png',
                     title: '영상 기록물 제목',
                     address: '경상북도 구미시 송정대로 55',
@@ -165,7 +171,6 @@
                     date: '2022-01-01'
                 },
                 {
-                    count: 3,
                     img: 'client/resources/images/img6.png',
                     title: '미디어 영상 제목',
                     address: '경상북도 구미시 송정대로 55',
@@ -176,7 +181,6 @@
                     date: '2022-01-01'
                 },
                 {
-                    count: 3,
                     img: 'client/resources/images/img6.png',
                     title: '보도자료 제목',
                     address: '경상북도 구미시 송정대로 55',
@@ -188,6 +192,42 @@
                 },
             ]
         };
-    }
+    },
+    computed: {
+        // Total number of pages
+        totalPages() {
+            return Math.ceil(this.resultitems.length / this.itemsPerPage);
+        },
+
+        // Paginated items based on current page and items per page
+        paginatedItems() {
+            const start = (this.currentPage - 1) * this.itemsPerPage;
+            const end = start + this.itemsPerPage;
+            return this.resultitems.slice(start, end);
+        },
+    },
+    methods: {
+        // Change the number of items displayed per page
+        changeItemsPerPage() {
+            this.currentPage = 1; // Reset to first page when changing items per page
+        },
+
+        // Go to the previous page
+        previousPage() {
+            if (this.currentPage > 1) {
+                this.currentPage--;
+            }
+        },
+
+        // Go to the next page
+        nextPage() {
+            if (this.currentPage < this.totalPages) {
+                this.currentPage++;
+            }
+        },
+    },
 };
 </script>
+<style scoped>
+
+</style>
(파일 끝에 줄바꿈 문자 없음)
client/views/pages/user/TotalSearch.vue
--- client/views/pages/user/TotalSearch.vue
+++ client/views/pages/user/TotalSearch.vue
@@ -5,7 +5,7 @@
             <div class="breadcrumb-list">
                 <ul>
                     <!-- Bind the image source dynamically for homeicon -->
-                    <li><img :src="homeicon" alt="Home Icon"></li>
+                    <li><img :src="homeicon" alt="Home Icon"><p></p></li>
                     <li><img :src="righticon" alt=""></li>
                     <li>통합검색</li>
                 </ul>
@@ -33,7 +33,7 @@
                 </dd>
                 <dd class="mb-15">
                     <p>검색어</p>
-                    <input type="text">
+                    <div class="wfull"><input type="text"></div>
                 </dd>
                 <dd class="mb-15">
                     <p>생산연도</p>
@@ -79,7 +79,7 @@
                             <img :src="resulticon" alt="">
                             <p>총 <b>{{ resultitem.count }}개</b>의 사진 기록물이 검색되었습니다. </p>
                         </div>
-                        <router-link :to="{ path: '/' }" class="gopage">모두보기</router-link>
+                        <router-link :to="{ path: '/' + resultitem.id }" class="gopage">모두보기</router-link>
                     </div>
                     <div class="result-box">
                         <div class="main-img"><img :src="resultitem.img" alt=""></div>
@@ -87,8 +87,8 @@
                             <h5>{{ resultitem.title }}</h5>
                             <p class="address">{{ resultitem.address }}</p>
                             <p class="text">{{ resultitem.content }}</p>
-                            <div class="category">
-                                <ul>
+                            <div class="mb-20">
+                                <ul class="category">
                                     <li v-if="resultitem.category1" class="category1">카테고리1</li>
             <li v-if="resultitem.category2" class="category2">카테고리2</li>
                                 </ul>
@@ -151,7 +151,8 @@
                     category1: true,
                     category2: true,
                     year: 2020,
-                    date: '2021-01-01'
+                    date: '2021-01-01',
+                    id: 'PicHistorySearch.page'
                 },
                 {
                     count: 3,
Add a comment
List