jichoi / calendar star
최정임 최정임 05-16
250516 최정임
@935d95499f370a040c6282c1a6947f8a5603d5e9
 
client/resources/img/addsubmenu.png (Binary) (added)
+++ client/resources/img/addsubmenu.png
Binary file is not shown
 
client/resources/img/addtopmenu.png (Binary) (added)
+++ client/resources/img/addtopmenu.png
Binary file is not shown
 
client/resources/img/arrow-rg.png (Binary) (added)
+++ client/resources/img/arrow-rg.png
Binary file is not shown
 
client/resources/img/arrow.png (Binary) (added)
+++ client/resources/img/arrow.png
Binary file is not shown
 
client/resources/img/menuicon2.png (Binary) (added)
+++ client/resources/img/menuicon2.png
Binary file is not shown
 
client/resources/img/topmenu.png (Binary) (added)
+++ client/resources/img/topmenu.png
Binary file is not shown
client/resources/scss/admin/content.scss
--- client/resources/scss/admin/content.scss
+++ client/resources/scss/admin/content.scss
@@ -1,10 +1,12 @@
-.login{
+.login {
     background-color: #EFF1FA;
     height: 100vh;
-    .card{
+
+    .card {
         padding-top: 30rem;
-        .card-body{
-           
+
+        .card-body {
+
             background-color: #fff;
             margin: 0 auto;
             width: 600px;
@@ -15,69 +17,102 @@
             gap: 30px;
             flex-direction: column;
         }
-        .card-title{
+
+        .card-title {
             text-align: center;
         }
-        .form-label{
-            display: flex
-            ;
-                align-items: center;
-                font-weight: 700;
-                font-size: 15px;
-                margin-bottom: 10px;
-                img{margin-right: 3px;}
+
+        .form-label {
+            display: flex;
+            align-items: center;
+            font-weight: 700;
+            font-size: 15px;
+            margin-bottom: 10px;
+
+            img {
+                margin-right: 3px;
+            }
         }
-        .box{margin-bottom: 30px;
-            button{width: 100%; background-color: #1F3F99;
-                img{margin-right: 10px;}
+
+        .box {
+            margin-bottom: 30px;
+
+            button {
+                width: 100%;
+                background-color: #1F3F99;
+
+                img {
+                    margin-right: 10px;
+                }
             }
         }
     }
-  
+
 }
-.sidemenu{
-    width: 350px; 
+
+.sidemenu {
+    width: 350px;
     margin-right: 20px;
-    .myinfo{
+
+    .myinfo {
         text-align: center;
         padding: 25px 20px 20px 20px;
         margin-bottom: 20px;
         border-radius: 20px;
         background: linear-gradient(to bottom, #1F3F99, #3354CE);
-        .name-box{
+
+        .name-box {
             margin-bottom: 30px;
-            .img-area{
+
+            .img-area {
                 margin: 0 auto;
                 width: 165px;
-    
-                .name{
+
+                .name {
                     font-size: 25px;
                     font-weight: 700;
                     color: #fff;
                 }
-                .info{
+
+                .info {
                     background-color: #0A216D;
                     border-radius: 100px;
                     display: flex;
                     align-items: center;
                     gap: 10px;
                     justify-content: center;
-                   
-                    p{color: #fff; font-size: 15px;}
+
+                    p {
+                        color: #fff;
+                        font-size: 15px;
+                    }
                 }
             }
         }
-        
-        .info-box{
+
+        .info-box {
             background-color: #fff;
             border-radius: 15px;
             display: flex;
             justify-content: space-between;
-            li{text-align: center; border-right: 1px solid #E7EAF4; width: 25%;
-                p{font-size: 35px; font-weight: 700; margin: 20px 0;}
+
+            li {
+                text-align: center;
+                border-right: 1px solid #E7EAF4;
+                width: 25%;
+
+                p {
+                    font-size: 35px;
+                    font-weight: 700;
+                    margin: 20px 0;
+                }
             }
-            li:last-child{border: 0;}
-            .name{
+
+            li:last-child {
+                border: 0;
+            }
+
+            .name {
                 text-align: center;
                 display: flex;
                 justify-content: center;
@@ -91,25 +126,52 @@
                 color: #fff;
                 border-radius: 100px;
             }
-            .name.yellow{background-color:#EDAB0C;}
-            .name.blue{background-color:#1D75E1;}
-            .name.red{background-color:#E92727;}
+
+            .name.yellow {
+                background-color: #EDAB0C;
+            }
+
+            .name.blue {
+                background-color: #1D75E1;
+            }
+
+            .name.red {
+                background-color: #E92727;
+            }
         }
     }
-    .myinfo.profile{
+
+    .myinfo.profile {
         background: #fff;
-        .name-box{margin: 20px 0;}
-        .img-area{
+
+        .name-box {
+            margin: 20px 0;
+        }
+
+        .img-area {
             width: 100%;
-            .img{
+
+            .img {
                 position: relative;
-                width: 150px;  height: 190px; border: 1px solid #D7DCF1; 
+                width: 150px;
+                height: 190px;
+                border: 1px solid #D7DCF1;
                 padding: 10px;
                 margin: 0 auto;
-                .close-btn{position: absolute; top: 0; right: 10px;}
-                img{height: 100%; object-fit: cover; }
+
+                .close-btn {
+                    position: absolute;
+                    top: 0;
+                    right: 10px;
+                }
+
+                img {
+                    height: 100%;
+                    object-fit: cover;
+                }
             }
-            .info{
+
+            .info {
                 border-top: 1px solid #9498A94D;
                 margin: 0 auto;
                 padding-top: 30px;
@@ -117,122 +179,227 @@
                 width: 240px;
                 background-color: transparent;
                 border-radius: 0;
+
                 .file {
-                    background-color: #EFF1FA; width: 120px; border: #213F9A 1px solid ; border-radius: 10px; padding: 7px 0;
+                    background-color: #EFF1FA;
+                    width: 120px;
+                    border: #213F9A 1px solid;
+                    border-radius: 10px;
+                    padding: 7px 0;
                     margin-top: 10px;
-                  }
-                  
-                  .file-label {
+                }
+
+                .file-label {
                     display: flex;
                     gap: 5px;
                     justify-content: center;
                     cursor: pointer;
-                    p{color: #000;}
-                  }
-                  
-                  input[type="file"] {
+
+                    p {
+                        color: #000;
+                    }
+                }
+
+                input[type="file"] {
                     display: none;
-                  }
-               }
+                }
+            }
         }
     }
-    .myinfo.simple{
+
+    .myinfo.simple {
         background: transparent;
-        .img-area{
-            img{width: 75px;
-             height: 75px;}
-             .info{
+
+        .img-area {
+            img {
+                width: 75px;
+                height: 75px;
+            }
+
+            .info {
                 background-color: #DEE2F5;
-                p{color: #000;}              
-                .fa-bars{
+
+                p {
+                    color: #000;
+                }
+
+                .fa-bars {
                     width: 2px;
                     height: 14px;
                     background-color: #213F9A1A;
                 }
-             }
-             .name{color: #000;}
+            }
+
+            .name {
+                color: #000;
+            }
         }
-        details[open] > summary {
-         
+
+        details[open]>summary {
+
             background: #213F9A;
             color: #fff;
-            
-            .icon{display: block;}
-          }
+
+            .icon {
+                display: block;
+            }
+        }
 
     }
-    .menu-box{
-        summary{
+
+    .menu-box {
+        summary {
             cursor: pointer;
             border: 1px solid #213F9A;
             color: #000;
             display: flex;
             justify-content: space-between;
             font-size: 17px;
-                text-align: left;
-                padding: 10px 15px;
+            text-align: left;
+            padding: 10px 15px;
             border-radius: 10px;
-            .icon{display: none;}
+
+            .icon {
+                display: none;
+            }
         }
-       
+
         margin-top: 20px;
-        ul{padding: 10px 10px 0px 10px;}
-        li{
+
+        ul {
+            padding: 10px 10px 0px 10px;
+        }
+
+        li {
             margin-bottom: 10px;
-            a{display: flex; justify-content: space-between;}
-            
-            
+
+            a {
+                display: flex;
+                justify-content: space-between;
+                width: 100%;
+            }
+
+
         }
     }
-    .boxs{
-        background-color: #fff; border-radius: 20px; padding: 20px; margin-bottom: 20px;
-        .box{display: flex; justify-content: space-between; margin-bottom: 15px;
-            h3{text-align: center;
+    .menu-box.danil{
+        a{display: block;
+            cursor: pointer;
+            border: 1px solid #213F9A;
+            color: #000;
+           
+            font-size: 17px;
+            text-align: left;
+            padding: 10px 15px;
+            border-radius: 10px;
+            margin-bottom: 10px;
+            li{
+                display: flex;
+                justify-content: space-between;
+                margin-bottom: 0px;
+                .icon {
+                    display: none;
+                }
+            }
+        }
+        a.active-link{
+            background: #213F9A;
+            li{
+                p{
+                    color: #fff;
+                }
+                .icon {
+                    display: block;
+                }
+            }
+        }
+    }
+    .boxs {
+        background-color: #fff;
+        border-radius: 20px;
+        padding: 20px;
+        margin-bottom: 20px;
+
+        .box {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 15px;
+
+            h3 {
+                text-align: center;
                 color: #fff;
                 font-size: 16px;
-                font-weight: 700;}
-        }
-        .img-area{margin: 0 12.5px;}
-        h4{
-            font-size: 19px;
                 font-weight: 700;
-                text-align: center;
-                line-height: 22px;
-                img{margin-right: 10px;}
-                margin-bottom: 15px;
+            }
         }
-        i.fa-bars{display: block; width: 2px; height: 14px; background-color: #D7DCF1;}
-        .sm-box{
+
+        .img-area {
+            margin: 0 12.5px;
+        }
+
+        h4 {
+            font-size: 19px;
+            font-weight: 700;
+            text-align: center;
+            line-height: 22px;
+
+            img {
+                margin-right: 10px;
+            }
+
+            margin-bottom: 15px;
+        }
+
+        i.fa-bars {
+            display: block;
+            width: 2px;
+            height: 14px;
+            background-color: #D7DCF1;
+        }
+
+        .sm-box {
             width: 185px;
             background-color: #F4F6FD;
             border-radius: 10px;
             text-align: center;
-            h3{
+
+            h3 {
                 background-color: #213F9A;
                 border-radius: 10px;
                 height: 35px;
                 line-height: 35px;
             }
-            p{
+
+            p {
                 font-size: 30px;
                 font-weight: 700;
             }
         }
-        .bd-box{
+
+        .bd-box {
             border: 1px solid #D7DCF1;
             border-radius: 10px;
             padding: 19px 40px 19px 40px;
             display: flex;
             align-items: center;
             gap: 30px;
-            div{font-size: 18px; 
-                span{font-size: 18px; font-weight: 800; margin-left:23px;}
+
+            div {
+                font-size: 18px;
+
+                span {
+                    font-size: 18px;
+                    font-weight: 800;
+                    margin-left: 23px;
+                }
             }
         }
-        .color-boxs{
+
+        .color-boxs {
             display: flex;
             justify-content: space-between;
-            .box{
+
+            .box {
                 display: block;
                 text-align: center;
                 width: 96px;
@@ -241,35 +408,54 @@
                 font-weight: 700;
                 border-radius: 10px;
                 padding-bottom: 24px;
-                h3{background-color: #999999; border-top-left-radius: 10px; border-top-right-radius: 10px; width: 100%; height: 33px;
+
+                h3 {
+                    background-color: #999999;
+                    border-top-left-radius: 10px;
+                    border-top-right-radius: 10px;
+                    width: 100%;
+                    height: 33px;
                     line-height: 33px;
-                    margin-bottom: 17px;}
+                    margin-bottom: 17px;
+                }
             }
-            .box.red{
+
+            .box.red {
                 background-color: #FEF3F3;
-                h3{background-color: #E92727;}
+
+                h3 {
+                    background-color: #E92727;
+                }
 
             }
-            .box.green{
+
+            .box.green {
                 background-color: #EFF9FB;
-                h3{background-color: #3C97AB;}
+
+                h3 {
+                    background-color: #3C97AB;
+                }
 
             }
 
         }
-        
+
     }
+
     .router-link-active p {
-        color: #213F9A; /* 원하는 색상으로 변경 */
+        color: #213F9A;
+        /* 원하는 색상으로 변경 */
         font-weight: 700;
-      }
-      
-      
+    }
+
+
 }
-.content{
-    .pagination{
+
+.content {
+    .pagination {
         margin-top: 20px;
         margin-bottom: 5rem;
+
         ul {
             display: flex;
             list-style: none;
@@ -277,121 +463,181 @@
             gap: 8px;
             justify-content: center;
             align-items: center;
-          }
-          
-          li {
+        }
+
+        li {
             width: 35px;
             height: 35px;
             text-align: center;
-    line-height: 35px;
+            line-height: 35px;
             border: 1px solid #BDCBE8;
             border-radius: 4px;
             cursor: pointer;
             background-color: #fff;
             color: #333;
             transition: 0.2s;
-          }
-          
-          li:hover:not(.disabled) {
+        }
+
+        li:hover:not(.disabled) {
             background-color: #f0f0f0;
-          }
-          
-          li.active {
+        }
+
+        li.active {
             background-color: #1D75E1;
             color: white;
             font-weight: bold;
-          }
-          
-          li.arrow {
+        }
+
+        li.arrow {
             font-weight: bold;
-          }
-          
-          li.disabled {
+        }
+
+        li.disabled {
             opacity: 0.5;
             cursor: not-allowed;
-          }
+        }
     }
-    
-    .title{
+
+    .title {
         display: flex;
         justify-content: space-between;
         align-items: center;
         margin-bottom: 10px;
-        
-        h2{font-size: 24px; font-weight: 700; display: flex; gap: 20px;
-            span{border: 1px solid #E92727; border-radius: 100px; color: #E92727; font-size: 15px; text-align: center; padding: 5px 20px;}
+
+        h2 {
+            font-size: 24px;
+            font-weight: 700;
+            display: flex;
+            gap: 20px;
+
+            span {
+                border: 1px solid #E92727;
+                border-radius: 100px;
+                color: #E92727;
+                font-size: 15px;
+                text-align: center;
+                padding: 5px 20px;
+            }
         }
-        .sub{display: flex; align-items: center; gap: 3px;}
+
+        .sub {
+            display: flex;
+            align-items: center;
+            gap: 3px;
+        }
     }
-    .top-content{display: flex; justify-content: space-between; gap: 40px; margin-bottom: 15px;}
-    .boxs{
+
+    .top-content {
+        display: flex;
+        justify-content: space-between;
+        gap: 40px;
+        margin-bottom: 15px;
+    }
+
+    .boxs {
         // width: 550px;
-    
-        .blue-box{
+
+        .blue-box {
             background-color: #D7DCF1;
-            border-radius: 10px; 
+            border-radius: 10px;
             padding: 30px;
-            
-            .box{background-color: #fff; text-align: center; 
+
+            .box {
+                background-color: #fff;
+                text-align: center;
                 padding: 29px 0;
                 border-radius: 10px;
-                .time{font-size: 35px; font-weight: 700;} 
-                
+
+                .time {
+                    font-size: 35px;
+                    font-weight: 700;
+                }
+
             }
-            .buttons{
-                display: flex; gap: 25px;
+
+            .buttons {
+                display: flex;
+                gap: 25px;
                 align-items: center;
                 justify-content: center;
                 margin-top: 10px;
-                i.fa-bars{display: block; width: 1px; height: 40px; background-color: #fff;}
+
+                i.fa-bars {
+                    display: block;
+                    width: 1px;
+                    height: 40px;
+                    background-color: #fff;
+                }
             }
         }
-        .board{
-            border: 1px solid #DDDDDD; border-radius: 10px;
-            table{
 
-                tr{ border-bottom: 1px solid #DDDDDD;}
-                tr:last-child{border: 0;}
-                td{
+        .board {
+            border: 1px solid #DDDDDD;
+            border-radius: 10px;
+
+            table {
+
+                tr {
+                    border-bottom: 1px solid #DDDDDD;
+                }
+
+                tr:last-child {
+                    border: 0;
+                }
+
+                td {
                     border-radius: 10px;
                     border: 0;
                     text-align: center;
-                    p{
+
+                    p {
                         padding: 4px 0;
                         border-radius: 5px;
                         width: 85px;
                     }
                 }
-                    .category-service p{
-                        background-color: #FED9AC; 
-                      }
-                      
-                      .category-internal p{
-                        background-color: #EFF1FA; 
-                      }
-                      
-                      .category-government p{
-                        background-color: #DFD4F0; 
-                      }
-                      .status p{
-                        border: 2px solid #AAAAAA;
-                        border-radius: 100px;
-                        color: #AAAAAA;
-                        font-size: 15px;
-                      }
-                      .status-in-progress p{ border-color: #1D75E1; color: #1D75E1;}
-                      .status-complete p{ color: rgb(39, 96, 55); border-color: rgb(39, 96, 55);  }
-               
+
+                .category-service p {
+                    background-color: #FED9AC;
+                }
+
+                .category-internal p {
+                    background-color: #EFF1FA;
+                }
+
+                .category-government p {
+                    background-color: #DFD4F0;
+                }
+
+                .status p {
+                    border: 2px solid #AAAAAA;
+                    border-radius: 100px;
+                    color: #AAAAAA;
+                    font-size: 15px;
+                }
+
+                .status-in-progress p {
+                    border-color: #1D75E1;
+                    color: #1D75E1;
+                }
+
+                .status-complete p {
+                    color: rgb(39, 96, 55);
+                    border-color: rgb(39, 96, 55);
+                }
+
             }
         }
     }
-    .card{
-        .color-boxs{
+
+    .card {
+        .color-boxs {
             display: flex;
             justify-content: space-between;
             gap: 10px;
             margin-bottom: 20px;
-            .box{
+
+            .box {
                 display: block;
                 text-align: center;
                 width: calc(100% / 6);
@@ -400,306 +646,835 @@
                 font-weight: 700;
                 border-radius: 10px;
                 padding-bottom: 24px;
-                h3{background-color: #333333; color: #fff; border-radius: 10px;width: 100%; height: 50px;
+
+                h3 {
+                    background-color: #333333;
+                    color: #fff;
+                    border-radius: 10px;
+                    width: 100%;
+                    height: 50px;
                     line-height: 50px;
-                    margin-bottom: 17px; font-size: 20px;}
+                    margin-bottom: 17px;
+                    font-size: 20px;
+                }
             }
-            .box.red{
+
+            .box.red {
                 background-color: #FEF3F3;
-                h3{background-color: #E92727;}
+
+                h3 {
+                    background-color: #E92727;
+                }
 
             }
-            .box.green{
+
+            .box.green {
                 background-color: #EFF9FB;
-                h3{background-color: #3C97AB;}
+
+                h3 {
+                    background-color: #3C97AB;
+                }
             }
-            .box.blue{
+
+            .box.blue {
                 background-color: #E9EFF8;
-                h3{background-color: #1D75E1;}
+
+                h3 {
+                    background-color: #1D75E1;
+                }
             }
-            .box.purple{
+
+            .box.purple {
                 background-color: #F5EFFA;
-                h3{background-color: #A36CD4;}
+
+                h3 {
+                    background-color: #A36CD4;
+                }
             }
-            .box.orange{
+
+            .box.orange {
                 background-color: #FFF8F3;
-                h3{background-color: #F7941C;}
+
+                h3 {
+                    background-color: #F7941C;
+                }
             }
 
         }
-        .name-box{
+
+        .name-box {
             margin-bottom: 20px;
-            .img-area{
+
+            .img-area {
                 flex-shrink: 0;
                 margin-right: 30px;
                 width: 300px;
-                height: 150px;
+                height: 180px;
                 background-color: #EFF1FA;
                 border-radius: 20px;
-                text-align: center;
-                padding: 20px;
-                .img{
+                align-items: center;
+    justify-content: center;
+    display: flex;
+                
+
+                .img {
+                    position: relative;
                     display: flex;
                     justify-self: center;
                     background-color: #fff;
                     width: 92px;
                     height: 110px;
                     padding: 8px;
-                    img{object-fit: cover;     width: 100%;
-                        height: 100%;}
+                    .close-btn {
+                        position: absolute;
+                        top: 0;
+                        right: 10px;
+                    }
+                    img {
+                       
+                        object-fit: cover;
+                        width: 100%;
+                        height: 100%;
+                    }
                 }
             }
-            form{
+            .img-area.column{
+                flex-direction: column;
+            }
+
+            form {
                 input[readonly] {
                     border-color: #fff;
                     background-color: #fff !important;
                     cursor: context-menu;
-                  }
-                  .col-12 {
-                    input{margin: 4px 10px;}
-                    label{line-height: 48px;}
-                  }
+                }
+
+                .col-12 {
+                    input {
+                        margin: 9px 10px;
+                    }
+
+                    label {
+                        line-height: 48px;
+                    }
+                }
             }
 
         }
+
         .sch-form-wrap {
             justify-self: end;
             margin-bottom: 20px;
-            .input-group{
-                .form-select, .form-control{
+
+            .input-group {
+
+                .form-select,
+                .form-control {
                     height: 40px;
                     border-color: #C7CFE3;
                     font-size: 16px;
                 }
-                .form-control{padding-right: 30px; padding-left: 10px;}
-                .ico-sch{right: 5px;}
-            }
-            
-          }
-          .sch-form-wrap.title-wrap{justify-content: space-between; width: 100%;
-            h3{
-                img{margin: 5px 5px 0 0;}
-            }
-            .input-group{width: auto; 
-                
-            }
-        }
-          .tbl-wrap{
-            table.buseo{
-                tbody{
-                    tr{cursor: pointer;}
+
+                .form-control {
+                    padding-right: 30px;
+                    padding-left: 10px;
+                }
+
+                .ico-sch {
+                    right: 5px;
                 }
             }
-            th,td{text-align: center !important; font-size: 16px !important;}
+
+        }
+
+        .sch-form-wrap.title-wrap {
+            justify-content: space-between;
+            width: 100%;
+
+            h3 {
+                img {
+                    margin: 5px 5px 0 0;
+                }
+            }
+
+            .input-group {
+                width: auto;
+
+            }
+        }
+
+        .tbl-wrap {
+            table.buseo {
+                tbody {
+                    tr {
+                        cursor: pointer;
+                    }
+                }
+            }
+
+            th,
+            td {
+                text-align: center !important;
+                font-size: 16px !important;
+            }
+
             .status-approved {
                 color: #1D75E1;
                 font-weight: 700;
-              }
-              
-              .status-pending {
+            }
+
+            .status-pending {
                 color: #E92727;
                 font-weight: 700;
-              }
-              .expired td{
-                background-color: #F6F6F6; /* 연회색 배경 */
+            }
+            .status-green {
+                color: #219A8C;
+                font-weight: 700;
+            }
+
+            .expired td {
+                background-color: #F6F6F6;
+                /* 연회색 배경 */
                 filter: grayscale(50%);
                 opacity: 0.6;
-              }
-          }
-        p.require{
-            text-align: right;
-            img{margin-top: 9px;}
             }
-        .card-body{
-            .flex{display: flex; align-items: center;}
-            .flex.sb{justify-content: space-between;}
-           .card-title{            
-            margin-bottom: 20px;
-           }
-           .sub{
-            margin-right: 20px;
-            img{width: 50px; height: 50px;}
-            .date{margin-left: 10px;}
-           }
-           .sch-wrap{
-            border: 1px solid #213F9A;
-            padding: 20px;
-            border-radius: 10px;
-            margin-bottom: 20px;
-            .buttons{gap: 5px; margin-top: 0;}
-            .sch-form-wrap{margin-bottom: 0;}
-           }
-            form{
-                
+        }
+
+        p.require {
+            text-align: right;
+
+            img {
+                margin-top: 9px;
+            }
+        }
+
+        .card-body {
+            .flex {
+                display: flex;
+                align-items: center;
+            }
+            .align-top{align-items: flex-start;}
+            .flex.sb {
+                justify-content: space-between;
+            }
+
+            .card-title {
+                margin-bottom: 20px;
+            }
+
+            .sub {
+                margin-right: 20px;
+
+                img {
+                    width: 50px;
+                    height: 50px;
+                }
+
+                .date {
+                    margin-left: 10px;
+                }
+            }
+
+            .sch-wrap {
+                border: 1px solid #213F9A;
+                padding: 20px;
+                border-radius: 10px;
+                margin-bottom: 20px;
+
+                .buttons {
+                    gap: 5px;
+                    margin-top: 0;
+                }
+
+                .sch-form-wrap {
+                    margin-bottom: 0;
+                }
+            }
+            .sch-form-wrap.search {
+                position: relative;
+                flex-direction: column;
+                background-color: #EFF1FA;
+                padding: 20px;
+                border-radius: 10px;
+                margin-right: 20px;
+                width: 420px;
+                height: 78rem;
+                .sidemenu{max-height: 66rem; overflow-y: auto;}
+                details{
+                    width: 100%;
+                    summary{
+                        border: 0;
+                        align-items: center;
+                        justify-content: flex-start;
+                        gap: 5px;
+                        .icon{display: block;}
+                        p{color: #213F9A; font-weight: 700; margin-right: 10px;}
+                    }
+                    .arrow {
+                        margin-right: 10px;
+                      }
+                      li{
+                        margin-left: 40px;
+                        a{
+                            justify-content: flex-start;
+                            align-items: center;
+                            img{margin-right: 10px;}
+                        }
+                      }
+                     
+                }
+                details[open]>summary {
+
+                }
+                .buttons{position: absolute; bottom: 40px;}
+                .input-group{
+                    display: block;
+                    margin-bottom: 20px;
+                }
+                table{
+                    width: 100%; 
+                    thead{
+                        
+                        th{
+                            background-color: #C7CFE3;
+                            position: sticky;
+                            top: -1px;
+                            border: 1px solid #C7CFE3;
+                            border-right: 1px solid #C7CFE3;
+                        }
+                    }
+                }
+                .table-scroll {
+  max-height: max-content; /* 원하는 높이 설정 */
+  overflow-y: auto;
+}
+            }
+            form {
+                width: 100%;
                 border: 1px solid #C7CFE3;
-            border-radius: 10px; overflow: hidden;} 
-            .col-12{
+                border-radius: 10px;
+                overflow: hidden;
+                .second-label{
+                    background-color: #fff !important;
+                }
+                
+            }
+            form.salary{
+                display: flex;
+                .yearsalary{width: 100%;}
+            }
+            .col-12 {
+                min-height: 4rem;
                 width: 100%;
                 display: flex;
                 border-bottom: 1px solid #C7CFE3;
-                label{width: 140px ;background: #EFF1FA; font-weight: 600; font-size: 16px; text-align: center; line-height: 70px; flex-shrink: 0; position: relative;}
-                p.require{
-                    position: absolute;
-                    right: 37px;
-                    top: 23px;
+               
+                label {
+                    width: 140px;
+                    background: #EFF1FA;
+                    font-weight: 600;
+                    font-size: 16px;
+                    text-align: center;
+                    flex-shrink: 0;
+                    position: relative;
+                    display: flex;
+                    border-right: 1px solid #C7CFE3;
+                    align-items: center;
+                    justify-content: center;
+
+                    p {
+                        position: relative;
+                    }
+
+                    button {
+                        margin-left: 5px;
+                    }
                 }
-                .d-flex{display: flex; flex-shrink: 0;}
-               select, input{margin: 15px 10px; border-color: #DDDDDD; height: var(--tk-input-h-sm);}
-               .form-control[readonly]{background-color: #EFF1FA;}
-               .invalid-feedback{color: #E92727; font-size: 13px;}
-               .box{
-                margin: 15px 10px;
-                input{margin: 0;}
-                p{margin-top: 5px;}
-               }
-               .approval-container{
-                display: flex;
-                 flex-direction: column;
+
+                p.require {
+                    position: absolute;
+                    right: -13px;
+                    top: 0;
+                }
+
+                .d-flex {
+                    display: flex;
+                    flex-shrink: 0;
+                    align-items: center;
+                }
+
+                select,
+                input {
+                    margin: 9px 10px;
+                    border-color: #DDDDDD;
+                    height: var(--tk-input-h-sm);
+                }
+
+                .form-control[readonly] {
+                    background-color: #EFF1FA;
+                }
+
+                .invalid-feedback {
+                    color: #E92727;
+                    font-size: 13px;
+                }
+
+                .box {
+                    margin: 15px 10px;
+
+                    input {
+                        margin: 0;
+                    }
+
+                    p {
+                        margin-top: 5px;
+                    }
+                }
+
+                .approval-container {
+                    display: flex;
+                    flex-direction: column;
                     gap: 8px;
                     margin: 15px 10px;
-                    .addapproval{
+
+                    .addapproval {
                         gap: 5px;
                         align-items: center;
-                        .form-control,  .form-select{margin:  0 ;}
-                        .delete-button{margin-left: 10px;}
+
+                        .form-control,
+                        .form-select {
+                            margin: 0;
+                            flex-shrink: 0;
+                        }
+
+                        .delete-button {
+                            margin-left: 10px;
+                        }
+
+                        label {
+                            width: 95px;
+                            line-height: 30px;
+                            background-color: #333333;
+                            color: #fff;
+                            border-radius: 5px;
+                        }
                     }
-               }
-             
-              
-             
+                }
+
+                .tbl-wrap {
+                    width: 100%;
+
+                    table {
+                        thead {
+                            tr{
+                                th {
+                                    border-right: 1px solid #C7CFE3;
+                                    border-bottom: 1px solid #C7CFE3;
+                                  
+                                }
+    
+                                th:last-child {
+                                    border-right: 0;
+                                }
+                            }
+                           
+                        }
+
+                        tbody {
+                            td {
+                                border-right: 1px solid #C7CFE3;
+
+                                input {
+                                    margin: 0;
+                                }
+
+                                
+                            }
+
+                            td:last-child {
+                                border-right: 0;
+                            }
+
+                            tr:last-child td {
+                                border-bottom: 0;
+                            }
+
+                        }
+                    }
+
+                }
+
+
             }
-            .col-12.return{
-                .form-label{background-color: #FBC1C1;}
-                .form-control{background-color: #FFF2F2;}
+            .col-12.form-title{justify-content: center; background-color: #C7CFE3; font-weight: 600;
+                align-items: center; gap: 10px;
+                button{
+
+                }
             }
-            .border-x{border: 0;}
-            .buttons{display: flex; gap: 10px; justify-content: end; margin-top:5rem;
-                .btn-red{border-color: #E92727; color: #E92727; background-color: #EFF1FA;}
-                
+            .col-12.return {
+                background-color: #FFF2F2 !important;
+                .form-label {
+                    background-color: #FBC1C1;
+                }
+
+                .form-control {
+                    background-color: transparent !important;
+                    border-color: transparent !important;
+                }
             }
-            .hyuga{
-                label{line-height: 40rem;}
-                input.textarea{min-height: 40rem;}
-              }
-              .chuljang{
-                label{line-height: 17rem;}
-                input.textarea{min-height: 17rem;}
-              }
-            .form-card{
+
+            .border-x {
+                border: 0;
+            }
+
+            .buttons {
+                display: flex;
+                gap: 10px;
+                justify-content: end;
+                margin-top: 5rem;
+
+                .btn-red {
+                    border-color: #E92727;
+                    color: #E92727;
+                    background-color: #EFF1FA;
+                }
+
+            }
+
+            .hyuga {
+                label {
+                    line-height: 40rem;
+                }
+
+                input.textarea {
+                    min-height: 40rem;
+                }
+            }
+
+            .chuljang {
+                label {
+                    line-height: 17rem;
+                }
+
+                input.textarea {
+                    min-height: 17rem;
+                }
+            }
+
+            .form-card {
                 position: relative;
                 border: 1px solid #CCCCCC;
                 border-radius: 10px;
                 padding: 30px;
-                h1{margin: 18px 0 48px 0; text-align: center;}
+
+                h1 {
+                    margin: 18px 0 48px 0;
+                    text-align: center;
+                }
+
+                .hyuga {
+                    label {
+                        line-height: 40rem;
+                    }
+
+                    input.textarea {
+                        min-height: 40rem;
+                    }
+                }
+
+                .chuljang {
+                    label {
+                        line-height: 17rem;
+                    }
+
+                    input.textarea {
+                        min-height: 17rem;
+                    }
+                }
+
+                .tbl2 {
+                    width: 30rem;
+
+                    table {
+                        .thead {
+                            .th {
+                                writing-mode: vertical-rl;
+                                padding: 0;
+                                width: 50px;
+                            }
+                        }
+                    }
+                }
+
+                .approval-box {
+                    position: absolute;
+                    right: 30px;
+                    top: 30px;
+                }
+
+
+
+
+            }
+
+            .detail {
                 input[readonly] {
                     border-color: #fff;
                     background-color: #fff !important;
                     cursor: context-menu;
-                  }
-                  .hyuga{
-                    label{line-height: 40rem;}
-                    input.textarea{min-height: 40rem;}
-                  }
-                  .chuljang{
-                    label{line-height: 17rem;}
-                    input.textarea{min-height: 17rem;}
-                  }
-                  .tbl2{
-                    width: 30rem;
-                    table{
-                        .thead{
-                            .th{
-                                writing-mode: vertical-rl; padding: 0; width: 50px;
-                            }
-                        }
-                    }
-                  }
-                  .approval-box{position: absolute; right: 30px; top: 30px;}
-                   
-                   
-                    
-                
+                }
             }
-            .tbl2{
-                table{
+
+            .tbl2 {
+                table {
                     table-layout: fixed;
                     margin-bottom: 10px;
-                    .thead{
-                        .th{background-color: #C7CFE3;  }
-                        td{background-color: #EFF1FA; height: 40px; font-weight: 700;} 
-                    } 
-                    td{padding: 0; border: 1px solid #C7CFE3; }
+
+                    .thead {
+                        .th {
+                            background-color: #C7CFE3;
+                        }
+
+                        td {
+                            background-color: #EFF1FA;
+                            height: 40px;
+                            font-weight: 700;
+                        }
+                    }
+
+                    td {
+                        padding: 0;
+                        border: 1px solid #C7CFE3;
+                    }
 
                 }
             }
-            .datepicker-conts{
-                margin-bottom: 20px;
-                .datepicker-input{
-                    display: flex;
-                    justify-content: end;
-                    align-items: center;
-                    gap: 5px;
-                    .form-control{
-                        padding-right: 16px;
-                        border-color: #C7CFE3;
+            .tbl3{
+                th,td{border: 0; border-bottom: 0 !important;}
+                thead{
+                    background-color: #EFF1FA;
+                    th{padding: 10px;}
+                }
+                tbody{
+                    td{padding: 0 10px;
+                        .form-select{width: -webkit-fill-available;}
                     }
-                    mark{background-color: transparent;}
+                    tr:last-child td{border-bottom: 0;}
                 }
             }
             
+
+        }
+
+        .cost-statue {
+            border: 1px solid #213F9A;
+            border-radius: 10px;
+            display: flex;
+            margin-bottom: 10px;
+            justify-content: center;
+            align-items: center;
+
+            .costtitle {
+                font-size: 18px;
+                font-weight: 700;
+                margin-right: 3rem;
+            }
+
+            .d-flex {
+                display: flex;
+                gap: 20px;
+            }
+
+            .col-12 {
+                display: flex;
+                align-items: center;
+
+                p {
+                    font-weight: 600;
+                }
+
+                input {
+                    width: 140px;
+                }
+            }
         }
     }
 }
 
-.modal-overlay {
-    position: fixed;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    background: rgba(0, 0, 0, 0.4);
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    z-index: 1000;
-  }
-  
-  .modal-box {
-    background: white;
-    padding: 20px 30px;
-    border-radius: 8px;
-    text-align: center;
-  }
-  
-  .modal-box button {
-    margin: 10px;
-    padding: 8px 16px;
-    font-size: 14px;
-  }
-  
-  .modal-box .cancel {
-    background: #ccc;
-  }
+.primary {
+    background-color: #213F9A !important;
+}
 
-  .primary{background-color: #213F9A;}
-  a:focus{outline: 0;}
-  *:focus{outline: 0;}
+a:focus {
+    outline: 0;
+}
 
-  .file {
-    background-color: #EFF1FA; width: 120px; border: #213F9A 1px solid ; border-radius: 10px; padding: 7px 0;
+*:focus {
+    outline: 0;
+}
+
+.file {
+    background-color: #EFF1FA;
+    width: 120px;
+    border: #213F9A 1px solid;
+    border-radius: 10px;
+    padding: 7px 0;
     margin-top: 10px;
-  }
-  
-  .file-label {
+}
+
+.file-label {
     width: inherit !important;
     display: flex;
     gap: 5px;
     justify-content: center;
     line-height: 0 !important;
     cursor: pointer;
-    p{color: #000;}
+align-items: center;
+    p {
+        color: #000;
+    }
+}
+
+.file-name {
+    max-width: 150px;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: inline-block;
+    /* or block depending on layout */
+    vertical-align: middle;
+    /* optional */
+}
+
+input[type="file"] {
+    display: none;
+}
+input[type="date"]{
+    width: 200px;
+    padding-right: 10px;
+}
+input[type="button"]{
+    width: 200px;
+    background-color: #333;
+    color: #fff;
+    padding-right: 10px;
+}
+table {
+    thead{
+        .toptitle{
+            th{background-color: #B7C2ED !important;}
+        }
+        .middletitle{
+            th{background-color: #DAE0F7 !important;}
+        }
+        th{
+            p {
+                background-color: #E92727;
+                border-radius: 5px;
+                color: #fff;
+            }
+    
+            p.green {
+                background-color: #219A8C;
+            }
+    
+            p.blue {
+                background-color: #1D75E1;
+            }
+        }
+    }
+   
+    th,
+    td {
+        border: 1px solid #C7CFE3;
+        border-bottom: 1px solid #C7CFE3 !important;
+    }
+    tbody{
+        tr{
+            th{background-color: var(--tk-secondary-5) !important; font-weight: 700 !important;}
+        }
+        
+    }
+}
+
+.chk-area{
+    .form-check{
+        display: flex;
+            align-items: center;
+            justify-content: center;
+    }
+    label{padding-left: 30px !important; line-height: 0;}
+   
+}
+label:focus, button:focus{
+    outline: 0;
+}
+.input-radio{
+    .chk-area{
+        margin: 9px 0 9px 10px;
+        .form-check{
+            label{width: auto !important; line-height: 0 !important; background-color: #fff !important; border-right: 0 !important;}
+        }
+    }
+}
+.popup-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.5);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    z-index: 999;
   }
   
-  input[type="file"] {
-    display: none;
-  }
(파일 끝에 줄바꿈 문자 없음)
+  .popup-content {
+    position: relative;
+    background: white;
+    padding: 20px;
+    border-radius: 10px;
+    
+    text-align: center;
+    .form-control{margin: 0 !important;}
+    .card-title {
+        text-align: left;
+    }
+    .ico-sch{
+        right: 17px !important;
+    }
+    table{
+        th,td{
+            
+    border-right: 1px solid #C7CFE3 !important;
+        }
+    }
+    .close-btn{
+        position: absolute;
+        top: 20px;
+        right: 20px;
+    }
+    .btn.hyuga{background-color: #1D75E1;}
+    .btn.chuljang{background-color: #219A8C;}
+  }
+
+  .datepicker-conts {
+    margin-bottom: 20px;
+}
+.datepicker-input {
+    display: flex;
+    justify-content: end;
+    align-items: center;
+    gap: 5px;
+
+    .form-control {
+        padding-right: 16px !important;
+        border-color: #C7CFE3;
+    }
+
+    mark {
+        background-color: transparent;
+    }
+}
(파일 끝에 줄바꿈 문자 없음)
client/resources/scss/common/component/_input.scss
--- client/resources/scss/common/component/_input.scss
+++ client/resources/scss/common/component/_input.scss
@@ -270,7 +270,7 @@
 		}
 		&:focus {
 			~ label {
-				@include focus($offset: .4rem, $color: $primary);
+				// @include focus($offset: .4rem, $color: $primary);
 			}
 		}
 		&:disabled {
 
client/views/component/Popup/BuseoPopup.vue (added)
+++ client/views/component/Popup/BuseoPopup.vue
@@ -0,0 +1,109 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">부서 목록</h2>
+                      <div class="sch-form-wrap">
+                        <div class="input-group">
+                          <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+                        </div>
+                      </div>
+
+                      <!-- Table  -->
+                      <div class="tbl-wrap">
+                        <table id="myTable" class="tbl data">
+                          <!-- 동적으로 <th> 생성 -->
+                          <thead>
+                            <tr>
+                              <th>부서 </th>
+                              <th>부서장</th>
+                              <th>선택</th>
+                            </tr>
+                          </thead>
+                          <!-- 동적으로 <td> 생성 -->
+                          <tbody>
+                            <tr v-for="(item, index) in popuplistData" :key="index">
+                                <td>{{ item.department }}</td>
+      <td>{{ item.name }}</td>
+      <td>
+        <button
+          type="button"
+          class="btn sm secondary"
+          @click="selectPerson(item)"
+        >
+          선택
+        </button>
+      </td>
+                            </tr>
+                          </tbody>
+                        </table>
+
+                      </div>
+                      <div class="pagination">
+                        <ul>
+                          <!-- 왼쪽 화살표 (이전 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === 1 }"
+                            @click="changePage(currentPage - 1)">
+                            &lt;
+                          </li>
+
+                          <!-- 페이지 번호 -->
+                          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                            @click="changePage(page)">
+                            {{ page }}
+                          </li>
+
+                          <!-- 오른쪽 화살표 (다음 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === totalPages }"
+                            @click="changePage(currentPage + 1)">
+                            &gt;
+                          </li>
+                        </ul>
+                      </div>
+                      <!-- End Table -->
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+            popuplistData: [
+            {
+          department: '총무부',
+          name: '이영희',
+        },
+        {
+          department: '재무부',
+          name: '이영희',
+        },
+      ],
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectPerson(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/ChuljangListPopup.vue (added)
+++ client/views/component/Popup/ChuljangListPopup.vue
@@ -0,0 +1,145 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">출장비 목록</h2>
+                      <div class="sch-form-wrap">
+                        <div class="input-group">
+                          <div class="datepicker-input">
+              <input
+    type="date"
+    class="form-control datepicker cal"
+    :value="startDate"
+    style="max-width: 200px;"
+  />
+  <mark>~</mark>
+  <input
+    type="date"
+    class="form-control datepicker cal"
+    :value="endDate"
+    style="max-width: 200px;"
+  />
+            </div>
+            <select name="" id="" class="form-select">
+                <option value="">전체</option>
+                <option value="">출장지</option>
+                <option value="">출장목적</option>
+              </select>
+                          <div class="sch-input">
+              <input type="text" class="form-control" >
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+                        </div>
+                      </div>
+
+                      <!-- Table  -->
+                      <div class="tbl-wrap">
+                        <table id="myTable" class="tbl data">
+                          <!-- 동적으로 <th> 생성 -->
+                          <thead>
+                            <tr>
+                              <th>출장지 </th>
+                              <th>출장목적</th>
+                              <th>기간</th>
+                              <th>구분(사용처)</th>
+                              <th>금액(사용금액)</th>
+                              <th>지급여부</th>
+                              <th>선택</th>
+                            </tr>
+                          </thead>
+                          <!-- 동적으로 <td> 생성 -->
+                          <tbody>
+                            <tr v-for="(item, index) in popuplistData" :key="index">
+                              <td>{{ item.location }}</td>
+      <td>{{ item.purpose }}</td>
+      <td>{{ item.period }}</td>
+      <td>{{ item.category }}</td>
+      <td>{{ item.amount }}</td>
+      <td>{{ item.paid }}</td>
+      <td>
+        <button
+          type="button"
+          class="btn sm secondary"
+          @click="selectPerson(item)"
+        >
+          선택
+        </button>
+      </td>
+                            </tr>
+                          </tbody>
+                        </table>
+
+                      </div>
+                      <div class="pagination">
+                        <ul>
+                          <!-- 왼쪽 화살표 (이전 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === 1 }"
+                            @click="changePage(currentPage - 1)">
+                            &lt;
+                          </li>
+
+                          <!-- 페이지 번호 -->
+                          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                            @click="changePage(page)">
+                            {{ page }}
+                          </li>
+
+                          <!-- 오른쪽 화살표 (다음 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === totalPages }"
+                            @click="changePage(currentPage + 1)">
+                            &gt;
+                          </li>
+                        </ul>
+                      </div>
+                      <!-- End Table -->
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+            popuplistData: [
+            {
+    location: '서울',
+    purpose: '회의 참석',
+    period: '2025-05-10 ~ 2025-05-12',
+    category: '교통(기차)',
+    amount: '150,000',
+    paid: '지급',
+  }, {
+    location: '서울',
+    purpose: '회의 참석',
+    period: '2025-05-10 ~ 2025-05-12',
+    category: '점심식사',
+    amount: '150,000',
+    paid: '미지급',
+  },
+        
+      ],
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectPerson(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/CodePopup.vue (added)
+++ client/views/component/Popup/CodePopup.vue
@@ -0,0 +1,118 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">코드 목록</h2>
+                      <div class="sch-form-wrap">
+                        <div class="input-group">
+                          <select name="" id="" class="form-select">
+          <option value="">전체</option>
+          <option value="">상위코드</option>
+          <option value="">상위코드명</option>
+          <option value="">코드</option>
+          <option value="">코드명</option>
+        </select>
+                          <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+                        </div>
+                      </div>
+
+                      <!-- Table  -->
+                      <div class="tbl-wrap">
+                        <table id="myTable" class="tbl data">
+                          <!-- 동적으로 <th> 생성 -->
+                          <thead>
+                            <tr>
+                              <th>상위코드 </th>
+                              <th>상위코드명</th>
+                              <th>코드</th>
+                              <th>코드명</th>
+                              <th>선택</th>
+                            </tr>
+                          </thead>
+                          <!-- 동적으로 <td> 생성 -->
+                          <tbody>
+                            <tr v-for="(item, index) in popuplistData" :key="index">
+      <td>{{ item.parentCode }}</td>
+      <td>{{ item.parentCodeName }}</td>
+      <td>{{ item.code }}</td>
+      <td>{{ item.codeName }}</td>
+      <td>
+        <button
+          type="button"
+          class="btn sm secondary"
+          @click="selectPerson(item)"
+        >
+          선택
+        </button>
+      </td>
+    </tr>
+                          </tbody>
+                        </table>
+
+                      </div>
+                      <div class="pagination">
+                        <ul>
+                          <!-- 왼쪽 화살표 (이전 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === 1 }"
+                            @click="changePage(currentPage - 1)">
+                            &lt;
+                          </li>
+
+                          <!-- 페이지 번호 -->
+                          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                            @click="changePage(page)">
+                            {{ page }}
+                          </li>
+
+                          <!-- 오른쪽 화살표 (다음 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === totalPages }"
+                            @click="changePage(currentPage + 1)">
+                            &gt;
+                          </li>
+                        </ul>
+                      </div>
+                      <!-- End Table -->
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+            popuplistData: [
+            {
+        parentCode: '상위코드1',
+        parentCodeName: '상위코드명1',
+        code: '코드1',
+        codeName: '코드명1'
+      },
+      ],
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectPerson(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/CorpCarPopup.vue (added)
+++ client/views/component/Popup/CorpCarPopup.vue
@@ -0,0 +1,105 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">법인차량 목록</h2>
+                      <div class="sch-form-wrap">
+                        <div class="input-group">
+                          <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+                        </div>
+                      </div>
+
+                      <!-- Table  -->
+                      <div class="tbl-wrap">
+                        <table id="myTable" class="tbl data">
+                          <!-- 동적으로 <th> 생성 -->
+                          <thead>
+                            <tr>
+                              <th>차량종류 </th>
+                              <th>차량번호</th>
+                              <th>선택</th>
+                            </tr>
+                          </thead>
+                          <!-- 동적으로 <td> 생성 -->
+                          <tbody>
+                            <tr v-for="(item, index) in popuplistData" :key="index">
+                                <td>{{ item.category }}</td>
+      <td>{{ item.name }}</td>
+      <td>
+        <button
+          type="button"
+          class="btn sm secondary"
+          @click="selectCar(item)"
+        >
+          선택
+        </button>
+      </td>
+                            </tr>
+                          </tbody>
+                        </table>
+
+                      </div>
+                      <div class="pagination">
+                        <ul>
+                          <!-- 왼쪽 화살표 (이전 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === 1 }"
+                            @click="changePage(currentPage - 1)">
+                            &lt;
+                          </li>
+
+                          <!-- 페이지 번호 -->
+                          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                            @click="changePage(page)">
+                            {{ page }}
+                          </li>
+
+                          <!-- 오른쪽 화살표 (다음 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === totalPages }"
+                            @click="changePage(currentPage + 1)">
+                            &gt;
+                          </li>
+                        </ul>
+                      </div>
+                      <!-- End Table -->
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+            popuplistData: [
+            {
+          category: 'ooo',
+          name: 'ooo허 oooo',
+        },
+      ],
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectCar(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/CorpCardPopup.vue (added)
+++ client/views/component/Popup/CorpCardPopup.vue
@@ -0,0 +1,102 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">법인차량 목록</h2>
+                      <div class="sch-form-wrap">
+                        <div class="input-group">
+                          <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+                        </div>
+                      </div>
+
+                      <!-- Table  -->
+                      <div class="tbl-wrap">
+                        <table id="myTable" class="tbl data">
+                          <!-- 동적으로 <th> 생성 -->
+                          <thead>
+                            <tr>
+                              <th>카드명 </th>
+                              <th>선택</th>
+                            </tr>
+                          </thead>
+                          <!-- 동적으로 <td> 생성 -->
+                          <tbody>
+                            <tr v-for="(item, index) in popuplistData" :key="index">
+      <td>{{ item.name }}</td>
+      <td>
+        <button
+          type="button"
+          class="btn sm secondary"
+          @click="selectCard(item)"
+        >
+          선택
+        </button>
+      </td>
+                            </tr>
+                          </tbody>
+                        </table>
+
+                      </div>
+                      <div class="pagination">
+                        <ul>
+                          <!-- 왼쪽 화살표 (이전 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === 1 }"
+                            @click="changePage(currentPage - 1)">
+                            &lt;
+                          </li>
+
+                          <!-- 페이지 번호 -->
+                          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                            @click="changePage(page)">
+                            {{ page }}
+                          </li>
+
+                          <!-- 오른쪽 화살표 (다음 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === totalPages }"
+                            @click="changePage(currentPage + 1)">
+                            &gt;
+                          </li>
+                        </ul>
+                      </div>
+                      <!-- End Table -->
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+            popuplistData: [
+            {
+          name: '법인카드1',
+        },
+      ],
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectCard(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/HrPopup.vue (added)
+++ client/views/component/Popup/HrPopup.vue
@@ -0,0 +1,121 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">직원 목록</h2>
+                      <div class="sch-form-wrap">
+                        <div class="input-group">
+                          <div class="sch-input">
+              <input type="text" class="form-control" placeholder="직원명">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+                        </div>
+                      </div>
+
+                      <!-- Table  -->
+                      <div class="tbl-wrap">
+                        <table id="myTable" class="tbl data">
+                          <!-- 동적으로 <th> 생성 -->
+                          <thead>
+                            <tr>
+                              <th>직책 </th>
+                              <th>직무</th>
+                              <th>부서</th>
+                              <th>이름</th>
+                              <th>아이디</th>
+                              <th>선택</th>
+                            </tr>
+                          </thead>
+                          <!-- 동적으로 <td> 생성 -->
+                          <tbody>
+                            <tr v-for="(item, index) in popuplistData" :key="index">
+                                <td>{{ item.position }}</td>
+      <td>{{ item.role }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.id }}</td>
+      <td>
+        <button
+          type="button"
+          class="btn sm secondary"
+          @click="selectPerson(item)"
+        >
+          선택
+        </button>
+      </td>
+                            </tr>
+                          </tbody>
+                        </table>
+
+                      </div>
+                      <div class="pagination">
+                        <ul>
+                          <!-- 왼쪽 화살표 (이전 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === 1 }"
+                            @click="changePage(currentPage - 1)">
+                            &lt;
+                          </li>
+
+                          <!-- 페이지 번호 -->
+                          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                            @click="changePage(page)">
+                            {{ page }}
+                          </li>
+
+                          <!-- 오른쪽 화살표 (다음 페이지) -->
+                          <li class="arrow" :class="{ disabled: currentPage === totalPages }"
+                            @click="changePage(currentPage + 1)">
+                            &gt;
+                          </li>
+                        </ul>
+                      </div>
+                      <!-- End Table -->
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+            popuplistData: [
+            {
+          position: '과장',
+          role: '인사관리',
+          department: '총무부',
+          name: '김철수',
+          id: 'admin',
+        },
+        {
+          position: '대리',
+          role: '회계',
+          department: '재무부',
+          name: '이영희',
+          id: 'admin1',
+        },
+      ],
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectPerson(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/PaySlipPopup.vue (added)
+++ client/views/component/Popup/PaySlipPopup.vue
@@ -0,0 +1,196 @@
+<template>
+  <div class="popup-overlay" @click.self="$emit('close')">
+    <div class="popup-content">
+      <div class="card">
+        <div class="card-body">
+          <div class="buttons" style="margin: 3rem 0 1rem 0;">
+        <button type="submit" class="btn tertiary xsm">다운로드<VerticalAlignBottomOutlined /></button>
+      </div>
+          <div class="form-card ">
+            <h2>임금명세서</h2>
+            <p class="paydate">지급일 : 2025-04-10</p>
+            <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+              @submit.prevent="handleRegister" novalidate>
+
+              <div class="col-12 ">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label ">성명<p class="require"><img :src="require" alt=""></p>
+                    </label>
+                  <input v-model="email" type="text" name="username" class="form-control" required readonly>
+                </div>
+
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">입사일</label>
+                  <input v-model="password" type="password" name="password" class="form-control" required readonly>
+                </div>
+              </div>
+              <div class="col-12 border-x">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label">부서</label>
+                  <input v-model="email" type="text" name="username" class="form-control" required readonly>
+                </div>
+
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">직급</label>
+                  <input v-model="password" type="password" name="password" class="form-control" required readonly>
+                </div>
+              </div>
+
+
+
+            </form>
+
+            <div class="tbl-wrap " style="margin-top: 1rem;">
+              <table id="myTable" class="tbl data">
+                <!-- 동적으로 <th> 생성 -->
+                <thead>
+                  <tr class="toptitle">
+                    <th colspan="5">세부내역</th>
+                  </tr>
+                  <tr class="middletitle">
+                    <th colspan="3">지급</th>
+                    <th colspan="2">공제</th>
+                  </tr>
+                </thead>
+                <!-- 동적으로 <td> 생성 -->
+                <tbody>
+                  <tr>
+                    <th rowspan="7">매월 지급 </th>
+                    <th>임금항목</th>
+                    <th>지급 금액(원)</th>
+                    <th>공제 항목</th>
+                    <th>공제 금액(원)</th>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+
+                </tbody>
+                <tbody>
+                  <tr>
+                    <th rowspan="3">격월 또는 부정기 지급</th>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <th colspan="2">지급액 계</th>
+                    <td></td>
+                    <th>지금액 계</th>
+                    <td></td>
+                  </tr>
+                  <tr>
+                    <td colspan="3"></td>
+                    <th> 실수령액(원)</th>
+                    <td></td>
+                  </tr>
+                </tbody>
+              </table>
+              <table id="myTable" class="tbl data" style="margin-top: 10px;">
+                <!-- 동적으로 <th> 생성 -->
+                <thead>
+                  <tr class="toptitle">
+                    <th colspan="3">세부내역</th>
+                  </tr>
+                  <tr>
+                    <th>구분</th>
+                    <th>산출식 또는 산출방법</th>
+                    <th>지급액(원)</th>
+                  </tr>
+                </thead>
+                <!-- 동적으로 <td> 생성 -->
+                <tbody>
+                  <tr>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                  </tr>
+
+
+                </tbody>
+
+              </table>
+
+
+            </div>
+          </div>
+
+        </div>
+      </div>
+      <button @click="$emit('close')" class="close-btn">
+        <CloseCircleFilled />
+      </button>
+    </div>
+  </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled,VerticalAlignBottomOutlined } from '@ant-design/icons-vue';
+
+export default {
+  data() {
+    return {
+    }
+  },
+  components: {
+    SearchOutlined, CloseCircleFilled, VerticalAlignBottomOutlined
+  },
+  methods: {
+    selectCar(item) {
+      this.$emit('select', item); // 부모에게 데이터 전달
+    },
+
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+  width: 50%;
+
+}
+h2{font-size: 35px; letter-spacing: 10px;}
+table{width: 100%;}
+.form-control {
+  border-color: #C7CFE3;
+}
+.paydate{text-align: end;}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/component/Popup/ReturnPopup.vue (added)
+++ client/views/component/Popup/ReturnPopup.vue
@@ -0,0 +1,48 @@
+<template>
+    <div  class="popup-overlay" @click.self="$emit('close')">
+                <div class="popup-content">
+                  <div class="card">
+                    <div class="card-body">
+                      <h2 class="card-title">반려 사유</h2>
+                      <textarea name="" id="" class="form-control "></textarea>
+                      <div class="buttons">
+              <button class="btn primary"  type="submit">등록</button>
+              <button class="btn tertiary"  type="submit" @click="$emit('close')">취소</button>
+              </div>
+                    </div>
+                  </div>
+                  <button @click="$emit('close')" class="close-btn">
+                    <CloseCircleFilled />
+                  </button>
+                </div>
+              </div>
+</template>
+<script>
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+
+export default {
+    data() {
+        return {
+        }
+    },
+    components: {
+    SearchOutlined, CloseCircleFilled
+  },
+  methods: {
+    selectCar(item) {
+    this.$emit('select', item); // 부모에게 데이터 전달
+  },
+    
+  }
+}
+</script>
+<style scoped>
+.popup-content {
+    width: 50%;
+    
+}
+.form-control{
+      border-color: #C7CFE3;
+      min-height: 20rem;
+      }
+</style>(파일 끝에 줄바꿈 문자 없음)
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -14,17 +14,15 @@
 import ChuljangList from '../pages/Employee/ChuljangList.vue';
 import HyugaList from '../pages/Employee/HyugaList.vue';
 import HyugaOk from '../pages/Employee/HyugaOk.vue';
-// 관리자
+// 결재관리
 import approval from '../pages/Manager/approval/approval.vue';
 import approvalList from '../pages/Manager/approval/approvalList.vue';
 import approvalRequest from '../pages/Manager/approval/approvalRequest.vue';
-import HyugaInsert from '../pages/Manager/approval/HyugaInsert.vue';
-import HyugaDetail from '../pages/Manager/approval/HyugaDetail.vue';
-import ChuljangInsert from '../pages/Manager/approval/ChuljangInsert.vue';
-import ChuljangDetail from '../pages/Manager/approval/ChuljangDetail.vue';
 import ChuljangPumui from '../pages/Manager/approval/ChuljangPumui.vue';
-import ChuljangPumuiDetail from '../pages/Manager/attendance/ChuljangPumuiDetail.vue';
 import ChuljangBokmyeong from '../pages/Manager/approval/ChuljangBokmyeong.vue';
+
+//근태관리
+import ChuljangPumuiDetail from '../pages/Manager/attendance/ChuljangPumuiDetail.vue';
 import ChuljangBokmyeongDetail from '../pages/Manager/attendance/ChuljangBokmyeongDetail.vue';
 import ChuljangDetailAll from '../pages/Manager/attendance/ChuljangDetailAll.vue';
 import attendance from '../pages/Manager/attendance/attendance.vue';
@@ -32,12 +30,43 @@
 import buseoAttendance from '../pages/Manager/attendance/buseoAttendance.vue';
 import AttendanceDetail from '../pages/Manager/attendance/AttendanceDetail.vue';
 import hyugaStatue from '../pages/Manager/attendance/hyugaStatue.vue';
+import HyugaInsert from '../pages/Manager/approval/HyugaInsert.vue';
+import HyugaDetail from '../pages/Manager/approval/HyugaDetail.vue';
+import BokmyeongInsert from '../pages/Manager/attendance/BokmyeongInsert.vue';
 import ChuljangStatue from '../pages/Manager/attendance/ChuljangStatue.vue';
+import ChuljangInsert from '../pages/Manager/attendance/ChuljangInsert.vue';
 import task from '../pages/Manager/task/task.vue';
+import projectStatue from '../pages/Manager/task/projectStatue.vue';
+import projectDetail from '../pages/Manager/task/projectDetail.vue';
+import meetingInsert from '../pages/Manager/task/meetingInsert.vue';
+import meetingDetail from '../pages/Manager/task/meetingDetail.vue';
+import projectInsert from '../pages/Manager/task/projectInsert.vue';
+import projectTuib from '../pages/Manager/task/projectTuib.vue';
+import projectTuibDetail from '../pages/Manager/task/projectTuibDetail.vue';
 import financial from '../pages/Manager/financial/financial.vue';
+import salaryList from '../pages/Manager/financial/salaryList.vue';
+import employeeSalaryList from '../pages/Manager/financial/employeeSalaryList.vue';
+import employeeSalaryDetail from '../pages/Manager/financial/employeeSalaryDetail.vue';
+import employeeSalaryInsert from '../pages/Manager/financial/employeeSalaryInsert.vue';
+import ChuljangCostList from '../pages/Manager/financial/ChuljangCostList.vue';
+import MeetingCostList from '../pages/Manager/financial/MeetingCostList.vue';
 import asset from '../pages/Manager/asset/asset.vue';
+import CarList from '../pages/Manager/asset/CarList.vue';
+import CardList from '../pages/Manager/asset/CardList.vue';
+import CarInfoManagement from '../pages/Manager/asset/CarInfoManagement.vue';
+import CardInfoManagement from '../pages/Manager/asset/CardInfoManagement.vue';
 import hr from '../pages/Manager/hr/hr.vue';
+import hrSearch from '../pages/Manager/hr/hrSearch.vue';
+import hrManagement from '../pages/Manager/hr/hrManagement.vue';
+import hrDetail from '../pages/Manager/hr/hrDetail.vue';
+import hrInsert from '../pages/Manager/hr/hrInsert.vue';
+import buseoManagement from '../pages/Manager/hr/buseoManagement.vue';
 import system from '../pages/Manager/system/system.vue';
+import userManagement from '../pages/Manager/system/userManagement.vue';
+import accessControlManagement from '../pages/Manager/system/accessControlManagement.vue';
+import commonCodeManagement from '../pages/Manager/system/commonCodeManagement.vue';
+import commonCodeInsert from '../pages/Manager/system/commonCodeInsert.vue';
+import commonCodeDetail from '../pages/Manager/system/commonCodeDetail.vue';
 
 const routes = [
     /* 메인화면 */
@@ -81,7 +110,7 @@
             { path: '/HyugaDetail.page', name: 'HyugaDetail', component: HyugaDetail },
             { path: '/HyugaInsert.page', name: 'HyugaInsert', component: HyugaInsert },
             { path: '/ChuljangStatue.page', name: 'ChuljangStatue', component: ChuljangStatue },
-            { path: '/ChuljangDetail.page', name: 'ChuljangDetail', component: ChuljangDetail },
+            { path: '/BokmyeongInsert.page', name: 'BokmyeongInsert', component: BokmyeongInsert },
             { path: '/ChuljangInsert.page', name: 'ChuljangInsert', component: ChuljangInsert },
             { path: '/ChuljangPumuiDetail.page', name: 'ChuljangPumuiDetail', component: ChuljangPumuiDetail },
             { path: '/ChuljangBokmyeongDetail.page', name: 'ChuljangBokmyeongDetail', component: ChuljangBokmyeongDetail },
@@ -89,11 +118,56 @@
 
         ]
     }, //근태관리
-    { path: '/task-management.page', name: 'task', component: task }, //업무관리
-    { path: '/financial-management.page', name: 'financial', component: financial }, //재무관리
-    { path: '/asset-management.page', name: 'asset', component: asset }, //자산관리
-    { path: '/hr-management.page', name: 'hr', component: hr }, //인사관리
-    { path: '/system-management.page', name: 'system', component: system },  //시스템관리
+    { path: '/task-management.page', name: 'task', component: task,
+        children: [
+            { path: '/projectStatue.page', name: 'projectStatue', component: projectStatue },
+            { path: '/projectDetail.page', name: 'projectDetail', component: projectDetail },
+            { path: '/meetingInsert.page', name: 'meetingInsert', component: meetingInsert },
+            { path: '/meetingDetail.page', name: 'meetingDetail', component: meetingDetail },
+            { path: '/projectInsert.page', name: 'projectInsert', component: projectInsert },
+            { path: '/projectTuib.page', name: 'projectTuib', component: projectTuib },
+            { path: '/projectTuibDetail.page', name: 'projectTuibDetail', component: projectTuibDetail },
+        ]
+     }, //업무관리
+    { path: '/financial-management.page', name: 'financial', component: financial,
+        children: [
+            { path: '/salaryList.page', name: 'salaryList', component: salaryList },
+            { path: '/employeeSalaryList.page', name: 'employeeSalaryList', component: employeeSalaryList },
+            { path: '/employeeSalaryDetail.page', name: 'employeeSalaryDetail', component: employeeSalaryDetail },
+            { path: '/employeeSalaryInsert.page', name: 'employeeSalaryInsert', component: employeeSalaryInsert },
+            { path: '/ChuljangCostList.page', name: 'ChuljangCostList', component: ChuljangCostList },
+            { path: '/MeetingCostList.page', name: 'MeetingCostList', component: MeetingCostList },
+        ]
+     }, //재무관리
+    { path: '/asset-management.page', name: 'asset', component: asset,
+      children: [
+        { path: '/CarList.page', name: 'CarList', component: CarList },
+        { path: '/CarInfoManagement.page', name: 'CarInfoManagement', component: CarInfoManagement },
+        { path: '/CardList.page', name: 'CardList', component: CardList },
+        { path: '/CardInfoManagement.page', name: 'CardInfoManagement', component: CardInfoManagement },
+        
+      ]
+     }, //자산관리
+    { path: '/hr-management.page', name: 'hr', component: hr,
+      children: [
+        { path: '/hrSearch.page', name: 'hrSearch', component: hrSearch },
+        { path: '/hrManagement.page', name: 'hrManagement', component: hrManagement },
+        { path: '/hrDetail.page', name: 'hrDetail', component: hrDetail },
+        { path: '/hrInsert.page', name: 'hrInsert', component: hrInsert },
+        
+        { path: '/buseoManagement.page', name: 'buseoManagement', component: buseoManagement },
+      ]
+    }, //인사관리
+    { path: '/system-management.page', name: 'system', component: system,
+      children:[
+        { path: '/userManagement.page', name: 'userManagement', component: userManagement },
+        { path: '/accessControlManagement.page', name: 'accessControlManagement', component: accessControlManagement },
+        { path: '/commonCodeManagement.page', name: 'commonCodeManagement', component: commonCodeManagement },
+        { path: '/commonCodeInsert.page', name: 'commonCodeInsert', component: commonCodeInsert },
+        { path: '/commonCodeDetail.page', name: 'commonCodeDetail', component: commonCodeDetail },
+        
+      ]
+     },  //시스템관리
 ];
 
 
client/views/pages/Manager/approval/ChuljangBokmyeong.vue
--- client/views/pages/Manager/approval/ChuljangBokmyeong.vue
+++ client/views/pages/Manager/approval/ChuljangBokmyeong.vue
@@ -9,92 +9,99 @@
          <table class="tbl data">
           <tbody>
             <tr class="thead">
-              <td rowspan="2" class="th">승인자</td>
-              <td>과장</td>
-              <td>소장</td>
-            </tr>
-            <tr>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-            </tr>
+                <td rowspan="2" class="th">승인자</td>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="position">{{ approver.position }}</p>
+                </td>
+              </tr>
+              <tr>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="name">{{ approver.name }}</p>
+                  <p class="date">{{ approver.date }}</p>
+                </td>
+              </tr>
           </tbody>
 
          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
+          <form class="row g-3 needs-validation detail"  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
                 <div class="col-12 ">
                   <div class="col-12 border-x">
                     <label for="youremail" class="form-label ">출장구분<p class="require"><img :src="require" alt=""></p></label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly >
+                    <input  v-model="email" type="text" name="username" class="form-control"  readonly >
                   </div>
     
                   <div class="col-12 border-x">
                     <label for="yourPassword" class="form-label">이름</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly   placeholder="주식회사 테이큰 소프트"> 
+                    <input  v-model="password" type="password" name="password" class="form-control"  readonly   placeholder="주식회사 테이큰 소프트"> 
                   </div>
                </div>
                <div class="col-12">
                   <div class="col-12 border-x">
                     <label for="youremail" class="form-label">부서</label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly  placeholder="과장">
+                    <input  v-model="email" type="text" name="username" class="form-control"  readonly  placeholder="과장">
                   </div>
     
                   <div class="col-12 border-x">
                     <label for="yourPassword" class="form-label">직급</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly  placeholder="팀장"> 
+                    <input  v-model="password" type="password" name="password" class="form-control"  readonly  placeholder="팀장"> 
                   </div>
                </div>
                <div class="col-12">
                   <label for="yourName" class="form-label">출장지</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly>
+                  <input  v-model="name" type="text" name="name" class="form-control"  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">출장목적</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">동행자</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12 chuljang">
                   <label for="yourName" class="form-label">복명내용</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control textarea "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">법인카드</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">법인차량</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">여비계산</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12 border-x">
                   <label for="yourName" class="form-label">복명 신청일</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   placeholder="2025-01-01">
+                  <input  v-model="name" type="text" name="name" class="form-control"  readonly   placeholder="2025-01-01">
             </div>
            
                 
               </form>
       </div>
-            <div class="buttons">
-              <button class="btn primary"  type="submit">승인</button>
-                <button class="btn btn-red "  type="submit">반려</button>
-                <button class="btn tertiary "  type="submit">목록</button>
-              </div>
+      <div class="buttons">
+        <button class="btn primary" type="submit">승인</button>
+        <button class="btn  btn-red" type="submit" @click="showPopup = true">반려</button>
+        <button class="btn tertiary " type="submit">목록</button>
+      </div>
+      <ReturnPopup v-if="showPopup" @close="showPopup = false" />
+
 
       </div>
     </div>
 </template>
 
 <script>
+import ReturnPopup from '../../../component/Popup/ReturnPopup.vue';
 export default {
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
+      showPopup: false,
       startDate: today,
       startTime: "09:00", // 기본 시작 시간 09:00
       endDate: today,
@@ -102,6 +109,10 @@
       category: "", 
       dayCount: 1, 
       reason: "", // 사유
+      approvers: [
+        { position: '', name: '', date: '' },
+        { position: '', name: '', date: '' },
+      ],
       listData: [
   {
     type: '연차',
@@ -120,6 +131,9 @@
   }],
     };
   },
+  components: {
+    ReturnPopup
+  },
   computed: {
     // Pinia Store의 상태를 가져옵니다.
     loginUser() {
@@ -128,22 +142,11 @@
     },
   },
   methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
+    hasAnyApprover() {
+      return this.approvers.some(
+        (approver) =>
+          approver.name?.trim() !== '' && approver.date?.trim() !== ''
+      );
     },
     calculateDayCount() {
     const start = new Date(`${this.startDate}T${this.startTime}:00`);
@@ -170,32 +173,9 @@
       }
     }
 
-    this.validateForm(); // dayCount 변경 후 폼 재검증
   },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
     
     
-  },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
   },
 };
 </script>
 
client/views/pages/Manager/approval/ChuljangDetail.vue (deleted)
--- client/views/pages/Manager/approval/ChuljangDetail.vue
@@ -1,186 +0,0 @@
-<template>
-<div class="card ">
-      <div class="card-body">
-          <h2 class="card-title">승인 대기 목록</h2>
-       
-      <div class="form-card">
-        <h1>휴가신청서</h1>
-        <div class="approval-box tbl-wrap tbl2">
-         <table class="tbl data">
-          <tbody>
-            <tr class="thead">
-              <td rowspan="2" class="th">승인자</td>
-              <td>과장</td>
-              <td>소장</td>
-            </tr>
-            <tr>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-            </tr>
-          </tbody>
-
-         </table>
-        </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
-                <div class="col-12 ">
-                  <div class="col-12 border-x">
-                    <label for="youremail" class="form-label ">유형<p class="require"><img :src="require" alt=""></p></label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly >
-                  </div>
-    
-                  <div class="col-12 border-x">
-                    <label for="yourPassword" class="form-label">신청자</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly   placeholder="주식회사 테이큰 소프트"> 
-                  </div>
-               </div>
-               <div class="col-12">
-                  <div class="col-12 border-x">
-                    <label for="youremail" class="form-label">부서</label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly  placeholder="과장">
-                  </div>
-    
-                  <div class="col-12 border-x">
-                    <label for="yourPassword" class="form-label">직급</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly  placeholder="팀장"> 
-                  </div>
-               </div>
-               <div class="col-12">
-                  <label for="yourName" class="form-label">기간</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly>
-            </div>
-            <div class="col-12 hyuga">
-                  <label for="yourName" class="form-label">세부사항</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea" id="yourName" readonly>
-            </div>
-            <div class="col-12 ">
-                  <label for="yourName" class="form-label">신청일</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12 border-x" :class="{ return: isReturned }">
-                  <label for="yourName" class="form-label ">반려사유</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   >
-            </div>
-           
-                
-              </form>
-      </div>
-            <div class="buttons">
-              <button class="btn  btn-red"  type="submit">신청취소</button>
-                <button class="btn secondary"  type="submit">  {{ isReturned ? '재신청' : '수정' }}</button>
-                <button class="btn tertiary "  type="submit">목록</button>
-              </div>
-
-      </div>
-    </div>
-</template>
-
-<script>
-export default {
-  data() {
-    const today = new Date().toISOString().split('T')[0];
-    return {
-      isReturned: true,
-      startDate: today,
-      startTime: "09:00", // 기본 시작 시간 09:00
-      endDate: today,
-      endTime: "18:00", // 기본 종료 시간 18:00
-      category: "", 
-      dayCount: 1, 
-      reason: "", // 사유
-      listData: [
-  {
-    type: '연차',
-    approvalType: '결재',
-    applicant: '홍길동',
-    period: '2025-05-10 ~ 2025-15-03',
-    requestDate: '2025-04-25',
-    status: '대기'
-  },   {
-    type: '반차',
-    approvalType: '전결',
-    applicant: '홍길동',
-    period: '2025-05-01 ~ 2025-05-03',
-    requestDate: '2025-04-25',
-    status: '승인'
-  }],
-    };
-  },
-  computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
-  },
-  methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
-    },
-    calculateDayCount() {
-    const start = new Date(`${this.startDate}T${this.startTime}:00`);
-    const end = new Date(`${this.endDate}T${this.endTime}:00`);
-    
-    let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
-    
-    if (this.startDate !== this.endDate) {
-      // 시작일과 종료일이 다른경우
-      const startDateObj = new Date(this.startDate);
-      const endDateObj = new Date(this.endDate);
-      const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
-      if (this.startTime !== "09:00" || this.endTime !== "18:00") {
-        this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
-      } else {
-        this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
-      }
-    } else {
-      // 시작일과 종료일이 같은 경우
-      if (this.startTime !== "09:00" || this.endTime !== "18:00") {
-        this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
-      } else {
-        this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
-      }
-    }
-
-    this.validateForm(); // dayCount 변경 후 폼 재검증
-  },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
-    
-    
-  },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
-  },
-};
-</script>
client/views/pages/Manager/approval/ChuljangPumui.vue
--- client/views/pages/Manager/approval/ChuljangPumui.vue
+++ client/views/pages/Manager/approval/ChuljangPumui.vue
@@ -1,197 +1,184 @@
 <template>
-<div class="card ">
-      <div class="card-body">
-          <h2 class="card-title">승인 대기 목록</h2>
-       
+  <div class="card ">
+    <div class="card-body">
+      <h2 class="card-title">승인 대기 목록</h2>
+
       <div class="form-card">
         <h1>출장품의서</h1>
         <div class="approval-box tbl-wrap tbl2">
-         <table class="tbl data">
-          <tbody>
-            <tr class="thead">
-              <td rowspan="2" class="th">승인자</td>
-              <td>과장</td>
-              <td>소장</td>
-            </tr>
-            <tr>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-            </tr>
-          </tbody>
+          <table class="tbl data">
+            <tbody>
+              <tr class="thead">
+                <td rowspan="2" class="th">승인자</td>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="position">{{ approver.position }}</p>
+                </td>
+              </tr>
+              <tr>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="name">{{ approver.name }}</p>
+                  <p class="date">{{ approver.date }}</p>
+                </td>
+              </tr>
 
-         </table>
+            </tbody>
+
+          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
-                <div class="col-12 ">
-                  <div class="col-12 border-x">
-                    <label for="youremail" class="form-label ">출장구분<p class="require"><img :src="require" alt=""></p></label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly >
-                  </div>
-    
-                  <div class="col-12 border-x">
-                    <label for="yourPassword" class="form-label">이름</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly   placeholder="주식회사 테이큰 소프트"> 
-                  </div>
-               </div>
-               <div class="col-12">
-                  <div class="col-12 border-x">
-                    <label for="youremail" class="form-label">부서</label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly  placeholder="과장">
-                  </div>
-    
-                  <div class="col-12 border-x">
-                    <label for="yourPassword" class="form-label">직급</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly  placeholder="팀장"> 
-                  </div>
-               </div>
-               <div class="col-12">
-                  <label for="yourName" class="form-label">출장지</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">출장목적</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">동행자</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12 chuljang">
-                  <label for="yourName" class="form-label">내용</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">법인카드</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">법인차량</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
+        <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+          @submit.prevent="handleRegister" novalidate>
+          <div class="col-12 ">
             <div class="col-12 border-x">
-                  <label for="yourName" class="form-label">품의 신청일</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   placeholder="2025-01-01">
+              <label for="youremail" class="form-label ">출장구분<p class="require"><img :src="require" alt=""></p></label>
+              <input v-model="email" type="text" name="username" class="form-control" id="youremail" readonly>
             </div>
-           
-                
-              </form>
-      </div>
-            <div class="buttons">
-              <button class="btn primary"  type="submit">승인</button>
-                <button class="btn btn-red "  type="submit">반려</button>
-                <button class="btn tertiary "  type="submit">목록</button>
-              </div>
 
+            <div class="col-12 border-x">
+              <label for="yourPassword" class="form-label">이름</label>
+              <input v-model="password" type="password" name="password" class="form-control" readonly
+                placeholder="주식회사 테이큰 소프트">
+            </div>
+          </div>
+          <div class="col-12">
+            <div class="col-12 border-x">
+              <label for="youremail" class="form-label">부서</label>
+              <input v-model="email" type="text" name="username" class="form-control" readonly placeholder="과장">
+            </div>
+
+            <div class="col-12 border-x">
+              <label for="yourPassword" class="form-label">직급</label>
+              <input v-model="password" type="password" name="password" class="form-control" readonly placeholder="팀장">
+            </div>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">출장지</label>
+            <input v-model="name" type="text" name="name" class="form-control" readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">출장목적</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">동행자</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12 chuljang">
+            <label for="yourName" class="form-label">내용</label>
+            <input v-model="name" type="text" name="name" class="form-control textarea " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">법인카드</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">법인차량</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">품의 신청일</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12 border-x return">
+            <label for="yourName" class="form-label">반려사유</label>
+            <input v-model="name" type="text" name="name" class="form-control" readonly placeholder="2025-01-01">
+          </div>
+
+
+        </form>
       </div>
+      <div class="buttons">
+        <button class="btn primary" type="submit">승인</button>
+        <button class="btn  btn-red" type="submit" @click="showPopup = true">반려</button>
+        <button class="btn tertiary " type="submit">목록</button>
+      </div>
+      <ReturnPopup v-if="showPopup" @close="showPopup = false" />
+
     </div>
+  </div>
 </template>
 
 <script>
+import ReturnPopup from '../../../component/Popup/ReturnPopup.vue';
 export default {
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
+      showPopup: false,
       startDate: today,
       startTime: "09:00", // 기본 시작 시간 09:00
       endDate: today,
       endTime: "18:00", // 기본 종료 시간 18:00
-      category: "", 
-      dayCount: 1, 
+      category: "",
+      dayCount: 1,
       reason: "", // 사유
+      approvers: [
+        { position: '', name: '', date: '' },
+        { position: '', name: '', date: '' },
+      ],
       listData: [
-  {
-    type: '연차',
-    approvalType: '결재',
-    applicant: '홍길동',
-    period: '2025-05-10 ~ 2025-15-03',
-    requestDate: '2025-04-25',
-    status: '대기'
-  },   {
-    type: '반차',
-    approvalType: '전결',
-    applicant: '홍길동',
-    period: '2025-05-01 ~ 2025-05-03',
-    requestDate: '2025-04-25',
-    status: '승인'
-  }],
+        {
+          type: '연차',
+          approvalType: '결재',
+          applicant: '홍길동',
+          period: '2025-05-10 ~ 2025-15-03',
+          requestDate: '2025-04-25',
+          status: '대기'
+        }, {
+          type: '반차',
+          approvalType: '전결',
+          applicant: '홍길동',
+          period: '2025-05-01 ~ 2025-05-03',
+          requestDate: '2025-04-25',
+          status: '승인'
+        }],
     };
   },
+  components: {
+    ReturnPopup
+  },
   computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
   },
   methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
+    hasAnyApprover() {
+      return this.approvers.some(
+        (approver) =>
+          approver.name?.trim() !== '' && approver.date?.trim() !== ''
+      );
     },
     calculateDayCount() {
-    const start = new Date(`${this.startDate}T${this.startTime}:00`);
-    const end = new Date(`${this.endDate}T${this.endTime}:00`);
-    
-    let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
-    
-    if (this.startDate !== this.endDate) {
-      // 시작일과 종료일이 다른경우
-      const startDateObj = new Date(this.startDate);
-      const endDateObj = new Date(this.endDate);
-      const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
-      if (this.startTime !== "09:00" || this.endTime !== "18:00") {
-        this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
-      } else {
-        this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
-      }
-    } else {
-      // 시작일과 종료일이 같은 경우
-      if (this.startTime !== "09:00" || this.endTime !== "18:00") {
-        this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
-      } else {
-        this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
-      }
-    }
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
 
-    this.validateForm(); // dayCount 변경 후 폼 재검증
-  },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
       } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
       }
+
     },
-    
-    
-  },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
+
+
+
   },
 };
 </script>
+<style scoped>
+td p {
+  width: 125px;
+}
+</style>
client/views/pages/Manager/approval/HyugaDetail.vue
--- client/views/pages/Manager/approval/HyugaDetail.vue
+++ client/views/pages/Manager/approval/HyugaDetail.vue
@@ -21,65 +21,69 @@
 
          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
+          <form class="row g-3 needs-validation detail"  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
                 <div class="col-12 ">
                   <div class="col-12 border-x">
                     <label for="youremail" class="form-label ">유형<p class="require"><img :src="require" alt=""></p></label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly >
+                    <input  v-model="email" type="text" name="username" class="form-control"  readonly >
                   </div>
     
                   <div class="col-12 border-x">
                     <label for="yourPassword" class="form-label">신청자</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly   placeholder="주식회사 테이큰 소프트"> 
+                    <input  v-model="password" type="password" name="password" class="form-control"  readonly   placeholder="주식회사 테이큰 소프트"> 
                   </div>
                </div>
                <div class="col-12">
                   <div class="col-12 border-x">
                     <label for="youremail" class="form-label">부서</label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly  placeholder="과장">
+                    <input  v-model="email" type="text" name="username" class="form-control"  readonly  placeholder="과장">
                   </div>
     
                   <div class="col-12 border-x">
                     <label for="yourPassword" class="form-label">직급</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly  placeholder="팀장"> 
+                    <input  v-model="password" type="password" name="password" class="form-control"  readonly  placeholder="팀장"> 
                   </div>
                </div>
                <div class="col-12">
                   <label for="yourName" class="form-label">기간</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly>
+                  <input  v-model="name" type="text" name="name" class="form-control"  readonly>
             </div>
             <div class="col-12 hyuga">
                   <label for="yourName" class="form-label">세부사항</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea" id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control textarea"  readonly>
             </div>
             <div class="col-12 ">
                   <label for="yourName" class="form-label">신청일</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
-            <div class="col-12 border-x" :class="{ return: isReturned }">
+            <div class="col-12 border-x return" >
                   <label for="yourName" class="form-label ">반려사유</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   >
+                  <input  v-model="name" type="text" name="name" class="form-control"  readonly   >
             </div>
            
                 
               </form>
       </div>
             <div class="buttons">
-              <button class="btn  btn-red"  type="submit">신청취소</button>
-                <button class="btn secondary"  type="submit">  {{ isReturned ? '재신청' : '수정' }}</button>
-                <button class="btn tertiary "  type="submit">목록</button>
+              <button class="btn primary"  type="button">승인</button>
+              <button class="btn  btn-red"  type="button" @click="showPopup = true">반려</button>
+              <button class="btn  btn-red"  type="button">신청취소</button>
+                <button class="btn secondary"  type="button">재신청</button>
+                <button class="btn secondary"  type="button">수정</button>
+                <button class="btn tertiary "  type="button">목록</button>
               </div>
-
+              <ReturnPopup v-if="showPopup" @close="showPopup = false"/>
       </div>
     </div>
 </template>
 
 <script>
+import ReturnPopup from '../../../component/Popup/ReturnPopup.vue';
 export default {
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
-      isReturned: true,
+      showPopup: false,
       startDate: today,
       startTime: "09:00", // 기본 시작 시간 09:00
       endDate: today,
@@ -105,31 +109,14 @@
   }],
     };
   },
+  components: {
+    ReturnPopup
+  },
   computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
+  
   },
   methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
-    },
+   
     calculateDayCount() {
     const start = new Date(`${this.startDate}T${this.startTime}:00`);
     const end = new Date(`${this.endDate}T${this.endTime}:00`);
@@ -157,30 +144,12 @@
 
     this.validateForm(); // dayCount 변경 후 폼 재검증
   },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
+    
     
     
   },
   mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
   },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
-  },
+  
 };
 </script>
client/views/pages/Manager/approval/HyugaInsert.vue
--- client/views/pages/Manager/approval/HyugaInsert.vue
+++ client/views/pages/Manager/approval/HyugaInsert.vue
@@ -7,19 +7,27 @@
       <!-- Multi Columns Form -->
       <form class="row g-3  needs-validation" @submit.prevent="handleSubmit">
         <div class="col-12">
-          <label for="inputName5" class="form-label">유형<p class="require"><img :src="require" alt=""></p></label>
-          <select id="category" class="form-select" v-model="category" style="max-width: 200px;">
-            <option selected>연차</option>
-            <option>반차</option>
-            <option>병가</option>
-            <option>경조</option>
-            <option>무급</option>
-            <option>공가</option>
+          <label for="inputName5" class="form-label">
+            <p>유형
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+          </label>
+          <select id="category" class="form-select" style="max-width: 200px;">
+            <option value="연차">연차</option>
+            <option value="반차">반차</option>
+            <option value="병가">병가</option>
+            <option value="경조">경조</option>
+            <option value="무급">무급</option>
+            <option value="공가">공가</option>
           </select>
         </div>
 
         <div class="col-12">
-          <label for="startDate" class="form-label">시작일<p class="require"><img :src="require" alt=""></p></label>
+          <label for="startDate" class="form-label">
+            <p>시작일
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+          </label>
           <div class="d-flex gap-1">
             <input type="date" class="form-control" id="startDate" v-model="startDate" />
             <!-- 시간 선택을 위한 select 사용 -->
@@ -39,7 +47,11 @@
         </div>
 
         <div class="col-12">
-          <label for="endDate" class="form-label">종료일<p class="require"><img :src="require" alt=""></p></label>
+          <label for="endDate" class="form-label">
+            <p>종료일
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+          </label>
           <div class="d-flex gap-1">
             <input type="date" class="form-control" id="endDate" v-model="endDate" />
             <!-- 종료 시간을 위한 select 사용 -->
@@ -66,11 +78,11 @@
         <div class="col-12">
           <label for="member" class="form-label">
             승인자
-            <button type="button" title="추가" @click="addApproval">
+            <button type="button" title="추가" @click="showPopup = true">
               <PlusCircleFilled />
             </button>
           </label>
-
+          <HrPopup v-if="showPopup" @close="showPopup = false" @select="addApproval" />
           <!-- 반복 렌더링되는 addapproval 항목 -->
           <div class="approval-container">
             <div v-for="(approval, index) in approvals" :key="index" class="d-flex gap-2 addapproval mb-2">
@@ -107,10 +119,12 @@
 
 <script>
 import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
+import HrPopup from '../../../component/Popup/HrPopup.vue';
 export default {
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
+      showPopup: false,
       approvals: [],
       require: "/client/resources/img/require.png",
       startDate: today,
@@ -123,7 +137,7 @@
     };
   },
   components: {
-    PlusCircleFilled, CloseOutlined
+    PlusCircleFilled, CloseOutlined, HrPopup
   },
   computed: {
     // Pinia Store의 상태를 가져옵니다.
@@ -133,11 +147,12 @@
     },
   },
   methods: {
-    addApproval() {
+    addApproval(selectedUser) {
       this.approvals.push({
         category: '결재',
-        name: '',
+        name: selectedUser.name, // or other fields if needed
       });
+      this.showPopup = false; // 팝업 닫기
     },
     // 승인자 삭제
     removeApproval(index) {
client/views/pages/Manager/approval/approvalList.vue
--- client/views/pages/Manager/approval/approvalList.vue
+++ client/views/pages/Manager/approval/approvalList.vue
@@ -7,14 +7,24 @@
           <h3><img :src="h3icon" alt="">승인 대기</h3>
           <div class="input-group">
             <select name="" id="" class="form-select">
-              <option value="">년도</option>
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
             </select>
             <select name="" id="" class="form-select">
-              <option value="">월</option>
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
             </select>
             <div class="sch-input">
-              <input type="text" class="form-control">
-              <button class="ico-sch"><SearchOutlined /></button>
+              <input type="text" class="form-control" placeholder="신청자명">
+              <button class="ico-sch">
+                <SearchOutlined />
+              </button>
             </div>
           </div>
         </div>
@@ -30,18 +40,16 @@
                 <th>신청자</th>
                 <th>기간</th>
                 <th>신청일</th>
-                <th>상태</th>
               </tr>
             </thead>
             <!-- 동적으로 <td> 생성 -->
             <tbody>
-              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastPeriod(item.period) }">
+              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastPeriod(item.period) }" @click="goToPage(item)">
                 <td>{{ item.type }}</td>
                 <td>{{ item.approvalType }}</td>
                 <td>{{ item.applicant }}</td>
                 <td>{{ item.period }}</td>
                 <td>{{ item.requestDate }}</td>
-                <td :class="getStatusClass(item.status)">{{ item.status }}</td>
               </tr>
             </tbody>
           </table>
@@ -70,17 +78,29 @@
           <h3><img :src="h3icon" alt="">승인 이력</h3>
           <div class="input-group">
             <select name="" id="" class="form-select">
-              <option value="">년도</option>
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
             </select>
             <select name="" id="" class="form-select">
-              <option value="">월</option>
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
             </select>
             <select name="" id="" class="form-select">
-              <option value="">상태</option>
+              <option value="all">상태</option>
+              <option value="">승인</option>
+              <option value="">반려</option>
             </select>
             <div class="sch-input">
-              <input type="text" class="form-control">
-              <button class="ico-sch"><SearchOutlined /></button>
+              <input type="text" class="form-control" placeholder="신청자명">
+              <button class="ico-sch">
+                <SearchOutlined />
+              </button>
             </div>
           </div>
         </div>
@@ -101,7 +121,7 @@
             </thead>
             <!-- 동적으로 <td> 생성 -->
             <tbody>
-              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastPeriod(item.period) }">
+              <tr v-for="(item, index) in filteredList" :key="index" :class="{ 'expired': isPastPeriod(item.period) }">
                 <td>{{ item.type }}</td>
                 <td>{{ item.approvalType }}</td>
                 <td>{{ item.applicant }}</td>
@@ -140,9 +160,18 @@
 <script>
 import { ref } from 'vue';
 import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
 export default {
   data() {
     return {
+      selectedStatus: 'all',
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
       currentPage: 1,
       totalPages: 3,
       photoicon: "/client/resources/img/photo_icon.png",
@@ -153,6 +182,27 @@
       selectedYear: '',
       selectedMonth: '',
       listData: [
+        {
+          type: '연차',
+          approvalType: '결재',
+          applicant: '홍길동',
+          period: '2025-05-10 ~ 2025-15-03',
+          requestDate: '2025-04-25',
+        }, {
+          type: '출장-복명',
+          approvalType: '전결',
+          applicant: '홍길동',
+          period: '2025-05-01 ~ 2025-05-03',
+          requestDate: '2025-04-25',
+        }, {
+          type: '출장-품의',
+          approvalType: '전결',
+          applicant: '홍길동',
+          period: '2025-05-01 ~ 2025-05-03',
+          requestDate: '2025-04-25',
+        }
+      ],
+      listData2: [
         {
           type: '연차',
           approvalType: '결재',
@@ -172,11 +222,29 @@
     };
   },
   computed: {
+    filteredList() {
+      if (this.selectedStatus === 'all') {
+        return this.listData2;
+      }
+      return this.listData2.filter((item) => item.status === this.selectedStatus);
+    },
   },
-  components:{
+  components: {
     SearchOutlined
   },
   methods: {
+    goToPage(item) {
+    const type = item.type;
+    if (type === '연차' || type === '반차') {
+      this.$router.push('/hyugaDetail.page');
+    } else if (type === '출장-품의') {
+      this.$router.push('/ChuljangPumui.page');
+    } else if (type === '출장-복명') {
+      this.$router.push('/ChuljangBokmyeong.page');
+    } else {
+      alert('이동할 수 없는 항목입니다.');
+    }
+  },
     changePage(page) {
       if (page < 1 || page > this.totalPages) return;
       this.currentPage = page;
@@ -230,4 +298,6 @@
 };
 </script>
 
-<style scoped></style>
(파일 끝에 줄바꿈 문자 없음)
+<style scoped>
+tr{cursor: pointer;}
+</style>
(파일 끝에 줄바꿈 문자 없음)
client/views/pages/Manager/approval/approvalRequest.vue
--- client/views/pages/Manager/approval/approvalRequest.vue
+++ client/views/pages/Manager/approval/approvalRequest.vue
@@ -1,108 +1,137 @@
 <template>
-<div class="col-lg-12">
-  <div class="card">
-    <div class="card-body">
-      <h2 class="card-title">결재 요청</h2>
-      <div class="sch-form-wrap">
-        <div class="input-group">
-          <select name="" id="" class="form-select">
-          <option value="">년도</option>
-        </select>
-          <select name="" id="" class="form-select">
-          <option value="">월</option>
-        </select>
-          <select name="" id="" class="form-select">
-          <option value="">구분</option>
-        </select>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">결재 요청</h2>
+        <div class="sch-form-wrap">
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option :value="currentYear">{{ currentYear }}년</option>
+  <option value="all">전체</option>
+  <option
+    v-for="year in remainingYears"
+    :key="year"
+    :value="year"
+    v-if="year !== currentYear"
+  >
+    {{ year }}년
+  </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+  <option value="all">전체</option>
+  <option
+    v-for="month in remainingMonths"
+    :key="month"
+    :value="month"
+    v-if="month !== currentMonth"
+  >
+    {{ month }}월
+  </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="" selected>전체</option>
+              <option value="">출장-복명</option>
+              <option value="">출장-품의</option>
+              <option value="">연차</option>
+              <option value="">반차-오전</option>
+              <option value="">반차-오후</option>
+              <option value="">대체휴가</option>
+              <option value="">공가</option>
+              <option value="">병가</option>
+            </select>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>구분 </th>
+                <th>결재구분</th>
+                <th>신청자</th>
+                <th>기간</th>
+                <th>신청일</th>
+                <th>상태</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastPeriod(item.period) }">
+                <td>{{ item.type }}</td>
+                <td>{{ item.approvalType }}</td>
+                <td>{{ item.applicant }}</td>
+                <td>{{ item.period }}</td>
+                <td>{{ item.requestDate }}</td>
+                <td :class="getStatusClass(item.status)">{{ item.status }}</td>
+              </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <!-- End Table -->
+        <div class="buttons">
+          <button type="button" class="btn sm primary" @click="showOptions = true">
+            등록
+          </button>
+
+          <!-- 신청 종류 선택 모달 -->
+          <div v-if="showOptions" class="popup-overlay">
+            <div class="popup-content">
+              <div class="card">
+                <div class="card-body">
+                  <h2 class="card-title">신청종류선택</h2>
+                  <div class="buttons">
+                    <button class="btn hyuga" @click="goToPage('휴가')">휴가신청</button>
+                    <button class="btn chuljang" @click="goToPage('출장')">출장신청</button>
+                  </div>
+                </div>
+              </div>
+              <button class="close-btn" @click="showOptions = false"> <CloseCircleFilled /></button>
+            </div>
+
+          </div>
         </div>
       </div>
-     
-      <!-- Table  -->
-      <div class="tbl-wrap">
-        <table id="myTable" class="tbl data">
-          <!-- 동적으로 <th> 생성 -->
-          <thead>
-            <tr>
-              <th>구분 </th>
-              <th>결재구분</th>
-              <th>신청자</th>
-              <th>기간</th>
-              <th>신청일</th>
-              <th>상태</th>
-            </tr>
-          </thead>
-          <!-- 동적으로 <td> 생성 -->
-          <tbody>
-            <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastPeriod(item.period) }">
-    <td>{{ item.type }}</td>
-    <td>{{ item.approvalType }}</td>
-    <td>{{ item.applicant }}</td>
-    <td>{{ item.period }}</td>
-    <td>{{ item.requestDate }}</td>
-    <td :class="getStatusClass(item.status)">{{ item.status }}</td>
-  </tr>
-          </tbody>
-        </table>
-  
-      </div>
-      <div class="pagination">
-        <ul>
-      <!-- 왼쪽 화살표 (이전 페이지) -->
-      <li 
-        class="arrow" 
-        :class="{ disabled: currentPage === 1 }" 
-        @click="changePage(currentPage - 1)"
-      >
-      &lt;
-      </li>
-
-      <!-- 페이지 번호 -->
-      <li 
-        v-for="page in totalPages" 
-        :key="page" 
-        :class="{ active: currentPage === page }" 
-        @click="changePage(page)"
-      >
-        {{ page }}
-      </li>
-
-      <!-- 오른쪽 화살표 (다음 페이지) -->
-      <li 
-        class="arrow" 
-        :class="{ disabled: currentPage === totalPages }" 
-        @click="changePage(currentPage + 1)"
-      >
-      &gt;
-      </li>
-    </ul>
-  </div>
-      <!-- End Table -->
-      <div class="buttons">
-    <button type="button" class="btn sm primary" @click="showOptions = true">
-      등록
-    </button>
-
-    <!-- 신청 종류 선택 모달 -->
-    <div v-if="showOptions" class="modal-overlay">
-      <div class="modal-box">
-        <p>신청 종류를 선택하세요</p>
-        <button @click="goToPage('휴가')">휴가신청</button>
-        <button @click="goToPage('출장')">출장신청</button>
-        <button class="cancel" @click="showOptions = false">취소</button>
-      </div>
     </div>
   </div>
-    </div>
-  </div>
-</div>
 </template>
 
 <script>
 import { ref } from 'vue';
-
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
 export default {
   data() {
     return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
       showOptions: false,
       currentPage: 1,
       totalPages: 3,
@@ -113,23 +142,26 @@
       selectedYear: '',
       selectedMonth: '',
       listData: [
-  {
-    type: '연차',
-    approvalType: '결재',
-    applicant: '홍길동',
-    period: '2025-05-10 ~ 2025-15-03',
-    requestDate: '2025-04-25',
-    status: '대기'
-  },   {
-    type: '반차',
-    approvalType: '전결',
-    applicant: '홍길동',
-    period: '2025-05-01 ~ 2025-05-03',
-    requestDate: '2025-04-25',
-    status: '승인'
-  }],
+        {
+          type: '연차',
+          approvalType: '결재',
+          applicant: '홍길동',
+          period: '2025-05-10 ~ 2025-15-03',
+          requestDate: '2025-04-25',
+          status: '대기'
+        }, {
+          type: '반차',
+          approvalType: '전결',
+          applicant: '홍길동',
+          period: '2025-05-01 ~ 2025-05-03',
+          requestDate: '2025-04-25',
+          status: '승인'
+        }],
       filteredData: [],
     };
+  },
+  components: {
+    SearchOutlined, CloseCircleFilled
   },
   computed: {
   },
@@ -151,28 +183,28 @@
       }
     },
     goToPage(type) {
-  if (type === '휴가') {
-    this.$router.push('/HyugaInsert.page');
-  } else if (type === '출장') {
-    this.$router.push('/ChuljangDetail.page');
-  }
-},
+      if (type === '휴가') {
+        this.$router.push('/HyugaInsert.page');
+      } else if (type === '출장') {
+        this.$router.push('/ChuljangDetail.page');
+      }
+    },
     getStatusClass(status) {
       if (status === '승인') return 'status-approved';
       if (status === '대기') return 'status-pending';
       return '';
     },
     isPastPeriod(period) {
-    // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
-    const endDateStr = period.split('~')[1]?.trim();
-    if (!endDateStr) return false;
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
 
-    const endDate = new Date(endDateStr);
-    const today = new Date();
+      const endDate = new Date(endDateStr);
+      const today = new Date();
 
-    // 현재 날짜보다 과거면 true
-    return endDate < today;
-  }
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    }
   },
   created() {
   },
 
client/views/pages/Manager/asset/CarInfoManagement.vue (added)
+++ client/views/pages/Manager/asset/CarInfoManagement.vue
@@ -0,0 +1,275 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">차량정보 관리</h2>
+      <div class="flex align-top">
+        <div class="sch-form-wrap search">
+          <div class="input-group" style="display: flex;">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">차량명</option>
+              <option value="">차량번호</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch">
+                <SearchOutlined />
+              </button>
+            </div>
+          </div>
+          <div class="tbl-wrap table-scroll">
+            <table id="myTable" class="tbl data">
+              <!-- 동적으로 <th> 생성 -->
+              <thead>
+                <tr>
+                  <th>차량목록 </th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+                  <td></td>
+                </tr>
+              </tbody>
+            </table>
+  
+          </div>
+        </div>
+  
+        <div style="width: 100%;">
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">차량 정보</h3>
+            <div class="buttons" style="margin: 0;">
+              <button type="submit" class="btn sm tertiary">신규</button>
+              <button type="reset" class="btn sm secondary">등록</button>
+              <button type="delete" class="btn sm btn-red">삭제</button>
+            </div>
+          </div>
+          <form class="row g-3 pt-3  needs-validation " @submit.prevent="handleSubmit"
+            style="margin-bottom: 3rem;">
+            <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label"><p>차종<p class="require"><img :src="require" alt=""></p></p></label>
+            <input type="text" class="form-control" id="where" v-model="where"  />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label"><p>차량번호<p class="require"><img :src="require" alt=""></p></p></label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+  
+       </div>
+       <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">연료종류</label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label"><p>소유형태<p class="require"><img :src="require" alt=""></p></p></label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+  
+       </div>
+       <div class="col-12  ">
+              <label for="prvonsh" class="form-label"><p>차량명<p class="require"><img :src="require" alt=""></p></p></label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+            </div>
+       <div class="col-12  ">
+              <label for="prvonsh" class="form-label"><p>담당자<p class="require"><img :src="require" alt=""></p></p></label>
+              <input type="text" class="form-control textarea" id="reason" v-model="selectedname" readonly/>
+              <input type="button" class="form-control " value="검색" @click="showPopup = true" />
+              <HrPopup v-if="showPopup" @close="showPopup = false" @select="addApproval"/>
+            </div>
+            <div class="col-12 chuljang ">
+              <label for="prvonsh" class="form-label">비고</label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+            </div>
+            <div class="col-12 border-x input-radio">
+              <label for="prvonsh" class="form-label"> <p>상태
+                <p class="require"><img :src="require" alt=""></p>
+                </p></label>
+                <select class="form-select" >
+                <option value="선택">선택</option>
+                <option value=""></option>
+                <option value=""></option>
+              </select>
+            </div>
+
+
+          </form>
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">예약현황</h3>
+          </div>
+          <div class="tbl-wrap chk-area">
+            <table id="myTable" class="tbl data">
+
+              <thead>
+                <tr>
+                  <th>차종</th>
+                  <th>운행자</th>
+                  <th>기간</th>
+                  <th>상태</th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+      <td>{{ item.type }}</td>
+      <td>{{ item.driver }}</td>
+      <td>{{ item.startDate }} ~ {{ item.endDate }}</td>
+      <td :class="getStatusClass(item.status)">
+        {{ item.status }}
+      </td>
+    </tr>
+              </tbody>
+            </table>
+
+          </div>
+          <div class="pagination">
+            <ul>
+              <!-- 왼쪽 화살표 (이전 페이지) -->
+              <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+                &lt;
+              </li>
+
+              <!-- 페이지 번호 -->
+              <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                @click="changePage(page)">
+                {{ page }}
+              </li>
+
+              <!-- 오른쪽 화살표 (다음 페이지) -->
+              <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+                &gt;
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+import HrPopup from "../../../component/Popup/HrPopup.vue";
+export default {
+  data() {
+    return {
+      showPopup: false,
+      selectedname: '',
+      approvals: [],
+      require: "/client/resources/img/require.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: [
+        {
+          type: 'SUV',
+          driver: '김철수',
+          startDate: '2025-05-01',
+          endDate: '2025-05-03',
+          status: '예약', // 사용중
+        },
+        {
+          type: '세단',
+          driver: '이영희',
+          startDate: '2025-05-05',
+          endDate: '2025-05-06',
+          status: '예약', // 예약됨
+        },
+        {
+          type: '트럭',
+          driver: '박민호',
+          startDate: '2025-04-25',
+          endDate: '2025-04-28',
+          status: '반납', // 반납됨
+        },
+      ],
+    }
+  },
+  components: {
+    SearchOutlined, HrPopup
+  },
+  methods: {
+    addApproval(selectedUser) {
+      this.approvals.push({
+        name: selectedUser.name
+      });
+
+      this.selectedname = selectedUser.name; // 입력창에 표시
+      this.showPopup = false;
+    },
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '예약') return 'status-pending';
+      if (status === '반납') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/asset/CarList.vue (added)
+++ client/views/pages/Manager/asset/CarList.vue
@@ -0,0 +1,223 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">사용현황</h2>
+        <div class="sch-form-wrap title-wrap">
+          <h3><img :src="h3icon" alt="">예약현황</h3>
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">차량명</option>
+              <option value="">차량번호</option>
+              <option value="">운행자</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>차종 </th>
+                <th>차량번호</th>
+                <th>차량명</th>
+                <th>부서</th>
+                <th>운행자</th>
+                <th>기간</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+      <td>{{ item.type }}</td>
+      <td>{{ item.number }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.driver }}</td>
+      <td>{{ item.startDate }} ~ {{ item.endDate }}</td>
+    </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <div class="sch-form-wrap title-wrap">
+          <h3><img :src="h3icon" alt="">사용이력</h3>
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">차량명</option>
+              <option value="">차량번호</option>
+              <option value="">운행자</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+              <thead>
+              <tr>
+                <th>차종 </th>
+                <th>차량번호</th>
+                <th>차량명</th>
+                <th>부서</th>
+                <th>운행자</th>
+                <th>기간</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+      <td>{{ item.type }}</td>
+      <td>{{ item.number }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.driver }}</td>
+      <td>{{ item.startDate }} ~ {{ item.endDate }}</td>
+    </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+          type: 'SUV',
+          number: '12가3456',
+          name: '쏘렌토',
+          department: '총무부',
+          driver: '김철수',
+          startDate: '2025-05-01',
+          endDate: '2025-05-10',
+        },
+        {
+          type: '세단',
+          number: '34나7890',
+          name: '그랜저',
+          department: '영업부',
+          driver: '이영희',
+          startDate: '2025-05-03',
+          endDate: '2025-05-04',
+        },],
+      filteredData: [],
+    };
+  },
+  computed: {
+  },
+  components:{
+    SearchOutlined
+  },
+  methods: {
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    registerLeave() {
+      console.log("등록 버튼 클릭됨");
+
+      // Vue의 반응성 문제를 피하기 위해, 새로운 객체를 추가합니다.
+      this.DeptData = [
+        ...this.DeptData,
+        { member: '', deptNM: '', acceptTerms: false }
+      ];
+
+      console.log(this.DeptData); // 배열 상태 출력
+    },
+    getStatusClass(status) {
+      if (status === '승인') return 'status-approved';
+      if (status === '대기') return 'status-pending';
+      return '';
+    },
+    
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped></style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/asset/CardInfoManagement.vue (added)
+++ client/views/pages/Manager/asset/CardInfoManagement.vue
@@ -0,0 +1,268 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">카드정보 관리</h2>
+      <div class="flex align-top">
+        <div class="sch-form-wrap search">
+          <div class="input-group" style="display: flex;">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch">
+                <SearchOutlined />
+              </button>
+            </div>
+          </div>
+          <div class="tbl-wrap table-scroll">
+            <table id="myTable" class="tbl data">
+              <!-- 동적으로 <th> 생성 -->
+              <thead>
+                <tr>
+                  <th>카드목록 </th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+                  <td></td>
+                </tr>
+              </tbody>
+            </table>
+
+          </div>
+        </div>
+
+        <div style="width: 100%;">
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">카드 정보</h3>
+            <div class="buttons" style="margin: 0;">
+              <button type="submit" class="btn sm tertiary">신규</button>
+              <button type="reset" class="btn sm secondary">등록</button>
+              <button type="delete" class="btn sm btn-red">삭제</button>
+            </div>
+          </div>
+          <form class="row g-3 pt-3  needs-validation " @submit.prevent="handleSubmit" style="margin-bottom: 3rem;">
+
+            <div class="col-12  ">
+              <label for="prvonsh" class="form-label">
+                <p>카드명
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <input type="text" class="form-control " id="reason" v-model="reason" />
+            </div>
+            <div class="col-12  ">
+              <label for="prvonsh" class="form-label">
+                <p>담당자
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <input type="text" class="form-control " id="reason" v-model="selectedname" readonly />
+              <input type="button" class="form-control " value="검색" @click="showPopup = true" />
+              <!-- 팝업 -->
+              <HrPopup v-if="showPopup" @close="showPopup = false"  @select="addApproval"/>
+            </div>
+            <div class="col-12 chuljang ">
+              <label for="prvonsh" class="form-label">비고</label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+            </div>
+            <div class="col-12 border-x input-radio">
+              <label for="prvonsh" class="form-label">
+                <p>사용여부
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <div class="chk-area">
+                <div class="form-check">
+                  <input type="radio" name="rdo_1" id="rdo_1">
+                  <label for="rdo_1">사용</label>
+                </div>
+                <div class="form-check">
+                  <input type="radio" name="rdo_1" id="rdo_2" checked>
+                  <label for="rdo_2">미사용</label>
+                </div>
+              </div>
+            </div>
+
+
+          </form>
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">예약현황</h3>
+          </div>
+          <div class="tbl-wrap chk-area">
+            <table id="myTable" class="tbl data">
+
+              <thead>
+                <tr>
+                  <th>부서</th>
+                  <th>신청자</th>
+                  <th>기간</th>
+                  <th>상태</th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+                  <td>{{ item.buseo }}</td>
+                  <td>{{ item.user }}</td>
+                  <td>{{ item.startDate }} ~ {{ item.endDate }}</td>
+                  <td :class="getStatusClass(item.status)">
+                    {{ item.status }}
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+
+          </div>
+          <div class="pagination">
+            <ul>
+              <!-- 왼쪽 화살표 (이전 페이지) -->
+              <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+                &lt;
+              </li>
+
+              <!-- 페이지 번호 -->
+              <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                @click="changePage(page)">
+                {{ page }}
+              </li>
+
+              <!-- 오른쪽 화살표 (다음 페이지) -->
+              <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+                &gt;
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import HrPopup from "../../../component/Popup/HrPopup.vue";
+import { SearchOutlined, CloseCircleFilled } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      showPopup: false,
+      selectedname: '',
+      approvals: [],
+      require: "/client/resources/img/require.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: [
+        {
+          buseo: '',
+          user: '김철수',
+          startDate: '2025-05-01',
+          endDate: '2025-05-03',
+          status: '예약', // 사용중
+        },
+        {
+          buseo: '',
+          user: '이영희',
+          startDate: '2025-05-05',
+          endDate: '2025-05-06',
+          status: '예약', // 예약됨
+        },
+        {
+          buseo: '',
+          user: '박민호',
+          startDate: '2025-04-25',
+          endDate: '2025-04-28',
+          status: '반납', // 반납됨
+        },
+      ],
+      
+    }
+  },
+  components: {
+    SearchOutlined, CloseCircleFilled, HrPopup
+  },
+  methods: {
+    addApproval(selectedUser) {
+      this.approvals.push({
+        name: selectedUser.name
+      });
+
+      this.selectedname = selectedUser.name; // 입력창에 표시
+      this.showPopup = false;
+    },
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '예약') return 'status-pending';
+      if (status === '반납') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/asset/CardList.vue (added)
+++ client/views/pages/Manager/asset/CardList.vue
@@ -0,0 +1,209 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">사용현황</h2>
+        <div class="sch-form-wrap title-wrap">
+          <h3><img :src="h3icon" alt="">예약현황</h3>
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">카드명</option>
+              <option value="">신청자</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>카드명</th>
+                <th>부서</th>
+                <th>신청자</th>
+                <th>기간</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+      <td>{{ item.name }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.user }}</td>
+      <td>{{ item.startDate }} ~ {{ item.endDate }}</td>
+    </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <div class="sch-form-wrap title-wrap">
+          <h3><img :src="h3icon" alt="">사용이력</h3>
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">카드명</option>
+              <option value="">신청자</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+              <thead>
+              <tr>
+                <th>카드명</th>
+                <th>부서</th>
+                <th>신청자</th>
+                <th>기간</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+      <td>{{ item.name }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.user }}</td>
+      <td>{{ item.startDate }} ~ {{ item.endDate }}</td>
+    </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+          name: '쏘렌토',
+          department: '총무부',
+          user: '김철수',
+          startDate: '2025-05-01',
+          endDate: '2025-05-10',
+        },
+        {
+          name: '그랜저',
+          department: '영업부',
+          user: '이영희',
+          startDate: '2025-05-03',
+          endDate: '2025-05-04',
+        },],
+      filteredData: [],
+    };
+  },
+  computed: {
+  },
+  components:{
+    SearchOutlined
+  },
+  methods: {
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    registerLeave() {
+      console.log("등록 버튼 클릭됨");
+
+      // Vue의 반응성 문제를 피하기 위해, 새로운 객체를 추가합니다.
+      this.DeptData = [
+        ...this.DeptData,
+        { member: '', deptNM: '', acceptTerms: false }
+      ];
+
+      console.log(this.DeptData); // 배열 상태 출력
+    },
+    getStatusClass(status) {
+      if (status === '승인') return 'status-approved';
+      if (status === '대기') return 'status-pending';
+      return '';
+    },
+    
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped></style>(파일 끝에 줄바꿈 문자 없음)
client/views/pages/Manager/asset/asset.vue
--- client/views/pages/Manager/asset/asset.vue
+++ client/views/pages/Manager/asset/asset.vue
@@ -1,14 +1,105 @@
 <template>
-    <div class="services">
-      <h2>Our Services</h2>
-      <p>We provide web development and design services.</p>
-    </div>
-  </template>
-  
-  <script>
-  </script>
-  
-  <style scoped>
+  <div class="sidemenu">
+    <div class="myinfo simple">
+      <div class="name-box">
+        <div class="img-area">
+          <div><img :src="photoicon" alt="">
+            <p class="name">OOO과장</p>
+          </div>
+          <div class="info">
+            <p>솔루션 개발팀</p>
+            <i class="fa-bars"></i>
+            <p>팀장</p>
+          </div>
+        </div>
+      </div>
 
-  </style>
-  
(파일 끝에 줄바꿈 문자 없음)
+
+      <details class="menu-box">
+          <summary><p>법인차량</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/CarList.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>사용현황</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+            <li>
+              <router-link to="/CarInfoManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>차량정보 관리</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+           
+            
+          </ul>
+      </details>
+      <details class="menu-box">
+          <summary><p>법인카드</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/CardList.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>사용현황</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+            <li> <router-link to="/CardInfoManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>카드정보 관리</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+           
+            
+          </ul>
+      </details>
+    </div>
+  </div>
+  <!-- End Page Title -->
+  <div class="content">
+    <router-view></router-view>
+
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+
+export default {
+  data() {
+    return {
+      photoicon: "/client/resources/img/photo_icon.png",
+      menuicon: "/client/resources/img/menuicon.png",
+      topmenuicon: "/client/resources/img/topmenuicon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      DeptData: [
+        { member: '', deptNM: '', acceptTerms: false },
+        // 더 많은 데이터 추가...
+      ],
+      filteredData: [],
+    };
+  },
+  computed: {
+  },
+  methods: {
+
+    // 페이지 변경
+    changePage(page) {
+      this.currentPage = page;
+    },
+  },
+  created() {
+  },
+  mounted() {
+
+  },
+};
+</script>
+
+<style scoped></style>
client/views/pages/Manager/attendance/AttendanceDetail.vue
--- client/views/pages/Manager/attendance/AttendanceDetail.vue
+++ client/views/pages/Manager/attendance/AttendanceDetail.vue
@@ -47,13 +47,29 @@
       <div class="sch-form-wrap ">
         <div class="input-group">
           <select name="" id="" class="form-select">
-            <option value="">년도</option>
-          </select>
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
+            </select>
           <select name="" id="" class="form-select">
-            <option value="">월</option>
-          </select>
-          <select name="" id="" class="form-select">
-            <option value="">구분</option>
+                <option value="">전체</option>
+                <option value="">지각</option>
+                <option value="">조기퇴근</option>
+                <option value="">결근</option>
+                <option value="">출장</option>
+                <option value="">대체휴가</option>
+                <option value="">휴가</option>
+                <option value="">공가</option>
+                <option value="">병가</option>
           </select>
         </div>
 
@@ -163,12 +179,19 @@
 
 <script>
 import { SearchOutlined } from '@ant-design/icons-vue';
-
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
 export default {
   data() {
 
     const today = new Date().toISOString().split('T')[0];
     return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
       photoicon: "/client/resources/img/img1.png",
       currentPage: 1,
       totalPages: 3,
@@ -203,30 +226,9 @@
     SearchOutlined
   },
   computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
   },
   methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
-    },
+    
     calculateDayCount() {
       const start = new Date(`${this.startDate}T${this.startTime}:00`);
       const end = new Date(`${this.endDate}T${this.endTime}:00`);
@@ -252,32 +254,9 @@
         }
       }
 
-      this.validateForm(); // dayCount 변경 후 폼 재검증
     },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
-
-
+    
   },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-    startDate: 'calculateDayCount',
-    startTime: 'calculateDayCount',
-    endDate: 'calculateDayCount',
-    endTime: 'calculateDayCount',
-    reason: "validateForm",
-    category: 'category',
-  },
+  
 };
 </script>
client/views/pages/Manager/attendance/BokmyeongInsert.vue (Renamed from client/views/pages/Manager/approval/ChuljangInsert.vue)
--- client/views/pages/Manager/approval/ChuljangInsert.vue
+++ client/views/pages/Manager/attendance/BokmyeongInsert.vue
@@ -1,49 +1,49 @@
 <template>
   <div class="card">
     <div class="card-body">
-      <h2 class="card-title">출장 현황</h2>
+      <h2 class="card-title">출장 복명서 등록</h2>
       <!-- Multi Columns Form -->
-      <form class="row g-3 pt-3  needs-validation" @submit.prevent="handleSubmit">
+      <form class="row g-3 pt-3  needs-validation detail" @submit.prevent="handleSubmit">
 
 
         <div class="col-12">
           <label for="where" class="form-label">출장구분</label>
-          <input type="text" class="form-control" id="where" v-model="where" />
+          <input type="text" class="form-control" id="where" v-model="where" readonly/>
         </div>
         <div class="col-12">
           <label for="where" class="form-label">출장지</label>
-          <input type="text" class="form-control" id="where" v-model="where" />
+          <input type="text" class="form-control" id="where" v-model="where" readonly/>
         </div>
         <div class="col-12">
           <label for="where" class="form-label">출장목적</label>
-          <input type="text" class="form-control" id="where" v-model="where" />
+          <input type="text" class="form-control" id="where" v-model="where" readonly/>
         </div>
         <div class="col-12">
           <label for="where" class="form-label">출장기간</label>
-          <input type="text" class="form-control" id="where" v-model="where" />
+          <input type="text" class="form-control" id="where" v-model="where" readonly/>
         </div>
 
         <div class="col-12">
           <label for="purpose" class="form-label">동행자</label>
-          <input type="text" class="form-control" id="purpose" v-model="purpose" />
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
         </div>
         <div class="col-12">
           <label for="purpose" class="form-label">법인카드</label>
-          <input type="text" class="form-control" id="purpose" v-model="purpose" />
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
         </div>
         <div class="col-12">
           <label for="purpose" class="form-label">법인차량</label>
-          <input type="text" class="form-control" id="purpose" v-model="purpose" />
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
         </div>
 
         <div class="col-12">
           <label for="member" class="form-label">
             승인자
-            <button type="button" title="추가" @click="addApproval">
+            <button type="button" title="추가"  @click="showPopup = true">
               <PlusCircleFilled />
             </button>
           </label>
-
+          <HrPopup v-if="showPopup" @close="showPopup = false" @select="addApproval"/>
           <div class="approval-container">
             <div v-for="(approval, index) in approvals" :key="index" class="d-flex gap-2 addapproval mb-2">
               <select class="form-select" v-model="approval.category" style="width: 110px;">
@@ -68,57 +68,55 @@
         <div class="col-12 border-x">
           <label for="member" class="form-label">
             여비계산
-            <button type="button" title="추가" @click="addApproval">
+            <button type="button" title="추가" @click="addReceipt">
               <PlusCircleFilled />
             </button>
           </label>
 
           <div class="approval-container">
-            <div v-for="(approval, index) in approvals" :key="index" class="d-flex gap-2 addapproval mb-2">
-              <select class="form-select" v-model="approval.category" style="width: 140px;">
-                <option value="결재">개인결제</option>
-                <option value="전결">법인결제</option>
+            <div v-for="(receipt, index) in receipts" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <select class="form-select" style="width: 140px;">
+                <option value="">개인결제</option>
+                <option value="">법인결제</option>
               </select>
-              <select class="form-select" v-model="approval.category" style="width: 110px;">
-                <option value="결재">법인</option>
-                <option value="전결">개인</option>
+              <select class="form-select"  style="width: 110px;">
+                <option value="">법인</option>
+                <option value="">개인</option>
               </select>
-              <select class="form-select" v-model="approval.category" style="width: 110px;">
-                <option value="결재" selected>구분</option>
-                <option value="전결">개인</option>
+              <select class="form-select"  style="width: 110px;">
+                <option value="" selected>구분</option>
+                <option value="">여비사용</option>
               </select>
 
-                <input type="text" class="form-control" v-model="approval.name" style="max-width: 150px;" />
-                <div class="">
-    <!-- 커스텀 업로드 버튼 -->
-   <button>
-      <label for="fileUpload" >
-      영수증 첨부
-      </label>
-   </button>
+              <input type="text" class="form-control" placeholder="금액입력" style="max-width: 150px;" />
+             
+                <!-- 커스텀 업로드 버튼 -->
+                <label :for="'fileUpload-' + index" class="upload-label">
+    영수증 첨부
+  </label>
 
-    <!-- 실제 파일 input (숨김 처리) -->
-    <input
-      id="fileUpload"
-      type="file"
-      @change="handleFileUpload"
-      class="hidden-file-input"
-    />
+                <!-- 실제 파일 input (숨김 처리) -->
+                <input
+    :id="'fileUpload-' + index"
+    type="file"
+    @change="handleFileUpload(index, $event)"
+    class="hidden-file-input"
+  />
 
-    
-  </div>
-  <!-- 선택된 파일 이름 표시 -->
-  <span v-if="fileName" class="file-name">{{ fileName }}</span>
-                <button type="button" @click="removeApproval(index)" class="delete-button">
-                  <CloseOutlined />
-                </button>
+
+              <!-- 선택된 파일 이름 표시 -->
+              <span v-if="receipt.fileName" class="file-name">{{ receipt.fileName }}</span>
+
+              <button type="button" @click="removeReceipt(index)" class="delete-button">
+                <CloseOutlined />
+              </button>
             </div>
           </div>
         </div>
 
       </form>
       <div class="buttons">
-        <button type="submit" class="btn primary">승인요청</button>
+        <button type="submit" class="btn primary">등록</button>
         <button type="reset" class="btn secondary">취소</button>
       </div>
 
@@ -128,11 +126,12 @@
 
 <script>
 import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
-
+import HrPopup from '../../../component/Popup/HrPopup.vue';
 export default {
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
+      showPopup: false,
       fileName: '',
       startDate: today,
       startTime: '09:00',
@@ -141,15 +140,18 @@
       where: '',
       purpose: '',
       approvals: [
+      ],
+     receipts: [
         {
+          type: '개인결제',
           category: '결재',
-          name: '',
+          category1: '구분',
         },
       ],
     };
   },
   components: {
-    PlusCircleFilled, CloseOutlined
+    PlusCircleFilled, CloseOutlined,HrPopup
   },
   computed: {
     loginUser() {
@@ -159,22 +161,37 @@
   },
 
   methods: {
-    handleFileUpload(event) {
-      const file = event.target.files[0];
-      if (file) {
-        this.fileName = file.name;
-      }
-    },
-    addApproval() {
+    handleFileUpload(index, event) {
+    const file = event.target.files[0];
+    if (file) {
+      this.receipts[index].file = file;
+      this.receipts[index].fileName = file.name;
+    }
+  },
+    addApproval(selectedUser) {
       this.approvals.push({
         category: '결재',
-        name: '',
+        name: selectedUser.name, // or other fields if needed
       });
+      this.showPopup = false; // 팝업 닫기
     },
+    addReceipt() {
+    this.receipts.push({
+      type: '개인결제',
+      category: '',
+      category1: '',
+      name: '',
+      file: null,
+      fileName: '',
+    });
+  },
     // 승인자 삭제
     removeApproval(index) {
       this.approvals.splice(index, 1);
     },
+    removeReceipt(index) {
+  this.receipts.splice(index, 1);
+},
     validateForm() {
       // 필수 입력 필드 체크
       if (
client/views/pages/Manager/attendance/ChuljangBokmyeongDetail.vue
--- client/views/pages/Manager/attendance/ChuljangBokmyeongDetail.vue
+++ client/views/pages/Manager/attendance/ChuljangBokmyeongDetail.vue
@@ -9,56 +9,64 @@
          <table class="tbl data">
           <tbody>
             <tr class="thead">
-              <td rowspan="2" class="th">승인자</td>
-              <td>과장</td>
-              <td>소장</td>
-            </tr>
-            <tr>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-            </tr>
+                <td rowspan="2" class="th">승인자</td>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="position">{{ approver.position }}</p>
+                </td>
+              </tr>
+              <tr>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="name">{{ approver.name }}</p>
+                  <p class="date">{{ approver.date }}</p>
+                </td>
+              </tr>
           </tbody>
 
          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
+          <form class="row g-3 needs-validation detail"  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
                
             <div class="col-12 chuljang">
                   <label for="yourName" class="form-label">복명내용</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control textarea " readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">여비계산</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control " readonly>
             </div>
             <div class="col-12 ">
                   <label for="yourName" class="form-label">복명 신청일</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   placeholder="2025-01-01">
+                  <input  v-model="name" type="text" name="name" class="form-control" readonly   placeholder="2025-01-01">
             </div>
-            <div class="col-12 border-x " :class="{ return: isReturned }">
+            <div class="col-12 border-x return">
                   <label for="yourName" class="form-label">반려사유</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   placeholder="2025-01-01">
+                  <input  v-model="name" type="text" name="name" class="form-control" readonly   placeholder="2025-01-01">
             </div>
            
                 
               </form>
       </div>
-            <div class="buttons">
-              <button class="btn btn-red "  type="submit">신청취소</button>
-              <button class="btn secondary"  type="submit"  @click="handleButtonClick">{{ isReturned ? '재신청' : '수정' }}</button>
+      <div class="buttons">
+              <button class="btn primary"  type="submit">승인</button>
+              <button class="btn  btn-red"  type="submit" @click="showPopup = true">반려</button>
+              <button class="btn  btn-red"  type="submit">신청취소</button>
+                <button class="btn secondary"  type="submit">재신청</button>
+                <button class="btn secondary"  type="submit">수정</button>
                 <button class="btn tertiary "  type="submit">목록</button>
               </div>
+              <ReturnPopup v-if="showPopup" @close="showPopup = false"/>
 
       </div>
     </div>
 </template>
 
 <script>
+import ReturnPopup from '../../../component/Popup/ReturnPopup.vue';
 export default {
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
-      isReturned: true,
+      showPopup: false,
       startDate: today,
       startTime: "09:00", // 기본 시작 시간 09:00
       endDate: today,
@@ -66,6 +74,10 @@
       category: "", 
       dayCount: 1, 
       reason: "", // 사유
+      approvers: [
+        { position: '', name: '', date: '' },
+        { position: '', name: '', date: '' },
+      ],
       listData: [
   {
     type: '연차',
@@ -84,39 +96,17 @@
   }],
     };
   },
+  components: {
+    ReturnPopup
+  },
   computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
   },
   methods: {
-    // 폼 검증 메서드
-    handleButtonClick() {
-    if (this.isReturned) {
-      // If "재신청", navigate to the desired page (ChuljangInsert.page)
-      this.$router.push({ name: 'ChuljangInsert' }); // Replace with the correct route name
-    } else {
-      // Handle the "수정" behavior here
-      console.log('수정 button clicked');
-    }
-  },
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
+    hasAnyApprover() {
+      return this.approvers.some(
+        (approver) =>
+          approver.name?.trim() !== '' && approver.date?.trim() !== ''
+      );
     },
     calculateDayCount() {
     const start = new Date(`${this.startDate}T${this.startTime}:00`);
@@ -143,32 +133,10 @@
       }
     }
 
-    this.validateForm(); // dayCount 변경 후 폼 재검증
+   
   },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
+   
     
-    
-  },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
   },
 };
 </script>
client/views/pages/Manager/attendance/ChuljangDetailAll.vue
--- client/views/pages/Manager/attendance/ChuljangDetailAll.vue
+++ client/views/pages/Manager/attendance/ChuljangDetailAll.vue
@@ -21,56 +21,56 @@
 
          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate >
+          <form class="row g-3 needs-validation detail"  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate >
                 <div class="col-12 ">
                   <div class="col-12 border-x">
                     <label for="youremail" class="form-label ">출장구분<p class="require"><img :src="require" alt=""></p></label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly >
+                    <input  v-model="email" type="text" name="username" class="form-control"  readonly >
                   </div>
     
                   <div class="col-12 border-x">
                     <label for="yourPassword" class="form-label">이름</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly   placeholder="주식회사 테이큰 소프트"> 
+                    <input  v-model="password" type="password" name="password" class="form-control"  readonly   placeholder="주식회사 테이큰 소프트"> 
                   </div>
                </div>
                <div class="col-12">
                   <div class="col-12 border-x">
                     <label for="youremail" class="form-label">부서</label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly  placeholder="과장">
+                    <input  v-model="email" type="text" name="username" class="form-control"  readonly  placeholder="과장">
                   </div>
     
                   <div class="col-12 border-x">
                     <label for="yourPassword" class="form-label">직급</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly  placeholder="팀장"> 
+                    <input  v-model="password" type="password" name="password" class="form-control"  readonly  placeholder="팀장"> 
                   </div>
                </div>
                <div class="col-12">
                   <label for="yourName" class="form-label">출장지</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly>
+                  <input  v-model="name" type="text" name="name" class="form-control"  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">출장목적</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">동행자</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12 chuljang">
                   <label for="yourName" class="form-label">품의내용</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control textarea "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">법인카드</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12">
                   <label for="yourName" class="form-label">법인차량</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control "  readonly>
             </div>
             <div class="col-12 border-x">
                   <label for="yourName" class="form-label">품의 신청일</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
+                  <input v-model="name" type="text" name="name" class="form-control " i readonly>
             </div>
               </form>
       </div>
@@ -92,7 +92,7 @@
 
          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
+          <form class="row g-3 needs-validation detail"  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
                
             <div class="col-12 chuljang">
                   <label for="yourName" class="form-label">복명내용</label>
@@ -102,9 +102,13 @@
                   <label for="yourName" class="form-label">여비계산</label>
                   <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
             </div>
-            <div class="col-12 border-x">
+            <div class="col-12 ">
                   <label for="yourName" class="form-label">복명 신청일</label>
                   <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   placeholder="2025-01-01">
+            </div>
+            <div class="col-12 border-x return">
+                  <label for="yourName" class="form-label">반려사유</label>
+                  <input  v-model="name" type="text" name="name" class="form-control" readonly   placeholder="2025-01-01">
             </div>
            
                 
@@ -112,6 +116,7 @@
       </div>
             <div class="buttons">
               <button class="btn btn-red "  type="submit">신청취소</button>
+              <button class="btn secondary"  type="submit">재신청</button>
               <button class="btn secondary"  type="submit"> 수정</button>
                 <button class="btn tertiary "  type="submit">목록</button>
               </div>
@@ -215,18 +220,6 @@
     },
     
     
-  },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
   },
 };
 </script>
 
client/views/pages/Manager/attendance/ChuljangInsert.vue (added)
+++ client/views/pages/Manager/attendance/ChuljangInsert.vue
@@ -0,0 +1,340 @@
+<template>
+  <div class="card">
+    <div class="card-body">
+      <h2 class="card-title">출장 신청</h2>
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+      <!-- Multi Columns Form -->
+      <form class="row g-3 pt-3  needs-validation" @submit.prevent="handleSubmit">
+
+
+        <div class="col-12">
+          <label for="where" class="form-label"><p>출장구분<p class="require"><img :src="require" alt=""></p></p></label>
+          <select class="form-select"  style="width: 110px;">
+                <option value="" selected>국내</option>
+                <option value="">국외</option>
+              </select>
+        </div>
+        <div class="col-12">
+          <label for="where" class="form-label"><p>출장지<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control" id="where" v-model="where" />
+        </div>
+        <div class="col-12">
+          <label for="where" class="form-label"><p>출장목적<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control" id="where" v-model="where" />
+        </div>
+        <div class="col-12">
+          <label for="where" class="form-label"><p>출장기간<p class="require"><img :src="require" alt=""></p></p></label>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="startDate" v-model="startDate" />
+            <!-- 시간 선택을 위한 select 사용 -->
+            <select class="form-control" id="startTime" v-model="startTime">
+              <option value="09:00">09:00</option>
+              <option value="10:00">10:00</option>
+              <option value="11:00">11:00</option>
+              <option value="12:00">12:00</option>
+              <option value="13:00">13:00</option>
+              <option value="14:00">14:00</option>
+              <option value="15:00">15:00</option>
+              <option value="16:00">16:00</option>
+              <option value="17:00">17:00</option>
+              <option value="18:00">18:00</option>
+            </select>
+            ~
+          </div>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="endDate" v-model="endDate" />
+            <!-- 종료 시간을 위한 select 사용 -->
+            <select class="form-control" id="endTime" v-model="endTime">
+              <option value="09:00">09:00</option>
+              <option value="10:00">10:00</option>
+              <option value="11:00">11:00</option>
+              <option value="12:00">12:00</option>
+              <option value="13:00">13:00</option>
+              <option value="14:00">14:00</option>
+              <option value="15:00">15:00</option>
+              <option value="16:00">16:00</option>
+              <option value="17:00">17:00</option>
+              <option value="18:00">18:00</option>
+            </select>
+          </div>
+          <div class="col-12 border-x">
+          <label for="dayCount" class="form-label">일수</label>
+          <input type="text" class="form-control" id="dayCount" v-model="dayCount" readonly />
+        </div>
+        </div>
+
+        <div class="col-12">
+          <label for="purpose" class="form-label">동행자 <button type="button" title="추가" @click="showPopup1 = true">
+              <PlusCircleFilled />
+            </button></label>
+            <HrPopup v-if="showPopup1" @close="showPopup1 = false" @select="addMember"/>
+            <div v-for="(member, index) in members" :key="index" class="d-flex gap-2 addapproval mb-2">
+
+              <form class="d-flex align-items-center border-x">
+                <input type="text" class="form-control" v-model="member.name" style="max-width: 150px;" />
+                <button type="button" @click="removeMember(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+              </form>
+            </div>
+        </div>
+       
+        <div class="col-12">
+          <label for="member" class="form-label">
+            <p>승인자<button type="button" title="추가" @click="showPopup = true">
+              <PlusCircleFilled />
+            </button><p class="require"><img :src="require" alt=""></p></p>
+            
+          </label>
+          <HrPopup v-if="showPopup" @close="showPopup = false" @select="addApproval"/>
+          <div class="approval-container">
+            <div v-for="(approval, index) in approvals" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <select class="form-select" v-model="approval.category" style="width: 110px;">
+                <option value="결재">결재</option>
+                <option value="전결">전결</option>
+                <option value="대결">대결</option>
+              </select>
+
+              <form class="d-flex align-items-center border-x">
+                <input type="text" class="form-control" v-model="approval.name" style="max-width: 150px;" />
+                <button type="button" @click="removeApproval(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+              </form>
+            </div>
+          </div>
+        </div>
+        <div class="col-12 chuljang">
+          <label for="prvonsh" class="form-label"><p>품의내용<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+        </div>
+        <div class="col-12">
+          <label for="purpose" class="form-label">법인카드 <button type="button" title="추가" @click="showPopup3 = true">
+              <PlusCircleFilled />
+            </button></label>
+            <CorpCardPopup v-if="showPopup3" @close="showPopup3 = false" @select="addCard"/>
+            <div class="approval-container">
+            <div v-for="(card, index) in cards" :key="index" class="d-flex gap-2 addapproval mb-2">
+
+              <form class="d-flex align-items-center border-x">
+                <input type="text" class="form-control" v-model="card.name" style="max-width: 150px;" />
+                <button type="button" @click="removeCard(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+              </form>
+            </div>
+          </div>
+        </div>
+        <div class="col-12 border-x">
+          <label for="purpose" class="form-label">법인차량 <button type="button" title="추가" @click="showPopup2 = true">
+              <PlusCircleFilled />
+            </button></label>
+            <CorpCarPopup v-if="showPopup2" @close="showPopup2 = false" @select="addCar"/>
+            <div class="approval-container">
+            <div v-for="(car, index) in cars" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <input type="text" class="form-control" v-model="car.name" style="max-width: 150px;" />
+              <select class="form-select" v-model="car.category" style="width: 120px;">
+                <option value="운전자">운전자</option>
+              </select>
+              <button type="button" @click="removeCar(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+            </div>
+          </div>
+        </div>
+
+      </form>
+      <div class="buttons">
+        <button type="submit" class="btn primary">신청</button>
+        <button type="reset" class="btn secondary">취소</button>
+      </div>
+
+    </div>
+  </div>
+</template>
+
+<script>
+import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
+import HrPopup from '../../../component/Popup/HrPopup.vue';
+import CorpCarPopup from '../../../component/Popup/CorpCarPopup.vue';
+import CorpCardPopup from '../../../component/Popup/CorpCardPopup.vue';
+export default {
+  data() {
+    const today = new Date().toISOString().split('T')[0];
+    return {
+      showPopup: false,
+      showPopup1: false,
+      showPopup2: false,
+      showPopup3: false,
+      require: "/client/resources/img/require.png",
+      fileName: '',
+      startDate: today,
+      startTime: '09:00',
+      endDate: today,
+      endTime: '18:00',
+      where: '',
+      purpose: '',
+      approvals: [        
+      ],
+      members: [        
+      ],
+      cards: [
+      ],
+      cars: [
+      ],
+     receipts: [
+        {
+          type: '개인결제',
+          category: '결재',
+          category1: '구분',
+        },
+      ],
+    };
+  },
+  components: {
+    PlusCircleFilled, CloseOutlined, HrPopup, CorpCarPopup, CorpCardPopup
+  },
+  computed: {
+    loginUser() {
+      const authStore = useAuthStore();
+      return authStore.getLoginUser;
+    },
+  },
+
+  methods: {
+    handleFileUpload(event) {
+      const file = event.target.files[0];
+      if (file) {
+        this.fileName = file.name;
+      }
+    },
+    addApproval(selectedUser) {
+      this.approvals.push({
+        category: '결재',
+        name: selectedUser.name, // or other fields if needed
+      });
+      this.showPopup = false; // 팝업 닫기
+    },
+    addMember(selectedUser) {
+      this.members.push({
+        category: '결재',
+        name: selectedUser.name, // or other fields if needed
+      });
+      this.showPopup1 = false; // 팝업 닫기
+    },
+    addCard(selectedCard) {
+      this.cards.push({
+        category: '결재',
+        name: selectedCard.name, // or other fields if needed
+      });
+      this.showPopup3 = false; // 팝업 닫기
+    },
+    addCar(selectedCar) {
+      this.cars.push({
+        category: '결재',
+        name: selectedCar.name, // or other fields if needed
+      });
+      this.showPopup2 = false; // 팝업 닫기
+    },
+    addReceipt() {
+  this.receipts.push({
+    type: '개인결제',
+    category: '결재',
+    category1: '',
+    name: '',
+    file: null,
+  });
+},
+    // 승인자 삭제
+    removeApproval(index) {
+      this.approvals.splice(index, 1);
+    },
+    removeMember(index) {
+      this.members.splice(index, 1);
+    },
+    removeCard(index) {
+      this.cards.splice(index, 1);
+    },
+    removeCar(index) {
+      this.cars.splice(index, 1);
+    },
+    removeReceipt(index) {
+  this.receipts.splice(index, 1);
+},
+    validateForm() {
+      // 필수 입력 필드 체크
+      if (
+        this.startDate &&
+        this.startTime &&
+        this.endDate &&
+        this.endTime &&
+        this.where &&
+        this.purpose.trim() !== ""
+      ) {
+        this.isFormValid = true;
+      } else {
+        this.isFormValid = false;
+      }
+    },
+    calculateDayCount() {
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
+
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
+      } else {
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
+      }
+
+      this.validateForm(); // dayCount 변경 후 폼 재검증
+    },
+    handleSubmit() {
+      this.validateForm(); // 제출 시 유효성 확인
+      if (this.isFormValid) {
+        localStorage.setItem('ChuljangFormData', JSON.stringify(this.$data));
+        alert("승인 요청이 완료되었습니다.");
+        // 추가 처리 로직 (API 요청 등)
+      } else {
+        alert("모든 필드를 올바르게 작성해주세요.");
+      }
+    },
+    loadFormData() {
+      const savedData = localStorage.getItem('ChuljangFormData');
+      if (savedData) {
+        this.$data = JSON.parse(savedData);
+      }
+    },
+  },
+  mounted() {
+    // Load the saved form data when the page is loaded
+    this.loadFormData();
+  },
+  watch: {
+    startDate: 'calculateDayCount',
+    startTime: 'calculateDayCount',
+    endDate: 'calculateDayCount',
+    endTime: 'calculateDayCount',
+    where: 'validateForm',
+    purpose: "validateForm",
+  },
+};
+</script>
+
+<style scoped>
+/* 필요한 스타일 추가 */
+</style>
client/views/pages/Manager/attendance/ChuljangPumuiDetail.vue
--- client/views/pages/Manager/attendance/ChuljangPumuiDetail.vue
+++ client/views/pages/Manager/attendance/ChuljangPumuiDetail.vue
@@ -1,94 +1,103 @@
 <template>
-<div class="card ">
-      <div class="card-body">
-          <h2 class="card-title">출장 현황</h2>
-       
+  <div class="card ">
+    <div class="card-body">
+      <h2 class="card-title">출장 현황</h2>
+
       <div class="form-card">
         <h1>출장품의서</h1>
         <div class="approval-box tbl-wrap tbl2">
-         <table class="tbl data">
-          <tbody>
-            <tr class="thead">
-              <td rowspan="2" class="th">승인자</td>
-              <td>과장</td>
-              <td>소장</td>
-            </tr>
-            <tr>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-              <td><p class="name">홍길동</p><p class="date">2025/05/09</p></td>
-            </tr>
-          </tbody>
+          <table class="tbl data">
+            <tbody>
+              <tr class="thead">
+                <td rowspan="2" class="th">승인자</td>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="position">{{ approver.position }}</p>
+                </td>
+              </tr>
+              <tr>
+                <td v-for="(approver, index) in approvers" :key="index">
+                  <p class="name">{{ approver.name }}</p>
+                  <p class="date">{{ approver.date }}</p>
+                </td>
+              </tr>
 
-         </table>
+            </tbody>
+
+          </table>
         </div>
-          <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
-                <div class="col-12 ">
-                  <div class="col-12 border-x">
-                    <label for="youremail" class="form-label ">출장구분<p class="require"><img :src="require" alt=""></p></label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly >
-                  </div>
-    
-                  <div class="col-12 border-x">
-                    <label for="yourPassword" class="form-label">이름</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly   placeholder="주식회사 테이큰 소프트"> 
-                  </div>
-               </div>
-               <div class="col-12">
-                  <div class="col-12 border-x">
-                    <label for="youremail" class="form-label">부서</label>
-                    <input  v-model="email" type="text" name="username" class="form-control" id="youremail" readonly  placeholder="과장">
-                  </div>
-    
-                  <div class="col-12 border-x">
-                    <label for="yourPassword" class="form-label">직급</label>
-                    <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" readonly  placeholder="팀장"> 
-                  </div>
-               </div>
-               <div class="col-12">
-                  <label for="yourName" class="form-label">출장지</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly>
+        <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+          @submit.prevent="handleRegister" novalidate>
+          <div class="col-12 ">
+            <div class="col-12 border-x">
+              <label for="youremail" class="form-label ">출장구분<p class="require"><img :src="require" alt=""></p></label>
+              <input v-model="email" type="text" name="username" class="form-control" id="youremail" readonly>
             </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">출장목적</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">동행자</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12 chuljang">
-                  <label for="yourName" class="form-label">내용</label>
-                  <input v-model="name" type="text" name="name" class="form-control textarea " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">법인카드</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">법인차량</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12">
-                  <label for="yourName" class="form-label">품의 신청일</label>
-                  <input v-model="name" type="text" name="name" class="form-control " id="yourName" readonly>
-            </div>
-            <div class="col-12 border-x" :class="{ return: isReturned }">
-                  <label for="yourName" class="form-label">반려사유</label>
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" readonly   placeholder="2025-01-01">
-            </div>
-           
-                
-              </form>
-      </div>
-            <div class="buttons">
-              <button class="btn btn-red "  type="submit">신청취소</button>
-              <button class="btn secondary"  type="submit">  {{ isReturned ? '재신청' : '수정' }}</button>
-              <button class="btn primary" type="submit" v-if="!isReturned">복명서 작성</button>
-                <button class="btn tertiary "  type="submit">목록</button>
-              </div>
 
+            <div class="col-12 border-x">
+              <label for="yourPassword" class="form-label">이름</label>
+              <input v-model="password" type="password" name="password" class="form-control" readonly
+                placeholder="주식회사 테이큰 소프트">
+            </div>
+          </div>
+          <div class="col-12">
+            <div class="col-12 border-x">
+              <label for="youremail" class="form-label">부서</label>
+              <input v-model="email" type="text" name="username" class="form-control" readonly placeholder="과장">
+            </div>
+
+            <div class="col-12 border-x">
+              <label for="yourPassword" class="form-label">직급</label>
+              <input v-model="password" type="password" name="password" class="form-control" readonly placeholder="팀장">
+            </div>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">출장지</label>
+            <input v-model="name" type="text" name="name" class="form-control" readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">출장목적</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">동행자</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12 chuljang">
+            <label for="yourName" class="form-label">내용</label>
+            <input v-model="name" type="text" name="name" class="form-control textarea " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">법인카드</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">법인차량</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">품의 신청일</label>
+            <input v-model="name" type="text" name="name" class="form-control " readonly>
+          </div>
+          <div class="col-12 border-x return">
+            <label for="yourName" class="form-label">반려사유</label>
+            <input v-model="name" type="text" name="name" class="form-control" readonly placeholder="2025-01-01">
+          </div>
+
+
+        </form>
       </div>
+      <div class="buttons">
+        <button class="btn  btn-red" type="submit">신청취소</button>
+        <button class="btn secondary" type="submit">재신청</button>
+        <button class="btn secondary" type="submit">수정</button>
+        <button v-if="hasAnyApprover" class="btn primary" type="submit" @click="goToBokmyeongInsert">
+          복명서 작성
+        </button>
+        <button class="btn tertiary " type="submit">목록</button>
+      </div>
+
     </div>
+  </div>
 </template>
 
 <script>
@@ -96,108 +105,82 @@
   data() {
     const today = new Date().toISOString().split('T')[0];
     return {
-      isReturned: true,
+      showPopup: false,
       startDate: today,
       startTime: "09:00", // 기본 시작 시간 09:00
       endDate: today,
       endTime: "18:00", // 기본 종료 시간 18:00
-      category: "", 
-      dayCount: 1, 
+      category: "",
+      dayCount: 1,
       reason: "", // 사유
+      approvers: [
+        { position: '', name: '', date: '' },
+        { position: '', name: '', date: '' },
+      ],
       listData: [
-  {
-    type: '연차',
-    approvalType: '결재',
-    applicant: '홍길동',
-    period: '2025-05-10 ~ 2025-15-03',
-    requestDate: '2025-04-25',
-    status: '대기'
-  },   {
-    type: '반차',
-    approvalType: '전결',
-    applicant: '홍길동',
-    period: '2025-05-01 ~ 2025-05-03',
-    requestDate: '2025-04-25',
-    status: '승인'
-  }],
+        {
+          type: '연차',
+          approvalType: '결재',
+          applicant: '홍길동',
+          period: '2025-05-10 ~ 2025-15-03',
+          requestDate: '2025-04-25',
+          status: '대기'
+        }, {
+          type: '반차',
+          approvalType: '전결',
+          applicant: '홍길동',
+          period: '2025-05-01 ~ 2025-05-03',
+          requestDate: '2025-04-25',
+          status: '승인'
+        }],
     };
   },
   computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
   },
   methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
+    goToBokmyeongInsert() {
+    this.$router.push('/BokmyeongInsert.page');
+  },
+    hasAnyApprover() {
+      return this.approvers.some(
+        (approver) =>
+          approver.name?.trim() !== '' && approver.date?.trim() !== ''
+      );
     },
     calculateDayCount() {
-    const start = new Date(`${this.startDate}T${this.startTime}:00`);
-    const end = new Date(`${this.endDate}T${this.endTime}:00`);
-    
-    let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
-    
-    if (this.startDate !== this.endDate) {
-      // 시작일과 종료일이 다른경우
-      const startDateObj = new Date(this.startDate);
-      const endDateObj = new Date(this.endDate);
-      const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
-      if (this.startTime !== "09:00" || this.endTime !== "18:00") {
-        this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
-      } else {
-        this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
-      }
-    } else {
-      // 시작일과 종료일이 같은 경우
-      if (this.startTime !== "09:00" || this.endTime !== "18:00") {
-        this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
-      } else {
-        this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
-      }
-    }
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
 
-    this.validateForm(); // dayCount 변경 후 폼 재검증
-  },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
       } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
       }
+
     },
-    
-    
-  },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
+
+
+
   },
 };
 </script>
+<style scoped>
+td p {
+  width: 125px;
+}
+</style>
client/views/pages/Manager/attendance/ChuljangStatue.vue
--- client/views/pages/Manager/attendance/ChuljangStatue.vue
+++ client/views/pages/Manager/attendance/ChuljangStatue.vue
@@ -7,11 +7,29 @@
         <div class="sch-form-wrap">
         <div class="input-group">
           <select name="" id="" class="form-select">
-          <option value="">년도</option>
-        </select>
-          <select name="" id="" class="form-select">
-          <option value="">월</option>
-        </select>
+              <option :value="currentYear">{{ currentYear }}년</option>
+  <option value="all">전체</option>
+  <option
+    v-for="year in remainingYears"
+    :key="year"
+    :value="year"
+    v-if="year !== currentYear"
+  >
+    {{ year }}년
+  </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+  <option value="all">전체</option>
+  <option
+    v-for="month in remainingMonths"
+    :key="month"
+    :value="month"
+    v-if="month !== currentMonth"
+  >
+    {{ month }}월
+  </option>
+            </select>
       </div>
       </div>
         <!-- Table  -->
@@ -31,14 +49,26 @@
             </thead>
             <!-- 동적으로 <td> 생성 -->
             <tbody>
-              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastPeriod(item.period) }" >
+              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPast(item) }" @click="handleClick(item)">
                 <td>{{ item.type }}</td>
                 <td>{{ item.where }}</td>
                 <td>{{ item.purpose }}</td>
-                <td @click="goToPage('all')">{{ item.period }}</td>
-                <td :class="getStatusClass(item.pumuiStatue)"  @click="goToPage('품의서')">{{ item.pumuiStatue }}</td>
-                <td :class="getBokmyeongClass(item.bokmyeong)"  @click="goToPage('복명서')">{{ item.bokmyeong }}</td>
-                <td :class="getStatusClass(item.status)">{{ item.status }}</td>
+                <td >{{ item.period }}</td>
+<td
+  :class="getStatusClass(item.pumuiStatue)"
+  
+>
+  {{ item.pumuiStatue }}
+</td>
+<td
+  :class="getBokmyeongClass(item.bokmyeong)"
+>
+  {{ item.bokmyeong }}
+</td>
+
+<td :class="getStatusClass(item.status)">
+  {{ item.status }}
+</td>
               </tr>
             </tbody>
           </table>
@@ -72,9 +102,17 @@
 <script>
 import { ref } from 'vue';
 import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
 export default {
   data() {
     return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
       showOptions: false,
       currentPage: 1,
       totalPages: 3,
@@ -92,6 +130,24 @@
           period: '2025-05-10 ~ 2025-05-23',
           pumuiStatue: '대기',
           bokmyeong: '미등록',          
+          status: '-'
+        },
+        {
+          type: '연차',
+          where: '상주시청',
+          purpose: '유지보수',
+          period: '2025-05-10 ~ 2025-05-23',
+          pumuiStatue: '승인',
+          bokmyeong: '미등록',          
+          status: '-'
+        },
+        {
+          type: '연차',
+          where: '상주시청',
+          purpose: '유지보수',
+          period: '2025-05-10 ~ 2025-05-23',
+          pumuiStatue: '승인',
+          bokmyeong: '등록',          
           status: '대기'
         }, {
           type: '연차',
@@ -100,7 +156,7 @@
           period: '2025-05-10 ~ 2025-05-10',
           pumuiStatue: '승인',
           bokmyeong: '등록',          
-          status: '대기'
+          status: '승인'
         },],
       filteredData: [],
     };
@@ -130,15 +186,6 @@
         console.error('Mutation error:', error);
       }
     },
-    goToPage(type) {
-  if (type === '품의서') {
-    this.$router.push('/ChuljangPumuiDetail.page');
-  } else if (type === 'all') {
-    this.$router.push('/ChuljangDetailAll.page');
-  } else if (type === '복명서') {
-    this.$router.push('/ChuljangBokmyeongDetail.page');
-  }
-},
 
     // 상태에 따른 클래스 반환 메소드
     getStatusClass(status) {
@@ -160,17 +207,30 @@
   if (bokmyeong === '미등록') return 'status-pending';
   return '';
 },
-    isPastPeriod(period) {
-      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
-      const endDateStr = period.split('~')[1]?.trim();
-      if (!endDateStr) return false;
+isPast(item) {
+    return (
+      item.pumuiStatue === '승인' &&
+      item.bokmyeong === '등록' &&
+      item.status === '승인'
+    );
+  },
+  handleClick(item) {
+  const isCasePumui = (
+    (item.pumuiStatue === '대기' && item.bokmyeong === '미등록') ||
+    (item.pumuiStatue === '승인' && item.bokmyeong === '미등록')
+  );
 
-      const endDate = new Date(endDateStr);
-      const today = new Date();
-
-      // 현재 날짜보다 과거면 true
-      return endDate < today;
-    }
+  if (item.bokmyeong === '등록') {
+    this.$router.push('/ChuljangDetailAll.page');
+  } else if (isCasePumui) {
+    this.$router.push('/ChuljangPumuiDetail.page');
+  } else {
+    console.log('이동 조건이 아닙니다.');
+  }
+},
+  handleBokmyeongClick(item) {
+    this.$router.push('/ChuljangBokmyeongDetail.page');
+  },
   },
   created() {
   },
@@ -178,6 +238,7 @@
 
 
   },
+
 };
 </script>
 
client/views/pages/Manager/attendance/buseoAttendance.vue
--- client/views/pages/Manager/attendance/buseoAttendance.vue
+++ client/views/pages/Manager/attendance/buseoAttendance.vue
@@ -6,16 +6,24 @@
       <div class="sch-form-wrap">
         <div class="input-group">
           <select name="" id="" class="form-select">
-          <option value="">년도</option>
-        </select>
-          <select name="" id="" class="form-select">
-          <option value="">월</option>
-        </select>
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
+            </select>
           <select name="" id="" class="form-select">
           <option value="">구분</option>
         </select>
         <div class="sch-input">
-              <input type="text" class="form-control">
+              <input type="text" class="form-control" placeholder="직원명">
               <button class="ico-sch"><SearchOutlined /></button>
             </div>
         </div>
@@ -101,9 +109,17 @@
 <script>
 import { ref } from 'vue';
 import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
 export default {
   data() {
     return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
       showOptions: false,
       currentPage: 1,
       totalPages: 3,
client/views/pages/Manager/attendance/hyugaStatue.vue
--- client/views/pages/Manager/attendance/hyugaStatue.vue
+++ client/views/pages/Manager/attendance/hyugaStatue.vue
@@ -8,9 +8,19 @@
     <div class="form-conts">
         <div class="form-conts datepicker-conts">
             <div class="datepicker-input">
-                <input type="date" class="form-control datepicker cal" placeholder="YYYY.MM.DD" id="cal" style="max-width: 200px;">
-                <mark>~</mark>
-                <input type="date" class="form-control datepicker cal" placeholder="YYYY.MM.DD" id="cal" style="max-width: 200px;">
+              <input
+    type="date"
+    class="form-control datepicker cal"
+    :value="startDate"
+    style="max-width: 200px;"
+  />
+  <mark>~</mark>
+  <input
+    type="date"
+    class="form-control datepicker cal"
+    :value="endDate"
+    style="max-width: 200px;"
+  />
             </div>
         </div>
     </div>
@@ -112,7 +122,11 @@
 import { SearchOutlined } from '@ant-design/icons-vue';
 export default {
   data() {
+    const today = new Date();
+    const formattedToday = today.toISOString().split('T')[0]; // 'YYYY-MM-DD'
     return {
+      startDate: '2025-01-01',
+      endDate: formattedToday,
       showOptions: false,
       currentPage: 1,
       totalPages: 3,
client/views/pages/Manager/attendance/myAttendance.vue
--- client/views/pages/Manager/attendance/myAttendance.vue
+++ client/views/pages/Manager/attendance/myAttendance.vue
@@ -7,19 +7,35 @@
             <div class="flex">
               <div class="sub flex"><img :src="dateicon" alt=""><p class="date">{{ today }}</p></div>
               <div class="buttons">
-                            <button><img :src="startbtn" alt=""></button>
-                            <button><img :src="stopbtn" alt=""></button>
+                            <button @click="handleStartClick"><img :src="startbtn" alt=""></button>
+                            <button @click="handleEndClick"><img :src="stopbtn" alt=""></button>
                         </div>
             </div>
             <div class="input-group">
               <select name="" id="" class="form-select">
-                <option value="">년도</option>
-              </select>
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
+            </select>
               <select name="" id="" class="form-select">
-                <option value="">월</option>
-              </select>
-              <select name="" id="" class="form-select">
-                <option value="">부서</option>
+                <option value="">전체</option>
+                <option value="">지각</option>
+                <option value="">조기퇴근</option>
+                <option value="">결근</option>
+                <option value="">출장</option>
+                <option value="">대체휴가</option>
+                <option value="">휴가</option>
+                <option value="">공가</option>
+                <option value="">병가</option>
               </select>
             </div>
   
@@ -90,7 +106,7 @@
           </colgroup>
             <thead>
               <tr>
-                <th>연차 </th>
+                <th>구분 </th>
                 <th>내용</th>
               </tr>
             </thead>
@@ -98,7 +114,7 @@
             <tbody>
               <tr v-for="(item, index) in listData" :key="index" >
                 <td>{{ item.type }}</td>
-    <td>{{ item.content }}</td>
+    <td style="text-align: left !important;">{{ item.content }}</td>
               </tr>
             </tbody>
           </table>
@@ -130,11 +146,19 @@
 
 <script>
 import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
 export default {
   data() {
     
     const today = new Date().toISOString().split('T')[0];
     return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
       currentPage: 1,
       totalPages: 3,
       late: '5', earlyLeave: '3', absence: '2', businessTrip: '1', weekendWork: '0' ,
@@ -155,13 +179,7 @@
       dayCount: 1, 
       reason: "", // 사유
       listData: [
-  {
-    type: '연차',
-    content: '결재',
-  },   {
-    type: '반차',
-    content: '전결',
-  }],
+],
     };
   },
   components:{
@@ -175,23 +193,26 @@
     },
   },
   methods: {
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.category &&
-        this.startDate &&
-        this.startTime &&
-        this.endDate &&
-        this.endTime &&
-        this.dayCount > 0 &&
-        this.reason.trim() !== ""
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
-    },
+    handleStartClick() {
+    const now = new Date();
+    const date = now.toLocaleDateString(); // 예: 2025. 5. 14.
+    const time = now.toLocaleTimeString(); // 예: 오전 9:30:01
+
+    this.listData.push({
+      type: '출근',
+      content: `${date} ${time}`,
+    });
+  },
+    handleEndClick() {
+    const now = new Date();
+    const date = now.toLocaleDateString(); // 예: 2025. 5. 14.
+    const time = now.toLocaleTimeString(); // 예: 오전 9:30:01
+
+    this.listData.push({
+      type: '퇴근',
+      content: `${date} ${time}`,
+    });
+  },
     calculateDayCount() {
     const start = new Date(`${this.startDate}T${this.startTime}:00`);
     const end = new Date(`${this.endDate}T${this.endTime}:00`);
@@ -217,32 +238,10 @@
       }
     }
 
-    this.validateForm(); // dayCount 변경 후 폼 재검증
   },
-    handleSubmit() {
-      this.validateForm(); // 제출 시 유효성 확인
-      if (this.isFormValid) {
-        localStorage.setItem('HyugaFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // 추가 처리 로직 (API 요청 등)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
     
     
   },
-  mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
-  },
-  watch: {
-  startDate: 'calculateDayCount',
-  startTime: 'calculateDayCount',
-  endDate: 'calculateDayCount',
-  endTime: 'calculateDayCount',
-  reason: "validateForm",
-  category: 'category',
-  },
+  
 };
 </script>
 
client/views/pages/Manager/financial/ChuljangCostList.vue (added)
+++ client/views/pages/Manager/financial/ChuljangCostList.vue
@@ -0,0 +1,192 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">출장비 현황</h2>
+        <div class="sch-form-wrap">
+          <div class="input-group">
+            <input type="date" class="form-control">~ <input type="date" class="form-control">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">미지급</option>
+              <option value="">지급</option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">출장목적</option>
+              <option value="">이름</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>부서 </th>
+                <th>이름</th>
+                <th>출장지</th>
+                <th>출장목적</th>
+                <th>기간</th>
+                <th>구분(사용처)</th>
+                <th>금액(사용금액)</th>
+                <th>지급여부</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+                <td>{{ item.department }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.location }}</td>
+      <td>{{ item.purpose }}</td>
+      <td>{{ item.period }}</td>
+      <td>{{ item.category }}</td>
+      <td>{{ formatCurrency(item.amount) }}</td>
+      <td :class="getStatusClass(item.status)">{{ item.status }}</td>
+              </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <!-- End Table -->
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+        department: '기획팀',
+        name: '홍길동',
+        location: '부산',
+        purpose: '고객 미팅',
+        period: '2025-05-10 ~ 2025-05-12',
+        category: '교통(기차)',
+        amount: 120000,
+        status: '지급'
+      },
+      {
+        department: '기획팀',
+        name: '홍길동',
+        location: '부산',
+        purpose: '고객 미팅',
+        period: '2025-05-10 ~ 2025-05-12',
+        category: '교통(기차)',
+        amount: 120000,
+        status: '미지급'
+      },
+      // ... 다른 항목들
+    ],
+      filteredData: [],
+    };
+  },
+  components:{
+    SearchOutlined
+  },
+  computed: {
+  },
+  methods: {
+    goToDetailPage(item) {
+    // item.id 또는 다른 식별자를 사용하여 URL을 구성할 수 있습니다.
+    this.$router.push({ path: `/employeeSalaryDetail.page`, query: { id: item.id } });
+  },
+    formatCurrency(amount) {
+      return new Intl.NumberFormat('ko-KR').format(amount) + ' 원';
+    },
+    viewPayslip(item) {
+      // 예: 모달 열기, PDF 보기, 페이지 이동 등
+      console.log('명세서 보기:', item);
+      // window.open(item.slipUrl, '_blank'); // 외부 링크 열기 예시
+    },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+      if (type === '휴가') {
+        this.$router.push('/HyugaInsert.page');
+      } else if (type === '출장') {
+        this.$router.push('/ChuljangDetail.page');
+      }
+    },
+    getStatusClass(status) {
+      if (status === '지급') return 'status-approved';
+      if (status === '미지급') return 'status-pending';
+      return '';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    }
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped>
+</style>
 
client/views/pages/Manager/financial/MeetingCostList.vue (added)
+++ client/views/pages/Manager/financial/MeetingCostList.vue
@@ -0,0 +1,165 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">회의비 지출 현황</h2>
+        <div class="sch-form-wrap">
+          <div class="input-group">
+            <input type="date" class="form-control">~ <input type="date" class="form-control">
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">프로젝트명</option>
+              <option value="">회의명</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>프로젝트명 </th>
+                <th>회의명</th>
+                <th>회의비</th>
+                <th>기간</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+                <td>{{ item.projectName }}</td>
+      <td>{{ item.meetingName }}</td>
+      <td>{{ formatCurrency(item.meetingCost) }}</td>
+      <td>{{ item.period }}</td>
+              </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <!-- End Table -->
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+        projectName: 'AI 시스템 구축',
+        meetingName: '기획 회의',
+        meetingCost: 50000,
+        period: '2025-05-10 ~ 2025-05-10'
+      },
+      // ... 추가 항목
+    ],
+      filteredData: [],
+    };
+  },
+  components:{
+    SearchOutlined
+  },
+  computed: {
+  },
+  methods: {
+    goToDetailPage(item) {
+    // item.id 또는 다른 식별자를 사용하여 URL을 구성할 수 있습니다.
+    this.$router.push({ path: `/employeeSalaryDetail.page`, query: { id: item.id } });
+  },
+    formatCurrency(amount) {
+      return new Intl.NumberFormat('ko-KR').format(amount) + ' 원';
+    },
+    viewPayslip(item) {
+      // 예: 모달 열기, PDF 보기, 페이지 이동 등
+      console.log('명세서 보기:', item);
+      // window.open(item.slipUrl, '_blank'); // 외부 링크 열기 예시
+    },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+      if (type === '휴가') {
+        this.$router.push('/HyugaInsert.page');
+      } else if (type === '출장') {
+        this.$router.push('/ChuljangDetail.page');
+      }
+    },
+    getStatusClass(status) {
+      if (status === '지급') return 'status-approved';
+      if (status === '미지급') return 'status-pending';
+      return '';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    }
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped>
+</style>
 
client/views/pages/Manager/financial/employeeSalaryDetail.vue (added)
+++ client/views/pages/Manager/financial/employeeSalaryDetail.vue
@@ -0,0 +1,273 @@
+<template>
+    <div class="card ">
+    <div class="card-body">
+      <h2 class="card-title">직원별 급여명세서</h2>
+      <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate>
+            <div class="col-12">
+              <label for="yourName" class="form-label">아이디</label>
+              <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                placeholder="admin">
+            </div>
+            <div class="col-12 ">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label ">이름<p class="require"><img :src="require" alt=""></p></label>
+                <input v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly>
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">부서</label>
+                <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                  required readonly >
+              </div>
+            </div>
+            <div class="col-12">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label">직급</label>
+                <input v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly
+                  >
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">직책</label>
+                <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                  required readonly>
+              </div>
+            </div>
+            <div class="col-12 border-x">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label">월</label>
+                <select name="" id="" class="form-select">
+              <option value="">월</option>
+            </select>
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">지급일</label>
+                <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                  required readonly>
+              </div>
+            </div>
+
+
+          </form>
+
+          <div class="tbl-wrap tbl2" style="margin-top: 3rem;">
+      <table id="myTable" class="tbl data">
+        <!-- 동적으로 <th> 생성 -->
+        <thead>
+          <tr class="toptitle"><th colspan="5" >세부내역</th></tr>
+          <tr class="middletitle">
+            <th colspan="3">지급</th>
+            <th colspan="2">공제</th>
+          </tr>
+        </thead>
+        <!-- 동적으로 <td> 생성 -->
+        <tbody>
+          <tr>
+            <th rowspan="7">매월 지급 </th>
+            <th>임금항목</th>
+            <th>지급 금액(원)</th>
+            <th>공제 항목</th>
+            <th>공제 금액(원)</th>
+          </tr>
+          <tr >
+           <td></td>
+           <td></td>
+           <td></td>
+           <td></td>
+          </tr>
+          <tr >
+           <td></td>
+           <td></td>
+           <td></td>
+           <td></td>
+          </tr>
+          <tr >
+           <td></td>
+           <td></td>
+           <td></td>
+           <td></td>
+          </tr>
+          <tr >
+           <td></td>
+           <td></td>
+           <td></td>
+           <td></td>
+          </tr>
+          <tr >
+           <td></td>
+           <td></td>
+           <td></td>
+           <td></td>
+          </tr>
+          
+        </tbody>
+        <tbody>
+          <tr>
+            <th rowspan="3">격월 또는 부정기 지급</th>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td></td>
+          </tr>
+          <tr>
+            <th colspan="2">지급액 계</th>
+            <td></td>
+            <th >지금액 계</th>
+            <td></td>
+          </tr>
+          <tr>
+            <td colspan="3"></td>
+            <th> 실수령액(원)</th>
+            <td></td>
+          </tr>
+        </tbody>
+      </table>
+      <table id="myTable" class="tbl data" style="margin-top: 10px;">
+        <!-- 동적으로 <th> 생성 -->
+        <thead>
+          <tr class="toptitle"><th colspan="3" >세부내역</th></tr>
+          <tr >
+            <th >구분</th>
+            <th>산출식 또는 산출방법</th>
+            <th>지급액(원)</th>
+          </tr>
+        </thead>
+        <!-- 동적으로 <td> 생성 -->
+        <tbody>
+          <tr >
+           <td></td>
+           <td></td>
+           <td></td>
+          </tr>
+          
+          
+        </tbody>
+        
+      </table>
+      
+
+    </div>
+    <div class="buttons">
+        <button type="submit" class="btn tertiary">목록</button>
+      </div>
+    </div>
+    
+</div>
+    
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+
+export default {
+    data() {
+        return {
+            photoicon: "/client/resources/img/photo_icon.png",
+            img1: "/client/resources/img/img.png",
+            icon1: "/client/resources/img/icon.png",
+            dateicon: "/client/resources/img/date.png",
+            startbtn: "/client/resources/img/start.png",
+            stopbtn: "/client/resources/img/stop.png",
+            moreicon: "/client/resources/img/more.png",
+            today: new Date().toLocaleDateString('ko-KR', {
+                year: 'numeric',
+                month: '2-digit',
+                day: '2-digit',
+                weekday: 'short',
+            }),
+            time: this.getCurrentTime(),
+            listData: [
+      {
+        type: '내부',
+        projectName: 'AI 개발 프로젝트',
+        pm: '홍길동',
+        budget: 50000000,
+        period: '2024-01-01 ~ 2024-12-31',
+        status: '진행중'
+      },
+      {
+        type: '외부',
+        projectName: '웹 리뉴얼',
+        pm: '김영희',
+        budget: 20000000,
+        period: '2023-01-01 ~ 2023-12-31',
+        status: '미진행'
+      }
+    ]
+        }
+    },
+    methods: {
+        formatBudget(amount) {
+    return new Intl.NumberFormat().format(amount) + ' 원';
+  },
+        isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+        getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+  if (status === '미진행') return 'status-pending';
+  if (status === '진행중') return 'status-approved';
+
+  // Default empty string
+  return '';
+},
+        getCurrentTime() {
+            const now = new Date();
+            const hours = String(now.getHours()).padStart(2, '0');
+            const minutes = String(now.getMinutes()).padStart(2, '0');
+            const seconds = String(now.getSeconds()).padStart(2, '0');
+            return `${hours}:${minutes}:${seconds}`;
+        },
+        getCategoryClass(category) {
+        switch (category) {
+            case '용역': return 'category-service';
+            case '내부': return 'category-internal';
+            case '국가과제': return 'category-government';
+            default: return '';
+        }
+    },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        GoogleCalendar,
+    },
+    mounted() {
+        console.log('main mounted');
+        setInterval(() => {
+            this.time = this.getCurrentTime();
+        }, 1000);
+    }
+}
+</script>
+<style scoped>
+tr{cursor: pointer;}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/financial/employeeSalaryInsert.vue (added)
+++ client/views/pages/Manager/financial/employeeSalaryInsert.vue
@@ -0,0 +1,438 @@
+<template>
+    <div class="card ">
+    <div class="card-body">
+      <h2 class="card-title">급여명세서 등록</h2>
+      <form class="row g-3 needs-validation " :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate >
+            <div class="col-12">
+              <label for="yourName" class="form-label"><p>아이디<p class="require"><img :src="require" alt=""></p></p> </label>
+              <input  v-model="selectedid" type="text" name="name" class="form-control" required readonly
+                >
+                <input type="button" class="form-control " value="검색" @click="showPopup1 = true" />
+                <HrPopup v-if="showPopup1" @close="showPopup1 = false" @select="addApproval" />
+            </div>
+            <div class="col-12 ">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label ">이름</label>
+                <input v-model="selectedname" type="text" class="form-control"  required  readonly>
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">부서</label>
+                <input v-model="selecteddepartment" type="text"  class="form-control"
+                  required readonly >
+              </div>
+            </div>
+            <div class="col-12">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label">직급</label>
+                <input v-model="selectedposition" type="text" class="form-control"  required readonly
+                  >
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">직책</label>
+                <input v-model="selectedrole" type="text"  class="form-control"
+                  required readonly>
+              </div>
+            </div>
+            <div class="col-12 border-x">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label"><p>월<p class="require"><img :src="require" alt=""></p></p> </label>
+                <select name="" id="" class="form-select">
+              <option value="">월</option>
+            </select>
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label"><p>지급일<p class="require"><img :src="require" alt=""></p></p> </label>
+                <input  type="date"  class="form-control"
+                  required >
+              </div>
+            </div>
+
+
+          </form>
+          <div class="buttons" style="margin: 10px 0;">
+        <button type="submit" class="btn btn-red sm">지난달 정보 불러오기</button>
+        <button type="submit" class="btn primary sm" @click="showPopup = true">출장비 조회</button>
+        <ChuljangListPopup v-if="showPopup" @close="showPopup = false" @select="addApproval" />
+      </div>
+          <form class="row g-3  needs-validation" @submit.prevent="handleSubmit">
+            <div class="col-12 form-title">매월지급</div>
+        <div class="col-12">
+          <label for="purpose" class="form-label"><p>지급  <button type="button" title="추가" @click="addPayment">
+              <PlusCircleFilled />
+            </button><p class="require"><img :src="require" alt=""></p></p> </label>
+         <div class="approval-container">
+           <div v-for="(payment, index) in payments" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <select class="form-select" style="width: 200px;" v-model="payment.category">
+                    <option value="기본급">기본급</option>
+                    <option value=""></option>
+                    <option value=""></option>
+                  </select>
+                  <input type="text" class="form-control" v-model="payment.pay" />
+                  <button type="button" @click="removePayment(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+           </div>
+         </div>
+        </div>
+        <div class="col-12 border-x">
+          <label for="purpose" class="form-label"><p>공제  <button type="button" title="추가" @click="addGongje">
+              <PlusCircleFilled />
+            </button><p class="require"><img :src="require" alt=""></p></p> </label>
+         <div class="approval-container">
+          <div class="d-flex addapproval">
+            <select class="form-select" style="width: 200px;" >
+                    <option value="국민연금">국민연금</option>
+                    <option value="">건강보험</option>
+                    <option value="">고용보험</option>
+                    <option value="">장기요양</option>
+                    <option value="">소득세</option>
+                    <option value="">지방소득세</option>
+                  </select>
+                  <input type="text" class="form-control"  />
+          </div>
+          <div class="d-flex addapproval">
+            <select class="form-select" style="width: 200px;" >
+              <option value="국민연금">국민연금</option>
+                    <option value="">건강보험</option>
+                    <option value="">고용보험</option>
+                    <option value="">장기요양</option>
+                    <option value="">소득세</option>
+                    <option value="">지방소득세</option>
+                  </select>
+                  <input type="text" class="form-control"  />
+          </div>
+          <div class="d-flex addapproval">
+            <select class="form-select" style="width: 200px;" >
+              <option value="국민연금">국민연금</option>
+                    <option value="">건강보험</option>
+                    <option value="">고용보험</option>
+                    <option value="">장기요양</option>
+                    <option value="">소득세</option>
+                    <option value="">지방소득세</option>
+                  </select>
+                  <input type="text" class="form-control"  />
+          </div>
+          <div class="d-flex addapproval">
+            <select class="form-select" style="width: 200px;" >
+              <option value="국민연금">국민연금</option>
+                    <option value="">건강보험</option>
+                    <option value="">고용보험</option>
+                    <option value="">장기요양</option>
+                    <option value="">소득세</option>
+                    <option value="">지방소득세</option>
+                  </select>
+                  <input type="text" class="form-control"  />
+          </div>
+          <div class="d-flex addapproval">
+            <select class="form-select" style="width: 200px;" >
+              <option value="국민연금">국민연금</option>
+                    <option value="">건강보험</option>
+                    <option value="">고용보험</option>
+                    <option value="">장기요양</option>
+                    <option value="">소득세</option>
+                    <option value="">지방소득세</option>
+                  </select>
+                  <input type="text" class="form-control"  />
+          </div>
+          <div class="d-flex addapproval">
+            <select class="form-select" style="width: 200px;" >
+              <option value="국민연금">국민연금</option>
+                    <option value="">건강보험</option>
+                    <option value="">고용보험</option>
+                    <option value="">장기요양</option>
+                    <option value="">소득세</option>
+                    <option value="">지방소득세</option>
+                  </select>
+                  <input type="text" class="form-control"  />
+          </div>
+           <div v-for="(gongje, index) in gongjes" :key="index" class="d-flex  addapproval">
+              <select class="form-select" style="width: 200px;" v-model="gongje.category">
+                    <option value="">기본급</option>
+                    <option value=""></option>
+                    <option value=""></option>
+                  </select>
+                  <input type="text" class="form-control" v-model="gongje.pay" />
+                  <button type="button" @click="removeGongje(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+           </div>
+         </div>
+        
+        </div>
+      </form>
+          <form class="row g-3  needs-validation" @submit.prevent="handleSubmit" style="margin-top: 10px;">
+            <div class="col-12 form-title">격월 또는 부정기 지급</div>
+        <div class="col-12">
+          <label for="purpose" class="form-label"><p>지급  <button type="button" title="추가" @click="addPayment2">
+              <PlusCircleFilled />
+            </button><p class="require"><img :src="require" alt=""></p></p> </label>
+         <div class="approval-container">
+           <div v-for="(payment, index) in payments2" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <select class="form-select" style="width: 200px;" v-model="payment.category">
+                    <option value="선택">선택</option>
+                    <option value=""></option>
+                    <option value=""></option>
+                  </select>
+                  <input type="text" class="form-control" v-model="payment.pay" />
+                  <button type="button" @click="removePayment2(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+           </div>
+         </div>
+        </div>
+        <div class="col-12 border-x">
+          <label for="purpose" class="form-label"><p>공제  <button type="button" title="추가" @click="addGongje2">
+              <PlusCircleFilled />
+            </button><p class="require"><img :src="require" alt=""></p></p> </label>
+         <div class="approval-container">
+          
+           <div v-for="(gongje, index) in gongjes2" :key="index" class="d-flex  addapproval">
+              <select class="form-select" style="width: 200px;" v-model="gongje.category">
+                    <option value="선택">선택</option>
+                    <option value=""></option>
+                    <option value=""></option>
+                  </select>
+                  <input type="text" class="form-control" v-model="gongje.pay" />
+                  <button type="button" @click="removeGongje2(index)" class="delete-button">
+                  <CloseOutlined />
+                </button>
+           </div>
+         </div>
+        
+        </div>
+      </form>
+          <form class="row g-3  needs-validation" @submit.prevent="handleSubmit" style="margin-top: 10px;">
+            <div class="col-12 form-title">계산방법<button type="button" title="추가" @click="addTr">
+              <PlusCircleFilled />
+            </button></div>
+        <div class="col-12 border-x" >
+        <div class="tbl-wrap tbl3">
+          <table class="tbl">
+            <thead>
+              <tr>
+                <th>지급</th>
+                <th>산출식 또는 산출 방법</th>
+                <th>지급액(원)</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index" >
+                <td>
+                <select class="form-select" v-model="item.payType">
+                  <option value="">선택</option>
+                  <option value=""></option>
+                  <option value=""></option>
+                </select>
+              </td>
+              <td><input type="text" class="form-control" v-model="item.formula" /></td>
+              <td><input type="text" class="form-control" v-model="item.amount" /></td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        </div>
+       
+        
+      </form>
+
+      <form class="row g-3  needs-validation" @submit.prevent="handleSubmit" style="margin-top: 10px;">
+            
+        <div class="col-12 border-x">
+          <label for="purpose" class="form-label">지급 </label>
+          <input type="text" class="form-control">
+          <label for="purpose" class="form-label">지급 </label>
+          <input type="text" class="form-control">
+          <label for="purpose" class="form-label">지급 </label>
+          <input type="text" class="form-control">
+        </div>
+      </form>
+    <div class="buttons">
+        <button type="submit" class="btn primary">등록</button>
+        <button type="submit" class="btn tertiary">취소</button>
+      </div>
+    </div>
+    
+</div>
+    
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
+import HrPopup from "../../../component/Popup/HrPopup.vue";
+import ChuljangListPopup from "../../../component/Popup/ChuljangListPopup.vue";
+export default {
+    data() {
+        return {
+          showPopup: false,
+          showPopup1: false,
+          selectedid: '',
+          selectedname: '',
+          selectedposition: '',
+          selectedrole: '',
+          selecteddepartment: '',
+          approvals: [],
+          listData: [
+          { payType: '', formula: '', amount: '' }
+      ],
+          payments: [ {
+          category: '기본급',
+          pay: '',
+        },] ,
+        gongjes: [ {
+          category: '기본급',
+          pay: '',
+        },] ,
+          payments2: [ {
+          category: '선택',
+          pay: '',
+        },] ,
+        gongjes2: [ {
+          category: '선택',
+          pay: '',
+        },] ,
+          require: "/client/resources/img/require.png",
+            photoicon: "/client/resources/img/photo_icon.png",
+            img1: "/client/resources/img/img.png",
+            icon1: "/client/resources/img/icon.png",
+            dateicon: "/client/resources/img/date.png",
+            startbtn: "/client/resources/img/start.png",
+            stopbtn: "/client/resources/img/stop.png",
+            moreicon: "/client/resources/img/more.png",
+            today: new Date().toLocaleDateString('ko-KR', {
+                year: 'numeric',
+                month: '2-digit',
+                day: '2-digit',
+                weekday: 'short',
+            }),
+            time: this.getCurrentTime(),
+          
+        }
+    },
+    components: {
+    PlusCircleFilled, CloseOutlined, HrPopup, ChuljangListPopup
+  },
+    methods: {
+      addApproval(selectedUser) {
+      this.approvals.push({
+        id: selectedUser.id,
+        name: selectedUser.name,
+        department: selectedUser.department,
+        position: selectedUser.position,
+        role: selectedUser.role,
+
+      });
+
+      this.selectedid = selectedUser.id; // 입력창에 표시
+      this.selectedname = selectedUser.name; // 입력창에 표시
+      this.selecteddepartment = selectedUser.department; // 입력창에 표시
+      this.selectedposition = selectedUser.position; // 입력창에 표시
+      this.selectedrole = selectedUser.role; // 입력창에 표시
+      this.showPopup1 = false;
+    },
+      addTr() {
+      this.listData.push({ payType: '', formula: '', amount: '' });
+    },
+      addPayment() {
+      this.payments.push({
+        category: '선택',
+        pay: '',
+      });
+    },
+    removePayment(index) {
+      this.payments.splice(index, 1);
+    },
+      addGongje() {
+      this.gongjes.push({
+        category: '선택',
+        pay: '',
+      });
+    },
+    removeGongje(index) {
+      this.gongjes.splice(index, 1);
+    },
+      addPayment2() {
+      this.payments2.push({
+        category: '선택',
+        pay: '',
+      });
+    },
+    removePayment2(index) {
+      this.payments2.splice(index, 1);
+    },
+      addGongje2() {
+      this.gongjes2.push({
+        category: '선택',
+        pay: '',
+      });
+    },
+    removeGongje2(index) {
+      this.gongjes2.splice(index, 1);
+    },
+        formatBudget(amount) {
+    return new Intl.NumberFormat().format(amount) + ' 원';
+  },
+        isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+        getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+  if (status === '미진행') return 'status-pending';
+  if (status === '진행중') return 'status-approved';
+
+  // Default empty string
+  return '';
+},
+        getCurrentTime() {
+            const now = new Date();
+            const hours = String(now.getHours()).padStart(2, '0');
+            const minutes = String(now.getMinutes()).padStart(2, '0');
+            const seconds = String(now.getSeconds()).padStart(2, '0');
+            return `${hours}:${minutes}:${seconds}`;
+        },
+        getCategoryClass(category) {
+        switch (category) {
+            case '용역': return 'category-service';
+            case '내부': return 'category-internal';
+            case '국가과제': return 'category-government';
+            default: return '';
+        }
+    },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    mounted() {
+        console.log('main mounted');
+        setInterval(() => {
+            this.time = this.getCurrentTime();
+        }, 1000);
+    }
+}
+</script>
+<style scoped>
+tr{cursor: pointer;}
+.approval-container{
+  width: 100%;
+}
+.addapproval input{
+  width: calc(100% - 240px);
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/financial/employeeSalaryList.vue (added)
+++ client/views/pages/Manager/financial/employeeSalaryList.vue
@@ -0,0 +1,190 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">직원별 급여명세서</h2>
+        <div class="sch-form-wrap">
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="">부서</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>월 </th>
+                <th>부서</th>
+                <th>이름</th>
+                <th>지급액</th>
+                <th>공제액</th>
+                <th>수령액</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index" @click="goToDetailPage(item)">
+                <td>{{ item.month }}</td>
+                <td>{{ item.department }}</td>
+                <td>{{ item.name }}</td>
+                <td>{{ formatCurrency(item.payment) }}</td>
+                <td>{{ formatCurrency(item.deduction) }}</td>
+                <td>{{ formatCurrency(item.actual) }}</td>
+              </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <!-- End Table -->
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
+export default {
+  data() {
+    return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+          month: '4',
+          department: '개발팀',
+          name: '홍길동',
+          payment: 3000000,
+          deduction: 300000,
+          actual: 2700000,
+        },
+    ],
+      filteredData: [],
+    };
+  },
+  components:{
+    SearchOutlined
+  },
+  computed: {
+  },
+  methods: {
+    goToDetailPage(item) {
+    // item.id 또는 다른 식별자를 사용하여 URL을 구성할 수 있습니다.
+    this.$router.push({ path: `/employeeSalaryDetail.page`, query: { id: item.id } });
+  },
+    formatCurrency(amount) {
+      return new Intl.NumberFormat('ko-KR').format(amount) + ' 원';
+    },
+    viewPayslip(item) {
+      // 예: 모달 열기, PDF 보기, 페이지 이동 등
+      console.log('명세서 보기:', item);
+      // window.open(item.slipUrl, '_blank'); // 외부 링크 열기 예시
+    },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+      if (type === '휴가') {
+        this.$router.push('/HyugaInsert.page');
+      } else if (type === '출장') {
+        this.$router.push('/ChuljangDetail.page');
+      }
+    },
+    getStatusClass(status) {
+      if (status === '승인') return 'status-approved';
+      if (status === '대기') return 'status-pending';
+      return '';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    }
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped>
+tr{cursor: pointer;}
+</style>
client/views/pages/Manager/financial/financial.vue
--- client/views/pages/Manager/financial/financial.vue
+++ client/views/pages/Manager/financial/financial.vue
@@ -1,203 +1,121 @@
 <template>
-  <div class="pagetitle">
-    <h2>공지사항 등록</h2>
-  </div>
-  <section class="section">
-    <div class="card">
-      <div class="card-body pt-3">
-        <form @submit.prevent="handleSubmit">
-          <table class="form-table" style="width: 100%;">
-            <tbody>
-              <tr>
-                <th class="text-lf">
-                  <span>제목</span>
-                </th>
-                <td>
-                  <input type="text" class="form-control" placeholder="제목을 입력하세요." v-model="title" required />
-                </td>
-              </tr>
-              <tr class="border-top">
-                <th colspan="4" class="text-lf">
-                  <span>내용</span>
-                </th>
-              </tr>
-              <tr style="max-height: 600px">
-                <td colspan="4" style="height: 100%" class="pt-0">
-                  <textarea name="" id="" v-model="editorData"></textarea>
-                </td>
-              </tr>
-
-              <!-- 첨부파일 -->
-              <tr class="border-top">
-                <th class="text-lf">
-                  첨부파일
-                </th>
-                <td colspan="2">
-                  <div class="gd-12 pr0">
-                    <div class="gd-2 pl0 pr0">
-                      <label for="file" class="btn btn-outline-primary">파일찾기</label>
-                      <input type="file" id="file" ref="file" multiple />
-                    </div>
-                  </div>
-                </td>
-              </tr>
-
-              <!-- 공지글 -->
-              <tr class="border-top">
-                <th class="text-lf">
-                  공지글
-                </th>
-                <td colspan="3">
-                  <div class="d-flex no-gutters">
-                    <div class="col-md-4">
-                      <input type="radio" name="notice" id="notice-y" class="mr5" value="Y" v-model="notice" required />
-                      <label for="notice-y">사용</label>
-                    </div>
-                    <div class="col-md-4">
-                      <input type="radio" name="notice" id="notice-n" class="mr5" value="N" v-model="notice" required />
-                      <label for="notice-n">미사용</label>
-                    </div>
-                  </div>
-                </td>
-              </tr>
-
-              <!-- 공지글 게시기간 -->
-              <tr class="border-top">
-                <th class="text-lf">
-                  공지글 게시기간
-                </th>
-                <td colspan="3">
-                  <div class="d-flex no-gutters">
-                    <div class="col-md-4">
-                      <input type="datetime-local" class="form-control" v-model="startDate" :disabled="notice === 'N'"
-                        required />
-                    </div>
-                    <div class="pd-1">-</div>
-                    <div class="col-md-4">
-                      <input type="datetime-local" class="form-control" v-model="endDate" :disabled="notice === 'N'"
-                        required />
-                    </div>
-                  </div>
-                </td>
-              </tr>
-            </tbody>
-          </table>
-          <div class="text-end">
-            <button class="btn btn-primary" type="submit">등록</button>
-            <button class="btn btn-secondary" @click="handleCancel">취소</button>
+  <div class="sidemenu">
+    <div class="myinfo simple">
+      <div class="name-box">
+        <div class="img-area">
+          <div><img :src="photoicon" alt="">
+            <p class="name">OOO과장</p>
           </div>
-        </form>
-
-
+          <div class="info">
+            <p>솔루션 개발팀</p>
+            <i class="fa-bars"></i>
+            <p>팀장</p>
+          </div>
+        </div>
       </div>
+
+
+      <details class="menu-box">
+          <summary><p>급여관리</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/salaryList.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>급여명세서</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+            <li>
+              <router-link to="/employeeSalaryList.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>직원별 급여명세서</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+            <li>
+              <router-link to="/employeeSalaryInsert.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>급여명세서 등록</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+            
+          </ul>
+      </details>
+      <details class="menu-box">
+          <summary><p>지출관리</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/ChuljangCostList.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>출장비 현황</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+            <li>
+              <router-link to="/projectInsert.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>출장비 설정</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+            <li>
+              <router-link to="/MeetingCostList.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>회의비 지출현황</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+            
+          </ul>
+      </details>
     </div>
-  </section>
+  </div>
+  <!-- End Page Title -->
+  <div class="content">
+    <router-view></router-view>
+
+  </div>
 </template>
 
 <script>
+import { ref } from 'vue';
 
 export default {
-  components: {
-  },
   data() {
-    console.log(localStorage.getItem('testKey'));
-    const today = new Date().toISOString().split('T')[0];
-    const todayDatetime = new Date().toISOString().slice(0, 16); // To include time for datetime-local
     return {
-      editor: ClassicEditor,
-      editorData: '', // Data for the editor
-      title: '', // Bind to title input
-      notice: '', // Bind to notice radio buttons
-      startDate: todayDatetime, // Bind to start date
-      endDate: todayDatetime, // Bind to end date
-      isFormValid: true, // To track form validation status
+      photoicon: "/client/resources/img/photo_icon.png",
+      menuicon: "/client/resources/img/menuicon.png",
+      topmenuicon: "/client/resources/img/topmenuicon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      DeptData: [
+        { member: '', deptNM: '', acceptTerms: false },
+        // 더 많은 데이터 추가...
+      ],
+      filteredData: [],
     };
   },
+  computed: {
+  },
   methods: {
-    handleInsert() {
-      console.log('Form Data:', {
-        title: this.title,
-        editorData: this.editorData,
-        notice: this.notice,
-        startDate: this.startDate,
-        endDate: this.endDate,
-      });
-    },
-    handleCancel() {
-      // Reset form fields
-      this.title = '';
-      this.editorData = '';
-      this.notice = '';
-      this.startDate = this.endDate = new Date().toISOString().slice(0, 16);
-      // Optionally remove from localStorage
-      localStorage.removeItem('formData');
-    },
-    handleSubmit() {
-      console.log('handleSubmit called');
-      // Validate the form before submission
-      this.validateForm();
-      if (this.isFormValid) {
-        // Save form data to localStorage
-        const formData = {
-          title: this.title,
-          editorData: this.editorData,
-          notice: this.notice,
-          startDate: this.startDate,
-          endDate: this.endDate,
-        };
-        localStorage.setItem('formData', JSON.stringify(formData));
-        alert('등록되었습니다.');
-        // Add further logic here (e.g., API call)
-      } else {
-        alert('모든 필드를 올바르게 작성해주세요.');
-      }
-    },
-    validateForm() {
-      // Check if all required fields are filled
-      this.isFormValid = !!(
-        this.title &&
-        this.editorData &&
-        this.notice &&
-        this.startDate &&
-        this.endDate
-      );
-    },
-    loadFormData() {
-      const savedData = localStorage.getItem('formData');
-      console.log('savedData:', savedData);
-      if (savedData) {
-        const formData = JSON.parse(savedData);
-        this.title = formData.title || '';
-        this.editorData = formData.editorData || '';
-        this.notice = formData.notice || '';
-        this.startDate = formData.startDate || '';
-        this.endDate = formData.endDate || '';
-      }
+
+    // 페이지 변경
+    changePage(page) {
+      this.currentPage = page;
     },
   },
+  created() {
+  },
   mounted() {
-    this.loadFormData(); // Load saved data from localStorage
+
   },
 };
 </script>
 
-<style scoped>
-td,
-th {
-  padding: 1rem;
-}
-
-th {
-  width: 10rem;
-}
-
-#file {
-  position: absolute;
-  width: 0;
-  height: 0;
-  padding: 0;
-  overflow: hidden;
-  border: 0;
-}
-
-</style>
+<style scoped></style>
 
client/views/pages/Manager/financial/salaryList.vue (added)
+++ client/views/pages/Manager/financial/salaryList.vue
@@ -0,0 +1,177 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">급여명세서</h2>
+        <div class="sch-form-wrap">
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
+            </select>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>월 </th>
+                <th>지급액</th>
+                <th>공제액</th>
+                <th>수령액</th>
+                <th>지급일</th>
+                <th>명세서 보기</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index">
+                <td>{{ item.month }}</td>
+                <td>{{ formatCurrency(item.payment) }}</td>
+                <td>{{ formatCurrency(item.deduction) }}</td>
+                <td>{{ formatCurrency(item.actual) }}</td>
+                <td>{{ item.payDate }}</td>
+                <td>
+                  <button class="btn secondary xsm" @click="showPopup = true">보기</button>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+          <PaySlipPopup v-if="showPopup" @close="showPopup = false"/>
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <!-- End Table -->
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import PaySlipPopup from '../../../component/Popup/PaySlipPopup.vue';
+const currentYear = new Date().getFullYear();
+export default {
+  data() {
+    return {
+      showPopup: false,
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+        {
+          month: '3',
+          payment: 3000000,
+          deduction: 500000,
+          actual: 2500000,
+          payDate: '2024-12-25',
+          slipUrl: '/slips/2024-12.pdf' // 예: 파일 경로나 상세 정보용 키
+        },
+        {
+          month: '4',
+          payment: 3100000,
+          deduction: 510000,
+          actual: 2590000,
+          payDate: '2025-01-25',
+          slipUrl: '/slips/2025-01.pdf'
+        }
+      ],
+      filteredData: [],
+    };
+  },
+  components: {
+    PaySlipPopup
+  },
+  computed: {
+  },
+  methods: {
+    formatCurrency(amount) {
+      return new Intl.NumberFormat('ko-KR').format(amount) + ' 원';
+    },
+    viewPayslip(item) {
+      // 예: 모달 열기, PDF 보기, 페이지 이동 등
+      console.log('명세서 보기:', item);
+      // window.open(item.slipUrl, '_blank'); // 외부 링크 열기 예시
+    },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+      if (type === '명세서') {
+        this.$router.push('/HyugaInsert.page');
+      } else if (type === '출장') {
+        this.$router.push('/ChuljangDetail.page');
+      }
+    },
+    getStatusClass(status) {
+      if (status === '승인') return 'status-approved';
+      if (status === '대기') return 'status-pending';
+      return '';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    }
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped></style>
 
client/views/pages/Manager/hr/buseoManagement.vue (added)
+++ client/views/pages/Manager/hr/buseoManagement.vue
@@ -0,0 +1,331 @@
+<template>
+  <div class="card">
+    <div class="card-body">
+      <h2 class="card-title">부서 관리</h2>
+      <!-- Multi Columns Form -->
+      <div class="flex align-top">
+        <div class="sch-form-wrap search  ">
+          <div v-for="(menu, index) in menus" :key="index" class="sidemenu">
+            <details class="menu-box" open>
+              <summary class="topmenu">
+                <img :src="arrow" alt="" class="arrow">
+                <img :src="topmenuicon" alt="">
+                <p>{{ menu.title }} </p>
+                <button @click="addSubMenu(index)" class="btn xsm secondary">sub  +</button>
+              </summary>
+              <ul>
+                <li class="submenu" v-for="(submenu, subIndex) in menu.submenus" :key="subIndex">
+                  <router-link :to="submenu.link" exact-active-class="active-link" v-slot="{ isExactActive }">
+                    <img :src="menuicon" alt="">
+                    <p>{{ submenu.label }}</p>
+                  </router-link>
+                </li>
+              </ul>
+            </details>
+          </div>
+          <div class="buttons">
+            <button @click="addTopMenu"><img :src="addtopmenu" alt=""></button>
+            
+          </div>
+        </div>
+        <div style="width: 100%;">
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">부서 정보</h3>
+            <div class="buttons" style="margin: 0;">
+              <button type="submit" class="btn sm tertiary">초기화</button>
+              <button type="reset" class="btn sm secondary">등록</button>
+              <button type="delete" class="btn sm btn-red">삭제</button>
+            </div>
+          </div>
+          <form class="row g-3 pt-3  needs-validation detail" @submit.prevent="handleSubmit"
+            style="margin-bottom: 3rem;">
+            <div class="col-12">
+              <label for="purpose" class="form-label">상위부서</label>
+              <input type="text" class="form-control" id="purpose" v-model="purpose" readonly />
+            </div>
+            <div class="col-12">
+              <label for="purpose" class="form-label">
+                <p>부서명
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <input type="text" class="form-control" id="purpose" v-model="purpose" />
+            </div>
+
+            <div class="col-12 chuljang border-x">
+              <label for="prvonsh" class="form-label">부서설명</label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+            </div>
+
+
+          </form>
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">부서 사용자</h3>
+            <div class="buttons" style="margin: 0;">
+              <button type="reset" class="btn sm secondary" @click="showPopup = true">사용자 추가</button>
+              <button type="delete" class="btn sm btn-red" @click="removeMember(index)">사용자 삭제</button>
+            </div>
+            <HrPopup v-if="showPopup" @close="showPopup = false" @select="addMember"/>
+          </div>
+          <div class="tbl-wrap chk-area">
+            <table id="myTable" class="tbl data">
+
+              <thead>
+                <tr>
+                  <th>선택</th>
+                  <th>직급</th>
+                  <th>이름</th>
+                  <th>부서장</th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(member, index) in members" :key="index">
+                  <td>
+                    <div class="form-check">
+                      <input type="checkbox" :id="`chk_${index}`" :value="member.name" v-model="member.checked" />
+                      <label :for="`chk_${index}`"></label>
+                    </div>
+                  </td>
+                  <td>{{ member.position }}</td>
+                  <td>{{ member.name }}</td>
+                  <td>
+                    <div class="form-check">
+                      <input type="radio" name="manager" :id="`rdo_${index}`" :value="member.name"
+                        v-model="selectedManager" />
+                      <label :for="`rdo_${index}`"></label>
+                    </div>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+
+          </div>
+          <div class="pagination">
+            <ul>
+              <!-- 왼쪽 화살표 (이전 페이지) -->
+              <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+                &lt;
+              </li>
+
+              <!-- 페이지 번호 -->
+              <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+                @click="changePage(page)">
+                {{ page }}
+              </li>
+
+              <!-- 오른쪽 화살표 (다음 페이지) -->
+              <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+                &gt;
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+
+
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { PlusCircleFilled, CloseOutlined, DownOutlined } from '@ant-design/icons-vue';
+import HrPopup from '../../../component/Popup/HrPopup.vue';
+const isOpen = ref(false)
+export default {
+  data() {
+    const today = new Date().toISOString().split('T')[0];
+    return {
+      selectedManager: '',
+      showPopup: false,
+      menus: [
+        {
+          title: '부서1',
+          submenus: [
+            {
+              label: '직원검색',
+              link: '/hrSearch.page',
+            },
+          ],
+        },
+      ],
+      currentPage: 1,
+      totalPages: 3,
+      members: [] ,
+      selectedManager: null,
+      h3icon: "/client/resources/img/h3icon.png",
+      require: "/client/resources/img/require.png",
+      menuicon: "/client/resources/img/arrow-rg.png",
+      topmenuicon: "/client/resources/img/topmenu.png",
+      arrow: "/client/resources/img/arrow.png",
+      addtopmenu: "/client/resources/img/addtopmenu.png",
+      addsubmenu: "/client/resources/img/addsubmenu.png",
+      fileName: '',
+      startDate: today,
+      startTime: '09:00',
+      endDate: today,
+      endTime: '18:00',
+      where: '',
+      purpose: '',
+      approvals: [
+        {
+          category: '결재',
+          name: '',
+        },
+      ],
+      receipts: [
+        {
+          type: '개인결제',
+          category: '결재',
+          category1: '구분',
+        },
+      ],
+    };
+  },
+  components: {
+    PlusCircleFilled, CloseOutlined, DownOutlined, HrPopup
+  },
+  computed: {
+    loginUser() {
+      const authStore = useAuthStore();
+      return authStore.getLoginUser;
+    },
+  },
+
+  methods: {
+    addMember(selectedUser) {
+      this.members.push({
+        position: selectedUser.position,
+        name: selectedUser.name, // or other fields if needed
+      });
+      this.showPopup = false; // 팝업 닫기
+    },
+    removeMember() {
+      this.members = this.members.filter(member => !member.checked);
+    },
+    addTopMenu() {
+      const newIndex = this.menus.length + 1;
+      this.menus.push({
+        title: `부서${newIndex}`,
+        submenus: [],
+      });
+    },
+    addSubMenu(menuIndex) {
+      this.menus[menuIndex].submenus.push({
+        label: `신규메뉴${this.menus[menuIndex].submenus.length + 1}`,
+        link: '/new.page',
+      });
+    },
+    goToPage(type) {
+      if (type === '회의록 등록') {
+        this.$router.push('/meetingInsert.page');
+      } else if (type === '출장') {
+        this.$router.push('/ChuljangDetail.page');
+      }
+    },
+    handleFileUpload(event) {
+      const file = event.target.files[0];
+      if (file) {
+        this.fileName = file.name;
+      }
+    },
+    addApproval() {
+      this.approvals.push({
+        category: '결재',
+        name: '',
+      });
+    },
+    addReceipt() {
+      this.receipts.push({
+        type: '개인결제',
+        category: '결재',
+        category1: '',
+        name: '',
+        file: null,
+      });
+    },
+    // 승인자 삭제
+    removeApproval(index) {
+      this.approvals.splice(index, 1);
+    },
+    removeReceipt(index) {
+      this.receipts.splice(index, 1);
+    },
+    validateForm() {
+      // 필수 입력 필드 체크
+      if (
+        this.startDate &&
+        this.startTime &&
+        this.endDate &&
+        this.endTime &&
+        this.where &&
+        this.purpose.trim() !== ""
+      ) {
+        this.isFormValid = true;
+      } else {
+        this.isFormValid = false;
+      }
+    },
+    calculateDayCount() {
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
+
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
+      } else {
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
+      }
+
+      this.validateForm(); // dayCount 변경 후 폼 재검증
+    },
+    handleSubmit() {
+      this.validateForm(); // 제출 시 유효성 확인
+      if (this.isFormValid) {
+        localStorage.setItem('ChuljangFormData', JSON.stringify(this.$data));
+        alert("승인 요청이 완료되었습니다.");
+        // 추가 처리 로직 (API 요청 등)
+      } else {
+        alert("모든 필드를 올바르게 작성해주세요.");
+      }
+    },
+    loadFormData() {
+      const savedData = localStorage.getItem('ChuljangFormData');
+      if (savedData) {
+        this.$data = JSON.parse(savedData);
+      }
+    },
+  },
+  mounted() {
+    // Load the saved form data when the page is loaded
+    this.loadFormData();
+  },
+  watch: {
+    startDate: 'calculateDayCount',
+    startTime: 'calculateDayCount',
+    endDate: 'calculateDayCount',
+    endTime: 'calculateDayCount',
+    where: 'validateForm',
+    purpose: "validateForm",
+  },
+};
+</script>
+
+<style scoped>
+/* 필요한 스타일 추가 */
+</style>
client/views/pages/Manager/hr/hr.vue
--- client/views/pages/Manager/hr/hr.vue
+++ client/views/pages/Manager/hr/hr.vue
@@ -1,185 +1,99 @@
 <template>
-  <div class="pagetitle">
-    <h2>프로젝트 등록</h2>
-  </div><!-- End Page Title -->
-
-  <section class="section">
-    <div class="card">
-      <div class="card-body">
-
-        <!-- Multi Columns Form -->
-        <form class="row g-3 pt-3" @submit.prevent="handleSubmit">
-          <div class="col-md-9">
-            <label for="projectNm" class="form-label">프로젝트명</label>
-            <input type="text" class="form-control" id="projectNm" v-model="projectNm" />
+  <div class="sidemenu">
+    <div class="myinfo simple">
+      <div class="name-box">
+        <div class="img-area">
+          <div><img :src="photoicon" alt="">
+            <p class="name">OOO과장</p>
           </div>
-          <div class="col-md-5">
-            <label for="orgNm" class="form-label">주관사</label>
-            <input type="text" class="form-control" id="orgNm" v-model="orgNm" />
+          <div class="info">
+            <p>솔루션 개발팀</p>
+            <i class="fa-bars"></i>
+            <p>팀장</p>
           </div>
-          <div class="col-md-5">
-            <label for="inputName5" class="form-label">부서</label>
-            <select id="inputState" class="form-select">
-              <option selected>전략기획팀</option>
-              <option>개발팀</option>
-              <option>ux/ui</option>
-            </select>
-          </div>
-          <div class="col-md-9">
-            <label for="rm" class="form-label">사업금액</label>
-            <input type="text" class="form-control" id="amount" v-model="amount" />
-          </div>
-          <div class="col-md-5">
-            <label for="startDate" class="form-label">사업기간</label>
-            <div class="d-flex gap-1">
-              <input type="date" class="form-control" id="BstartDate" v-model="BstartDate" />~
-              <input type="date" class="form-control" id="BendDate" v-model="BendDate" />
-            </div>
-          </div>
-          <div class="col-6">
-            <label for="prvonsh" class="form-label">사업 투입인력</label>
-            <div class="search-bar d-flex gap-2">
-              <form class="search-form d-flex  align-items-center" method="POST" action="#"
-                @submit.prevent="updateMember">
-                <input type="text" v-model="searchQuery" name="query" placeholder="Search" title="Enter search keyword">
-                <button type="submit" title="Search"><PlusOutlined /></button>
-              </form>
-              <input type="text" class="select-member" :value="selectedMember.join(' ')" >
-            </div>
-          </div>
-          <div class="col-md-5">
-            <label for="endDate" class="form-label">실제 투입기간</label>
-            <div class="d-flex gap-1">
-              <input type="date" class="form-control" id="MystartDate" v-model="MystartDate" />~
-              <input type="date" class="form-control" id="MyendDate" v-model="MyendDate" />
-              
-            </div>
-          </div>
-          <div class="col-6">
-            <label for="prvonsh" class="form-label">실제 투입인력</label>
-            <div class="search-bar d-flex gap-2">
-              <form class="search-form d-flex  align-items-center" method="POST" action="#"
-                @submit.prevent="updateMember">
-                <input type="text" v-model="searchQuery" name="query" placeholder="Search" title="Enter search keyword">
-                <button type="submit" title="Search"><PlusOutlined /></button>
-              </form>
-              <input type="text" class="select-member" :value="selectedMember.join(' ')" >
-            </div>
-          </div>
-          <div class="col-md-4">
-            <label for="totalDays" class="form-label">총 투입일<span class="small"></span></label>
-            <input type="text" class="form-control" id="totalDays" v-model="totalDays" readonly />
-          </div>
-          
-          <div class="col-12">
-            <label for="rm" class="form-label">비고</label>
-            <input type="text" class="form-control" id="rm" v-model="rm" />
-          </div>
-
-          <div class="text-end">
-            <button type="submit" class="btn btn-primary" >등록</button>
-            <button type="reset" class="btn btn-secondary">취소</button>
-          </div>
-        </form><!-- End Multi Columns Form -->
-
+        </div>
       </div>
+
+
+      <details class="menu-box">
+          <summary><p>직원</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/hrSearch.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>직원검색</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+            <li>
+              <router-link to="/hrManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>직원관리</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+           
+            
+          </ul>
+      </details>
+      <details class="menu-box">
+          <summary><p>부서</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/buseoManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>부서관리</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+           
+            
+          </ul>
+      </details>
     </div>
-  </section>
+  </div>
+  <!-- End Page Title -->
+  <div class="content">
+    <router-view></router-view>
+
+  </div>
 </template>
 
 <script>
-import { PlusOutlined } from '@ant-design/icons-vue';
+import { ref } from 'vue';
 
 export default {
   data() {
-    const today = new Date().toISOString().split('T')[0];
     return {
-      searchQuery: '',
-      selectedMember: [],
-      projectNm: '', // Project name
-      orgNm: '', // Organization name
-      department: '', // Department selection
-      amount: '',
-      rm: '', // Business amount
-      BstartDate: today, // Business start date
-      BendDate: today, // Business end date
-      MystartDate: today, // Actual start date
-      MyendDate: today, // Actual end date
-      totalDays: 1, // Total days
-      reason: "", // Notes or remarks
+      photoicon: "/client/resources/img/photo_icon.png",
+      menuicon: "/client/resources/img/menuicon.png",
+      topmenuicon: "/client/resources/img/topmenuicon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      DeptData: [
+        { member: '', deptNM: '', acceptTerms: false },
+        // 더 많은 데이터 추가...
+      ],
+      filteredData: [],
     };
   },
-  components: {
-    PlusOutlined,
-  },
   computed: {
-    // Pinia Store의 상태를 가져옵니다.
-    loginUser() {
-      const authStore = useAuthStore();
-      return authStore.getLoginUser;
-    },
   },
   methods: {
-    updateMember() {
-        // Add the search query to the selectedMembers array if it's not empty
-        if (this.searchQuery.trim()) {
-          this.selectedMember.push(this.searchQuery.trim());
-        }
-        // Clear the search query after adding it to selectedMembers
-        this.searchQuery = '';
-      },
-    // 폼 검증 메서드
-    validateForm() {
-      // 필수 입력 필드 체크
-      if (
-        this.BstartDate &&
-        this.BendDate &&
-        this.MystartDate &&
-        this.MyendDate &&
-        this.totalDays > 0 
-      ) {
-        this.isFormValid = true;
-      } else {
-        this.isFormValid = false;
-      }
+
+    // 페이지 변경
+    changePage(page) {
+      this.currentPage = page;
     },
-    
-    handleSubmit() {
-      this.validateForm(); // Validate the form when submitting
-      if (this.isFormValid) {
-        // Save form data to localStorage
-        localStorage.setItem('projectFormData', JSON.stringify(this.$data));
-        alert("승인 요청이 완료되었습니다.");
-        // Additional processing logic (e.g., API request)
-      } else {
-        alert("모든 필드를 올바르게 작성해주세요.");
-      }
-    },
-    loadFormData() {
-      const savedData = localStorage.getItem('projectFormData');
-      if (savedData) {
-        this.$data = JSON.parse(savedData);
-      }
-      console.log(loadFormData)
-    },
-    
+  },
+  created() {
   },
   mounted() {
-    // Load the saved form data when the page is loaded
-    this.loadFormData();
+
   },
-  watch: {
-    projectNm: "saveFormData",
-    orgNm: "saveFormData",
-    department: "saveFormData",
-    rm: "saveFormData",
-    BstartDate: "saveFormData",
-    BendDate: "saveFormData",
-    MystartDate: "saveFormData",
-    MyendDate: "saveFormData",
-    totalDays: "saveFormData",
-    reason: "saveFormData",
-  },
-  
 };
 </script>
+
+<style scoped></style>
 
client/views/pages/Manager/hr/hrDetail.vue (added)
+++ client/views/pages/Manager/hr/hrDetail.vue
@@ -0,0 +1,193 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">직원 검색</h2>
+  
+        
+          <div class="name-box flex  simple">
+            <div class="img-area" >
+              <div class="img"><img :src="photoicon" alt="">
+              </div>
+            </div>
+            <form class="row g-3 needs-validation " :class="{ 'was-validated': formSubmitted }"
+              @submit.prevent="handleRegister" novalidate >
+              <div class="col-12">
+                <label for="yourName" class="form-label">아이디</label>
+                <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                  placeholder="admin">
+              </div>
+              <div class="col-12 ">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label ">이름<p class="require"><img :src="require" alt=""></p></label>
+                  <input v-model="email" type="text" name="username" class="form-control" id="youremail" required
+                    readonly>
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">부서</label>
+                  <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                    required readonly placeholder="주식회사 테이큰 소프트">
+                </div>
+              </div>
+              <div class="col-12 border-x">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label">직급</label>
+                  <input v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly
+                    placeholder="과장">
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">직책</label>
+                  <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                    required readonly placeholder="팀장">
+                </div>
+              </div>
+  
+  
+            </form>
+  
+          </div>
+          <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate style="margin-bottom: 20px;">
+            <div class="col-12">
+              <label for="yourName" class="form-label">연락처</label>
+              <input v-model="name" type="text" name="name" class="form-control " id="yourName" required readonly
+                placeholder="admin">
+            </div>
+            <div class="col-12">
+              <label for="yourName" class="form-label">생년월일</label>
+              <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                placeholder="admin">
+            </div>
+            <div class="col-12 border-x">
+              <label for="yourName" class="form-label">입사일</label>
+              <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                placeholder="admin">
+            </div>
+  
+  
+  
+          </form>
+          <form class="row g-3 needs-validation detail salary" :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate>
+            <div class=" col-12 border-x"><label>연봉</label>
+              <div class="yearsalary">
+              <div class="col-12">
+                <label for="" class="second-label">2023</label>
+                <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                  placeholder="admin">
+              </div>
+              <div class="col-12">
+                <label for="" class="second-label">2023</label>
+                <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                  placeholder="admin">
+              </div>
+              <div class="col-12 border-x">
+                <label for="" class="second-label">2023</label>
+                <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                  placeholder="admin">
+              </div>
+            </div>
+            </div>
+          </form>
+          <div class="buttons">
+            <button type="delete" class="btn sm btn-red">탈퇴</button>
+        <button type="reset" class="btn sm secondary">수정</button>
+        <button type="submit" class="btn sm tertiary">목록</button>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: Array.from({ length: 20 }, (_, i) => ({
+      department: `부서 ${i + 1}`,
+      name: `이름 ${i + 1}`,
+      position: `직급 ${i + 1}`
+    }))
+    }
+  },
+  components: {
+    SearchOutlined
+  },
+  methods: {
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/hr/hrInsert.vue (added)
+++ client/views/pages/Manager/hr/hrInsert.vue
@@ -0,0 +1,262 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">직원 검색</h2>
+  
+        
+          <div class="name-box flex  simple">
+            <div class="img-area column">
+          <div class="img">
+            <img :src="previewImg || placeholder" alt="미리보기 이미지" />
+            <button class="close-btn" @click="removeImage">&#215;</button>
+          </div>
+          <div class="info">
+            <div class="file">
+              <label for="fileUpload" class="file-label">
+                <img :src="file" alt="">
+                <p>업로드</p>
+              </label>
+              <input id="fileUpload" type="file" @change="handleFileUpload" accept="image/*" />
+            </div>
+          </div>
+        </div>
+            <form class="row g-3 needs-validation " :class="{ 'was-validated': formSubmitted }"
+              @submit.prevent="handleRegister" novalidate >
+              <div class="col-12 ">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label "><p>아이디<p class="require"><img :src="require" alt=""></p></p></label>
+                  <input v-model="email" type="text" name="username" class="form-control"  required
+                    >
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label"><p>권한<p class="require"><img :src="require" alt=""></p></p></label>
+                  <select class="form-select" >
+                <option value="선택">선택</option>
+                <option value=""></option>
+                <option value=""></option>
+              </select>
+                </div>
+              </div>
+              <div class="col-12 ">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label "><p>이름<p class="require"><img :src="require" alt=""></p></p></label>
+                  <input v-model="email" type="text" name="username" class="form-control"  required
+                    >
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label"><p>부서<p class="require"><img :src="require" alt=""></p></p></label>
+                  <input v-model="selectedname" type="password" name="password" class="form-control" 
+                    required  placeholder="주식회사 테이큰 소프트">
+                    <input type="button" class="form-control " value="검색" @click="showPopup = true" />
+                    <BuseoPopup v-if="showPopup" @close="showPopup = false" @select="addApproval"/>
+                </div>
+              </div>
+              <div class="col-12 border-x">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label"><p>직급<p class="require"><img :src="require" alt=""></p></p></label>
+                  <select class="form-select" >
+                <option value="선택">선택</option>
+                <option value=""></option>
+                <option value=""></option>
+              </select>
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">직책</label>
+                  <select class="form-select" >
+                <option value="선택">선택</option>
+                <option value=""></option>
+                <option value=""></option>
+              </select>
+                </div>
+              </div>
+  
+  
+            </form>
+  
+          </div>
+          <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate style="margin-bottom: 20px;">
+            <div class="col-12">
+              <label for="yourName" class="form-label">연락처</label>
+              <input v-model="name" type="text" name="name" class="form-control " id="yourName"  
+                placeholder="admin">
+            </div>
+            <div class="col-12">
+              <label for="yourName" class="form-label">생년월일</label>
+              <input v-model="name" type="date" name="name" class="form-control" id="yourName"  
+               >
+            </div>
+            <div class="col-12 border-x">
+              <label for="yourName" class="form-label"><p>입사일<p class="require"><img :src="require" alt=""></p></p></label>
+              <input v-model="name" type="date" name="name" class="form-control" id="yourName" required 
+                >
+            </div>
+  
+  
+  
+          </form>
+          <form class="row g-3 needs-validation detail salary" :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate>
+            <div class=" col-12 border-x"><label>연봉<button type="button" title="추가" @click="addSalary">
+              <PlusCircleFilled />
+            </button></label>
+              <div class="yearsalary approval-container">
+              <div class="col-12 border-x addapproval" v-for="(salary, index) in salarys" :key="index">
+                <input type="text" name="name" class="form-control" v-model="salary.salary" style="width: 200px;"  
+                  placeholder="년도">
+                <div>
+                  <input type="text" name="name" class="form-control" v-model="salary.total"   
+                    placeholder="금액">
+                </div>
+              </div>
+              
+            </div>
+            </div>
+          </form>
+          <div class="buttons">
+        <button type="reset" class="btn sm primary">등록</button>
+        <button type="submit" class="btn sm tertiary">취소</button>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined, PlusCircleFilled } from '@ant-design/icons-vue';
+import BuseoPopup from "../../../component/Popup/BuseoPopup.vue";
+export default {
+  data() {
+    return {
+      showPopup: false,
+      selectedname: '',
+      approvals: [],
+      salarys: [ {
+          salary: '',
+          total: '',
+        },] ,
+      previewImg: null,
+      placeholder: "/client/resources/img/img1.png",
+      require: "/client/resources/img/require.png",
+      file: "/client/resources/img/file.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: Array.from({ length: 20 }, (_, i) => ({
+      department: `부서 ${i + 1}`,
+      name: `이름 ${i + 1}`,
+      position: `직급 ${i + 1}`
+    }))
+    }
+  },
+  components: {
+    SearchOutlined, PlusCircleFilled, BuseoPopup
+  },
+  methods: {
+    addApproval(selectedUser) {
+      this.approvals.push({
+        name: selectedUser.name
+      });
+
+      this.selectedname = selectedUser.name; // 입력창에 표시
+      this.showPopup = false;
+    },
+    addSalary() {
+      this.salarys.push({
+        salary: '',
+        total: '',
+      });
+    },
+    handleFileUpload(event) {
+      const file = event.target.files[0];
+      if (file && file.type.startsWith('image/')) {
+        const reader = new FileReader();
+        reader.onload = (e) => {
+          this.previewImg = e.target.result; // 파일 읽기 완료 후 미리보기 이미지 설정
+        };
+        reader.readAsDataURL(file); // 파일을 데이터 URL로 읽기
+      } else {
+        alert('이미지 파일만 선택할 수 있습니다.');
+      }
+    },
+
+    // 이미지 삭제 함수
+    removeImage() {
+      this.previewImg = null; // 미리보기 이미지 삭제
+      this.$refs.fileUpload.value = null; // 파일 input 초기화
+    },
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/hr/hrManagement.vue (added)
+++ client/views/pages/Manager/hr/hrManagement.vue
@@ -0,0 +1,175 @@
+<template>
+  <div class="col-lg-12">
+    <div class="card">
+      <div class="card-body">
+        <h2 class="card-title">직원관리</h2>
+        <div class="sch-form-wrap">
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option value="">부서</option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="">직급</option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="">직책</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control" placeholder="직원명">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+
+        <!-- Table  -->
+        <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>부서 </th>
+                <th>직급</th>
+                <th>직책</th>
+                <th>아이디</th>
+                <th>이름</th>
+                <th>입사일</th>
+                <th>비밀번호 초기화</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index"  @click="goToDetailPage(item)"> 
+                <td>{{ item.department }}</td>
+      <td>{{ item.position }}</td>
+      <td>{{ item.role }}</td>
+      <td>{{ item.userId }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.joinDate }}</td>
+      <td>
+        <button class="btn tertiary xsm" @click.stop="resetPassword(item)">초기화</button>
+      </td>
+              </tr>
+            </tbody>
+          </table>
+
+        </div>
+        <div class="pagination">
+          <ul>
+            <!-- 왼쪽 화살표 (이전 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+              &lt;
+            </li>
+
+            <!-- 페이지 번호 -->
+            <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+              @click="changePage(page)">
+              {{ page }}
+            </li>
+
+            <!-- 오른쪽 화살표 (다음 페이지) -->
+            <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+              &gt;
+            </li>
+          </ul>
+        </div>
+        <div class="buttons">
+                <button class="btn primary"  type="submit"  @click="goToPage('등록')">등록</button>
+              </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+  {
+    department: '인사팀',
+    position: '대리',
+    role: '인사담당',
+    userId: 'honggildong',
+    name: '홍길동',
+    joinDate: '2022-01-15'
+  },
+],
+      filteredData: [],
+    };
+  },
+  components:{
+    SearchOutlined
+  },
+  computed: {
+  },
+  methods: {
+    resetPassword(user) {
+    // 예: 비밀번호 초기화 로직
+    console.log(`${user.name} (${user.userId}) 비밀번호 초기화`);
+    // 실제 초기화 API 호출 또는 처리 추가
+  },
+  goToDetailPage(item) {
+    // item.id 또는 다른 식별자를 사용하여 URL을 구성할 수 있습니다.
+    this.$router.push({ path: `/hrDetail.page`, query: { id: item.id } });
+  },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+      if (type === '등록') {
+        this.$router.push('/hrInsert.page');
+      }
+    },
+    getStatusClass(status) {
+      if (status === '승인') return 'status-approved';
+      if (status === '대기') return 'status-pending';
+      return '';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    }
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped>
+tr{cursor: pointer;}
+</style>
 
client/views/pages/Manager/hr/hrSearch.vue (added)
+++ client/views/pages/Manager/hr/hrSearch.vue
@@ -0,0 +1,200 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">직원 검색</h2>
+      <div class="flex align-top">
+        <div class="sch-form-wrap search">
+          <div class="input-group">
+            <div class="sch-input">
+              <input type="text" class="form-control" placeholder="직원명">
+              <button class="ico-sch">
+                <SearchOutlined />
+              </button>
+            </div>
+          </div>
+          <div class="tbl-wrap table-scroll">
+            <table id="myTable" class="tbl data">
+              <!-- 동적으로 <th> 생성 -->
+              <thead>
+                <tr>
+                  <th>부서 </th>
+                  <th>이름</th>
+                  <th>직급(직책)</th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+                  <td></td>
+                  <td></td>
+                  <td></td>
+                </tr>
+              </tbody>
+            </table>
+  
+          </div>
+        </div>
+  
+        <div>
+          <div class="name-box flex sb simple">
+            <div class="img-area" style="width: 170px;">
+              <div class="img"><img :src="photoicon" alt="">
+              </div>
+            </div>
+            <form class="row g-3 needs-validation " :class="{ 'was-validated': formSubmitted }"
+              @submit.prevent="handleRegister" novalidate>
+              <div class="col-12">
+                <label for="yourName" class="form-label">아이디</label>
+                <input v-model="name" type="text" name="name" class="form-control"  required readonly
+                  placeholder="admin">
+              </div>
+              <div class="col-12 ">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label ">이름<p class="require"><img :src="require" alt=""></p></label>
+                  <input v-model="email" type="text" name="username" class="form-control"  required
+                    readonly>
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">부서</label>
+                  <input v-model="password" type="password" name="password" class="form-control" 
+                    required readonly placeholder="주식회사 테이큰 소프트">
+                </div>
+              </div>
+              <div class="col-12 border-x">
+                <div class="col-12 border-x">
+                  <label for="youremail" class="form-label">직급</label>
+                  <input v-model="email" type="text" name="username" class="form-control"  required readonly
+                    placeholder="과장">
+                </div>
+  
+                <div class="col-12 border-x">
+                  <label for="yourPassword" class="form-label">직책</label>
+                  <input v-model="password" type="password" name="password" class="form-control" 
+                    required readonly placeholder="팀장">
+                </div>
+              </div>
+  
+  
+            </form>
+  
+          </div>
+          <form class="row g-3 needs-validation detail" :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate>
+            <div class="col-12">
+              <label for="yourName" class="form-label">연락처</label>
+              <input v-model="name" type="text" name="name" class="form-control"  required readonly
+                placeholder="admin">
+            </div>
+            <div class="col-12">
+              <label for="yourName" class="form-label">생년월일</label>
+              <input v-model="name" type="text" name="name" class="form-control" required readonly
+                placeholder="admin">
+            </div>
+            <div class="col-12 border-x">
+              <label for="yourName" class="form-label">입사일</label>
+              <input v-model="name" type="text" name="name" class="form-control"  required readonly
+                placeholder="admin">
+            </div>
+  
+  
+  
+          </form>
+        </div>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: Array.from({ length: 20 }, (_, i) => ({
+      department: `부서 ${i + 1}`,
+      name: `이름 ${i + 1}`,
+      position: `직급 ${i + 1}`
+    }))
+    }
+  },
+  components: {
+    SearchOutlined
+  },
+  methods: {
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/system/accessControlManagement.vue (added)
+++ client/views/pages/Manager/system/accessControlManagement.vue
@@ -0,0 +1,224 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">접근제어관리</h2>
+      <div class="flex align-top">
+        <div class="sch-form-wrap search">
+
+          <div class="tbl-wrap table-scroll">
+            <table id="myTable" class="tbl data">
+              <!-- 동적으로 <th> 생성 -->
+              <thead>
+                <tr>
+                  <th>권한목록 </th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+                  <td></td>
+                </tr>
+              </tbody>
+            </table>
+
+          </div>
+        </div>
+
+        <div style="width: 100%;">
+          <div class="tbl-wrap chk-area">
+            <table id="myTable" class="tbl data">
+
+              <thead>
+                <tr>
+                  <th>메뉴명</th>
+                  <th>전체</th>
+                  <th>읽기</th>
+                  <th>쓰기</th>
+                  <th>수정</th>
+                  <th>삭제</th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+      <td>{{ item.menuName }}</td>
+      <td>
+        <div class="form-check">
+          <input
+            type="checkbox"
+            :id="`all_${index}`"
+            v-model="item.permissions.all"
+            @change="toggleAll(index)"
+          />
+          <label :for="`all_${index}`"></label>
+        </div>
+      </td>
+      <td>
+        <div class="form-check">
+          <input
+            type="checkbox"
+            :id="`read_${index}`"
+            v-model="item.permissions.read"
+          />
+          <label :for="`read_${index}`"></label>
+        </div>
+      </td>
+      <td>
+        <div class="form-check">
+          <input
+            type="checkbox"
+            :id="`write_${index}`"
+            v-model="item.permissions.write"
+          />
+          <label :for="`write_${index}`"></label>
+        </div>
+      </td>
+      <td>
+        <div class="form-check">
+          <input
+            type="checkbox"
+            :id="`edit_${index}`"
+            v-model="item.permissions.edit"
+          />
+          <label :for="`edit_${index}`"></label>
+        </div>
+      </td>
+      <td>
+        <div class="form-check">
+          <input
+            type="checkbox"
+            :id="`delete_${index}`"
+            v-model="item.permissions.delete"
+          />
+          <label :for="`delete_${index}`"></label>
+        </div>
+      </td>
+    </tr>
+              </tbody>
+            </table>
+
+          </div>
+        </div>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      require: "/client/resources/img/require.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: [
+      {
+          menuName: '메뉴1',
+          permissions: {
+            all: false,
+            read: false,
+            write: false,
+            edit: false,
+            delete: false,
+          },
+        },
+        {
+          menuName: '메뉴2',
+          permissions: {
+            all: false,
+            read: false,
+            write: false,
+            edit: false,
+            delete: false,
+          },
+        },
+      ]
+    }
+  },
+  components: {
+    SearchOutlined
+  },
+  methods: {
+    toggleAll(index) {
+      const all = this.listData[index].permissions.all;
+      this.listData[index].permissions.read = all;
+      this.listData[index].permissions.write = all;
+      this.listData[index].permissions.edit = all;
+      this.listData[index].permissions.delete = all;
+    },
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/system/commonCodeDetail.vue (added)
+++ client/views/pages/Manager/system/commonCodeDetail.vue
@@ -0,0 +1,144 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">사용자권한관리</h2>
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+          <form class="row g-3 pt-3  needs-validation detail" @submit.prevent="handleSubmit"
+            style="margin-bottom: 3rem;">
+            <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">상위코드</label>
+            <input type="text" class="form-control" id="where" v-model="where"  readonly />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">상위코드 명</label>
+            <input type="text" class="form-control" id="where" v-model="where" readonly/>
+          </div>
+  
+       </div>
+       <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">코드</label>
+            <input type="text" class="form-control" id="where" v-model="where"readonly />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">코드명</label>
+            <input type="text" class="form-control" id="where" v-model="where" readonly/>
+          </div>
+  
+       </div>
+
+            <div class="col-12 chuljang ">
+              <label for="prvonsh" class="form-label">설명</label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" readonly/>
+            </div>
+            <div class="col-12 border-x input-radio">
+              <label for="prvonsh" class="form-label">사용여부</label>
+                <input type="text" class="form-control" id="where" v-model="where" readonly/>
+            </div>
+
+
+          </form>
+          <div class="buttons">
+        <button type="submit" class="btn btn-red">삭제</button>
+        <button type="submit" class="btn secondary">수정</button>
+        <button type="reset" class="btn tertiary">목록</button>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      require: "/client/resources/img/require.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: Array.from({ length: 20 }, (_, i) => ({
+        department: `부서 ${i + 1}`,
+        name: `이름 ${i + 1}`,
+        position: `직급 ${i + 1}`
+      }))
+    }
+  },
+  components: {
+    SearchOutlined
+  },
+  methods: {
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/system/commonCodeInsert.vue (added)
+++ client/views/pages/Manager/system/commonCodeInsert.vue
@@ -0,0 +1,168 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">사용자권한관리</h2>
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+          <form class=" needs-validation detail" @submit.prevent="handleSubmit"
+            style="margin-bottom: 3rem;">
+            <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">상위코드</label>
+            <input type="text" class="form-control" id="where" v-model="selectedparentCode"  />
+            <input type="button" class="form-control " value="검색" @click="showPopup = true" />
+            <CodePopup v-if="showPopup" @close="showPopup = false" @select="addCode" />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">상위코드 명</label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+  
+       </div>
+       <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label"><p>코드<p class="require"><img :src="require" alt=""></p></p></label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label"><p>코드명<p class="require"><img :src="require" alt=""></p></p></label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+  
+       </div>
+
+            <div class="col-12 chuljang ">
+              <label for="prvonsh" class="form-label">설명</label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+            </div>
+            <div class="col-12 border-x input-radio">
+              <label for="prvonsh" class="form-label"> <p>사용여부
+                <p class="require"><img :src="require" alt=""></p>
+                </p></label>
+              <div class="chk-area">
+                <div class="form-check">
+                  <input type="radio" name="rdo_1" id="rdo_1">
+                  <label for="rdo_1">사용</label>
+                </div>
+                <div class="form-check">
+                  <input type="radio" name="rdo_1" id="rdo_2" checked>
+                  <label for="rdo_2">미사용</label>
+                </div>
+              </div>
+            </div>
+
+
+          </form>
+          <div class="buttons">
+        <button type="submit" class="btn primary">등록</button>
+        <button type="reset" class="btn tertiary">취소</button>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+import CodePopup from "../../../component/Popup/CodePopup.vue";
+export default {
+  data() {
+    return {
+      showPopup: true,
+      codes: [],
+      selectedparentCode: '',
+      require: "/client/resources/img/require.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: Array.from({ length: 20 }, (_, i) => ({
+        department: `부서 ${i + 1}`,
+        name: `이름 ${i + 1}`,
+        position: `직급 ${i + 1}`
+      }))
+    }
+  },
+  components: {
+    SearchOutlined, CodePopup
+  },
+  methods: {
+    addCode(selectedUser) {
+      this.codes.push({
+        parentCode: selectedUser.parentCode,
+      });
+
+      this.selectedparentCode = selectedUser.parentCode; // 입력창에 표시
+      this.showPopup = false;
+    },
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/system/commonCodeManagement.vue (added)
+++ client/views/pages/Manager/system/commonCodeManagement.vue
@@ -0,0 +1,189 @@
+<template>
+<div class="col-lg-12">
+  <div class="card">
+    <div class="card-body">
+      <h2 class="card-title">공통코드관리</h2>
+      <div class="sch-form-wrap">
+        <div class="input-group">
+          <select name="" id="" class="form-select">
+          <option value="">전체</option>
+          <option value="">상위코드</option>
+          <option value="">상위코드명</option>
+          <option value="">코드</option>
+          <option value="">코드명</option>
+        </select>
+        <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch">
+                <SearchOutlined />
+              </button>
+            </div>
+        </div>
+      </div>
+     
+      <!-- Table  -->
+      <div class="tbl-wrap">
+        <table id="myTable" class="tbl data">
+          <!-- 동적으로 <th> 생성 -->
+          <thead>
+            <tr>
+              <th>상위코드 </th>
+              <th>상위코드명</th>
+              <th>코드</th>
+              <th>코드명</th>
+              <th>등록일</th>
+              <th>사용여부</th>
+            </tr>
+          </thead>
+          <!-- 동적으로 <td> 생성 -->
+          <tbody>
+            <tr v-for="(item, index) in listData" :key="index" :class="{ expired: !isUsed(item.used) }" @click="goToDetailPage(item)">
+      <td>{{ item.parentCode }}</td>
+      <td>{{ item.parentName }}</td>
+      <td>{{ item.code }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.createdAt }}</td>
+      <td :class="getStatusClass(item.used)">{{ item.used }}</td>
+    </tr>
+          </tbody>
+        </table>
+  
+      </div>
+      <div class="pagination">
+        <ul>
+      <!-- 왼쪽 화살표 (이전 페이지) -->
+      <li 
+        class="arrow" 
+        :class="{ disabled: currentPage === 1 }" 
+        @click="changePage(currentPage - 1)"
+      >
+      &lt;
+      </li>
+
+      <!-- 페이지 번호 -->
+      <li 
+        v-for="page in totalPages" 
+        :key="page" 
+        :class="{ active: currentPage === page }" 
+        @click="changePage(page)"
+      >
+        {{ page }}
+      </li>
+
+      <!-- 오른쪽 화살표 (다음 페이지) -->
+      <li 
+        class="arrow" 
+        :class="{ disabled: currentPage === totalPages }" 
+        @click="changePage(currentPage + 1)"
+      >
+      &gt;
+      </li>
+    </ul>
+  </div>
+      <!-- End Table -->
+      <div class="buttons">
+    <button type="button" class="btn sm primary" @click="goToPage('등록') ">
+      등록
+    </button>
+
+    <!-- 신청 종류 선택 모달 -->
+    <div v-if="showOptions" class="modal-overlay">
+      <div class="modal-box">
+        <p>신청 종류를 선택하세요</p>
+        <button @click="goToPage('휴가')">휴가신청</button>
+        <button @click="goToPage('출장')">출장신청</button>
+        <button class="cancel" @click="showOptions = false">취소</button>
+      </div>
+    </div>
+  </div>
+    </div>
+  </div>
+</div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+          parentCode: 'A01',
+          parentName: '부서코드',
+          code: 'A0101',
+          name: '총무부',
+          createdAt: '2024-01-10',
+          used: 'Y',
+        },
+        {
+          parentCode: 'A01',
+          parentName: '부서코드',
+          code: 'A0102',
+          name: '인사부',
+          createdAt: '2024-03-21',
+          used: 'N',
+        },],
+      filteredData: [],
+    };
+  },
+  computed: {
+  },
+  components: {
+    SearchOutlined
+  },
+  methods: {
+    goToDetailPage(item) {
+    // item.id 또는 다른 식별자를 사용하여 URL을 구성할 수 있습니다.
+    this.$router.push({ path: `/commonCodeDetail.page`, query: { id: item.id } });
+  },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+  if (type === '등록') {
+    this.$router.push('/commonCodeInsert.page');
+  } 
+},
+getStatusClass(used) {
+      return used === 'Y' ? 'status-approved' : 'status-pending';
+    },
+   
+    isUsed(used) {
+      return used === 'Y';
+    },
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped>
+tr{cursor: pointer;}
+</style>
client/views/pages/Manager/system/system.vue
--- client/views/pages/Manager/system/system.vue
+++ client/views/pages/Manager/system/system.vue
@@ -1,180 +1,85 @@
 <template>
-  <div class="pagetitle">
-    <h2>프로젝트 내역</h2>
-  </div>
-  <!-- End Page Title -->
-  <section class="section">
-    <div class="row">
-      <!-- 해당년도 연차 수 -->
-      <!-- 전체 -->
-      <div class="col-xxl-2 col-md-3">
-        <button type="button" class="btn btn-light mb-2">
-          전체 <span class="badge bg-secondary text-light">개</span>
-        </button>
-      </div>
-      <!-- End 전체 -->
-
-      <div class="col-xxl-2 col-md-3">
-        <button type="button" class="btn btn-light mb-2">
-          진행중 프로젝트 <span class="badge bg-secondary text-light">개</span>
-        </button>
-      </div>
-      <div class="col-xxl-2 col-xl-3">
-        <button type="button" class="btn btn-light mb-2">
-          완료된 프로젝트 <span class="badge bg-secondary text-light">개</span>
-        </button>
-      </div>
-
-      <div class="col-lg-12">
-        <div class="card">
-          <div class="card-body">
-            <h5 class="card-title">프로젝트 내역</h5>
-            <div class="d-flex pb-3 justify-content-between">
-
-              <div class="datatable-search d-flex gap-1 ">
-                <div class="col-xxl-5 col-md-4">
-                  <select class="form-select" v-model="selectedYear">
-                    <option value="">전체</option>
-                    <option v-for="year in years" :key="year" :value="year">{{ year }}</option>
-                  </select>
-                </div>
-                <div class="col-xxl-5 col-md-4">
-                  <select class="form-select" v-model="selectedMonth">
-                    <option value="">월</option>
-                    <option v-for="month in months" :key="month" :value="month">{{ month }}</option>
-                  </select>
-                </div>
-                <button type="button" class="btn btn-outline-secondary col-xxl-5 col-xl-4"
-                  @click="filterData">조회</button>
-
-              </div>
-              <div class="d-flex justify-content-end ">
-                <button type="button" class="btn btn-outline-primary">
-                  등록
-                </button>
-                <button type="button" class="btn btn-outline-secondary" @click="deletePending">
-                  삭제
-                </button>
-              </div>
-
-            </div>
-            <!-- Table  -->
-            <table id="myTable" class="table datatable table-hover table-bordered">
-              <!-- 동적으로 <th> 생성 -->
-              <thead>
-                <tr>
-                  <th rowspan="2">No</th>
-                  <th rowspan="2">프로젝트명</th>
-                  <th rowspan="2">주관</th>
-                  <th colspan="4" class="text-center">기간</th>
-                  <th rowspan="2">총 투입일</th>
-                  <th rowspan="2">비고</th>
-                </tr>
-                <tr>
-                  <th data-type="date" data-format="YYYY/DD/MM">사업시작</th>
-                  <th data-type="date" data-format="YYYY/DD/MM">사업종료</th>
-                  <th data-type="date" data-format="YYYY/DD/MM">투입시작</th>
-                  <th data-type="date" data-format="YYYY/DD/MM">투입종료</th>
-                </tr>
-              </thead>
-              <!-- 동적으로 <td> 생성 -->
-              <tbody>
-                <tr v-for="(item, index) in ProjectData" :key="index">
-                  <td>
-                    <div class="form-check">
-                      <label class="form-check-label" for="acceptTerms">{{ index + 1 }}</label>
-                      <input v-model="item.acceptTerms" class="form-check-input" type="checkbox" />
-                    </div>
-                  </td>
-                  <td>{{ item.projectNm }}</td>
-                  <td>{{ item.orgNm }}</td>
-                  <td>{{ item.BstartDate }}</td>
-                  <td>{{ item.BendDate }}</td>
-                  <td>{{ item.MystartDate }}</td>
-                  <td>{{ item.MyendDate }}</td>
-                  <td>{{ item.totalDays }}</td>
-                  <td>{{ item.rm }}</td>
-                </tr>
-              </tbody>
-            </table>
-            <!-- End Table -->
+  <div class="sidemenu">
+    <div class="myinfo simple">
+      <div class="name-box">
+        <div class="img-area">
+          <div><img :src="photoicon" alt="">
+            <p class="name">OOO과장</p>
+          </div>
+          <div class="info">
+            <p>솔루션 개발팀</p>
+            <i class="fa-bars"></i>
+            <p>팀장</p>
           </div>
         </div>
       </div>
+
+
+        <ul class="menu-box danil">
+             <router-link to="/userManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <li><p>사용자권한관리</p>
+                <div class="icon"><img :src="menuicon" alt=""></div></li>
+              </router-link>
+              <router-link to="/accessControlManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <li>
+                <p>접근제어관리</p>
+                <div class="icon"><img :src="menuicon" alt=""></div>
+              </li>
+              </router-link>
+              <router-link to="/commonCodeManagement.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <li>
+                <p>공통코드관리</p>
+                <div class="icon"><img :src="menuicon" alt=""></div>
+              </li>
+              </router-link>
+           
+            
+          </ul>
+          
+      
     </div>
-  </section>
+  </div>
+  <!-- End Page Title -->
+  <div class="content">
+    <router-view></router-view>
+
+  </div>
 </template>
 
 <script>
+import { ref } from 'vue';
+
 export default {
   data() {
     return {
-      years: [2023, 2024, 2025],
-      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+      photoicon: "/client/resources/img/photo_icon.png",
+      menuicon: "/client/resources/img/menuicon2.png",
+      topmenuicon: "/client/resources/img/topmenuicon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
       selectedYear: '',
       selectedMonth: '',
+      DeptData: [
+        { member: '', deptNM: '', acceptTerms: false },
+        // 더 많은 데이터 추가...
+      ],
       filteredData: [],
     };
   },
+  computed: {
+  },
   methods: {
-    deletePending() {
-      const selectedItems = this.ProjectData.filter(item => item.acceptTerms);
-      const nonDeletableItems = selectedItems.filter(item => item.approvalStatus === true);
-      if (nonDeletableItems.length > 0) {
-        alert("승인된 건은 삭제할 수 없습니다.");
-        return;
-      }
-      if (selectedItems.length > 0) {
-        this.ProjectData = this.ProjectData.filter(item => !item.acceptTerms);
-        alert(`${selectedItems.length}개의 항목이 삭제되었습니다.`);
-      } else {
-        alert("선택된 항목이 없습니다.");
-      }
-    },
-    filterData() {
-      if (!this.selectedYear && !this.selectedMonth) {
-        this.filteredData = this.ProjectData;
-      } else {
-        this.filteredData = this.ProjectData.filter(item => {
-          const itemYear = new Date(item.BstartDate).getFullYear();
-          const itemMonth = new Date(item.BstartDate).getMonth() + 1;
 
-          return (
-            (!this.selectedYear || itemYear === parseInt(this.selectedYear)) &&
-            (!this.selectedMonth || itemMonth === parseInt(this.selectedMonth))
-          );
-        });
-      }
-      this.updateTotalDays();
-    },
-    updateTotalDays() {
-      // filteredData에서 각 항목의 totalDays 계산
-      this.filteredData.forEach(item => {
-        const mystartDate = new Date(item.MystartDate);
-        const myendDate = new Date(item.MyendDate);
-        
-        // 날짜 차이 계산 (밀리초 단위로 계산 후, 일수로 변환)
-        const timeDiff = myendDate - mystartDate;
-        const daysDiff = timeDiff / (1000 * 60 * 60 * 24);
-        item.totalDays = daysDiff >= 0 ? daysDiff : 0;
-      });
+    // 페이지 변경
+    changePage(page) {
+      this.currentPage = page;
     },
   },
   created() {
-  // 로컬스토리지에서 기존 데이터가 있으면 불러오기
-  const storedData = localStorage.getItem('projectFormData');
-  console.log(storedData);
-  if (storedData) {
-    // Parse the data and wrap it in an array
-    const parsedData = JSON.parse(storedData);
-    // Ensure the data is in an array format
-    this.ProjectData = Array.isArray(parsedData) ? parsedData : [parsedData];
-  }
-},
+  },
   mounted() {
-    const currentYear = new Date().getFullYear();
-    this.selectedYear = currentYear;
-    this.updateTotalDays();
+
   },
 };
 </script>
 
client/views/pages/Manager/system/userManagement.vue (added)
+++ client/views/pages/Manager/system/userManagement.vue
@@ -0,0 +1,176 @@
+<template>
+  <div class="card ">
+    <div class="card-body ">
+      <h2 class="card-title">사용자권한관리</h2>
+      <div class="flex align-top">
+        <div class="sch-form-wrap search">
+
+          <div class="tbl-wrap table-scroll">
+            <table id="myTable" class="tbl data">
+              <!-- 동적으로 <th> 생성 -->
+              <thead>
+                <tr>
+                  <th>권한목록 </th>
+                </tr>
+              </thead>
+              <!-- 동적으로 <td> 생성 -->
+              <tbody>
+                <tr v-for="(item, index) in listData" :key="index">
+                  <td></td>
+                </tr>
+              </tbody>
+            </table>
+
+          </div>
+        </div>
+
+        <div style="width: 100%;">
+          <div class=" sch-form-wrap title-wrap">
+            <h3><img :src="h3icon" alt="">권한 정보</h3>
+            <div class="buttons" style="margin: 0;">
+              <button type="submit" class="btn sm tertiary">신규</button>
+              <button type="reset" class="btn sm secondary">등록</button>
+              <button type="delete" class="btn sm btn-red">삭제</button>
+            </div>
+          </div>
+          <form class="row g-3 pt-3  needs-validation detail" @submit.prevent="handleSubmit"
+            style="margin-bottom: 3rem;">
+            <div class="col-12">
+              <label for="purpose" class="form-label">
+                <p>권한코드
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <input type="text" class="form-control" id="purpose" v-model="purpose" />
+            </div>
+            <div class="col-12">
+              <label for="purpose" class="form-label">
+                <p>권한명
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <input type="text" class="form-control" id="purpose" v-model="purpose" />
+            </div>
+
+            <div class="col-12 chuljang ">
+              <label for="prvonsh" class="form-label">권한설명</label>
+              <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+            </div>
+            <div class="col-12 border-x input-radio">
+              <label for="prvonsh" class="form-label"> <p>사용여부
+                <p class="require"><img :src="require" alt=""></p>
+                </p></label>
+              <div class="chk-area">
+                <div class="form-check">
+                  <input type="radio" name="rdo_1" id="rdo_1">
+                  <label for="rdo_1">사용</label>
+                </div>
+                <div class="form-check">
+                  <input type="radio" name="rdo_1" id="rdo_2" checked>
+                  <label for="rdo_2">미사용</label>
+                </div>
+              </div>
+            </div>
+
+
+          </form>
+        </div>
+      </div>
+    </div>
+
+  </div>
+
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+import { SearchOutlined } from '@ant-design/icons-vue';
+export default {
+  data() {
+    return {
+      require: "/client/resources/img/require.png",
+      h3icon: "/client/resources/img/h3icon.png",
+      photoicon: "/client/resources/img/photo_icon.png",
+      img1: "/client/resources/img/img.png",
+      icon1: "/client/resources/img/icon.png",
+      dateicon: "/client/resources/img/date.png",
+      startbtn: "/client/resources/img/start.png",
+      stopbtn: "/client/resources/img/stop.png",
+      moreicon: "/client/resources/img/more.png",
+      today: new Date().toLocaleDateString('ko-KR', {
+        year: 'numeric',
+        month: '2-digit',
+        day: '2-digit',
+        weekday: 'short',
+      }),
+      time: this.getCurrentTime(),
+      listData: Array.from({ length: 20 }, (_, i) => ({
+        department: `부서 ${i + 1}`,
+        name: `이름 ${i + 1}`,
+        position: `직급 ${i + 1}`
+      }))
+    }
+  },
+  components: {
+    SearchOutlined
+  },
+  methods: {
+    formatBudget(amount) {
+      return new Intl.NumberFormat().format(amount) + ' 원';
+    },
+    isPastPeriod(period) {
+      // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+      const endDateStr = period.split('~')[1]?.trim();
+      if (!endDateStr) return false;
+
+      const endDate = new Date(endDateStr);
+      const today = new Date();
+
+      // 현재 날짜보다 과거면 true
+      return endDate < today;
+    },
+    getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '미진행') return 'status-pending';
+      if (status === '진행중') return 'status-approved';
+
+      // Default empty string
+      return '';
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const hours = String(now.getHours()).padStart(2, '0');
+      const minutes = String(now.getMinutes()).padStart(2, '0');
+      const seconds = String(now.getSeconds()).padStart(2, '0');
+      return `${hours}:${minutes}:${seconds}`;
+    },
+    getCategoryClass(category) {
+      switch (category) {
+        case '용역': return 'category-service';
+        case '내부': return 'category-internal';
+        case '국가과제': return 'category-government';
+        default: return '';
+      }
+    },
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  mounted() {
+    console.log('main mounted');
+    setInterval(() => {
+      this.time = this.getCurrentTime();
+    }, 1000);
+  }
+}
+</script>
+<style scoped>
+tr {
+  cursor: pointer;
+}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/task/meetingDetail.vue (added)
+++ client/views/pages/Manager/task/meetingDetail.vue
@@ -0,0 +1,163 @@
+<template>
+  <div class="card">
+
+    <div class="card-body">
+      <h2 class="card-title">회의록 등록</h2>
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+      <!-- Multi Columns Form -->
+      <form class="row g-3  needs-validation detail" @submit.prevent="handleSubmit">
+        <div class="col-12">
+          <label for="inputName5" class="form-label"><p>프로젝트명<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control"  readonly/>
+        </div>
+        <div class="col-12">
+          <label for="inputName5" class="form-label"><p>회의록 제목<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control" readonly />
+        </div>
+
+        <div class="col-12">
+          <label for="startDate" class="form-label"><p>일시<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control" readonly />
+        </div>
+
+        <div class="col-12">
+          <label for="endDate" class="form-label"><p>장소<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control"  readonly/>
+        </div>
+
+        <div class="col-12 ">
+          <label for="dayCount" class="form-label">참석자</label>
+          <div class="tbl-wrap">
+        <table id="myTable" class="tbl data">
+          <thead>
+            <tr>
+              <th>소속</th>
+              <th>직위</th>
+              <th>이름</th>
+            </tr>
+          </thead>
+          <!-- 동적으로 <td> 생성 -->
+          <tbody>
+            <tr v-for="(member, index) in members" :key="index">
+              <td><input type="text" class="form-control" v-model="member.department" /></td>
+              <td><input type="text" class="form-control" v-model="member.position" /></td>
+              <td><input type="text" class="form-control" v-model="member.name" /></td>
+             
+            </tr>
+           
+          </tbody>
+        </table>
+
+      </div>
+        </div>
+
+        
+        <div class="col-12 chuljang">
+          <label for="prvonsh" class="form-label">회의내용</label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" readonly/>
+        </div>
+        <div class="col-12 chuljang">
+          <label for="prvonsh" class="form-label">비고</label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" readonly/>
+        </div>
+
+        <div class="col-12 border-x">
+          <label for="member" class="form-label">
+            회의비
+            <button type="button" title="추가" @click="addReceipt">
+              <PlusCircleFilled />
+            </button>
+          </label>
+
+          <div class="approval-container">
+            <div v-for="(receipt, index) in receipts" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <input type="text" class="form-control" v-model="receipt.name" style="max-width: 150px;"  readonly/>
+              <input type="text" class="form-control" v-model="receipt.cost" style="max-width: 150px;" readonly/>
+             
+
+              <!-- 선택된 파일 이름 표시 -->
+              <span  class="file-name">영수증</span>
+              <button type="button" @click="download(index)" class="download-button">
+                <VerticalAlignBottomOutlined />
+              </button>
+            </div>
+          </div>
+        </div>
+      </form><!-- End Multi Columns Form -->
+      <div class="buttons">
+        <button type="submit" class="btn secondary">수정</button>
+        <button type="submit" class="btn btn-red">삭제</button>
+        <button type="reset" class="btn tertiary">목록</button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { PlusCircleFilled, VerticalAlignBottomOutlined } from '@ant-design/icons-vue';
+import HrPopup from '../../../component/Popup/HrPopup.vue';
+export default {
+  data() {
+    const today = new Date().toISOString().split('T')[0];
+    return {
+      showPopup: false,
+      receipts: [
+        {
+          name: '',
+          cost: '',
+        },
+      ],
+      members: [] ,
+      approvals: [],
+      require: "/client/resources/img/require.png",
+      startDate: today,
+      startTime: "09:00", // 기본 시작 시간 09:00
+      endDate: today,
+      endTime: "18:00", // 기본 종료 시간 18:00
+      category: "",
+      dayCount: 1,
+      reason: "", // 사유
+      fileName: '',
+    };
+  },
+  components: {
+    PlusCircleFilled, VerticalAlignBottomOutlined, HrPopup
+  },
+  computed: {
+  },
+  methods: {
+    calculateDayCount() {
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
+
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
+      } else {
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
+      }
+    },
+    
+
+  },
+  mounted() {
+  },
+};
+</script>
+<style scoped>
+table th, table td{border: 0; border-bottom: 0 !important;}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/task/meetingInsert.vue (added)
+++ client/views/pages/Manager/task/meetingInsert.vue
@@ -0,0 +1,229 @@
+<template>
+  <div class="card">
+
+    <div class="card-body">
+      <h2 class="card-title">회의록 등록</h2>
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+      <!-- Multi Columns Form -->
+      <form class="row g-3  needs-validation" @submit.prevent="handleSubmit">
+        <div class="col-12">
+          <label for="inputName5" class="form-label"><p>프로젝트명<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control"  />
+        </div>
+        <div class="col-12">
+          <label for="inputName5" class="form-label"><p>회의록 제목<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control"  />
+        </div>
+
+        <div class="col-12">
+          <label for="startDate" class="form-label"><p>일시<p class="require"><img :src="require" alt=""></p></p></label>
+          <div class="d-flex gap-1">
+  <input type="date" class="form-control" id="startDate" v-model="startDate" />
+  <input type="time" class="form-control" id="startTime" v-model="startTime" />
+  ~
+</div>
+
+<div class="d-flex gap-1">
+  <input type="date" class="form-control" id="endDate" v-model="endDate" />
+  <input type="time" class="form-control" id="endTime" v-model="endTime" />
+</div>
+        </div>
+
+        <div class="col-12">
+          <label for="endDate" class="form-label"><p>장소<p class="require"><img :src="require" alt=""></p></p></label>
+          <input type="text" class="form-control"  />
+        </div>
+
+        <div class="col-12 ">
+          <label for="dayCount" class="form-label">참석자<button type="button" title="추가" @click="showPopup = true">
+              <PlusCircleFilled />
+            </button></label>
+            <HrPopup v-if="showPopup" @close="showPopup = false" @select="addMember"/>
+          <div class="tbl-wrap">
+        <table id="myTable" class="tbl data">
+          <thead>
+            <tr>
+              <th>소속</th>
+              <th>직위</th>
+              <th>이름</th>
+              <th>삭제</th>
+            </tr>
+          </thead>
+          <!-- 동적으로 <td> 생성 -->
+          <tbody>
+            <tr v-for="(member, index) in members" :key="index">
+              <td><input type="text" class="form-control" v-model="member.department" /></td>
+              <td><input type="text" class="form-control" v-model="member.position" /></td>
+              <td><input type="text" class="form-control" v-model="member.name" /></td>
+              <td>
+            <button type="button"   @click="removeMember(index)">
+              <CloseOutlined />
+            </button>
+          </td>
+            </tr>
+           
+          </tbody>
+        </table>
+
+      </div>
+        </div>
+
+        
+        <div class="col-12 chuljang">
+          <label for="prvonsh" class="form-label">회의내용</label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+        </div>
+        <div class="col-12 chuljang">
+          <label for="prvonsh" class="form-label">비고</label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+        </div>
+
+        <div class="col-12 border-x">
+          <label for="member" class="form-label">
+            회의비
+            <button type="button" title="추가" @click="addReceipt">
+              <PlusCircleFilled />
+            </button>
+          </label>
+
+          <div class="approval-container">
+            <div v-for="(receipt, index) in receipts" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <input type="text" class="form-control" v-model="receipt.name" style="max-width: 150px;" placeholder="여비내역입력"/>
+              <input type="text" class="form-control" v-model="receipt.cost" style="max-width: 150px;" placeholder="금액입력"/>
+             
+                <!-- 커스텀 업로드 버튼 -->
+                <label :for="'fileUpload-' + index" class="upload-label">
+    영수증 첨부
+  </label>
+
+                <!-- 실제 파일 input (숨김 처리) -->
+                <input
+    :id="'fileUpload-' + index"
+    type="file"
+    @change="handleFileUpload(index, $event)"
+    class="hidden-file-input"
+  />
+              <!-- 선택된 파일 이름 표시 -->
+              <span v-if="receipt.fileName" class="file-name">{{ receipt.fileName }}</span>
+              <button type="button" @click="removeReceipt(index)" class="delete-button">
+                <CloseOutlined />
+              </button>
+            </div>
+          </div>
+        </div>
+      </form><!-- End Multi Columns Form -->
+      <div class="buttons">
+        <button type="submit" class="btn primary">등록</button>
+        <button type="reset" class="btn tertiary">취소</button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
+import HrPopup from '../../../component/Popup/HrPopup.vue';
+export default {
+  data() {
+    const today = new Date().toISOString().split('T')[0];
+    return {
+      showPopup: false,
+      receipts: [
+        {
+          name: '',
+          cost: '',
+        },
+      ],
+      members: [] ,
+      approvals: [],
+      require: "/client/resources/img/require.png",
+      startDate: today,
+      startTime: "09:00", // 기본 시작 시간 09:00
+      endDate: today,
+      endTime: "18:00", // 기본 종료 시간 18:00
+      category: "",
+      dayCount: 1,
+      reason: "", // 사유
+      fileName: '',
+    };
+  },
+  components: {
+    PlusCircleFilled, CloseOutlined, HrPopup
+  },
+  computed: {
+  },
+  methods: {
+    handleFileUpload(index, event) {
+    const file = event.target.files[0];
+    if (file) {
+      this.receipts[index].file = file;
+      this.receipts[index].fileName = file.name;
+    }
+  },
+    addReceipt() {
+  this.receipts.push({
+    name: '',
+    cost: '',
+    file: null,
+  });
+},
+removeReceipt(index) {
+  this.receipts.splice(index, 1);
+},
+addMember(selectedUser) {
+      this.members.push({
+        department: selectedUser.department,
+        position: selectedUser.position,
+        name: selectedUser.name, // or other fields if needed
+      });
+      this.showPopup = false; // 팝업 닫기
+    },
+    removeMember(index) {
+      this.members.splice(index, 1);
+    },
+    addApproval(selectedUser) {
+      this.approvals.push({
+        category: '결재',
+        name: selectedUser.name, // or other fields if needed
+      });
+      this.showPopup = false; // 팝업 닫기
+    },
+    // 승인자 삭제
+    removeApproval(index) {
+      this.approvals.splice(index, 1);
+    },
+    calculateDayCount() {
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
+
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
+      } else {
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
+      }
+    },
+    
+
+  },
+  mounted() {
+  },
+};
+</script>
+<style scoped>
+table th, table td{border: 0; border-bottom: 0 !important;}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/Manager/task/projectDetail.vue (added)
+++ client/views/pages/Manager/task/projectDetail.vue
@@ -0,0 +1,304 @@
+<template>
+  <div class="card">
+    <div class="card-body">
+     <h2 class="card-title">프로젝트 현황</h2>
+      <!-- Multi Columns Form -->
+      <div class=" sch-form-wrap title-wrap"><h3><img :src="h3icon" alt="">프로젝트 정보</h3></div>
+      <form class="row g-3 pt-3  needs-validation detail" @submit.prevent="handleSubmit" style="margin-bottom: 3rem;">
+
+        <div class="col-12">
+          <label for="where" class="form-label">구분</label>
+          <input type="text" class="form-control" id="where" v-model="where" readonly/>
+        </div>
+        <div class="col-12">
+          <label for="where" class="form-label">제목</label>
+          <input type="text" class="form-control" id="where" v-model="where" readonly/>
+        </div>
+       <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">주관기관</label>
+            <input type="text" class="form-control" id="where" v-model="where" readonly/>
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">담당부서</label>
+            <input type="text" class="form-control" id="where" v-model="where" readonly/>
+          </div>
+  
+       </div>
+       <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">프로젝트 책임자</label>
+            <input type="text" class="form-control" id="where" v-model="where" readonly/>
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">사업비</label>
+            <input type="text" class="form-control" id="where" v-model="where" readonly/>
+          </div>
+  
+       </div>
+        <div class="col-12">
+          <label for="purpose" class="form-label">사업기간</label>
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
+        </div>
+        <div class="col-12">
+          <label for="purpose" class="form-label">계획기간</label>
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
+        </div>
+        <div class="col-12">
+          <label for="purpose" class="form-label">실제기간</label>
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
+        </div>
+        <div class="col-12">
+          <label for="purpose" class="form-label">진행상태</label>
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
+        </div>
+        <div class="col-12">
+          <label for="purpose" class="form-label">투입인력</label>
+          <input type="text" class="form-control" id="purpose" v-model="purpose" readonly/>
+        </div>
+
+        <div class="col-12 chuljang border-x">
+          <label for="prvonsh" class="form-label">비고</label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" readonly/>
+        </div>
+       
+
+      </form>
+      <div class="buttons">
+        <button type="reset" class="btn secondary">수정</button>
+        <button type="delete" class="btn btn-red">삭제</button>
+        <button type="submit" class="btn tertiary">목록</button>
+      </div>
+      <div class=" sch-form-wrap title-wrap"><h3><img :src="h3icon" alt="">회의록 정보</h3></div>
+      <div class="cost-statue">
+        <p class="costtitle">회의비 사용내역</p>
+        <div class="d-flex">
+          <div class="col-12 border-x ">
+            <p style="color: #219A8C;">전체</p>
+            <input type="text" class="form-control">
+          </div>
+          <div class="col-12 border-x">
+            <p style="color: #1D75E1;">사용</p>
+            <input type="text" class="form-control">
+          </div>
+          <div class="col-12 border-x">
+            <p style="color: #E92727;">미사용</p>
+            <input type="text" class="form-control">
+          </div>
+        </div>
+      </div>
+      <div class="tbl-wrap">
+        <table id="myTable" class="tbl data">
+          <colgroup>
+            <col style="width: 200px;">
+            <col style=" width: ">
+          </colgroup>
+          <thead>
+            <tr>
+              <th>제목</th>
+              <th>참석자</th>
+              <th>회의비</th>
+              <th>일시</th>
+            </tr>
+          </thead>
+          <!-- 동적으로 <td> 생성 -->
+          <tbody>
+            <tr v-for="(item, index) in listData" :key="index" @click="goToPage('회의록 상세')">
+              <td>{{ item.title }}</td>
+              <td>{{ item.member }}</td>
+              <td>{{ item.cost }}</td>
+              <td>{{ item.period }}</td>
+            </tr>
+          </tbody>
+        </table>
+
+      </div>
+      <div class="pagination">
+        <ul>
+          <!-- 왼쪽 화살표 (이전 페이지) -->
+          <li class="arrow" :class="{ disabled: currentPage === 1 }" @click="changePage(currentPage - 1)">
+            &lt;
+          </li>
+
+          <!-- 페이지 번호 -->
+          <li v-for="page in totalPages" :key="page" :class="{ active: currentPage === page }"
+            @click="changePage(page)">
+            {{ page }}
+          </li>
+
+          <!-- 오른쪽 화살표 (다음 페이지) -->
+          <li class="arrow" :class="{ disabled: currentPage === totalPages }" @click="changePage(currentPage + 1)">
+            &gt;
+          </li>
+        </ul>
+      </div>
+  <div class="buttons">
+    <button type="insert" class="btn primary sm" @click="goToPage('회의록 등록')">회의록 등록</button>
+  </div>
+
+    </div>
+  </div>
+</template>
+
+<script>
+import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
+
+export default {
+  data() {
+    const today = new Date().toISOString().split('T')[0];
+    return {
+      currentPage: 1,
+      totalPages: 3,
+      listData: [
+        {
+          title: '프로젝트 회의록',
+          member: 'ooo외 3명',
+          cost: '100,000',
+          period: '2025-01-01 14:00 ~ 2025-01-01 16:00',
+        }, ],
+      h3icon: "/client/resources/img/h3icon.png",
+      fileName: '',
+      startDate: today,
+      startTime: '09:00',
+      endDate: today,
+      endTime: '18:00',
+      where: '',
+      purpose: '',
+      approvals: [
+        {
+          category: '결재',
+          name: '',
+        },
+      ],
+     receipts: [
+        {
+          type: '개인결제',
+          category: '결재',
+          category1: '구분',
+        },
+      ],
+    };
+  },
+  components: {
+    PlusCircleFilled, CloseOutlined
+  },
+  computed: {
+    loginUser() {
+      const authStore = useAuthStore();
+      return authStore.getLoginUser;
+    },
+  },
+
+  methods: {
+    goToPage(type) {
+  if (type === '회의록 등록') {
+    this.$router.push('/meetingInsert.page');
+  } else if (type === '회의록 상세') {
+    this.$router.push('/meetingDetail.page');
+  }
+},
+    handleFileUpload(event) {
+      const file = event.target.files[0];
+      if (file) {
+        this.fileName = file.name;
+      }
+    },
+    addApproval() {
+      this.approvals.push({
+        category: '결재',
+        name: '',
+      });
+    },
+    addReceipt() {
+  this.receipts.push({
+    type: '개인결제',
+    category: '결재',
+    category1: '',
+    name: '',
+    file: null,
+  });
+},
+    // 승인자 삭제
+    removeApproval(index) {
+      this.approvals.splice(index, 1);
+    },
+    removeReceipt(index) {
+  this.receipts.splice(index, 1);
+},
+    validateForm() {
+      // 필수 입력 필드 체크
+      if (
+        this.startDate &&
+        this.startTime &&
+        this.endDate &&
+        this.endTime &&
+        this.where &&
+        this.purpose.trim() !== ""
+      ) {
+        this.isFormValid = true;
+      } else {
+        this.isFormValid = false;
+      }
+    },
+    calculateDayCount() {
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
+
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
+      } else {
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
+      }
+
+      this.validateForm(); // dayCount 변경 후 폼 재검증
+    },
+    handleSubmit() {
+      this.validateForm(); // 제출 시 유효성 확인
+      if (this.isFormValid) {
+        localStorage.setItem('ChuljangFormData', JSON.stringify(this.$data));
+        alert("승인 요청이 완료되었습니다.");
+        // 추가 처리 로직 (API 요청 등)
+      } else {
+        alert("모든 필드를 올바르게 작성해주세요.");
+      }
+    },
+    loadFormData() {
+      const savedData = localStorage.getItem('ChuljangFormData');
+      if (savedData) {
+        this.$data = JSON.parse(savedData);
+      }
+    },
+  },
+  mounted() {
+    // Load the saved form data when the page is loaded
+    this.loadFormData();
+  },
+  watch: {
+    startDate: 'calculateDayCount',
+    startTime: 'calculateDayCount',
+    endDate: 'calculateDayCount',
+    endTime: 'calculateDayCount',
+    where: 'validateForm',
+    purpose: "validateForm",
+  },
+};
+</script>
+
+<style scoped>
+tr{cursor: pointer;}
+</style>
 
client/views/pages/Manager/task/projectInsert.vue (added)
+++ client/views/pages/Manager/task/projectInsert.vue
@@ -0,0 +1,245 @@
+<template>
+  <div class="card">
+
+    <div class="card-body">
+      <h2 class="card-title">프로젝트 등록</h2>
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+      <form class="row g-3  needs-validation" @submit.prevent="handleSubmit">
+
+        <div class="col-12">
+          <label for="purpose" class="form-label">
+            <p>구분
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+          </label>
+          <select class="form-select" style="width: 110px;">
+            <option value=""></option>
+            <option value=""></option>
+            <option value=""></option>
+          </select>
+        </div>
+        <div class="col-12">
+          <label for="inputName5" class="form-label">
+            <p>프로젝트명
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+          </label>
+          <input type="text" class="form-control" />
+        </div>
+        <div class="col-12">
+          <label for="inputName5" class="form-label">주관기관</label>
+          <input type="text" class="form-control" />
+        </div>
+        <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">
+              <p>담당부서
+              <p class="require"><img :src="require" alt=""></p>
+              </p>
+            </label>
+            <input type="text" class="form-control" id="buseo" v-model="selectedDepartment" readonly />
+            <input type="button" class="form-control " value="검색" @click="showPopup = true" />
+            <BuseoPopup v-if="showPopup" @close="showPopup = false" @select="addBuseo" />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">
+              <p>프로젝트 책임자
+              <p class="require"><img :src="require" alt=""></p>
+              </p>
+            </label>
+            <input type="text" class="form-control" id="where" v-model="selectedname" readonly />
+            <input type="button" class="form-control " value="검색" @click="showPopup1 = true" />
+            <HrPopup v-if="showPopup1" @close="showPopup1 = false" @select="addApproval" />
+          </div>
+
+        </div>
+        <div class="col-12">
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">사업비</label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+          <div class="col-12 border-x">
+            <label for="where" class="form-label">회의비</label>
+            <input type="text" class="form-control" id="where" v-model="where" />
+          </div>
+
+        </div>
+        <div class="col-12">
+          <label for="startDate" class="form-label">
+            <p>사업기간
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+          </label>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="startDate" v-model="startDate" />
+            <!-- 시간 선택을 위한 select 사용 -->
+            ~
+          </div>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="endDate" v-model="endDate" />
+          </div>
+        </div>
+        <div class="col-12">
+          <label for="startDate" class="form-label">계획기간</label>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="startDate" v-model="startDate" />
+            <!-- 시간 선택을 위한 select 사용 -->
+            ~
+          </div>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="endDate" v-model="endDate" />
+          </div>
+        </div>
+        <div class="col-12">
+          <label for="startDate" class="form-label">실제기간</label>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="startDate" v-model="startDate" />
+            <!-- 시간 선택을 위한 select 사용 -->
+            ~
+          </div>
+          <div class="d-flex gap-1">
+            <input type="date" class="form-control" id="endDate" v-model="endDate" />
+          </div>
+        </div>
+
+
+        <div class="col-12 ">
+          <label for="member" class="form-label">
+            <p>투입인력 <button type="button" title="추가" @click="showPopup2 = true">
+                <PlusCircleFilled />
+              </button>
+            <p class="require"><img :src="require" alt=""></p>
+            </p>
+
+          </label>
+          <HrPopup v-if="showPopup2" @close="showPopup2 = false" @select="addApproval1"/>
+          <div class="approval-container">
+            <div v-for="(member, index) in approvals1" :key="index" class="d-flex gap-2 addapproval mb-2">
+              <select class="form-select" style="width: 110px;" v-model="member.category">
+                <option value="선택">선택</option>
+                <option value=""></option>
+                <option value=""></option>
+              </select>
+              <input type="text" class="form-control" v-model="member.name" style="max-width: 150px;" />
+
+
+              <button type="button" @click="removeApproval(index)" class="delete-button">
+                <CloseOutlined />
+              </button>
+            </div>
+          </div>
+        </div>
+
+        <div class="col-12 chuljang border-x">
+          <label for="prvonsh" class="form-label">비고</label>
+          <input type="text" class="form-control textarea" id="reason" v-model="reason" />
+        </div>
+
+
+      </form>
+      <div class="buttons">
+        <button type="submit" class="btn primary">등록</button>
+        <button type="reset" class="btn tertiary">취소</button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { PlusCircleFilled, CloseOutlined } from '@ant-design/icons-vue';
+import HrPopup from "../../../component/Popup/HrPopup.vue";
+import BuseoPopup from "../../../component/Popup/BuseoPopup.vue";
+export default {
+  data() {
+    const today = new Date().toISOString().split('T')[0];
+    return {
+      showPopup: false,
+      showPopup1: false,
+      showPopup2: false,
+      buseos: [],
+      selectedDepartment: '',
+      selectedname: '',
+      approvals: [],
+      approvals1: [],
+      require: "/client/resources/img/require.png",
+      startDate: today,
+      startTime: "09:00", // 기본 시작 시간 09:00
+      endDate: today,
+      endTime: "18:00", // 기본 종료 시간 18:00
+      category: "",
+      dayCount: 1,
+      reason: "", // 사유
+    };
+  },
+  components: {
+    PlusCircleFilled, CloseOutlined, BuseoPopup, HrPopup
+  },
+  computed: {
+  },
+  methods: {
+    addBuseo(selectedUser) {
+      this.buseos.push({
+        department: selectedUser.department,
+        name: selectedUser.name
+      });
+
+      this.selectedDepartment = selectedUser.department; // 입력창에 표시
+      this.showPopup = false;
+    },
+    removeBuseo(index) {
+      this.buseos.splice(index, 1);
+    },
+    addApproval(selectedUser) {
+      this.approvals.push({
+        name: selectedUser.name
+      });
+
+      this.selectedname = selectedUser.name; // 입력창에 표시
+      this.showPopup1 = false;
+    },
+    addApproval1(selectedUser) {
+      this.approvals1.push({
+        category: '선택',
+        name: selectedUser.name, // or other fields if needed
+      });
+      this.showPopup2 = false; // 팝업 닫기
+    },
+    // 승인자 삭제
+    removeApproval(index) {
+      this.approvals1.splice(index, 1);
+    },
+    
+    calculateDayCount() {
+      const start = new Date(`${this.startDate}T${this.startTime}:00`);
+      const end = new Date(`${this.endDate}T${this.endTime}:00`);
+
+      let totalHours = (end - start) / (1000 * 60 * 60);  // 밀리초를 시간 단위로 변환
+
+      if (this.startDate !== this.endDate) {
+        // 시작일과 종료일이 다른경우
+        const startDateObj = new Date(this.startDate);
+        const endDateObj = new Date(this.endDate);
+        const daysDifference = (endDateObj - startDateObj) / (1000 * 60 * 60 * 24); // 두 날짜 사이의 차이를 일수로 계산
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = daysDifference + 0.5; // 시간 조건이 기준에서 벗어날 경우
+        } else {
+          this.dayCount = Math.ceil(daysDifference + 1); // 시간 조건이 기준에 맞을 경우
+        }
+      } else {
+        // 시작일과 종료일이 같은 경우
+        if (this.startTime !== "09:00" || this.endTime !== "18:00") {
+          this.dayCount = 0.5; // 시작 시간 또는 종료 시간이 기준과 다를 경우 0.5
+        } else {
+          this.dayCount = 1; // 기준 시간(09:00~18:00)이 맞으면 1일로 간주
+        }
+      }
+
+     
+    },
+    
+  },
+  mounted() {
+  },
+
+};
+</script>
 
client/views/pages/Manager/task/projectStatue.vue (added)
+++ client/views/pages/Manager/task/projectStatue.vue
@@ -0,0 +1,245 @@
+<template>
+<div class="col-lg-12">
+  <div class="card">
+    <div class="card-body">
+      <h2 class="card-title">프로젝트 현황</h2>
+<!-- //폼그룹 -->
+      <div class="boxs">
+            <div class="color-boxs">
+                <div class="box ">
+                    <h3>전체</h3>
+                    3
+                </div>
+                <div class="box blue">
+                    <h3>진행중</h3>
+                    3
+                </div>
+                <div class="box red">
+                    <h3>미진행</h3>
+                    3
+                </div>
+                <div class="box green">
+                    <h3>완료</h3>
+                    3
+                </div>
+            </div>
+        </div>
+        <div class="sch-form-wrap title-wrap">
+          <h3><img :src="h3icon" alt="">승인 대기</h3>
+          <div class="input-group">
+            <select name="" id="" class="form-select">
+              <option :value="currentYear">{{ currentYear }}년</option>
+              <option value="all">전체</option>
+              <option v-for="year in remainingYears" :key="year" :value="year" v-if="year !== currentYear">
+                {{ year }}년
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option :value="currentMonth">{{ currentMonth }}월</option>
+              <option value="all">전체</option>
+              <option v-for="month in remainingMonths" :key="month" :value="month" v-if="month !== currentMonth">
+                {{ month }}월
+              </option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="">부서</option>
+            </select>
+            <select name="" id="" class="form-select">
+              <option value="">전체</option>
+              <option value="">프로젝트명</option>
+              <option value="">PM</option>
+            </select>
+            <div class="sch-input">
+              <input type="text" class="form-control">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+          </div>
+        </div>
+      <!-- Table  -->
+      <div class="tbl-wrap">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>구분 </th>
+                <th>부서</th>
+                <th>프로젝트명</th>
+                <th>PM</th>
+                <th>사업비</th>
+                <th>기간</th>
+                <th>상태</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr
+      v-for="(item, index) in listData"
+      :key="index"
+      @click="goToDetailPage(item)"
+      :class="{ 'expired': isPastStatus(item.status) }"
+    >
+      <td>{{ item.type }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.projectName }}</td>
+      <td>{{ item.pm }}</td>
+      <td>{{ item.budget }}</td>
+      <td>{{ item.period }}</td>
+      <td :class="getStatusClass(item.status)">
+        {{ item.status }}
+      </td>
+    </tr>
+            </tbody>
+          </table>
+
+        </div>
+      <div class="pagination">
+        <ul>
+      <!-- 왼쪽 화살표 (이전 페이지) -->
+      <li 
+        class="arrow" 
+        :class="{ disabled: currentPage === 1 }" 
+        @click="changePage(currentPage - 1)"
+      >
+      &lt;
+      </li>
+
+      <!-- 페이지 번호 -->
+      <li 
+        v-for="page in totalPages" 
+        :key="page" 
+        :class="{ active: currentPage === page }" 
+        @click="changePage(page)"
+      >
+        {{ page }}
+      </li>
+
+      <!-- 오른쪽 화살표 (다음 페이지) -->
+      <li 
+        class="arrow" 
+        :class="{ disabled: currentPage === totalPages }" 
+        @click="changePage(currentPage + 1)"
+      >
+      &gt;
+      </li>
+    </ul>
+  </div>
+      
+    </div>
+  </div>
+</div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+const currentMonth = new Date().getMonth() + 1;
+export default {
+  data() {
+    return {
+      currentMonth,
+      selectedMonth: currentMonth,
+      remainingMonths: Array.from({ length: 12 }, (_, i) => i + 1),
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+    type: '내부',
+    department: '기획팀',
+    projectName: '신규 플랫폼 개발',
+    pm: '김PM',
+    budget: '₩50,000,000',
+    period: '2025-05-01 ~ 2025-08-31',
+    status: '진행중'
+  },
+  {
+    type: '내부',
+    department: '기획팀',
+    projectName: '신규 플랫폼 개발',
+    pm: '김PM',
+    budget: '₩50,000,000',
+    period: '2025-05-01 ~ 2025-08-31',
+    status: '미진행'
+  },
+  {
+    type: '외부',
+    department: '운영팀',
+    projectName: '유지보수 프로젝트',
+    pm: '박PM',
+    budget: '₩20,000,000',
+    period: '2025-03-01 ~ 2025-04-30',
+    status: '완료'
+  }],
+      filteredData: [],
+    };
+  },
+  components:{
+    SearchOutlined
+  },
+  computed: {
+  },
+  methods: {
+
+    goToAttendancePage(item) {
+      this.$router.push({ name: 'AttendanceDetail', query: { id: item.id } });
+    },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToDetailPage(item) {
+    // item.id 또는 다른 식별자를 사용하여 URL을 구성할 수 있습니다.
+    this.$router.push({ path: `/projectDetail.page`, query: { id: item.id } });
+  },
+
+  // 상태에 따른 클래스 반환 메소드
+  getStatusClass(status) {
+    return status === 'active' ? 'status-active' : 'status-inactive';
+  },
+    getStatusClass(status) {
+      if (status === '완료') return 'status-green';
+      if (status === '진행중') return 'status-approved';
+      if (status === '미진행') return 'status-pending';
+      return '';
+    },
+    isPastStatus(status) {
+    return status === '완료' ; // 조건은 필요 시 조정
+  },
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped>
+tr{cursor: pointer;}
+.content .card .color-boxs .box{
+  width: calc(100% / 4);
+}
+</style>
 
client/views/pages/Manager/task/projectTuib.vue (added)
+++ client/views/pages/Manager/task/projectTuib.vue
@@ -0,0 +1,198 @@
+<template>
+<div class="col-lg-12">
+  <div class="card">
+    <div class="card-body">
+      <h2 class="card-title">투입 현황</h2>
+      <div class="sch-form-wrap">
+        <div class="input-group">
+          <select name="" id="" class="form-select">
+              <option :value="currentYear">{{ currentYear }}년</option>
+  <option value="all">전체</option>
+  <option
+    v-for="year in remainingYears"
+    :key="year"
+    :value="year"
+    v-if="year !== currentYear"
+  >
+    {{ year }}년
+  </option>
+            </select>
+          <select name="" id="" class="form-select">
+          <option value="">구분</option>
+        </select>
+        <div class="sch-input">
+              <input type="text" class="form-control" placeholder="이름">
+              <button class="ico-sch"><SearchOutlined /></button>
+            </div>
+        </div>
+      </div>
+     
+      <!-- Table  -->
+      <div class="tbl-wrap">
+        <table id="myTable" class="tbl data buseo">
+          <!-- 동적으로 <th> 생성 -->
+          <thead>
+            <tr>
+              <th rowspan="2">No </th>
+              <th rowspan="2">부서</th>
+              <th rowspan="2">직급</th>
+              <th rowspan="2">이름</th>
+              <th colspan="3">프로젝트</th>
+            </tr>
+            <tr>
+              <th><p >진행전</p></th>
+              <th><p class="blue">진행중</p></th>
+              <th><p class="green">완료</p></th>
+            </tr>
+          </thead>
+          <!-- 동적으로 <td> 생성 -->
+          <tbody>
+            <tr v-for="(item, index) in listData" :key="index"  @click="goToAttendancePage(item)">
+              <td>{{ index + 1 }}</td>
+      <td>{{ item.department }}</td>
+      <td>{{ item.position }}</td>
+      <td>{{ item.name }}</td>
+      <td>{{ item.projectBefore }}</td>
+      <td>{{ item.projectOngoing }}</td>
+      <td>{{ item.projectDone }}</td>
+  </tr>
+          </tbody>
+        </table>
+  
+      </div>
+      <div class="pagination">
+        <ul>
+      <!-- 왼쪽 화살표 (이전 페이지) -->
+      <li 
+        class="arrow" 
+        :class="{ disabled: currentPage === 1 }" 
+        @click="changePage(currentPage - 1)"
+      >
+      &lt;
+      </li>
+
+      <!-- 페이지 번호 -->
+      <li 
+        v-for="page in totalPages" 
+        :key="page" 
+        :class="{ active: currentPage === page }" 
+        @click="changePage(page)"
+      >
+        {{ page }}
+      </li>
+
+      <!-- 오른쪽 화살표 (다음 페이지) -->
+      <li 
+        class="arrow" 
+        :class="{ disabled: currentPage === totalPages }" 
+        @click="changePage(currentPage + 1)"
+      >
+      &gt;
+      </li>
+    </ul>
+  </div>
+      
+    </div>
+  </div>
+</div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+const currentYear = new Date().getFullYear();
+export default {
+  data() {
+    return {
+      currentYear,
+      selectedYear: currentYear,
+      remainingYears: Array.from({ length: 10 }, (_, i) => currentYear - i),
+      showOptions: false,
+      currentPage: 1,
+      totalPages: 3,
+      photoicon: "/client/resources/img/photo_icon.png",
+      // 데이터 초기화
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      listData: [
+      {
+        department: '기획팀',
+        position: '대리',
+        name: '홍길동',
+        projectBefore: 2,
+        projectOngoing: 1,
+        projectDone: 3
+      },
+      {
+        department: '개발팀',
+        position: '과장',
+        name: '김개발',
+        projectBefore: 0,
+        projectOngoing: 2,
+        projectDone: 5
+      }
+    ],
+      filteredData: [],
+    };
+  },
+  components:{
+    SearchOutlined
+  },
+  computed: {
+  },
+  methods: {
+    goToAttendancePage(item) {
+      this.$router.push({ name: 'projectTuibDetail', query: { id: item.id } });
+    },
+    changePage(page) {
+      if (page < 1 || page > this.totalPages) return;
+      this.currentPage = page;
+      this.$emit('page-changed', page); // 필요 시 부모에 알림
+    },
+    async onClickSubmit() {
+      // `useMutation` 훅을 사용하여 mutation 함수 가져오기
+      const { mutate, onDone, onError } = useMutation(mygql);
+
+      try {
+        const result = await mutate();
+        console.log(result);
+      } catch (error) {
+        console.error('Mutation error:', error);
+      }
+    },
+    goToPage(type) {
+  if (type === '휴가') {
+    this.$router.push('/HyugaDetail.page');
+  } else if (type === '출장') {
+    this.$router.push('/ChuljangDetail.page');
+  }
+},
+    getStatusClass(status) {
+      if (status === '승인') return 'status-approved';
+      if (status === '대기') return 'status-pending';
+      return '';
+    },
+    isPastPeriod(period) {
+    // 예: '2025-05-01 ~ 2025-05-03' → 종료일 추출
+    const endDateStr = period.split('~')[1]?.trim();
+    if (!endDateStr) return false;
+
+    const endDate = new Date(endDateStr);
+    const today = new Date();
+
+    // 현재 날짜보다 과거면 true
+    return endDate < today;
+  }
+  },
+  created() {
+  },
+  mounted() {
+
+
+  },
+};
+</script>
+
+<style scoped></style>
 
client/views/pages/Manager/task/projectTuibDetail.vue (added)
+++ client/views/pages/Manager/task/projectTuibDetail.vue
@@ -0,0 +1,183 @@
+<template>
+    <div class="card ">
+    <div class="card-body">
+      <h2 class="card-title">투입 현황</h2>
+      <div class="name-box flex sb simple">
+          <div class="img-area">
+            <div class="img"><img :src="photoicon" alt="">
+            </div>
+          </div>
+          <form class="row g-3 needs-validation " :class="{ 'was-validated': formSubmitted }"
+            @submit.prevent="handleRegister" novalidate>
+            <div class="col-12">
+              <label for="yourName" class="form-label">아이디</label>
+              <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+                placeholder="admin">
+            </div>
+            <div class="col-12 ">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label ">이름<p class="require"><img :src="require" alt=""></p></label>
+                <input v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly>
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">부서</label>
+                <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                  required readonly placeholder="주식회사 테이큰 소프트">
+              </div>
+            </div>
+            <div class="col-12 border-x">
+              <div class="col-12 border-x">
+                <label for="youremail" class="form-label">직급</label>
+                <input v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly
+                  placeholder="과장">
+              </div>
+
+              <div class="col-12 border-x">
+                <label for="yourPassword" class="form-label">직책</label>
+                <input v-model="password" type="password" name="password" class="form-control" id="yourPassword"
+                  required readonly placeholder="팀장">
+              </div>
+            </div>
+
+
+          </form>
+        </div>
+        <GoogleCalendar />
+        <div class="tbl-wrap" style="margin-top: 3rem;">
+          <table id="myTable" class="tbl data">
+            <!-- 동적으로 <th> 생성 -->
+            <thead>
+              <tr>
+                <th>구분 </th>
+                <th>프로젝트명</th>
+                <th>PM</th>
+                <th>사업비</th>
+                <th>기간</th>
+                <th>상태</th>
+              </tr>
+            </thead>
+            <!-- 동적으로 <td> 생성 -->
+            <tbody>
+              <tr v-for="(item, index) in listData" :key="index" :class="{ 'expired': isPastStatus(item.status) }" >
+                <td>{{ item.type }}</td>
+        <td>{{ item.projectName }}</td>
+        <td>{{ item.pm }}</td>
+        <td>{{ formatBudget(item.budget) }}</td>
+        <td>{{ item.period }}</td>
+        <td :class="getStatusClass(item.status)">
+        {{ item.status }}
+        </td>
+              </tr>
+            </tbody>
+          </table>
+        
+        </div>
+        <div class="buttons">
+            <button type="submit" class="btn tertiary">목록</button>
+          </div>
+    </div>
+</div>
+    
+</template>
+
+<script>
+import GoogleCalendar from "../../../component/GoogleCalendar.vue"
+
+export default {
+    data() {
+        return {
+            photoicon: "/client/resources/img/photo_icon.png",
+            img1: "/client/resources/img/img.png",
+            icon1: "/client/resources/img/icon.png",
+            dateicon: "/client/resources/img/date.png",
+            startbtn: "/client/resources/img/start.png",
+            stopbtn: "/client/resources/img/stop.png",
+            moreicon: "/client/resources/img/more.png",
+            today: new Date().toLocaleDateString('ko-KR', {
+                year: 'numeric',
+                month: '2-digit',
+                day: '2-digit',
+                weekday: 'short',
+            }),
+            time: this.getCurrentTime(),
+            listData: [
+      {
+        type: '내부',
+        projectName: 'AI 개발 프로젝트',
+        pm: '홍길동',
+        budget: 50000000,
+        period: '2024-01-01 ~ 2024-12-31',
+        status: '진행중'
+      },
+      {
+        type: '외부',
+        projectName: '웹 리뉴얼',
+        pm: '김영희',
+        budget: 20000000,
+        period: '2023-01-01 ~ 2023-12-31',
+        status: '미진행'
+      },
+      {
+        type: '외부',
+        projectName: '웹 리뉴얼',
+        pm: '김영희',
+        budget: 20000000,
+        period: '2023-01-01 ~ 2023-12-31',
+        status: '완료'
+      }
+    ]
+        }
+    },
+    methods: {
+        formatBudget(amount) {
+    return new Intl.NumberFormat().format(amount) + ' 원';
+  },
+        getStatusClass(status) {
+      return status === 'active' ? 'status-active' : 'status-inactive';
+    },
+    getStatusClass(status) {
+      if (status === '완료') return 'status-green';
+      if (status === '진행중') return 'status-approved';
+      if (status === '미진행') return 'status-pending';
+      return '';
+    },
+    isPastStatus(status) {
+    return status === '완료' ; // 조건은 필요 시 조정
+  },
+        getCurrentTime() {
+            const now = new Date();
+            const hours = String(now.getHours()).padStart(2, '0');
+            const minutes = String(now.getMinutes()).padStart(2, '0');
+            const seconds = String(now.getSeconds()).padStart(2, '0');
+            return `${hours}:${minutes}:${seconds}`;
+        },
+        getCategoryClass(category) {
+        switch (category) {
+            case '용역': return 'category-service';
+            case '내부': return 'category-internal';
+            case '국가과제': return 'category-government';
+            default: return '';
+        }
+    },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        GoogleCalendar,
+    },
+    mounted() {
+        console.log('main mounted');
+        setInterval(() => {
+            this.time = this.getCurrentTime();
+        }, 1000);
+    }
+}
+</script>
+<style scoped>
+tr{cursor: pointer;}
+</style>(파일 끝에 줄바꿈 문자 없음)
client/views/pages/Manager/task/task.vue
--- client/views/pages/Manager/task/task.vue
+++ client/views/pages/Manager/task/task.vue
@@ -1,165 +1,90 @@
 <template>
-  <div class="pagetitle">
-    <h2>공지사항</h2>
-  </div>
-  <!-- End Page Title -->
-  <section class="section">
-    <div class="row">
-
-
-      <div class="col-lg-12">
-        <div class="card">
-          <div class="card-body">
-            <h5 class="card-title"></h5>
-            <div class="d-flex pb-3 justify-content-between">
-              <div class="datatable-search d-flex gap-1 ">
-                <div class="">
-                  <select class="form-select " v-model="selectedDept">
-                    <option value="" >이름</option>
-                    <option v-for="dept in depts" :key="dept" :value="dept">{{ dept }}</option>
-                  </select>
-                </div>
-                <div class="search-bar d-flex gap-2">
-              <form class="search-form d-flex  align-items-center" method="POST" action="#"
-                @submit.prevent="updateMember">
-                <input type="text" v-model="searchQuery" name="query" placeholder="Search" title="Enter search keyword">
-                <button type="submit" title="Search"><i class="bi bi-search"></i></button>
-              </form>
-            </div>
-                <button type="button" class="btn btn-outline-secondary"
-                  @click="filterData">조회</button>
-
-              </div>
-              <div class="d-flex justify-content-end ">
-                <button type="button" class="btn btn-outline-primary" @click="registerLeave">
-                  등록
-                </button>
-                <!-- <button type="button" class="btn btn-outline-success" @click="saveChanges">
-                  저장
-                </button> -->
-                <button type="button" class="btn btn-outline-secondary" @click="deletePending">
-                  삭제
-                </button>
-              </div>
-
-            </div>
-            <!-- Table  -->
-            <table id="myTable" class="table datatable table-hover">
-              <colgroup>
-                <col width="10%">
-                <col width="75%">
-                <col width="5%">
-                <col width="5%">
-                <col width="5%">
-              </colgroup>
-              <!-- 동적으로 <th> 생성 -->
-              <thead>
-                <tr>
-                  <th>No </th>
-                  <th>제목</th>
-                  <th>작성자</th>
-                  <th>작성일</th>
-                  <th>조회수</th>
-                </tr>
-              </thead>
-              <!-- 동적으로 <td> 생성 -->
-              <tbody>
-                <tr v-for="(item, index) in filteredData" :key="item.startDate + index">
-  <td>
-    <div class="form-check">
-      <label class="form-check-label" for="acceptTerms">{{ index + 1 }}</label>
-      <input v-model="item.acceptTerms" class="form-check-input" type="checkbox" />
-    </div>
-  </td>
-  <td><input type="text" v-model="item.theme" /></td>
-  <td><input type="text" v-model="item.name" /></td>
-  <td><input type="text" v-model="item.date" /></td>
-  <td><input type="text" v-model="item.views" /></td>
-</tr>
-              </tbody>
-            </table>
-
-            <!-- End Table -->
+  <div class="sidemenu">
+    <div class="myinfo simple">
+      <div class="name-box">
+        <div class="img-area">
+          <div><img :src="photoicon" alt="">
+            <p class="name">OOO과장</p>
+          </div>
+          <div class="info">
+            <p>솔루션 개발팀</p>
+            <i class="fa-bars"></i>
+            <p>팀장</p>
           </div>
         </div>
       </div>
+
+
+      <details class="menu-box">
+          <summary><p>프로젝트</p><div class="icon"><img :src="topmenuicon" alt=""></div></summary>
+          <ul>
+            <li> <router-link to="/projectStatue.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>프로젝트 현황</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link></li>
+            <li>
+              <router-link to="/projectInsert.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>프로젝트 등록</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+            <li>
+              <router-link to="/projectTuib.page" exact-active-class="active-link" v-slot="{ isExactActive }">
+                <p>투입현황</p>
+                <div class="icon" v-if="isExactActive">
+                  <img :src="menuicon" alt="">
+                </div>
+              </router-link>
+            </li>
+          </ul>
+      </details>
     </div>
-  </section>
+  </div>
+  <!-- End Page Title -->
+  <div class="content">
+    <router-view></router-view>
+
+  </div>
 </template>
 
 <script>
+import { ref } from 'vue';
+
 export default {
   data() {
     return {
+      photoicon: "/client/resources/img/photo_icon.png",
+      menuicon: "/client/resources/img/menuicon.png",
+      topmenuicon: "/client/resources/img/topmenuicon.png",
       // 데이터 초기화
-      depts: [2023, 2024, 2025], // 연도 목록
-      levels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
-      selectedDept: '',
-      selectedlevel: '',
+      years: [2023, 2024, 2025], // 연도 목록
+      months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], // 월 목록
+      selectedYear: '',
+      selectedMonth: '',
+      DeptData: [
+        { member: '', deptNM: '', acceptTerms: false },
+        // 더 많은 데이터 추가...
+      ],
       filteredData: [],
     };
   },
   computed: {
-
   },
   methods: {
-    registerLeave() {
-      // "NoticeInsert" 페이지로 이동
-      this.$router.push({ path: '/NoticeInsert' });
-    },
-   
-    deletePending() {
-    // 선택된 항목만 필터링하여 삭제
-    const selectedItems = this.NoticegData.filter(item => item.acceptTerms);
 
-    // 승인된 항목이 없으면 삭제 진행
-    if (selectedItems.length > 0) {
-      this.NoticegData = this.NoticegData.filter(item => !item.acceptTerms);
-      alert(`${selectedItems.length}개의 항목이 삭제되었습니다.`);
-    } else {
-      alert("선택된 항목이 없습니다.");
-    }
-  },
-  filterData() {
-      this.filteredData = this.NoticegData.filter(item => {
-        const matchesDept = this.selectedDept ? item.where.includes(this.selectedDept) : true;
-        const matchesQuery = this.searchQuery ? item.theme.includes(this.searchQuery) : true;
-        return matchesDept && matchesQuery;
-      });
-    },
-   
     // 페이지 변경
     changePage(page) {
       this.currentPage = page;
     },
-    loadFormData() {
-      const savedData = localStorage.getItem('formData');
-      console.log(savedData)
-      if (savedData) {
-        const formData = JSON.parse(savedData);
-        this.NoticeData = formData.map(item => ({
-          ...item,
-          acceptTerms: false, // 추가적인 필드 (체크박스)
-        }));
-        this.filteredData = [...this.NoticeData]; // 필터링된 데이터 초기화
-      }
-    },
   },
   created() {
-    // 로컬스토리지에서 UserInfoData 불러오기
-    const storedUserInfo = localStorage.getItem('formData');
-    console.log(storedUserInfo);
-    if (storedUserInfo) {
-      // 로컬스토리지에서 데이터를 가져와 UserInfoData에 설정
-      const parsedData = JSON.parse(storedUserInfo);
-      this.UserInfo = Array.isArray(parsedData) ? parsedData : [parsedData];
-    } 
   },
   mounted() {
-    
-    // 처음에는 모든 데이터를 표시
-    this.filteredData = this.NoticegData;
-  
+
   },
 };
 </script>
client/views/pages/User/MyPage.vue
--- client/views/pages/User/MyPage.vue
+++ client/views/pages/User/MyPage.vue
@@ -1,103 +1,116 @@
 <template>
   <div class="sidemenu">
     <div class="myinfo profile">
-            <div class="name-box">
-              <div class="img-area">
-    <div class="img">
-      <img :src="previewImg || placeholder" alt="미리보기 이미지" />
-      <button class="close-btn" @click="removeImage">&#215;</button>
-    </div>
-    <div class="info">
-      <div class="file">
-        <label for="fileUpload" class="file-label"><div><img :src="file" alt=""></div><p>업로드</p></label>
-        <input id="fileUpload" type="file" @change="handleFileUpload" accept="image/*" />
+      <div class="name-box">
+        <div class="img-area">
+          <div class="img">
+            <img :src="previewImg || placeholder" alt="미리보기 이미지" />
+            <button class="close-btn" @click="removeImage">&#215;</button>
+          </div>
+          <div class="info">
+            <div class="file">
+              <label for="fileUpload" class="file-label">
+                <img :src="file" alt="">
+                <p>업로드</p>
+              </label>
+              <input id="fileUpload" type="file" @change="handleFileUpload" accept="image/*" />
+            </div>
+          </div>
+        </div>
       </div>
     </div>
   </div>
-            </div>
-        </div>
-  </div>
   <div class="content">
 
-        <div class="d-flex justify-content-center py-4">
-          <a href="index.html" class="logo d-flex align-items-center w-auto">
-            <!-- <span class="d-none d-lg-block"> <img :src="logo" alt=""></span> -->
-          </a>
-        </div><!-- End Logo -->
+    <div class="d-flex justify-content-center py-4">
+      <a href="index.html" class="logo d-flex align-items-center w-auto">
+        <!-- <span class="d-none d-lg-block"> <img :src="logo" alt=""></span> -->
+      </a>
+    </div><!-- End Logo -->
 
-        <div class="card mb-3">
-          <p class="require"><img :src="require" alt=""> 필수입력</p>
-          <div class="card-body">
+    <div class="card mb-3">
+      <p class="require"><img :src="require" alt=""> 필수입력</p>
+      <div class="card-body">
 
-            <form class="row g-3 needs-validation "  :class="{ 'was-validated': formSubmitted }" @submit.prevent="handleRegister" novalidate>
-              <div class="col-12">
-                <label for="yourName" class="form-label">아이디</label>
-                <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly placeholder="admin">
-              </div>
-              <div class="col-12 ">
-                <div class="col-12 border-x">
-                  <label for="youremail" class="form-label ">이름<p class="require"><img :src="require" alt=""></p></label>
-                  <input  v-model="email" type="text" name="username" class="form-control" id="youremail" required >
-                </div>
-  
-                <div class="col-12 border-x">
-                  <label for="yourPassword" class="form-label">부서</label>
-                  <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" required  readonly placeholder="주식회사 테이큰 소프트"> 
-                </div>
-             </div>
-             <div class="col-12">
-                <div class="col-12 border-x">
-                  <label for="youremail" class="form-label">직급</label>
-                  <input  v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly placeholder="과장">
-                </div>
-  
-                <div class="col-12 border-x">
-                  <label for="yourPassword" class="form-label">직책</label>
-                  <input  v-model="password" type="password" name="password" class="form-control" id="yourPassword" required readonly placeholder="팀장"> 
-                </div>
-             </div>
-             <div class="col-12">
-                <label for="yourName" class="form-label">연락처</label>
-                <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required>
+        <form class="row g-3 needs-validation " :class="{ 'was-validated': formSubmitted }"
+          @submit.prevent="handleRegister" novalidate>
+          <div class="col-12">
+            <label for="yourName" class="form-label">아이디</label>
+            <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+              placeholder="admin">
+          </div>
+          <div class="col-12 ">
+            <div class="col-12 border-x">
+              <label for="youremail" class="form-label ">
+                <p>이름
+                <p class="require"><img :src="require" alt=""></p>
+                </p>
+              </label>
+              <input v-model="email" type="text" name="username" class="form-control" id="youremail" required>
+            </div>
+
+            <div class="col-12 border-x">
+              <label for="yourPassword" class="form-label">부서</label>
+              <input v-model="password" type="password" name="password" class="form-control" id="yourPassword" required
+                readonly placeholder="주식회사 테이큰 소프트">
+            </div>
           </div>
           <div class="col-12">
-                <label for="yourName" class="form-label">생년월일</label>
-                <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required>
+            <div class="col-12 border-x">
+              <label for="youremail" class="form-label">직급</label>
+              <input v-model="email" type="text" name="username" class="form-control" id="youremail" required readonly
+                placeholder="과장">
+            </div>
+
+            <div class="col-12 border-x">
+              <label for="yourPassword" class="form-label">직책</label>
+              <input v-model="password" type="password" name="password" class="form-control" id="yourPassword" required
+                readonly placeholder="팀장">
+            </div>
           </div>
           <div class="col-12">
-                <label for="yourName" class="form-label">입사일</label>
-                <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly  placeholder="2025-01-01">
+            <label for="yourName" class="form-label">연락처</label>
+            <input v-model="name" type="text" name="name" class="form-control" id="yourName" required>
           </div>
           <div class="col-12">
-                <label for="yourName" class="form-label">현재 비밀번호</label>
-                <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required>
+            <label for="yourName" class="form-label">생년월일</label>
+            <input v-model="name" type="text" name="name" class="form-control" id="yourName" required>
           </div>
           <div class="col-12">
-                <label for="yourName" class="form-label">새 비밀번호</label>
-               <div class="box">
-                  <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required>
-                  <div class="invalid-feedback">※ 비밀번호는 6~12자의 영문자와 숫자, 특수기호조합으로 작성해주세요.</div>
-               </div>
+            <label for="yourName" class="form-label">입사일</label>
+            <input v-model="name" type="text" name="name" class="form-control" id="yourName" required readonly
+              placeholder="2025-01-01">
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">현재 비밀번호</label>
+            <input v-model="name" type="text" name="name" class="form-control" id="yourName" required>
+          </div>
+          <div class="col-12">
+            <label for="yourName" class="form-label">새 비밀번호</label>
+            <div class="box">
+              <input v-model="name" type="text" name="name" class="form-control" id="yourName" required>
+              <div class="invalid-feedback">※ 비밀번호는 6~12자의 영문자와 숫자, 특수기호조합으로 작성해주세요.</div>
+            </div>
           </div>
           <div class="col-12 border-x">
-                <label for="yourName" class="form-label">연락처</label>
-                <input  v-model="name" type="text" name="name" class="form-control" id="yourName" required>
+            <label for="yourName" class="form-label">연락처</label>
+            <input v-model="name" type="text" name="name" class="form-control" id="yourName" required>
           </div>
-              
-            </form>
-            <div class="buttons">
-                <button class="btn primary"  type="submit">반려</button>
-                <button class="btn btn-red "  type="submit">반려</button>
-                <button class="btn tertiary "  type="submit">목록</button>
-              </div>
-          </div>
+
+        </form>
+        <div class="buttons">
+          <button class="btn primary" type="submit">반려</button>
+          <button class="btn btn-red " type="submit">반려</button>
+          <button class="btn tertiary " type="submit">목록</button>
         </div>
+      </div>
+    </div>
   </div>
 
-  </template>
-  
-  <script>
-    export default {
+</template>
+
+<script>
+export default {
   data() {
     return {
       previewImg: null,
@@ -126,25 +139,25 @@
         alert('이미지 파일만 선택할 수 있습니다.');
       }
     },
-    
+
     // 이미지 삭제 함수
     removeImage() {
       this.previewImg = null; // 미리보기 이미지 삭제
       this.$refs.fileUpload.value = null; // 파일 input 초기화
     },
     handleRegister() {
-      this.formSubmitted = true; 
+      this.formSubmitted = true;
       // 이메일과 비밀번호가 빈 값이 아니어야 한다
       if (!this.email.includes('@')) {
-    alert('이메일은 @를 포함해야 합니다.');
-    return; // Stop further processing if email is invalid
-  }
+        alert('이메일은 @를 포함해야 합니다.');
+        return; // Stop further processing if email is invalid
+      }
 
-  console.log('Email:', this.email);
-  console.log('Password:', this.password);
-  console.log('Name:', this.name);
-  console.log('Accept Terms:', this.acceptTerms);
-      if (this.email && this.password && this.name && this.acceptTerms && this.dept && this.level ) {
+      console.log('Email:', this.email);
+      console.log('Password:', this.password);
+      console.log('Name:', this.name);
+      console.log('Accept Terms:', this.acceptTerms);
+      if (this.email && this.password && this.name && this.acceptTerms && this.dept && this.level) {
         // 로컬 스토리지에 회원가입 정보 저장
         const userData = {
           name: this.name,
@@ -156,15 +169,15 @@
 
         console.log('User Data to be saved:', userData);
         try {
-      localStorage.setItem("UserInfo", JSON.stringify(userData));
-      alert('회원가입이 완료되었습니다!');
-      
-      // Redirect to login page
-      this.$router.push("/login");
-    } catch (error) {
-      console.error("Error saving to localStorage:", error);
-      alert("회원가입 중 오류가 발생했습니다.");
-    }
+          localStorage.setItem("UserInfo", JSON.stringify(userData));
+          alert('회원가입이 완료되었습니다!');
+
+          // Redirect to login page
+          this.$router.push("/login");
+        } catch (error) {
+          console.error("Error saving to localStorage:", error);
+          alert("회원가입 중 오류가 발생했습니다.");
+        }
       } else {
         alert("모든 필드를 입력해주세요.");
       }
@@ -178,9 +191,6 @@
     }
   },
 };
-  </script>
-  
-  <style scoped>
+</script>
 
-  </style>
-  
(파일 끝에 줄바꿈 문자 없음)
+<style scoped></style>
(파일 끝에 줄바꿈 문자 없음)
Add a comment
List