jichoi / lms_front star
[jichoi] 08-06
240806 최정임
@9bf9ee2dcd9e79108ba3995a41a06f858ea642ac
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -767,10 +767,6 @@
     background-color: #aaa;
 }
 
-.close-btn {
-    color: #d6def6;
-}
-
 .style-btn {
     border: 1px solid #eee;
     border-radius: 3px;
@@ -950,7 +946,7 @@
     -moz-border-radius: 50%;
     border-radius: 50%;
     border: 3px solid #ffffff;
-    accent-color: #00A8BA;
+    accent-color: #ffba08;
 }
   /* Global CSS */
   fieldset {
@@ -967,9 +963,9 @@
     box-sizing: border-box;
   }
 .ui-checkbox {
-    --primary-color: #00A8BA;
+    --primary-color: #ffba08;
     --secondary-color: #fff;
-    --primary-hover-color: #00A8BA;
+    --primary-hover-color: #ffba08;
     /* checkbox */
     --checkbox-diameter: 22px;
     --checkbox-border-radius: 3px;
@@ -1069,4 +1065,91 @@
     opacity: 1;
   }
 
- 
(파일 끝에 줄바꿈 문자 없음)
+ 
+input.borderx {
+    border: none;
+  }
+  
+  .underline {
+    text-decoration: underline;
+  }
+  .bd-bt{border-bottom:#FFBA08 solid 2px ;     min-width: 66px;
+    width: max-content; }
+  hr {
+    color: #C6C6C6;
+    margin: 20px 0;
+  }
+  em{ font-style: normal;}
+  em.yellow{color: #FFBA08;}
+  em.green{color: #00B204; }
+  em.gray{color: #75767A; }
+  em.yellow-bg{background-color: #FFBA08; }
+  input.yellow-bd{border:#FFBA08 solid 2px ; border-radius: 10px; padding: 20px; font-size: 24px; font-family: 'ONEMobileOTF-Regular';}
+  
+  .blue-c{border: #2948FF solid 5px; width: 30px; height: 30px; border-radius: 50px;}
+  
+  .title-box .title {
+    font-size: 32px;
+    font-family: 'ONEMobilePOPOTF';
+  }
+  
+  .title1 {
+    font-size: 24px !important;
+    font-weight: bold;
+    width: max-content;
+  }
+  .title2 {
+    font-size: 20px !important;
+    font-weight: bold;
+    font-family: 'ONEMobileOTF-Regular';
+  }
+  .title3 {
+    font-size: 64px;
+    font-family: 'Pretendard-ExtraBold';
+  }
+  .title4 {
+    font-size: 31px;
+    font-weight: bold;
+  }
+  .title5{
+    font-size: 36px;
+    font-family: 'ONEMobilePOPOTF';
+  } 
+  
+  
+  .title-box .subtitle {
+    font-size: 16px;
+    background-color: #441E03;
+    color: #fff;
+    padding: 5px 15px;
+    width: fit-content;
+    border-radius: 20px;
+    display: inline-block;
+    font-family: 'ONEMobileOTF-Bold';
+  }
+  
+  .title-box .subtitle2{
+    padding-left: 60px;
+    font-size: 28px;
+  }
+  .subtitle3 {
+    font-size: 42px;
+    font-weight: bold;
+    color: #464749;
+    font-family: 'Pretendard-Light';
+  }
+  
+
+
+  input[type="radio"] {
+    display: inline-block;
+    width: 18px !important;
+    height: 18px;
+    margin: -2px 10px 0 0;
+    vertical-align: middle;
+    cursor: pointer;
+    -moz-border-radius: 50%;
+    border-radius: 50%;
+    border: 3px solid #ffffff;
+    accent-color: #ffba08;
+}
(파일 끝에 줄바꿈 문자 없음)
client/resources/css/reset.css
--- client/resources/css/reset.css
+++ client/resources/css/reset.css
@@ -77,24 +77,39 @@
     font-size: 10px;
     color: #2E2F30;
     font-family: 'ONEMobileOTF-Regular';
+    
 }
 html,
-body{height: 100%}
+body{height: 100%;  background-color: #eaedf4;}
 body{position:relative;text-align: left; overflow-x: hidden; width: 1920px;}
-::-webkit-scrollbar {width: 10px; }
+::-webkit-scrollbar {width: 10px; height: 10px;}
 ::-webkit-scrollbar-track {border-radius: 5px;background-color: #EAEDF4;}
 ::-webkit-scrollbar-thumb {	border-radius: 5px; background-color: #FFBA08;}
-#root{padding: 15px 60px 90px 60px; 
-    height: 920px; 
-    background-color: #eaedf4;}
+#root, #app{
+    height: 100%; 
+   }
 input, select, span,p, label {
     font-size: 16px;
 }
 input::placeholder{color: #8C8E92;}
+input[type="text"]{ padding:10px 20px; width: 100%; }
 
+  
 button{
     border: none;
     background-color: transparent;
     cursor: pointer;
 }
-textarea{resize: none; border: 0; outline: 0; font-size: 20px; font-family: 'ONEMobileOTF-Regular';}
(파일 끝에 줄바꿈 문자 없음)
+textarea{resize: none; border: 0; outline: 0; font-size: 20px; font-family: 'ONEMobileOTF-Regular';}
+
+a{text-decoration: none; color: #2E2F30;}
+
+table {
+    font-size: 20px;
+    width: 100%;
+    border-collapse: collapse;
+    table-layout: fixed;
+border: 0;}
+thead{background-color: #eaedf4;}
+tbody tr{border-bottom: #eaedf4 1px solid; cursor: pointer;}
+td{padding: 10px ; text-align: center;} 
(파일 끝에 줄바꿈 문자 없음)
client/resources/css/style.css
--- client/resources/css/style.css
+++ client/resources/css/style.css
@@ -1,20 +1,36 @@
+/* 회원가입 */
+.join-box{width: 800px; margin: 0 auto;}
+.join-box input[type="radio"] {
+  display: inline-block;
+  width: 24px !important;
+  height: 24px;
+  margin: -2px 10px 0 0;
+  vertical-align: middle;
+  cursor: pointer;
+  -moz-border-radius: 50%;
+  border-radius: 50%;
+  border: 3px solid #ffffff;
+  accent-color: #ffba08;
+}
+
+.find-table tr{
+  border-top: #A3A5AA 1px solid;
+  border-bottom: #A3A5AA 1px solid;
+}
+.find-table .thead{background-color: #EAEDF4;}
 /* 로그인페이지 */
 .login-container {
-  padding: 40px 60px;
+  padding: 20px 20px;
+  background-image: url('../img/bg.png');
 }
 
 .login h2 {
   font-size: 30px;
   color: #fff;
   font-family: 'ONEMobilePOPOTF';
+  font-weight: 100;
 }
 
-.login-bg {
-  position: absolute;
-  z-index: -10;
-  left: 0;
-  top: 0;
-}
 
 .login-box {
   width: 712px;
@@ -28,19 +44,33 @@
   border-radius: 20px;
 }
 
-.login-form p {
+.login-form .title {
   font-family: 'ONEMobileOTF-Bold';
   font-size: 24px;
+  width: 230px;
 }
-
-.login-form input {
+.login-form .help{margin-left: 170px;}
+.login-form input[type="text"], .login-form input[type="password"] {
   border: 3px solid #FFD56B;
   border-radius: 10px;
   padding: 22px 19px;
   width: 100%;
   font-size: 24px;
 }
-
+.login-form input:focus {
+  outline: 3px solid #ffba0a; 
+  border: 0 !important; /* 클릭 시 테두리 색상 변경 */
+}
+.login-form .search-wrap input[type="text"], .login-form .search-wrap select{    
+  border: 3px solid #FFD56B;
+  border-radius: 10px;
+  padding: 22px 19px;
+  width: 100%;
+  font-size: 24px;}
+  .login-form .search-wrap button{
+    top: 24px;
+    right: 2rem;
+  }
 .login-btn {
   position: relative;
 }
@@ -55,6 +85,20 @@
 }
 
 
+
+/* ------------------------학생 --------------------- */
+/* 헤더 */
+.notice{position: relative; cursor: pointer;}
+.notice p{position: absolute; top: 3px;
+  right: 6px; color: #fff; font-weight: bold;}
+
+  .header article{
+    background-color:  #F8F9FB;
+    border-radius: 10px;
+    padding: 22px 19px;
+    width: 100%;
+    font-size: 24px;
+  }
 /* 레이아웃 */
 .side {
   width: 42rem;
@@ -62,7 +106,7 @@
 
 .main-wrap {
   box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
-  padding: 65px 15px 70px 60px;
+  padding: 50px 40px;
 }
 
 .main-wrap {
@@ -96,11 +140,14 @@
   box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
 }
 
-.side .profile .name {
+.side .name {
   font-family: 'ONEMobilePOPOTF';
   font-size: 24px;
 }
-
+.name {
+  font-family: 'ONEMobilePOPOTF';
+  font-size: 24px;
+}
 .side .profile img {
   object-fit: contain;
 }
@@ -210,8 +257,58 @@
   display: none;
   /* 원하는 색상으로 변경 */
 }
+/* 마이페이지 */
+.look-btn{cursor: pointer;}
+.mypage .class {
+  background-image: url('../img/btn46_12s_normal.png');
+  width: 286px;
+  height: 114px;
+  padding: 11px 25px 40px 25px;
+  cursor: pointer;
+}
 
+.mypage .class img {
+  width: 35px;
+  height: 100%;
+}
+.mypage .class .box{background-color: transparent; padding: 0;}
+.mypage .class .box > div {height: 35px;}
+.mypage .photobook{
+  background-image: url('../img/img199_12p.png');
+  width: 367px;
+  height: 182px;
+  padding: 20px 46px 20px 31px;
+  color: #fff;
+}
+.mypage .textbook{font-family: 'ONEMobilePOPOTF';}
+.mypage .photobook .title1{font-family: 'ONEMobilePOPOTF'; font-weight: 100;}
+.mypage .textbook .text {border-radius:  12px 12px 0px 0px; height: 68px;
+}
+.mypage .textbook .box{height: 199px; text-align: center; padding: 10px;}
+.mypage .textbook:nth-child(1) .text{background-color: #DB2B39;}
+/* .mypage .textbook:nth-child(2) .text */
+.mypage .textbook:nth-child(3) .text{background-color:#2D7DD2;}
+.mypage .textbook:nth-child(4) .text{ background-color: #3066BE;}
+.mypage .textbook .box{height: 199px; text-align: center; padding: 10px;}
+.mypage .textbook:nth-child(1){border: #DB2B39 solid 6px;}
+/* .mypage .textbook:nth-child(2) .text */
+.mypage .textbook:nth-child(3){border:#2D7DD2 solid 6px;}
+.mypage .textbook:nth-child(4){ border: #3066BE solid 6px;}
+.mypage em.orange {
+  color: #FFBA08;
+}
 
+.mypage em.navy {
+  color: #3066BE;
+}
+
+.mypage em.blue {
+  color:#2D7DD2;
+}
+
+.mypage em.red {
+  color: #DB2B39;
+}
 /* 대시보드 */
 .main {
   max-height: 600px;
@@ -313,7 +410,7 @@
 
 /* 챕터 */
 .content-wrap {
-  width: 1808px;
+  margin: 90px 60px 0 60px;
 
 }
 
@@ -325,7 +422,7 @@
   content: "";
   display: block;
   position: absolute;
-  top: 17px;
+  top: -72px;
 }
 
 .content-wrap>.title-box {
@@ -559,14 +656,13 @@
   text-align: center;
   font-family: 'neodgm'; background-image: url('../img/img55_s.png'); width: 110px; height: 128px;}
   .time-bg > div{position: relative;}
-  .time{
-    color: #752AFF;
+  .time{    
     position: absolute;
     top: 70px;
       left: 50%;
     transform: translate(-50%, -50%);}
-    .time .second{font-size: 51px;}
-    .time .text{font-size: 21px;}
+    .second{font-size: 51px;  font-family: 'neodgm'; color: #752AFF;}
+    .time .text{font-size: 21px; color: #752AFF;}
 
 /* step2_5 */
 .dropGroup .popTxt{position: relative; width: fit-content;}
@@ -614,7 +710,7 @@
   position: absolute;
   top: 93px;
 }
-.inputGroup input{border: #CAE5FF 1px solid; border-radius: 5px; padding: 10px 20px; width: min-content;}
+.inputGroup input{border: #CAE5FF 1px solid; border-radius: 5px; padding: 10px 20px; width: min-content; font-size: 28px;}
 
 
 /* step3_2 */
@@ -627,69 +723,213 @@
 
 
 
-input.borderx {
-  border: none;
+.listen-btn{cursor: pointer;}
+
+
+
+/* ------------------------학생 --------------------- */
+
+
+/* ------------------------선생님 --------------------- */
+.side_t{
+  background-color: #fff;
+  width: 360px;
+  height: 100%;
+  padding: 25px 40px;
 }
 
-.underline {
-  text-decoration: underline;
-}
-.bd-bt{border-bottom:#FFBA08 solid 2px ;     min-width: 66px;
-  width: max-content; }
-hr {
-  color: #C6C6C6;
-  margin: 10px 0 20px 0;
-}
-em.yellow{color: #FFBA08; font-style: normal;}
-em.yellow-bg{background-color: #FFBA08; font-style: normal;}
-input.yellow-bd{border:#FFBA08 solid 2px ; border-radius: 10px; padding: 20px; font-size: 24px; font-family: 'ONEMobileOTF-Regular';}
-
-.blue-c{border: #2948FF solid 5px; width: 30px; height: 30px; border-radius: 50px;}
-
-.title-box .title {
-  font-size: 32px;
-  font-family: 'ONEMobilePOPOTF';
+details { margin:5px 0 10px; }
+details a{display: block;}
+details > summary {font-size: 24px; font-family: 'ONEMobilePOP'; padding:10px; outline:0; border-radius:5px; cursor:pointer; transition:background 0.5s; text-align:left; }
+details > summary::-webkit-details-marker { background:#444; color:#fff; background-size:contain; transform:rotate3d(0, 0, 1, 90deg); transition:transform 0.25s;}
+details[open] > summary::-webkit-details-marker { transform:rotate3d(0, 0, 1, 180deg);}
+details[open] > summary ~ * { animation:reveal 0.5s;}
+.tpt {font-family: 'Pretendard-SemiBold'; font-size: 20px;padding:10px; line-height:25px; cursor: pointer;}
+.side_t .tpt{ margin:5px 0 10px 30px; }
+.side_t .tpt:hover{background-color: #fff; border: 1px solid #FFBA08; border-radius: 5px; text-decoration: underline; text-decoration-color: #FFBA08;
+text-decoration-thickness: 3px;}
+@keyframes reveal {
+    from { opacity:0; transform:translate3d(0, -30px, 0); }
+    to { opacity:1; transform:translate3d(0, 0, 0); }
 }
 
-.title1 {
-  font-size: 24px;
-  font-weight: bold;
+select{min-width: 128px; border-radius: 5px; padding: 10px 20px; font-size: 18px;}
+select option{font-size: 20px; font-weight: bold;}
+
+
+.class{ background-color: #F8F9FB; border-radius: 10px; padding: 25px; font-size: 19px;}
+.class .title1, .textbook .title1{font-family: 'ONEMobilePOP';     font-weight: 100;}
+.class .box{background-color: #EAEDF4; border-radius: 10px;
+  padding: 10px;
 }
-.title2 {
+.class .member{font-size: 20px; color: #75767A; position: relative;}
+.class .member::before{content: ""; background-image: url('../img/img171_82t.png'); width: 20px; height: 22px; position: absolute; left: -28px;}
+.class .btnGroup, .textbook .text .btnGroup {width: initial;}
+.class button, .textbook button{font-size: 19px; font-family: 'Pretendard-Regular';}
+.textbook{width: 300px; border: #FFBA08 solid 6px; border-radius: 20px;  font-size: 19px;}
+.textbook-add{width: 300px; height: 354px; background-color: #F8F9FB; border: #75767A solid 2px; border-radius: 20px;  font-size: 19px;}
+.textbook .box{height: 250px;}
+.textbook .text{height: 97px; background-color: #FFBA08; border-radius: 0px 0px 12px 12px; padding: 20px;}
+.textbook-add{position: relative;}
+.textbook-add button{position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);}
+
+.search-wrap{
+  position: relative;}
+.search-wrap select{
   font-size: 20px;
-  font-weight: bold;
+  width: 13rem;
+  background-color: #fff;
+  border: 0;
+  border-bottom: 1px solid #a4a4a4;
+  border-radius: 0;
 }
-.title3 {
-  font-size: 64px;
-  font-family: 'Pretendard-ExtraBold';
+.search-wrap input{
+  font-size: 20px;
+  width: 40rem;
+  border: 0;
+  border-bottom: 1px solid #c8c8c8;
 }
-.title4 {
-  font-size: 31px;
-  font-weight: bold;
+.search-wrap button{
+  position: absolute;
+  right: 1rem;
+  top: 6px;
+}
+.input-icon{
+display: block;
+  width: 30px;
+  height: 30px;
+  font-size: 1.9rem;
+  color: #000;
+  cursor: pointer;
+}
+/* 테이블 */
+.table-pagination button,
+.table-pagination button,
+ .table-pagination button {
+    font-size: 2rem;
+    font-family: 'Pretendard-Regular';
+    height: 40px;
+    width: 40px;
+    border-radius: 0.5rem;
 }
 
-
-
-.title-box .subtitle {
-  font-size: 16px;
-  background-color: #441E03;
-  color: #fff;
-  padding: 5px 15px;
-  width: fit-content;
-  border-radius: 20px;
-  display: inline-block;
-  font-family: 'ONEMobileOTF-Bold';
+ .table-pagination .selected-btn,
+.table-pagination .selected-btn,
+ .table-pagination .selected-btn {
+    background-color: #FFBA08;
+    color: #fff;
+    font-family: 'Pretendard-Bold';
+}
+.new-btn{
+  padding: 5px 20px;
+  font-size: 20px;
+    font-family: 'Pretendard-Bold';
+    border-radius: 5px;
+    background-color: #FFF3D7;
+}
+.new-btn:hover{background-color: #FFBA08;
+  color: #fff;}
+  
+/* 팝업 */
+.popup-wrap{
+    position: fixed;
+    background-color: rgba(0, 0, 0, 0.283);
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
 }
 
-.title-box .subtitle2{
-  padding-left: 60px;
-  font-size: 28px;
-}
-.subtitle3 {
-  font-size: 42px;
-  font-weight: bold;
-  color: #464749;
-  font-family: 'Pretendard-Light';
+.popup-box {
+    position: fixed;
+    width: 670px;
+    /* min-height: 219px; */
+    background-color: var(--color-white);
+    top: 50%;
+    left: 37%;
+    transform: translateY(-50%);
+    border: 1px solid var(--color-gray);
+    border-radius: 1rem;
+    padding: 3rem;
+    z-index: 11111;
 }
 
-.listen-btn{cursor: pointer;}
(파일 끝에 줄바꿈 문자 없음)
+.popup-title {
+  font-family: 'ONEMobilePOPOTF';
+  font-size: 32px;
+}
+.popup-wrap .search-wrap input, .popup-wrap .search-wrap select{
+  position: relative;
+  font-size: 20px;
+  width: 100%;
+  border-radius: 10px;
+  border: 1px solid #ffdf9a;
+  height: 50px;
+ 
+}
+.popup-wrap .search-wrap button{
+  position: absolute;
+  right: 1rem;
+    top: 9px;
+}
+
+/* 공지등록 */
+.board-wrap{
+  border-top: 1px #606060 solid;
+  border-bottom: 1px #606060 solid;
+  padding: 20px 0;
+}
+.board-wrap label{width: 13rem;}
+.board-wrap textarea{min-height: 25rem; font-size: 20px; width: 100%;}
+ input.data-wrap, textarea.data-wrap{
+  width: -webkit-fill-available;
+  padding: 1.2rem;
+  border-radius: 0.8rem;
+  border: 1px solid #8C8E92;
+}
+.wrap {
+  border: 1px solid var(--color-lightGray);
+  padding: 2rem;
+  position: relative;
+  border-radius: 10px;
+  
+
+}
+.mypage .wrap{overflow-x: auto;}
+.wrap section {width: max-content;}
+.wrap .wrap-bg{
+  background-color: #f7f8fa;
+  padding: 20px;
+  border-radius: 10px;
+  height: 20rem;
+  width: -webkit-fill-available;
+ 
+}
+.wrap .wrap-bg >div{ text-align: center;}
+.wrap .progress-bar {height: 40px;}
+.wrap .progress-bar-fill {height: 40px;}
+.wrap details .title2{width: 160px;}
+.wrap details span{width: 110px; text-align: end;}
+
+
+.bookmanage-btn{
+  padding: 20px 30px;
+  font-size: 20px;
+    font-family: 'Pretendard-Bold';
+    border-radius: 5px;
+    border: #FFBA08 solid 2px;
+    cursor: pointer;
+}
+.bookmanage-btn:hover{background-color: #FFF3D7;}
+.hidden-tr {
+  display: none;
+}
+.show-tr { 
+  background-color: #FFF3D7 ;
+}
+.show-tr div{ margin: 10px;}
+.show-tr table{
+  background-color: #fff;
+
+}
+/* ------------------------선생님 --------------------- */
(파일 끝에 줄바꿈 문자 없음)
 
client/resources/img/btn24_76s_normal.png (Binary) (added)
+++ client/resources/img/btn24_76s_normal.png
Binary file is not shown
 
client/resources/img/btn24_82t_normal.png (Binary) (added)
+++ client/resources/img/btn24_82t_normal.png
Binary file is not shown
 
client/resources/img/btn25_88t_normal.png (Binary) (added)
+++ client/resources/img/btn25_88t_normal.png
Binary file is not shown
 
client/resources/img/btn25_93t_normal.png (Binary) (added)
+++ client/resources/img/btn25_93t_normal.png
Binary file is not shown
 
client/resources/img/btn26_90t_normal.png (Binary) (added)
+++ client/resources/img/btn26_90t_normal.png
Binary file is not shown
 
client/resources/img/btn27_90t_normal.png (Binary) (added)
+++ client/resources/img/btn27_90t_normal.png
Binary file is not shown
 
client/resources/img/btn28_90t_normal.png (Binary) (added)
+++ client/resources/img/btn28_90t_normal.png
Binary file is not shown
 
client/resources/img/btn29_95t_click.png (Binary) (added)
+++ client/resources/img/btn29_95t_click.png
Binary file is not shown
 
client/resources/img/btn29_95t_normal.png (Binary) (added)
+++ client/resources/img/btn29_95t_normal.png
Binary file is not shown
 
client/resources/img/btn30_95t_click.png (Binary) (added)
+++ client/resources/img/btn30_95t_click.png
Binary file is not shown
 
client/resources/img/btn30_95t_normal.png (Binary) (added)
+++ client/resources/img/btn30_95t_normal.png
Binary file is not shown
 
client/resources/img/btn31_95t_click.png (Binary) (added)
+++ client/resources/img/btn31_95t_click.png
Binary file is not shown
 
client/resources/img/btn31_95t_normal.png (Binary) (added)
+++ client/resources/img/btn31_95t_normal.png
Binary file is not shown
 
client/resources/img/btn32_98t_normal.png (Binary) (added)
+++ client/resources/img/btn32_98t_normal.png
Binary file is not shown
 
client/resources/img/btn33_101t_normal.png (Binary) (added)
+++ client/resources/img/btn33_101t_normal.png
Binary file is not shown
 
client/resources/img/btn34_101t_normal.png (Binary) (added)
+++ client/resources/img/btn34_101t_normal.png
Binary file is not shown
 
client/resources/img/btn35_107t_normal.png (Binary) (added)
+++ client/resources/img/btn35_107t_normal.png
Binary file is not shown
 
client/resources/img/btn36_120t_click.png (Binary) (added)
+++ client/resources/img/btn36_120t_click.png
Binary file is not shown
 
client/resources/img/btn36_120t_normal.png (Binary) (added)
+++ client/resources/img/btn36_120t_normal.png
Binary file is not shown
 
client/resources/img/btn37_120t_normal.png (Binary) (added)
+++ client/resources/img/btn37_120t_normal.png
Binary file is not shown
 
client/resources/img/btn38_120t_normal.png (Binary) (added)
+++ client/resources/img/btn38_120t_normal.png
Binary file is not shown
 
client/resources/img/btn39_120t_normal.png (Binary) (added)
+++ client/resources/img/btn39_120t_normal.png
Binary file is not shown
 
client/resources/img/btn40_81t_click.png (Binary) (added)
+++ client/resources/img/btn40_81t_click.png
Binary file is not shown
 
client/resources/img/btn40_81t_normal.png (Binary) (added)
+++ client/resources/img/btn40_81t_normal.png
Binary file is not shown
 
client/resources/img/btn41_81t_click.png (Binary) (added)
+++ client/resources/img/btn41_81t_click.png
Binary file is not shown
 
client/resources/img/btn41_81t_normal.png (Binary) (added)
+++ client/resources/img/btn41_81t_normal.png
Binary file is not shown
 
client/resources/img/btn42_81t_click.png (Binary) (added)
+++ client/resources/img/btn42_81t_click.png
Binary file is not shown
 
client/resources/img/btn42_81t_normal.png (Binary) (added)
+++ client/resources/img/btn42_81t_normal.png
Binary file is not shown
 
client/resources/img/btn43_07t_click.png (Binary) (added)
+++ client/resources/img/btn43_07t_click.png
Binary file is not shown
 
client/resources/img/btn43_09t_normal.png (Binary) (added)
+++ client/resources/img/btn43_09t_normal.png
Binary file is not shown
 
client/resources/img/btn44_07t_normal.png (Binary) (added)
+++ client/resources/img/btn44_07t_normal.png
Binary file is not shown
 
client/resources/img/btn44_09t_click.png (Binary) (added)
+++ client/resources/img/btn44_09t_click.png
Binary file is not shown
 
client/resources/img/btn45_07t_normal.png (Binary) (added)
+++ client/resources/img/btn45_07t_normal.png
Binary file is not shown
 
client/resources/img/btn46_12s_normal.png (Binary) (added)
+++ client/resources/img/btn46_12s_normal.png
Binary file is not shown
 
client/resources/img/btn47_13s_click.png (Binary) (added)
+++ client/resources/img/btn47_13s_click.png
Binary file is not shown
 
client/resources/img/btn47_13s_normal.png (Binary) (added)
+++ client/resources/img/btn47_13s_normal.png
Binary file is not shown
 
client/resources/img/img105_46_01s.png (Binary) (added)
+++ client/resources/img/img105_46_01s.png
Binary file is not shown
 
client/resources/img/img161_44s.png (Binary) (added)
+++ client/resources/img/img161_44s.png
Binary file is not shown
client/resources/img/img166_46s.png (Binary)
--- client/resources/img/img166_46s.png
+++ client/resources/img/img166_46s.png
Binary file is not shown
 
client/resources/img/img167_82t.png (Binary) (added)
+++ client/resources/img/img167_82t.png
Binary file is not shown
 
client/resources/img/img168_82t.png (Binary) (added)
+++ client/resources/img/img168_82t.png
Binary file is not shown
 
client/resources/img/img169_82t.png (Binary) (added)
+++ client/resources/img/img169_82t.png
Binary file is not shown
 
client/resources/img/img170_82t.png (Binary) (added)
+++ client/resources/img/img170_82t.png
Binary file is not shown
 
client/resources/img/img171_82t.png (Binary) (added)
+++ client/resources/img/img171_82t.png
Binary file is not shown
 
client/resources/img/img172_82t.png (Binary) (added)
+++ client/resources/img/img172_82t.png
Binary file is not shown
 
client/resources/img/img173_82t.png (Binary) (added)
+++ client/resources/img/img173_82t.png
Binary file is not shown
 
client/resources/img/img174_82t.png (Binary) (added)
+++ client/resources/img/img174_82t.png
Binary file is not shown
 
client/resources/img/img175_82t.png (Binary) (added)
+++ client/resources/img/img175_82t.png
Binary file is not shown
 
client/resources/img/img176_82t.png (Binary) (added)
+++ client/resources/img/img176_82t.png
Binary file is not shown
 
client/resources/img/img177_79p.png (Binary) (added)
+++ client/resources/img/img177_79p.png
Binary file is not shown
 
client/resources/img/img178_79p.png (Binary) (added)
+++ client/resources/img/img178_79p.png
Binary file is not shown
 
client/resources/img/img179_85p.png (Binary) (added)
+++ client/resources/img/img179_85p.png
Binary file is not shown
 
client/resources/img/img179_85t.png (Binary) (added)
+++ client/resources/img/img179_85t.png
Binary file is not shown
 
client/resources/img/img179_86t.png (Binary) (added)
+++ client/resources/img/img179_86t.png
Binary file is not shown
 
client/resources/img/img180_86t.png (Binary) (added)
+++ client/resources/img/img180_86t.png
Binary file is not shown
 
client/resources/img/img180_87t.png (Binary) (added)
+++ client/resources/img/img180_87t.png
Binary file is not shown
 
client/resources/img/img181_88t.png (Binary) (added)
+++ client/resources/img/img181_88t.png
Binary file is not shown
 
client/resources/img/img182_93t.png (Binary) (added)
+++ client/resources/img/img182_93t.png
Binary file is not shown
 
client/resources/img/img183_91t.png (Binary) (added)
+++ client/resources/img/img183_91t.png
Binary file is not shown
 
client/resources/img/img184_91t.png (Binary) (added)
+++ client/resources/img/img184_91t.png
Binary file is not shown
 
client/resources/img/img185_94t.png (Binary) (added)
+++ client/resources/img/img185_94t.png
Binary file is not shown
 
client/resources/img/img186_94t.png (Binary) (added)
+++ client/resources/img/img186_94t.png
Binary file is not shown
 
client/resources/img/img187_82t.png (Binary) (added)
+++ client/resources/img/img187_82t.png
Binary file is not shown
 
client/resources/img/img187_94t.png (Binary) (added)
+++ client/resources/img/img187_94t.png
Binary file is not shown
 
client/resources/img/img188_95t.png (Binary) (added)
+++ client/resources/img/img188_95t.png
Binary file is not shown
 
client/resources/img/img189_104t.png (Binary) (added)
+++ client/resources/img/img189_104t.png
Binary file is not shown
 
client/resources/img/img190_125t.png (Binary) (added)
+++ client/resources/img/img190_125t.png
Binary file is not shown
 
client/resources/img/img191_125t.png (Binary) (added)
+++ client/resources/img/img191_125t.png
Binary file is not shown
 
client/resources/img/img192_78p.png (Binary) (added)
+++ client/resources/img/img192_78p.png
Binary file is not shown
 
client/resources/img/img193_78p.png (Binary) (added)
+++ client/resources/img/img193_78p.png
Binary file is not shown
 
client/resources/img/img194_78p.png (Binary) (added)
+++ client/resources/img/img194_78p.png
Binary file is not shown
 
client/resources/img/img195_81p.png (Binary) (added)
+++ client/resources/img/img195_81p.png
Binary file is not shown
 
client/resources/img/img196_12p.png (Binary) (added)
+++ client/resources/img/img196_12p.png
Binary file is not shown
 
client/resources/img/img197_12p.png (Binary) (added)
+++ client/resources/img/img197_12p.png
Binary file is not shown
 
client/resources/img/img198_12p.png (Binary) (added)
+++ client/resources/img/img198_12p.png
Binary file is not shown
 
client/resources/img/img199_12p.png (Binary) (added)
+++ client/resources/img/img199_12p.png
Binary file is not shown
 
client/resources/img/img200_13p.png (Binary) (added)
+++ client/resources/img/img200_13p.png
Binary file is not shown
 
client/resources/img/img201_13p.png (Binary) (added)
+++ client/resources/img/img201_13p.png
Binary file is not shown
 
client/resources/img/img202_13p.png (Binary) (added)
+++ client/resources/img/img202_13p.png
Binary file is not shown
 
client/resources/img/img203_13p.png (Binary) (added)
+++ client/resources/img/img203_13p.png
Binary file is not shown
 
client/resources/img/look_t.png (Binary) (added)
+++ client/resources/img/look_t.png
Binary file is not shown
 
client/resources/img/menu icon_click_82t.png (Binary) (added)
+++ client/resources/img/menu icon_click_82t.png
Binary file is not shown
 
client/resources/img/menu icon_normal_82t.png (Binary) (added)
+++ client/resources/img/menu icon_normal_82t.png
Binary file is not shown
 
client/resources/img/tab1_79t.png (Binary) (added)
+++ client/resources/img/tab1_79t.png
Binary file is not shown
client/views/App.vue
--- client/views/App.vue
+++ client/views/App.vue
@@ -1,6 +1,6 @@
 <template>
    <div id="app">
-      <Header></Header>
+      <!-- <Header></Header> -->
                <router-view />
                   <v-app >
                   </v-app>
 
client/views/Join.vue (added)
+++ client/views/Join.vue
@@ -0,0 +1,316 @@
+<template>
+   <div class="login-container">
+      <div class="login-bg">
+         <div>
+    
+  </div>
+      </div>
+      <div class="login ">
+         <div class="logo flex justify-end"><img src="../resources/img/logo.png" alt=""></div>
+
+         <div class="join-box">
+            <div class="flex align-center justify-start mb40">
+               <img src="../resources/img/icon1.png" alt="" class="mr20">
+               <h2>회원가입</h2>
+            </div>
+            <label class="mr20 title1">
+      <input  type="radio" v-model="selectedTab" value="tab1" />
+      학생
+    </label>
+    <label class="mr20 title1">
+      <input type="radio" v-model="selectedTab" value="tab2" />
+      학부모
+    </label>
+    <label class="mr20 title1">
+      <input type="radio" v-model="selectedTab" value="tab3" />
+      선생님
+    </label>
+            <!-- 학생 -->
+            <form @submit.prevent="submitForm" class="login-form mt20" v-if="selectedTab === 'tab1'">
+               <div class="mb10 flex justify-between align-center">
+                  <p class="title" for="username">아이디</p>
+                  <input type="text" id="username" v-model="username" placeholder="아이디를 입력하세요.">
+               </div>
+               <p class="title2 flex align-center mb20 help" for="username"><img src="../resources/img/img193_78p.png"
+                     alt=""><em class="green ml10">사용 가능한 아이디입니다.</em></p>
+               <div class="flex justify-between align-center mb10">
+                  <p class="title" for="password">비밀번호</p>
+                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username"><img src="../resources/img/img193_78p.png" alt=""><em
+                     class="gray ml10">영문, 숫자, 특수문자 3가지를 조합하여 주세요.(6자리 이상)</em></p>
+               <div class="flex justify-between align-center mb10">
+                  <p class="title" for="password">비밀번호 확인</p>
+                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username"><img src="../resources/img/img193_78p.png" alt=""><em
+                     class="green ml10">비밀번호가 일치 합니다.</em></p>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">이름</p>
+                  <input type="text" id="username" v-model="username" placeholder="이름을 입력하세요.">
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">전화번호</p>
+                  <div class="flex justify-between align-center" style="width: 100%;"><input style="width: 12rem;" type="text" id="username" v-model="username"
+                       >
+                     <p class="title2">-</p><input style="width: 14rem;" type="text" id="username" v-model="username" >
+                     <p class="title2">-</p><input style="width: 14rem;" type="text" id="username" v-model="username" >
+                  </div>
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">학교</p>
+                  <div class="search-wrap" style="width: 100%;">
+                     <input type="text" placeholder="검색하세요.">
+                     <button @click="buttonSearch" type="button" title="위원회 검색">
+                        <img src="../resources/img/look_t.png" alt="">
+                     </button>
+                  </div>
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">학교</p>
+                  <div class="search-wrap flex justify-end mb20" style="width: 100%;">
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">학년</option>
+                     </select>
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">반</option>
+                     </select>
+                     <select name="" id="" class="data-wrap">
+                        <option value="">번호</option>
+                     </select>
+                     
+                  </div>
+               </div>
+               <div class="flex justify-end align-center mb10">
+                  <input type="checkbox" class="ui-checkbox mr10">
+                  <p class="title2" for="password">개인정보 수집 동의</p>
+               </div>
+               <button style="width: 100%;" class="login-btn mt50" type="submit" @click="goToApp"><img src="../resources/img/btn_.png"
+                     alt="">
+                  <p>로그인</p>
+               </button>
+            </form>
+            <!-- 학부모 -->
+            <form @submit.prevent="submitForm" class="login-form mt20" v-else-if="selectedTab === 'tab2'">
+               <div class="mb10 flex justify-between align-center">
+                  <p class="title" for="username">아이디</p>
+                  <input type="text" id="username" v-model="username" placeholder="아이디를 입력하세요.">
+               </div>
+               <p class="title2 flex align-center mb20 help" for="username"><img src="../resources/img/img193_78p.png"
+                     alt=""><em class="green ml10">사용 가능한 아이디입니다.</em></p>
+               <div class="flex justify-between align-center mb10">
+                  <p class="title" for="password">비밀번호</p>
+                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username"><img src="../resources/img/img193_78p.png" alt=""><em
+                     class="gray ml10">영문, 숫자, 특수문자 3가지를 조합하여 주세요.(6자리 이상)</em></p>
+               <div class="flex justify-between align-center mb10">
+                  <p class="title" for="password">비밀번호 확인</p>
+                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username"><img src="../resources/img/img193_78p.png" alt=""><em
+                     class="green ml10">비밀번호가 일치 합니다.</em></p>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">이름</p>
+                  <input type="text" id="username" v-model="username" placeholder="이름을 입력하세요.">
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">전화번호</p>
+                  <div class="flex justify-between align-center" style="width: 100%;"><input style="width: 12rem;" type="text" id="username" v-model="username"
+                       >
+                     <p class="title2">-</p><input style="width: 14rem;" type="text" id="username" v-model="username" >
+                     <p class="title2">-</p><input style="width: 14rem;" type="text" id="username" v-model="username" >
+                  </div>
+               </div>
+              <div class="flex justify-between mb20">
+                  <p class="title " for="username"><em class="yellow">학생 정보</em></p>
+                  <div class="flex justify-end align-center mb10">
+                     <img src="../resources/img/img192_78p.png" alt="">
+                     <p class="title2 ml10" for="password">자녀 추가하기</p>
+                  </div>
+              </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">학교</p>
+                  <div class="search-wrap" style="width: 100%;">
+                     <input type="text" placeholder="검색하세요.">
+                     <button @click="buttonSearch" type="button" title="위원회 검색">
+                        <img src="../resources/img/look_t.png" alt="">
+                     </button>
+                  </div>
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">학생 정보</p>
+                  <div class="search-wrap flex justify-end mb20" style="width: 100%;">
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">학년</option>
+                     </select>
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">반</option>
+                     </select>
+                     <select name="" id="" class=" data-wrap">
+                        <option value="">번호</option>
+                     </select>
+                     
+                  </div>
+               </div>
+               <div class="flex justify-end align-center mb10">
+                  <input type="checkbox" class="ui-checkbox mr10">
+                  <p class="title2" for="password">개인정보 수집 동의</p>
+               </div>
+               <button style="width: 100%;" class="login-btn mt50" type="submit" ><img src="../resources/img/btn_.png"
+                     alt="">
+                  <p>로그인</p>
+               </button>
+            </form>
+            <!-- 선생님 -->
+            <form @submit.prevent="submitForm" class="login-form mt20" v-else-if="selectedTab === 'tab3'">
+               <div class="mb10 flex justify-between align-center">
+                  <p class="title" for="username">아이디</p>
+                  <input type="text" id="username" v-model="username" placeholder="아이디를 입력하세요.">
+               </div>
+               <p class="title2 flex align-center mb20 help" for="username"><img src="../resources/img/img193_78p.png"
+                     alt=""><em class="green ml10">사용 가능한 아이디입니다.</em></p>
+               <div class="flex justify-between align-center mb10">
+                  <p class="title" for="password">비밀번호</p>
+                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username"><img src="../resources/img/img194_78p.png" alt=""><em
+                     class="gray ml10">영문, 숫자, 특수문자 3가지를 조합하여 주세요.(6자리 이상)</em></p>
+               <div class="flex justify-between align-center mb10">
+                  <p class="title" for="password">비밀번호 확인</p>
+                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username"><img src="../resources/img/img193_78p.png" alt=""><em
+                     class="green ml10">비밀번호가 일치 합니다.</em></p>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">이름</p>
+                  <input type="text" id="username" v-model="username" placeholder="이름을 입력하세요.">
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">전화번호</p>
+                  <div class="flex justify-between align-center" style="width: 100%;"><input style="width: 12rem;" type="text" id="username" v-model="username"
+                       >
+                     <p class="title2">-</p><input style="width: 14rem;" type="text" id="username" v-model="username" >
+                     <p class="title2">-</p><input style="width: 14rem;" type="text" id="username" v-model="username" >
+                  </div>
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">학교</p>
+                  <div class="search-wrap" style="width: 100%;">
+                     <input type="text" placeholder="검색하세요.">
+                     <button @click="buttonSearch" type="button" title="위원회 검색">
+                        <img src="../resources/img/look_t.png" alt="">
+                     </button>
+                  </div>
+               </div>
+               <div class="mb30 flex justify-between align-center">
+                  <p class="title" for="username">학교</p>
+                  <div class="search-wrap flex justify-end mb20" style="width: 100%;">
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">학년</option>
+                     </select>
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">반</option>
+                     </select>
+                     <select name="" id="" class="data-wrap">
+                        <option value="">번호</option>
+                     </select>
+                     
+                  </div>
+               </div>
+               <div class="flex justify-end align-center mb10">
+                  <input type="checkbox" class="ui-checkbox mr10">
+                  <p class="title2" for="password">개인정보 수집 동의</p>
+               </div>
+               <button style="width: 100%;" class="login-btn mt50" type="submit" ><img src="../resources/img/btn_.png"
+                     alt="">
+                  <p>로그인</p>
+               </button>
+            </form>
+         </div>
+      </div>
+   </div>
+   <div v-show="searchOpen" class="popup-wrap">
+                <div class="popup-box ">
+                    <div class="flex justify-between mb30">
+                        <p class="popup-title">학교 검색</p>
+                        <button type="button" class="popup-close-btn" @click="closeBtn">
+                            <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+
+                        </button>
+                    </div>
+                    <div class="mb30 flex justify-between align-center">
+                  <p class="title1" for="username" style="width: 12rem;">시/도</p>
+                  <div class="search-wrap flex justify-end" style="width: 100%;">
+                     <select name="" id="" class="mr10 data-wrap">
+                        <option value="">시</option>
+                     </select>
+                     <select name="" id="" class=" data-wrap">
+                        <option value="">도</option>
+                     </select>
+                  </div>
+               </div>
+               <div class="mb10 flex justify-between align-center">
+                  <p class="title1" for="username" style="width: 12rem;">학교명</p>
+                  <div class="search-wrap" style="width: 100%;">
+                     <input type="text" placeholder="검색하세요.">
+                     <button @click="buttonSearch" type="button" title="위원회 검색">
+                        <img src="../resources/img/look_t.png" alt="">
+                     </button>
+                  </div>
+               </div>
+               <p class="title2 mb20 flex align-center help" for="username" style="margin-left: 10rem;"><img src="../resources/img/img194_78p.png" alt=""><em
+                  class="gray ml10">학교명을 입력 후 찾기 버튼을 클릭하십시오.</em></p>
+                    <div class="flex justify-center ">
+                        <button type="button" title="글쓰기" class="new-btn mr10">
+                            취소
+                        </button>
+                        <button type="button" title="글쓰기" class="new-btn">
+                            등록
+                        </button>
+                    </div>
+                </div>
+            </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
+export default {
+   data() {
+      return {
+         mdiWindowClose: mdiWindowClose,
+         username: '',
+         password: '',
+         selectedTab: 'tab1', // 초기 선택 탭
+         showModal: false,
+            searchOpen: false,
+      }
+   },
+   methods: {
+      submitForm() {
+         // 여기에 로그인 로직을 추가하세요.
+         console.log('Username:', this.username);
+         console.log('Password:', this.password);
+      },
+      goToApp() {
+         this.$router.push('/app.page');
+      },
+      closeModal() {
+            this.showModal = false;
+        },
+        buttonSearch() {
+            this.searchOpen = true;
+        },
+        closeBtn() {
+            this.searchOpen = false;
+
+        },
+   },
+   components: {
+        SvgIcon
+    },
+}
+</script>
+
+<style scoped></style>(파일 끝에 줄바꿈 문자 없음)
client/views/Login.vue
--- client/views/Login.vue
+++ client/views/Login.vue
@@ -1,6 +1,6 @@
 <template>
    <div class="login-container">
-      <img class="login-bg" src="../resources/img/bg.png" alt="">
+
       <div class="login ">
          <div class="logo flex justify-end"><img src="../resources/img/logo.png" alt=""></div>
 
@@ -11,30 +11,156 @@
             </div>
             <form @submit.prevent="submitForm" class="login-form ">
                <div class="mb30">
-                  <p class="mb15" for="username">아이디</p>
+                  <p class="mb15 title" for="username">아이디</p>
                   <input type="text" id="username" v-model="username" placeholder="아이디를 입력하세요.">
                </div>
                <div>
-                  <p class="mb15" for="password">비밀번호</p>
+                  <p class="mb15 title" for="password">비밀번호</p>
                   <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
                </div>
-               <button class="login-btn mt50" type="submit" @click="goToApp"><img src="../resources/img/button.png" alt=""> <p >로그인</p></button>
+               <button class="login-btn mt50" type="submit" @click="goToApp"><img src="../resources/img/button.png"
+                     alt="">
+                  <p>로그인</p>
+               </button>
                <div class="flex justify-between mt40">
-                  <p class="underline">아이디/비밀번호 찾기</p>
-                  <p class="underline">회원가입</p>
+                  <button>
+                     <p class="underline title2" @click="buttonSearch">아이디/비밀번호 찾기</p>
+                  </button>
+                  <button>
+                     <p class="underline title2" @click="goToPage('Join')">회원가입</p>
+                  </button>
                </div>
             </form>
          </div>
       </div>
    </div>
+   <div v-show="searchOpen" class="popup-wrap">
+      <div class="popup-box ">
+         <div class="flex justify-end mb10">
+            <!-- <p class="popup-title">학교 검색</p> -->
+            <button type="button" class="popup-close-btn" @click="closeBtn">
+               <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+
+            </button>
+         </div>
+        <div class="tab-box" v-show="selectedTab !== 'tab3' && selectedTab !== 'tab4'">
+            <label class="mr20 title1">
+               <input type="radio" v-model="selectedTab" value="tab1" />
+               아이디 찾기
+            </label>
+            <label class="mr20 title1">
+               <input type="radio" v-model="selectedTab" value="tab2" />
+               비밀번호 찾기
+            </label>
+        </div>
+         <!-- 아이디 찾기 -->
+         <form @submit.prevent="submitForm" class="find-form mt30" v-if="selectedTab === 'tab1'">
+            <div class="mb20 flex justify-between align-center">
+               <p class="title2" for="username" style="width: 12rem;">이름</p>
+               <input class="data-wrap" type="text" id="username" v-model="username" placeholder="이름을 입력하세요.">
+            </div>
+            <div class="mb30 flex justify-between align-center">
+               <p class="title2" for="username" style="width: 12rem;">전화번호</p>
+               <div class="flex justify-between align-center" style="width: 100%;"><input class="data-wrap" style="width: 12rem;"
+                     type="text" id="username" v-model="username">
+                  <p class="title2">-</p><input class="data-wrap" style="width: 14rem;" type="text" id="username" v-model="username">
+                  <p class="title2">-</p><input class="data-wrap" style="width: 14rem;" type="text" id="username" v-model="username">
+               </div>
+            </div>
+            <div class="flex justify-center ">
+               <button type="button" title="글쓰기" class="new-btn mr10">
+                  취소
+               </button>
+               <button @click="selectedTab = 'tab3'" type="button" title="글쓰기" class="new-btn">
+                  찾기
+               </button>
+            </div>
+         </form>
+         <!-- 비밀번호 찾기 -->
+         <form @submit.prevent="submitForm" class="find-form mt30" v-else-if="selectedTab === 'tab2'">
+            <div class="mb20 flex justify-between align-center">
+               <p class="title2" for="username" style="width: 12rem;">아이디</p>
+               <input class="data-wrap" type="text" id="username" v-model="username" placeholder="아이디를 입력하세요.">
+            </div>
+            <div class="mb20 flex justify-between align-center">
+               <p class="title2" for="username" style="width: 12rem;">이름</p>
+               <input class="data-wrap" type="text" id="username" v-model="username" placeholder="이름을 입력하세요.">
+            </div>
+            <div class="mb30 flex justify-between align-center">
+               <p class="title2" for="username" style="width: 12rem;">전화번호</p>
+               <div class="flex justify-between align-center" style="width: 100%;"><input class="data-wrap" style="width: 12rem;"
+                     type="text" id="username" v-model="username">
+                  <p class="title2">-</p><input class="data-wrap" style="width: 14rem;" type="text" id="username" v-model="username">
+                  <p class="title2">-</p><input class="data-wrap" style="width: 14rem;" type="text" id="username" v-model="username">
+               </div>
+            </div>
+            <div class="flex justify-center ">
+               <button type="button" title="글쓰기" class="new-btn mr10">
+                  취소
+               </button>
+               <button @click="selectedTab = 'tab4'" type="button" title="글쓰기" class="new-btn">
+                  찾기
+               </button>
+            </div>
+         </form>
+         <!-- 아이디 찾기 결과 -->
+          <div v-else-if="selectedTab === 'tab3'">
+            <div class="flex justify-center mt30">
+               <p class="title2">아이디 찾기가 완료 되었습니다.</p>
+            </div>
+            <table class="find-table mt30 mb30">
+               <tr>
+                  <td class="thead">이름</td>
+                  <td></td>
+               </tr>
+               <tr>
+                  <td class="thead">아이디</td>
+                  <td></td>
+               </tr>
+            </table>
+            <div class="flex justify-center ">
+               <button @click="closeBtn" type="button" title="글쓰기" class="new-btn">
+                  로그인 하기
+               </button>
+            </div>
+          </div>
+         <!-- 비밀번호 찾기 결과 -->
+          <div v-else-if="selectedTab === 'tab4'">
+            <div class="flex justify-center mt30">
+               <p class="title2">비밀번호 찾기가 완료 되었습니다.</p>
+            </div>
+            <table class="find-table mt30 mb30">
+               <tr>
+                  <td class="thead">이름</td>
+                  <td></td>
+               </tr>
+               <tr>
+                  <td class="thead">비밀번호</td>
+                  <td></td>
+               </tr>
+            </table>
+            <div class="flex justify-center ">
+               <button @click="closeBtn" type="button" title="글쓰기" class="new-btn">
+                  로그인 하기
+               </button>
+            </div>
+          </div>
+      </div>
+   </div>
 </template>
 
 <script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
 export default {
    data() {
       return {
+         selectedTab: 'tab1',
          username: '',
-         password: ''
+         password: '',
+         mdiWindowClose: mdiWindowClose,
+         showModal: false,
+         searchOpen: false,
       }
    },
    methods: {
@@ -43,10 +169,23 @@
          console.log('Username:', this.username);
          console.log('Password:', this.password);
       },
-      goToApp() {
-    this.$router.push('/');
-  }
-   }
+      goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      closeModal() {
+         this.showModal = false;
+      },
+      buttonSearch() {
+         this.searchOpen = true;
+      },
+      closeBtn() {
+         this.searchOpen = false;
+
+      },
+   },
+   components: {
+      SvgIcon
+   },
 }
 </script>
 
client/views/layout/Header.vue
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
@@ -1,19 +1,53 @@
 <template>
     <div class="header flex justify-end">
         <img src="../../resources/img/setting.png" alt="">
-        <img src="../../resources/img/icon2.png" alt="">
+        <div class="notice" @click="buttonSearch"><img  src="../../resources/img/icon2.png" alt="">
+            <p>1</p>
+        </div>
         <img src="../../resources/img/img03.png" alt="">
+        <div class="popup-wrap" v-show="searchOpen">
+            <div class="popup-box ">
+                <div class="flex mb10  justify-between">
+                    <p class="popup-title" >알림</p>
+                    <button type="button" class="popup-close-btn" @click="closeBtn">
+                        <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>    
+                    </button>
+                </div>
+                <article class="flex justify-between mt20">
+                    <img style="width: fit-content;" src="../../resources/img/img200_13p.png" alt="">
+                    <p class="title1 ml20" style="width: 60%;">1반친구들</p>
+                    <button type="button" title="글쓰기" class="new-btn">
+                  자세히 보기
+               </button>
+                </article>
+            </div>
+        </div>
     </div>
+
 </template>
 
 <script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
 export default {
-    data () {
+    data() {
         return {
+            mdiWindowClose: mdiWindowClose,
+            showModal: false,
+            searchOpen: false,
         }
     },
     methods: {
+        closeModal() {
+            this.showModal = false;
+        },
+        buttonSearch() {
+            this.searchOpen = true;
+        },
+        closeBtn() {
+            this.searchOpen = false;
 
+        },
     },
     watch: {
 
@@ -21,8 +55,25 @@
     computed: {
 
     },
+    components: {
+        SvgIcon
+    },
     mounted() {
         console.log('Header mounted');
     }
 }
-</script>
(파일 끝에 줄바꿈 문자 없음)
+</script>
+<style scoped>
+.popup-wrap {
+    position: fixed;
+    background-color: transparent;
+    width: fit-content;
+    height: fit-content;
+    z-index: 10;
+}
+.popup-box{
+    top: 8%;
+    right: 58px;
+    left: 62%;
+}
+</style>
(파일 끝에 줄바꿈 문자 없음)
 
client/views/layout/Side_t.vue (added)
+++ client/views/layout/Side_t.vue
@@ -0,0 +1,75 @@
+<template>
+    <div class="side_t side">
+        <div class="logo mb25"><img src="../../resources/img/logo2.png" alt=""></div>
+        <div class=" mb30">
+            <div>
+                <img src="../../resources/img/img16_s.png" alt="">
+                <div class="mt10" style="width: 100%;">
+                    <p class="name mb10">선생님</p>
+                    <p class="mb5">xx중학교</p>
+                    
+                </div>                
+            </div>
+            <hr>
+            <div class="mb10">
+                <span @click="increaseProgress">평균 학습 진행률</span>
+                <span class="brown ">{{ progress }}%</span>
+            </div>
+            <progress-bar :progress="progress"></progress-bar>
+            <hr>
+        </div>
+        <div class="side-menu">
+           <div>
+                <details>
+                    <summary>반 관리
+                    </summary>
+                    <router-link to="/Home.page" class="tpt">홈</router-link>
+                    <router-link to="/Board.page" class="tpt">게시판</router-link>
+                    <router-link to="/StudentList.page" class="tpt">학생목록</router-link>
+                    <router-link to="/textbook.page" class="tpt">교재</router-link>
+                </details>
+           </div>
+            <div>
+                <details>
+                    <summary>교재 관리</summary>
+                    <router-link to="/Board.page" class="tpt">홈</router-link>
+                    <router-link to="/Board.page" class="tpt">게시판</router-link>
+                    <router-link to="/Board.page" class="tpt">학생목록</router-link>
+                    <router-link to="/Board.page" class="tpt">교재</router-link>
+                </details>
+            </div>
+        </div>
+    </div>
+</template>
+ 
+<script>
+import ProgressBar from '../component/ProgressBar.vue';
+
+export default {
+    data () {
+        return {
+            progress: 20
+        }
+    },
+    methods: {
+        increaseProgress() {
+      if (this.progress < 100) {
+        this.progress += 10;
+      }
+    }
+
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+    ProgressBar
+  },
+    mounted() {
+        console.log('Menu mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -2,6 +2,7 @@
 
 // import App from "../App.vue";
 import login from "../Login.vue"
+import Join from "../Join.vue"
 import MyPage from './main/MyPage.vue';
 import MyPlan from './main/MyPlan.vue';
 import Dashboard from './main/Dashboard.vue';
@@ -53,9 +54,26 @@
 import Main_p from "./parents/Main_p.vue";
 
 import Main_t from "./teacher/Main_t.vue";
+import Board from "./teacher/Board.vue";
+import noticeInsert from "./teacher/noticeInsert.vue";
+import noticeDetail from "./teacher/noticeDetail.vue";
+import StudentList from "./teacher/StudentList.vue";
+import StudentDetail from "./teacher/StudentDetail.vue";
+import textbook from "./teacher/textbook.vue";
+import TextBookDetail from "./teacher/TextBookDetail.vue";
+import Home from "./teacher/Home.vue";
+import ClassDetail from "./teacher/ClassDetail.vue";
+import TextList from "./teacher/TextList.vue";
+import TextInsert from "./teacher/TextInsert.vue";
+import QuestionList from "./teacher/QuestionList.vue";
+import QuestionInsert from "./teacher/QuestionInsert.vue";
+import VocaList from "./teacher/VocaList.vue";
+import ExamList from "./teacher/ExamList.vue";
+import ExamDetail from "./teacher/ExamDetail.vue";
 
 const routes = [
     { path: '/login.page', name: 'login', component: login },
+    { path: '/Join.page', name: 'Join', component: Join },
     // { path: '/App.page', name: 'App', component: App,
     //     children:[
 
@@ -124,7 +142,26 @@
     /* 부모님 */
     { path: '/Main_p.page', name: 'Main_p', component: Main_p },
     /* 선생님 */
-    { path: '/Main_t.page', name: 'Main_t', component: Main_t },
+    { path: '/Main_t.page', name: 'Main_t', component: Main_t ,
+        children: [
+            { path: '/Board.page', name: 'Board', component: Board },
+            { path: '/noticeInsert.page', name: 'noticeInsert', component: noticeInsert },
+            { path: '/noticeDetail.page', name: 'noticeDetail', component: noticeDetail },
+            { path: '/Home.page', name: 'Home', component: Home },
+            { path: '/ClassDetail.page', name: 'ClassDetail', component: ClassDetail },
+            { path: '/StudentList.page', name: 'StudentList', component: StudentList },
+            { path: '/StudentDetail.page', name: 'StudentDetail', component: StudentDetail },
+            { path: '/textbook.page', name: 'textbook', component: textbook },
+            { path: '/TextBookDetail.page', name: 'TextBookDetail', component: TextBookDetail },
+            { path: '/TextList.page', name: 'TextList', component: TextList },
+            { path: '/TextInsert.page', name: 'TextInsert', component: TextInsert },
+            { path: '/QuestionList.page', name: 'QuestionList', component: QuestionList },
+            { path: '/QuestionInsert.page', name: 'QuestionInsert', component: QuestionInsert },
+            { path: '/VocaList.page', name: 'VocaList', component: VocaList },
+            { path: '/ExamList.page', name: 'ExamList', component: ExamList },
+            { path: '/ExamDetail.page', name: 'ExamDetail', component: ExamDetail },
+        ],
+    },
 ];
 
 const AppRouter = createRouter({
 
client/views/pages/Login copy.vue (deleted)
--- client/views/pages/Login copy.vue
@@ -1,53 +0,0 @@
-<template>
-   <div class="login-container">
-      <img class="login-bg" src="../../resources/img/bg.png" alt="">
-      <div class="login ">
-         <div class="logo flex justify-end"><img src="../../resources/img/logo.png" alt=""></div>
-
-         <div class="login-box">
-            <div class="flex align-center justify-start mb40">
-               <img src="../../resources/img/icon1.png" alt="" class="mr20">
-               <h2> 로그인 하기</h2>
-            </div>
-            <form @submit.prevent="submitForm" class="login-form ">
-               <div class="mb30">
-                  <p class="mb15" for="username">아이디</p>
-                  <input type="text" id="username" v-model="username" placeholder="아이디를 입력하세요.">
-               </div>
-               <div>
-                  <p class="mb15" for="password">비밀번호</p>
-                  <input type="password" id="password" v-model="password" placeholder="비밀번호를 입력하세요.">
-               </div>
-               <button class="login-btn mt50" type="submit" @click="goToApp"><img src="../../resources/img/button.png" alt=""> <p >로그인</p></button>
-               <div class="flex justify-between mt40">
-                  <p class="underline">아이디/비밀번호 찾기</p>
-                  <p class="underline">회원가입</p>
-               </div>
-            </form>
-         </div>
-      </div>
-   </div>
-</template>
-
-<script>
-export default {
-   data() {
-      return {
-         username: '',
-         password: ''
-      }
-   },
-   methods: {
-      submitForm() {
-         // 여기에 로그인 로직을 추가하세요.
-         console.log('Username:', this.username);
-         console.log('Password:', this.password);
-      },
-      goToApp() {
-    this.$router.push('/app.page');
-  }
-   }
-}
-</script>
-
-<style scoped></style>(파일 끝에 줄바꿈 문자 없음)
client/views/pages/main/Chapter/Chapter2.vue
--- client/views/pages/main/Chapter/Chapter2.vue
+++ client/views/pages/main/Chapter/Chapter2.vue
@@ -7,7 +7,12 @@
       <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Dashboard')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-          <p class="title mt25 title-bg">step1. Hello WORLD</p>
+          <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20"></p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
   
           <div class="flex justify-center">
               <div class="vocaGroup">
client/views/pages/main/Chapter/Chapter2_1.vue
--- client/views/pages/main/Chapter/Chapter2_1.vue
+++ client/views/pages/main/Chapter/Chapter2_1.vue
@@ -7,9 +7,13 @@
       <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-         <p class="title mt40 ml50">오늘 배웠던 단어를 말하고 생성된 예문을 따라 읽어보세요!</p>
-  
-          <div class="flex justify-center mt50">
+         <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">오늘 배웠던 단어를 말하고 생성된 예문을 따라 읽어보세요</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
+          <div class="flex justify-center ">
           <div class="readGroup">
              <section >
                  <div class="imgGroup flex justify-center">
@@ -18,7 +22,7 @@
                     </div>
     
                  </div>
-                <article class="mt30">
+                <article >
                   <input type="text" class="speak mb25" placeholder="오늘 배운 단어를 말해보세요!">
                   <p class="read-ai"><img style="margin-top: -5px;" src="../../../../resources/img/img43_s.png" alt=""></p>
                 </article>
client/views/pages/main/Chapter/Chapter2_10.vue
--- client/views/pages/main/Chapter/Chapter2_10.vue
+++ client/views/pages/main/Chapter/Chapter2_10.vue
@@ -7,10 +7,14 @@
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_9')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
-        <p class="title mt25 title-bg">방문이 자물쇠로 잠겨져 있네? 세 개 중에 맞는 열쇠 하나를 찾아줘!</p>
-        <p class="subtitle2 "></p>
+        <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">방문이 자물쇠로 잠겨져 있네? 세 개 중에 맞는 열쇠 하나를 찾아줘!</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
 
-        <div class="mt80 flex align-center justify-center" style="gap: 113px;">
+        <div class="flex align-center justify-center" style="gap: 113px;">
           <div class="imgGroup">
             <div class="flex" style="gap: 60px;">
               <button><img src="../../../../resources/img/img82_42s.png" alt="">
@@ -25,7 +29,7 @@
           </div>
           <div class="pickGroup">
             <div>
-              <article  class="flex justify-center" style="gap: 60px;">
+              <article  class="flex justify-center mb50" style="gap: 60px;">
                 <img src="../../../../resources/img/img84_42s.png" alt="">
                 <div class="flex">
                   <button><img src="../../../../resources/img/img136_71s.png" alt="">
@@ -34,7 +38,7 @@
                   <p>a</p>
                 </div>
               </article>
-              <article  class="flex justify-center" style="gap: 60px;">
+              <article  class="flex justify-center mb50" style="gap: 60px;">
                 <img src="../../../../resources/img/img85_42s.png" alt="">
                 <div class="flex">
                   <button><img src="../../../../resources/img/img136_71s.png" alt="">
@@ -120,7 +124,6 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
-.pickGroup article{margin-bottom: 50px;}
 .pickGroup article img{object-fit: contain; width: -webkit-fill-available;}
 .pickGroup article >div >p {
   font-size: 64px;
client/views/pages/main/Chapter/Chapter2_11.vue
--- client/views/pages/main/Chapter/Chapter2_11.vue
+++ client/views/pages/main/Chapter/Chapter2_11.vue
@@ -7,10 +7,14 @@
       <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2_10')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-          <p class="title mt25 title-bg">빈칸에 들어갈 알맞은 낱말을 골라 문장 완성시키기</p>
-          <p class="subtitle2 ">앗! 연못에 도끼를 빠뜨렸어! 둘 중에 어느 도끼가 내 도끼였지?</p>
+          <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">빈칸에 들어갈 알맞은 낱말을 골라 문장 완성시키기</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
   
-          <div class="mt50 text-ct">
+          <div class=" text-ct">
           <div class="imgGroup flex align-start justify-center mt30">
             <img src="../../../../resources/img/img87_43s.png" alt="">
             <div class="inputGroup" >
@@ -18,7 +22,7 @@
             </div>
              
           </div>
-          <div class="pickGroup mt40">
+          <div class="pickGroup">
             <article  class="flex justify-center" style="gap: 60px; bottom: 159px;
     left: 242px;">
                 <div class="flex">
@@ -71,6 +75,8 @@
   }
   </script>
   <style scoped>
+  .imgGroup{    margin-left: 183px;
+    width: auto;}
   .pickGroup button {
   position: relative;
   margin-right: 30px;
client/views/pages/main/Chapter/Chapter2_12.vue
--- client/views/pages/main/Chapter/Chapter2_12.vue
+++ client/views/pages/main/Chapter/Chapter2_12.vue
@@ -7,10 +7,14 @@
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_11')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
-        <p class="title mt25 title-bg">단어 짝 맞추기 게임</p>
-        <p class="subtitle2 ">앗...책들이 엉망이야 단어책과 뜻책을 맞추어 책을 책꽃이로 돌려놓자!</p>
+        <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">단어 짝 맞추기 게임</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
 
-        <div class="mt50 text-ct">
+        <div class="text-ct">
           <div class="pickGroup flex align-center justify-center mt50" style="gap: 100px;">
             <div>
               <div class="mb20">
@@ -42,10 +46,16 @@
                 </button>
               </div>
             </div>
-            <div class="flex" style="gap: 20px;">
-              <img src="../../../../resources/img/img99_45s.png" alt="">
+            <div class="dropGroup" style="gap: 20px;">
+              <img src="../../../../resources/img/img160_43s.png" alt="">
+              <div class="dropimg">
+                <img style="top: 21px;" src="../../../../resources/img/img161_44s.png" alt="">
+                <img style="top: 119px;" src="../../../../resources/img/img162_43s.png" alt="">
+                <img style="top: 215px;" src="../../../../resources/img/img163_43s.png" alt="">
+                <img style="bottom: 36px;" src="../../../../resources/img/img164_43s.png" alt="">
+              </div>
             </div>
-
+            
           </div>
 
           <div class="time-bg">
@@ -102,6 +112,8 @@
 }
 </script>
 <style scoped>
+.dropGroup{position: relative;}
+.dropimg img{position: absolute; left: 27px;}
 .pickGroup button {
   position: relative;
   margin: 10px 40px;
client/views/pages/main/Chapter/Chapter2_13.vue
--- client/views/pages/main/Chapter/Chapter2_13.vue
+++ client/views/pages/main/Chapter/Chapter2_13.vue
@@ -7,13 +7,17 @@
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_12')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
-        <p class="title mt25 title-bg">객관식 미니게임</p>
-        <p class="subtitle2 ">헉... 물폭탄이 작동해서 물난리가 나기 전에 알맞은 선을 잘라 해제해야겠어!</p>
+        <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">객관식 미니게임</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
 
-        <div class="mt50 text-ct">
-          <div class="imgGroup flex align-center justify-center mt30">
+        <div class="text-ct">
+          <div class="imgGroup flex align-center justify-center">
             <div class="flex" style="gap: 20px; position: relative;">
-              <img src="../../../../resources/img/img105_46s.png" alt="">
+              <img src="../../../../resources/img/img105_46s.png" alt="" style="width: 90%;">
               <div class="time-bg">
                   <div>
                     <div class="time">
@@ -22,11 +26,11 @@
                     </div>
                   </div>
                 </div>
-              <div class="textbox mt40">
+              <div class="textbox ">
                 <p class="title1 text-lf"> 문제</p>
                 <div class="pickGroup">
                   <div>
-                <article  class="flex mb20" style="gap: 60px;">
+                <article  class="flex mb10" style="gap: 60px;">
                   <div class="flex align-center">
                     <button><img src="../../../../resources/img/img136_71s.png" alt="">
                       <p>1</p>
@@ -34,7 +38,7 @@
                     <p class="red">a</p>
                   </div>
                 </article>
-                <article  class="flex mb20" style="gap: 60px;">
+                <article  class="flex mb10" style="gap: 60px;">
                   <div class="flex align-center">
                     <button><img src="../../../../resources/img/img136_71s.png" alt="">
                       <p>2</p>
@@ -42,7 +46,7 @@
                     <p class="orange">a</p>
                   </div>
                 </article>
-                <article  class="flex mb20" style="gap: 60px;">
+                <article  class="flex mb10" style="gap: 60px;">
                   <div class="flex align-center">
                     <button><img src="../../../../resources/img/img136_71s.png" alt="">
                       <p>3</p>
@@ -60,8 +64,9 @@
                 </article>
               </div>
                 </div>
-                
-                <div class="flex justify-center" style="gap: 20px;">
+                <!-- 오답일 경우 아래의 이미지가 보여야함 -->
+                <div class="flex justify-center wrong-anwser" style="gap: 20px;">
+                  <img src="../../../../resources/img/img165_46s.png" alt="">
                 </div>
   
               </div>
@@ -78,6 +83,7 @@
 export default {
   data() {
     return {
+      timer:'00'
     }
   },
   methods: {
@@ -112,10 +118,14 @@
 }
 </script>
 <style scoped>
-.textbox{position: absolute;     top: 114px;
+.wrong-anwser{position: absolute; top: 51%;
+  left: 102%;
+  transform: translate(-50%, -50%);}
+.textbox{position: absolute;     top: 140px;
   left: 45px;}
-  .time-bg{    top: 137px;}
-  .pickGroup{margin: 50px 0 0 180px;}
+  .time-bg{     top: 136px;
+    right: 124px;}
+  .pickGroup{margin: 45px 0 0 180px;}
 .pickGroup button {
   position: relative;
   margin-right: 30px;
client/views/pages/main/Chapter/Chapter2_2.vue
--- client/views/pages/main/Chapter/Chapter2_2.vue
+++ client/views/pages/main/Chapter/Chapter2_2.vue
@@ -7,9 +7,14 @@
      <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2_1')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-           <p class="title mt25 title-bg">카드를 뒤집어 보세요.</p>
+           <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">카드를 뒤집어 보세요.</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
 
-           <div class="imgGroup mt80">
+           <div class="imgGroup">
               <div class="flex justify-center" style="gap: 90px;">
                  <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)">
                     <img :src="item.imgSrc1" >
@@ -29,10 +34,10 @@
    data() {
       return {
          items: [
-            { imgSrc1: 'http://localhost/client/build/d7b87b0aee959597bc7a8ff59c92e172.png', imgSrc2: 'http://localhost/client/build/eeb66d34a14f431520977cac0a89adf1.png', isSecondImageVisible: false },
-            { imgSrc1: 'http://localhost/client/build/75be1e0527bdc23177d46d5525646b57.png', imgSrc2: 'http://localhost/client/build/f1c52445fc7b070642d6d4add5208383.png', isSecondImageVisible: false },
-            { imgSrc1: 'http://localhost/client/build/5351236e4d5e2d68b4c0d475c2a6bad2.png', imgSrc2: 'http://localhost/client/build/82edbab93426e02a09ee3518801c956e.png', isSecondImageVisible: false },
-            { imgSrc1: 'http://localhost/client/build/c9ab71d4ac740b625b6ed54611775727.png', imgSrc2: 'http://localhost/client/build/1fa02c19c1f627c33be9dcb2de41b869.png', isSecondImageVisible: false }
+            { imgSrc1: 'client/resources/img/img49_s_1.png', imgSrc2: 'client/resources/img/img50_s_2.png', isSecondImageVisible: false },
+            { imgSrc1: 'client/resources/img/img49_s_2.png', imgSrc2: 'client/resources/img/img50_s_3.png', isSecondImageVisible: false },
+            { imgSrc1: 'client/resources/img/img49_s_3.png', imgSrc2: 'client/resources/img/img50_s_4.png', isSecondImageVisible: false },
+            { imgSrc1: 'client/resources/img/img49_s_4.png', imgSrc2: 'client/resources/img/img50_s_1.png', isSecondImageVisible: false }
          ]
       };
    },
client/views/pages/main/Chapter/Chapter2_3.vue
--- client/views/pages/main/Chapter/Chapter2_3.vue
+++ client/views/pages/main/Chapter/Chapter2_3.vue
@@ -7,9 +7,12 @@
      <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2_2')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-           <p class="title mt25 title-bg">다음을 듣고 따라 말하세요.</p>
-           <p class="subtitle2 "></p>
-           <div class="time-bg">
+           <p class="subtitle2 "></p><p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">다음을 듣고 따라 말하세요.</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div><div class="time-bg">
             <div>
               <div class="time">
                 <p class="second">{{timer}}</p>
client/views/pages/main/Chapter/Chapter2_4.vue
--- client/views/pages/main/Chapter/Chapter2_4.vue
+++ client/views/pages/main/Chapter/Chapter2_4.vue
@@ -8,14 +8,18 @@
          <div class="pre-btn" @click="goToPage('Chapter2_3')"><img src="../../../../resources/img/left.png" alt="">
          </div>
          <div class="content title-box">
-            <p class="title mt25 title-bg">다음을 듣고 맞는 단어를 선택하세요.</p>
-            <p class="subtitle2 "></p>
+            <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">다음을 듣고 맞는 단어를 선택하세요.</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
             
 
             <div class="imgGroup">
 
                <div class="flex justify-center">
-                  <div class="btnGroup mt30 flex" style="gap: 60px;">
+                  <div class="btnGroup  flex" style="gap: 60px;">
                      <button class="popTxt" v-for="(item, index) in items" :key="index" @click="updateContent(index)"
                         :class="{ active: selectedIndex === index }">
                         <img :src="item.imgSrc1">
client/views/pages/main/Chapter/Chapter2_5.vue
--- client/views/pages/main/Chapter/Chapter2_5.vue
+++ client/views/pages/main/Chapter/Chapter2_5.vue
@@ -7,10 +7,14 @@
       <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2_4')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-          <p class="title mt25 title-bg">아래 지문을 보고 빈칸을 채워주세요.</p>
-          <p class="subtitle2 "></p>
+          <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">아래 지문을 보고 빈칸을 채워주세요.</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
   
-          <div class="mt50 text-ct">
+          <div class="text-ct">
             <p class="title1 mb40" style="color: #464749;">the sun rises in the</p>
             <img src="../../../../resources/img/img65_37s.png" alt="">
           <div class="dropGroup flex align-center justify-center mt30">
client/views/pages/main/Chapter/Chapter2_6.vue
--- client/views/pages/main/Chapter/Chapter2_6.vue
+++ client/views/pages/main/Chapter/Chapter2_6.vue
@@ -7,11 +7,14 @@
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_5')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
-        <p class="title mt25 title-bg">앗! 퍼즐이 망가졌어! 퍼즐을 맞춰 문장을 완성해보자!</p>
-        <p class="subtitle2 "></p>
-
-        <div class="mt50 text-ct">
-          <div class="dropGroup  mt30">
+        <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">앗! 퍼즐이 망가졌어! 퍼즐을 맞춰 문장을 완성해보자!</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
+        <div class="text-ct">
+          <div class="dropGroup ">
             <div class="flex justify-center">
               <div class="popTxt" id="drop1">
                 <img src="../../../../resources/img/img66_38s_1.png" alt="" @click="showButton(1)" >
@@ -28,7 +31,7 @@
             </div>
 
           </div>
-          <div class="dragGroup mt40">
+          <div class="dragGroup">
             <article style="  right: 0;
     top: 36%;  " @click="handleDrag(1)" v-show="!dragHidden1">
               <button id="drag1">
client/views/pages/main/Chapter/Chapter2_7.vue
--- client/views/pages/main/Chapter/Chapter2_7.vue
+++ client/views/pages/main/Chapter/Chapter2_7.vue
@@ -7,11 +7,15 @@
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_6')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
-        <p class="title mt25 title-bg">앗! 다리가 무너져서 건널 수가 없어! 다리 조각을 옮겨줘!</p>
-        <p class="subtitle2 "></p>
+        <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">앗! 다리가 무너져서 건널 수가 없어! 다리 조각을 옮겨줘!</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
 
-        <div class="mt50 text-ct flex justify-center" style="gap: 80px;">
-          <div class="dropGroup flex align-center justify-center mt30">
+        <div class="text-ct flex justify-center" style="gap: 80px;">
+          <div class="dropGroup flex align-center justify-center">
             <div class="flex" style="gap: 20px; position: relative;" >
               <img src="../../../../resources/img/img70_39s.png" alt="">
               <div class="textbox">
client/views/pages/main/Chapter/Chapter2_8.vue
--- client/views/pages/main/Chapter/Chapter2_8.vue
+++ client/views/pages/main/Chapter/Chapter2_8.vue
@@ -7,10 +7,14 @@
       <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2_7')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-          <p class="title mt25 title-bg">앗! 퍼즐이 망가졌어! 퍼즐을 맞춰 문장을 완성해보자!</p>
-          <p class="subtitle2 "></p>
+          <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">앗! 퍼즐이 망가졌어! 퍼즐을 맞춰 문장을 완성해보자!</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
   
-          <div class="mt80 text-ct">
+          <div class="text-ct">
           <div class="dropGroup flex align-center justify-center mt30">
             <div style="position: relative;" >
               <img src="../../../../resources/img/img28_s.png" alt="">
@@ -23,7 +27,7 @@
                
             </div>
           </div>
-          <div class="dragGroup mt40">
+          <div class="dragGroup ">
             <div class="flex justify-center" style="gap: 20px;">
               <article style="  right: 0;
     top: 36%;  "><button><img src="../../../../resources/img/img29_s.png" alt=""><p>a</p></button></article>
client/views/pages/main/Chapter/Chapter2_9.vue
--- client/views/pages/main/Chapter/Chapter2_9.vue
+++ client/views/pages/main/Chapter/Chapter2_9.vue
@@ -7,28 +7,32 @@
       <div class="flex justify-between align-center">
         <div class="pre-btn" @click="goToPage('Chapter2_8')"><img src="../../../../resources/img/left.png" alt=""></div>
         <div class="content title-box">
-          <p class="title mt25 title-bg">앗! 잉크가 쏟아졌어! 잉크를 지워줘!</p>
-          <p class="subtitle2 "></p>
+          <p class="title mt25 title-bg">step2</p>
+          <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">앗! 잉크가 쏟아졌어! 잉크를 지워줘!</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
   
-          <div class="mt40 text-ct">
-          <div class="dropGroup flex align-center justify-center mt30">
+          <div class="text-ct">
+          <div class="dropGroup flex align-center justify-center">
             <div style="position: relative;" >
-              <img src="../../../../resources/img/img72_41s_1.png" alt="">
+              <img src="../../../../resources/img/img72_41s_1.png" alt="" style="width: 90%;">
               <button style="left: 141px;
-    top: 60px;"><img src="../../../../resources/img/img78_41s.png" alt=""><p>a</p></button>
+    top: 60px;"><img src="../../../../resources/img/img78_41s.png" alt=""></button>
               <button style="    left: 200px;
-    bottom: 86px;"><img src="../../../../resources/img/img79_41s.png" alt=""><p>a</p></button>
+    bottom: 86px;"><img src="../../../../resources/img/img79_41s.png" alt=""></button>
               <button style="    right: 237px;
-    top: 159px;"><img src="../../../../resources/img/img80_41s.png" alt=""><p>a</p></button>
+    top: 159px;"><img src="../../../../resources/img/img80_41s.png" alt=""></button>
               <button style="     right: 159px;
-    bottom: 46px;"><img src="../../../../resources/img/img81_41s.png" alt=""><p>a</p></button>
+    bottom: 46px;"><img src="../../../../resources/img/img81_41s.png" alt=""></button>
                
             </div>
           </div>
-          <div class="dragGroup mt40">
+          <div class="dragGroup">
             <div >
                 <article style=" left: 83px;
-    top: 69%; "><button><img src="../../../../resources/img/img73_41s.png" alt=""><p>a</p></button></article>
+    top: 69%; "><button><img src="../../../../resources/img/img73_41s.png" alt=""></button></article>
             </div>
             
           </div>
client/views/pages/main/Chapter/Chapter3_3.vue
--- client/views/pages/main/Chapter/Chapter3_3.vue
+++ client/views/pages/main/Chapter/Chapter3_3.vue
@@ -21,7 +21,7 @@
               </div>
             </div>
           </div>
-          <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px;">
+          <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px; margin-top: 7%;">
             <article style="gap: 60px; bottom: 159px;
     left: 242px;">
               <div class="flex align-center">
client/views/pages/main/Main.vue
--- client/views/pages/main/Main.vue
+++ client/views/pages/main/Main.vue
@@ -1,13 +1,16 @@
 <template>
-      <div class="flex justify-between">
-         <Side></Side>
-         <div>
-            <Menu></Menu>
-            <div class="main-wrap">
-                <router-view />
-            </div>
-         </div>
-      </div>
+    <div style="padding: 15px 60px 90px 60px; ">
+        <Header></Header>
+          <div class="flex justify-between" >
+             <Side></Side>
+             <div>
+                <Menu></Menu>
+                <div class="main-wrap">
+                    <router-view />
+                </div>
+             </div>
+          </div>
+    </div>
 
 </template>
 
client/views/pages/main/MyPage.vue
--- client/views/pages/main/MyPage.vue
+++ client/views/pages/main/MyPage.vue
@@ -1,15 +1,159 @@
 <template>
-    <div>마이페이지</div>
+
+   <div class="mypage">
+        <div class="flex justify-between mb30" style="gap: 30px;">
+            <div>
+                <div class="title-box flex justify-between mb20">
+                    <p class="title">입장하기</p>
+                    <div class="flex align-center look-btn"><p>더보기 </p><svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon></div>
+                </div>
+                <div class="wrap " style="width: 82rem;">
+                    <section class="flex" style="gap: 20px;">
+                        <div class="class flex justify-between">
+                            <div class="box gd-col2" style="gap: 5px;" @click="goToPage('ClassDetail')">
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                            </div>
+                            <div class="text mt10">
+                                <p class="title1 mb10">A반</p>
+                                <span class="member">20명</span>
+                            </div>
+                        </div>
+                        <div class="class flex justify-between">
+                            <div class="box gd-col2" style="gap: 5px;" @click="goToPage('ClassDetail')">
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                            </div>
+                            <div class="text mt10">
+                                <p class="title1 mb10">A반</p>
+                                <span class="member">20명</span>
+                            </div>
+                        </div>
+                        <div class="class flex justify-between">
+                            <div class="box gd-col2" style="gap: 5px;" @click="goToPage('ClassDetail')">
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                                <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                            </div>
+                            <div class="text mt10">
+                                <p class="title1 mb10">A반</p>
+                                <span class="member">20명</span>
+                            </div>
+                        </div>
+                    </section>
+                </div>
+            </div>
+            <div >
+                <div class="title-box flex justify-between mb20">
+                    <p class="title">사진첩</p>
+                </div>
+                <div class="photobook">
+                    <div class="flex justify-between">
+                            <div class="box" style="gap: 5px;" @click="goToPage('ClassDetail')">
+                                <div><img src="../../../resources/img/img198_12p.png" alt=""></div>
+                            </div>
+                            <div class="text mt10">
+                                <p class="title1 mb10">나의 사진첩</p>
+                                <button @click="selectedTab = 'tab4'" type="button" title="글쓰기" class="new-btn">
+                  바로가기
+               </button>
+                            </div>
+                        </div>
+                   
+                </div>
+            </div>
+        </div>
+        <div class="title-box flex justify-between mb20">
+            <p class="title">가나다학생 랭킹</p>
+        </div>
+        <div class=" mb30">
+            <div class=" flex " style="gap: 50px;">
+                <div class="textbook">
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">포토북 랭킹</p>
+                    </div>
+                    <div class="box " style="gap: 10px;">
+                        <div><img src="../../../resources/img/img196_12p.png" alt=""></div>
+                        <P class="title2 mt10">현재 30명 중 <em class="red">2등</em>입니다.</P>
+                    </div>
+                </div>
+                <div class="textbook">
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">포토북 랭킹</p>
+                    </div>
+                    <div class="box " style="gap: 10px;">
+                        <div><img src="../../../resources/img/img196_12p.png" alt=""></div>
+                        <P class="title2 mt10">현재 30명 중 <em class="yellow">2등</em>입니다.</P>
+                    </div>
+                </div>
+                <div class="textbook">
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">포토북 랭킹</p>
+                    </div>
+                    <div class="box " style="gap: 10px;">
+                        <div><img src="../../../resources/img/img196_12p.png" alt=""></div>
+                        <P class="title2 mt10">현재 30명 중 <em class="blue">2등</em>입니다.</P>
+                    </div>
+                </div>
+                <div class="textbook">
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">포토북 랭킹</p>
+                    </div>
+                    <div class="box " style="gap: 10px;">
+                        <div><img src="../../../resources/img/img196_12p.png" alt=""></div>
+                        <P class="title2 mt10">현재 30명 중 <em class="navy">2등</em>입니다.</P>
+                    </div>
+                </div>
+            </div>
+        </div>
+   </div>
+
 </template>
 
 <script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify,  } from '@mdi/js';
+import { mdilArrowRight } from '@mdi/light-js';
+import ProgressBar from '../../component/ProgressBar.vue';
+
+
 export default {
-    data () {
+    data() {
         return {
+            mdiMagnify: mdiMagnify,
+            mdilArrowRight: mdilArrowRight,
+            timer: "00:00",
+            progress: 20
         }
     },
     methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        increaseProgress() {
+            if (this.progress < 100) {
+                this.progress += 10;
+            }
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
 
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
     },
     watch: {
 
@@ -17,8 +161,14 @@
     computed: {
 
     },
+    components: {
+        SvgIcon,
+        ProgressBar
+    },
     mounted() {
         console.log('Main2 mounted');
     }
 }
-</script>
(파일 끝에 줄바꿈 문자 없음)
+</script>
+<style scoped>
+</style>
(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/Board.vue (added)
+++ client/views/pages/teacher/Board.vue
@@ -0,0 +1,95 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">게시판</p>
+        <select name="" id="">
+            <option value="">A반</option>
+        </select>
+    </div>
+    <div class="search-wrap flex justify-end mb20">
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">전체</option>
+            </select>
+                <input  type="text" placeholder="검색하세요.">
+                <button type="button" title="위원회 검색">
+                    <img src="../../../resources/img/look_t.png" alt="">
+                </button>
+        </div>
+        <div class="table-wrap">
+            <table>
+                <thead>
+                    <td>No.</td>
+                    <td>제목</td>
+                    <td>카테고리</td>
+                    <td>작성자</td>
+                    <td>등록일</td>
+                </thead>
+                <tbody>
+                    <tr @click="goToPage('noticeDetail')">
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                    </tr>
+                </tbody>
+            </table>
+            <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article>
+                <div class="flex justify-end ">
+                <button type="button" title="글쓰기" class="new-btn" @click="goToPage('noticeInsert')">
+                    글쓰기
+                </button>
+        </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/ClassDetail.vue (added)
+++ client/views/pages/teacher/ClassDetail.vue
@@ -0,0 +1,149 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">반 관리</p>
+    </div>
+    <div class="wrap mb30">
+        <div class="flex justify-between mb30 align-center">
+            <label for="" class="title1">학습 현황</label>
+            <div class="look-btn flex align-center">
+                <p>자세히 보기 </p>
+                <svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon>
+            </div>
+        </div>
+        <div class="table-wrap">
+            <table>
+                <thead>
+                    <td>No.</td>
+                    <td>제목</td>
+                    <td>내용</td>
+                    <td>작성자</td>
+                    <td>등록일</td>
+                </thead>
+                <tbody>
+                    <tr>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+    <div class="flex justify-between" style="gap: 30px;">
+        <div class="wrap mb30">
+            <div class="flex justify-between mb30 align-center">
+                <label for="" class="title1">학생 목록</label>
+                <div class="look-btn align-center flex">
+                    <p>자세히 보기 </p>
+                    <svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon>
+                </div>
+            </div>
+            <div class="table-wrap">
+                <table>
+                    <thead>
+                        <td>No.</td>
+                        <td>이름</td>
+                        <td>학년</td>
+                        <td>반</td>
+                    </thead>
+                    <tbody>
+                        <tr>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+        <div class="wrap mb30">
+            <div class="flex justify-between mb30 align-center">
+                <label for="" class="title1">책 </label>
+                <div class="align-center flex look-btn"><p>자세히 보기 </p><svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon></div>
+            </div>
+            <div  class=" flex " style="gap: 50px;">
+                <div class="textbook">
+                    <div class="box " style="gap: 10px;">
+                    </div>
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">A 교재</p>
+                        <div class="btnGroup mt15 flex align-center justify-end" style="gap: 10px;">
+                            <button>수정</button><p>&#124;</p>
+                            <button @click="showConfirm('delete')">삭제</button>
+                        </div>
+                    </div>
+                </div>
+                <div class="textbook">
+                    <div class="box " style="gap: 10px;">
+                    </div>
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">A 교재</p>
+                        <div class="btnGroup mt15 flex align-center justify-end" style="gap: 10px;">
+                            <button>수정</button><p>&#124;</p>
+                            <button @click="showConfirm('delete')">삭제</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify,  } from '@mdi/js';
+import { mdilArrowRight } from '@mdi/light-js';
+import ProgressBar from '../../component/ProgressBar.vue';
+
+
+export default {
+    data() {
+        return {
+            mdiMagnify: mdiMagnify,
+            mdilArrowRight: mdilArrowRight,
+            timer: "00:00",
+            progress: 20
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        increaseProgress() {
+            if (this.progress < 100) {
+                this.progress += 10;
+            }
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon,
+        ProgressBar
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/ExamDetail.vue (added)
+++ client/views/pages/teacher/ExamDetail.vue
@@ -0,0 +1,93 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">문제 상세 페이지</p>
+    </div>
+    <label for="" class="title1">문제 리스트</label>
+    <table class="mt20 mb100">
+        <colgroup>
+            <col style="width: 10%;">
+            <col style="width: 70%;">
+            <col style="width: 20%;">
+        </colgroup>
+        <thead>
+            <td>No.</td>
+            <td>문제</td>
+            <td>보기</td>
+        </thead>
+        <tbody>
+            <tr>
+                <td>1</td>
+                <td>1</td>
+                <td><button type="button" title="보기" class="new-btn">
+                        보기
+                    </button></td>
+            </tr>
+        </tbody>
+    </table>
+    <label for="" class="title1">상세 내용</label>
+    <div class="board-wrap mt20">
+        <div class="flex align-center mb20">
+            <label for="" class="title2">문제</label>
+            <input type="text" class="data-wrap">
+        </div>
+
+        <hr>
+        <div class="flex align-center">
+            <label for="" class="title2">내용</label>
+            <textarea name="" id="" class="data-wrap"></textarea>
+        </div>
+        <hr>
+        <div class="flex align-center mb20">
+            <label for="" class="title2">첨부파일</label>
+            <input type="file" ref="fileInput" @change="handleFileUpload" />
+        </div>
+        <div class="flex align-center">
+            <label for="" class="title2">답</label>
+            <input type="text" class="data-wrap">
+        </div>
+    </div>
+    <div class="flex justify-between mt50">
+        <button type="button" title="글쓰기" class="new-btn" @click="goToPage('ExamList')">
+            목록
+        </button>
+        <div class="flex">
+            <button type="button" title="글쓰기" class="new-btn mr10">
+                수정
+            </button>
+            <button type="button" title="글쓰기" class="new-btn">
+                삭제
+            </button>
+        </div>
+    </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify } from '@mdi/js';
+
+
+export default {
+    data() {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/ExamList.vue (added)
+++ client/views/pages/teacher/ExamList.vue
@@ -0,0 +1,150 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">평가</p>
+        <select name="" id="">
+            <option value="">1단원</option>
+        </select>
+    </div>
+    <div class="search-wrap flex justify-end mb20">
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">중간</option>
+                <option value="">최종</option>
+            </select>
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">전체</option>
+            </select>
+                <input  type="text" placeholder="검색하세요.">
+                <button type="button" title="위원회 검색">
+                    <img src="../../../resources/img/look_t.png" alt="">
+                </button>
+        </div>
+        <div class="table-wrap">
+            <table>
+                <thead>
+                    <td>No.</td>
+                    <td>제목</td>
+                    <td>중간/최종</td>
+                    <td>작성자</td>
+                    <td>문항</td>
+                    <td>보기</td>
+                    <td>등록일</td>
+                </thead>
+                <tbody>
+                    <tr>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td><button type="button" title="보기" class="new-btn"  @click="toggleRow">
+                    보기
+                </button></td>
+                        <td></td>
+                    </tr>
+                    <tr :class="{ 'hidden-tr': !isRowVisible }" class="show-tr">
+                        <td colspan="7">
+                            <div>
+                                <table>
+                                    <colgroup>
+                                        <col style="width: 10%;">
+                <col style="width: 70%;">
+                <col style="width: 20%;">
+                                    </colgroup>
+                                    <thead>
+                                        <td>No.</td>
+                                        <td>문제</td>
+                                        <td></td>
+                                    </thead>
+                                    <tbody>
+                                        <tr>
+                                            <td>1</td>
+                                            <td>1</td>
+                                            <td><button type="button" title="수정" class="new-btn"  @click="goToPage('ExamDetail')">
+                    수정
+                </button></td>
+                                        </tr>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+            <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article>
+                <div class="flex justify-end ">
+                <button type="button" title="등록" class="new-btn" @click="goToPage('ExamDetail')">
+                    등록
+                </button>
+        </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+            mdiWindowClose: mdiWindowClose,
+            showModal: false,
+            searchOpen: false,
+            isRowVisible: false
+        }
+    },
+    methods: {
+        toggleRow() {
+                    this.isRowVisible = !this.isRowVisible;
+                },
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+        
+        closeModal() {
+            this.showModal = false;
+        },
+        buttonSearch() {
+            this.searchOpen = true;
+        },
+        closeBtn() {
+            this.searchOpen = false;
+
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/Home.vue (added)
+++ client/views/pages/teacher/Home.vue
@@ -0,0 +1,114 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">홈</p>
+        <select name="" id="">
+            <option value="">A반</option>
+        </select>
+    </div>
+    <div class="content-t">
+        <div class=" flex " style="gap: 50px;">
+            <div class="class">
+                <div class="box gd-col2" style="gap: 10px;" @click="goToPage('ClassDetail')">
+                    <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                    <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                    <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                    <div><img src="../../../resources/img/img176_82t.png" alt=""></div>
+                </div>
+                <div class="text flex justify-between mt20">
+                    <p class="title1">A반</p>
+                    <span class="member">20명</span>
+                </div>
+                <div class="btnGroup mt15 flex align-center justify-end" style="gap: 10px;">
+                    <button @click="showConfirm('edit')">수정</button>
+                    <p>&#124;</p>
+                    <button @click="showConfirm('delete')">삭제</button>
+                </div>
+            </div>
+            <div class="textbook-add">
+                <button @click="buttonSearch"><img src="../../../resources/img/btn32_98t_normal.png" alt=""></button>
+
+            </div>
+            <div v-show="searchOpen" class="popup-wrap">
+                <div class="popup-box ">
+                    <div class="flex justify-between mb30">
+                        <p class="popup-title">반 이름</p>
+                        <button type="button" class="popup-close-btn" @click="closeBtn">
+                            <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+
+                        </button>
+                    </div>
+                    <div class="search-wrap mb30">
+                        <input type="text" class="data-wrap" placeholder="">
+                        <!-- <button type="button" >
+                            <img src="../../../resources/img/look_t.png" alt="">
+                        </button> -->
+                    </div>
+                    <div class="flex justify-center ">
+                        <button type="button" title="글쓰기" class="new-btn mr10">
+                            취소
+                        </button>
+                        <button type="button" title="글쓰기" class="new-btn">
+                            생성
+                        </button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
+export default {
+    data() {
+        return {
+            mdiWindowClose: mdiWindowClose,
+            showModal: false,
+            searchOpen: false,
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        closeModal() {
+            this.showModal = false;
+        },
+        buttonSearch() {
+            this.searchOpen = true;
+        },
+        closeBtn() {
+            this.searchOpen = false;
+
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'delete') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
client/views/pages/teacher/Main_t.vue
--- client/views/pages/teacher/Main_t.vue
+++ client/views/pages/teacher/Main_t.vue
@@ -1,27 +1,51 @@
 <template>
-    <div>Main.vue</div>
+    <div class="flex justify-between" style="height: 100%;">
+       <Side_t></Side_t>
+       <div style="padding: 15px 60px 90px 60px; ">
+        <Header></Header>
+          <div class="main-wrap">
+              <router-view />
+          </div>
+       </div>
+    </div>
+
 </template>
 
 <script>
+import Header from '../../layout/Header.vue';
+import Menu from '../../layout/Menu.vue';
+import Side_t from '../../layout/Side_t.vue';
 
 export default {
-    data () {
-        return {
-        }
-    },
-    methods: {
+  data() {
+      return {
+      }
+  },
+  methods: {
+     
+  },
+  watch: {
 
-    },
-    watch: {
+  },
+  computed: {
 
-    },
-    computed: {
-
-    },
-    components: {
-    },
-    mounted() {
-        console.log('main mounted');
-    }
+  },
+  components: {
+      Header: Header,
+    Menu: Menu,
+    // Footer:Footer,
+    Side_t:Side_t,
+  },
+  mounted() {
+      console.log('main mounted');
+  }
 }
-</script>
(파일 끝에 줄바꿈 문자 없음)
+</script>
+<style scoped>
+.main-wrap{
+  margin-top: 20px;
+  position: static;
+  width: 144rem;
+  height: 100%;
+}
+</style>
(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/QuestionInsert.vue (added)
+++ client/views/pages/teacher/QuestionInsert.vue
@@ -0,0 +1,99 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">문제 등록</p>
+    </div>
+    <div class="board-wrap">
+        <div class="flex align-center mb20">
+            <label for="" class="title2">제목</label>
+            <input type="text" class="data-wrap">
+        </div>
+        <hr>
+        <div class="flex align-center">
+            <label for="" class="title2">내용</label>
+            <textarea name="" id="" class="data-wrap"></textarea>
+        </div>
+        <hr>
+        <div class="flex align-center mb20">
+            <label for="" class="title2">첨부파일</label>
+            <input type="file" ref="fileInput" @change="handleFileUpload" />
+        </div>
+        <div class="flex align-center mb20">
+            <label for="" class="title2">답</label>
+            <input type="text" class="data-wrap">
+        </div>
+        <div>
+            <label for="" class="title2">오답 학생</label>
+            <div class="table-wrap mt20">
+                <table>
+                    <thead>
+                        <td>No.</td>
+                        <td>이름</td>
+                        <td>학년</td>
+                        <td>반</td>
+                        <td>오답</td>
+                    </thead>
+                    <tbody>
+                        <tr @click="goToPage('noticeDetail')">
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                        </tr>
+                    </tbody>
+                </table>
+                <!-- <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article> -->
+            </div>
+        </div>
+    </div>
+    <div class="flex justify-between mt50">
+        <button type="button" title="글쓰기" class="new-btn" @click="goToPage('QuestionList')">
+            목록
+        </button>
+        <div class="flex">
+            <button type="button" title="글쓰기" class="new-btn mr10">
+                수정
+            </button>
+            <button type="button" title="글쓰기" class="new-btn">
+                삭제
+            </button>
+        </div>
+    </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify } from '@mdi/js';
+
+
+export default {
+    data() {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/QuestionList.vue (added)
+++ client/views/pages/teacher/QuestionList.vue
@@ -0,0 +1,97 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">문제</p>
+        <select name="" id="">
+            <option value="">1단원</option>
+        </select>
+    </div>
+    <div class="search-wrap flex justify-end mb20">
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">전체</option>
+            </select>
+                <input  type="text" placeholder="검색하세요.">
+                <button type="button" title="위원회 검색">
+                    <img src="../../../resources/img/look_t.png" alt="">
+                </button>
+        </div>
+        <div class="table-wrap">
+            <table>
+                <thead>
+                    <td>No.</td>
+                    <td>제목</td>
+                    <td>문제</td>
+                    <td>작성자</td>
+                    <td>오답률</td>
+                    <td>등록일</td>
+                </thead>
+                <tbody>
+                    <tr @click="goToPage('QuestionInsert')">
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                    </tr>
+                </tbody>
+            </table>
+            <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article>
+                <div class="flex justify-end ">
+                <button type="button" title="등록" class="new-btn" @click="goToPage('QuestionInsert')">
+                    등록
+                </button>
+        </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/StudentDetail.vue (added)
+++ client/views/pages/teacher/StudentDetail.vue
@@ -0,0 +1,166 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">학생 종합 리포트</p>
+    </div>
+    <div class="wrap mb30">
+        <label for="" class="title1">학습 현황</label>
+        <div class="flex justify-between mt30" style="gap: 50px;">
+            <div class="wrap-bg flex">
+                <img src="../../../resources/img/img16_s.png" alt="">
+                <div class="ml25" style="width: 100%;">
+                    <p class="name mb10">김</p>
+                    <p class="mb5">xx중학교 3학년 x반</p>
+                </div>
+            </div>
+            <div class="wrap-bg ">
+                <p class="title1">평균 성적</p>
+                <div style="width: 100%;" class="flex mt30">
+                    <p class="title5"><em class="yellow">93</em></p>
+                    <p class="title4 ml10 mr10">&#47;</p>
+                    <p class="title4">100</p>
+                </div>
+            </div>
+            <div class="wrap-bg flex ">
+                <div class="mr50">
+                    <p class="title1 mb30">총 학습 시간</p>
+                    <p class="second">{{ timer }}</p>
+                </div>
+                <div>
+                    <p class="title1 mb30">남은 시간</p>
+                    <p class="second">{{ timer }}</p>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="wrap mb30">
+        <details>
+            <summary>진도율
+            </summary>
+            <div class="tpt flex justify-between align-center">
+                <p class="title2">종합 진도율 :</p>
+                <progress-bar :progress="progress"></progress-bar><span class="brown ">{{ progress }}%</span>
+            </div>
+            <div class="tpt flex justify-between align-center">
+                <p class="title2">교재1 진도율 :</p><progress-bar :progress="progress"></progress-bar><span class="brown ">{{
+                    progress }}%</span>
+            </div>
+            <div class="tpt flex justify-between align-center">
+                <p class="title2">교재2 진도율 :</p><progress-bar :progress="progress"></progress-bar><span class="brown ">{{
+                    progress }}%</span>
+            </div>
+            <div class="tpt flex justify-between align-center">
+                <p class="title2">교재3 진도율 :</p><progress-bar :progress="progress"></progress-bar><span class="brown ">{{
+                    progress }}%</span>
+            </div>
+        </details>
+    </div>
+    <div class="wrap mb30">
+        <details>
+            <summary>단원별 오답률</summary>
+            <div class="tpt">
+                <div class="table-wrap">
+                    <table>
+                        <thead>
+                            <td>단원</td>
+                            <td>문제수</td>
+                            <td>정답</td>
+                            <td>오답률</td>
+                        </thead>
+                        <tbody>
+                            <tr>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </details>
+    </div>
+    <div class="wrap mb30">
+        <details>
+            <summary>학습 코스</summary>
+            <div class="tpt">
+                <div class="table-wrap">
+                    <table>
+                        <thead>
+                            <td>단원</td>
+                            <td>문제수</td>
+                            <td>정답</td>
+                            <td>오답률</td>
+                        </thead>
+                        <tbody>
+                            <tr>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </details>
+    </div>
+    <div class="flex justify-end ">
+                <button type="button" title="" class="new-btn" @click="showConfirm('delete')">
+                    삭제
+                </button>
+            </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify } from '@mdi/js';
+import ProgressBar from '../../component/ProgressBar.vue';
+
+
+export default {
+    data() {
+        return {
+            mdiMagnify: mdiMagnify,
+            timer: "00:00",
+            progress: 20
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        increaseProgress() {
+            if (this.progress < 100) {
+                this.progress += 10;
+            }
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'delete') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon,
+        ProgressBar
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/StudentList.vue (added)
+++ client/views/pages/teacher/StudentList.vue
@@ -0,0 +1,170 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">게시판</p>
+        <select name="" id="">
+            <option value="">A반</option>
+        </select>
+    </div>
+    <div class="flex justify-end mb20">
+        <div class="search-wrap ">
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">전체</option>
+            </select>
+            <input type="text" placeholder="검색하세요.">
+            <button type="button" title="위원회 검색">
+                <img src="../../../resources/img/look_t.png" alt="">
+            </button>
+        </div>
+        <button type="button" title="글쓰기" class="new-btn ml10" @click="buttonSearch">
+            학생 추가
+        </button>
+    </div>
+    <div class="table-wrap">
+        <table>
+            <thead>
+                <td>No.</td>
+                <td>학년</td>
+                <td>반</td>
+                <td>성별</td>
+                <td>이름</td>
+            </thead>
+            <tbody>
+                <tr @click="goToPage('StudentDetail')">
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                </tr>
+            </tbody>
+        </table>
+        <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+            <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+            <button class="selected-btn">1</button>
+            <button>2</button>
+            <button>3</button>
+            <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+        </article>
+        <div class="flex justify-end ">
+
+        </div>
+
+    </div>
+    <div v-show="searchOpen" class="popup-wrap">
+        <div class="popup-box ">
+            <div class="flex justify-between mb30">
+                <p class="popup-title">학생 검색</p>
+                <button type="button" class="popup-close-btn" @click="closeBtn">
+                    <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+
+                </button>
+            </div>
+            <div class="search-wrap mb30">
+                <input type="text" class="data-wrap" placeholder="">
+                <button type="button" >
+                            <img src="../../../resources/img/look_t.png" alt="">
+                        </button>
+            </div>
+            <div class="table-wrap">
+                <table>
+                    <thead>
+                        <td>No.</td>
+                        <td>학년</td>
+                        <td>반</td>
+                        <td>번호</td>
+                        <td>이름</td>
+                        <td>선택</td>
+                    </thead>
+                    <tbody>
+                        <tr>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td></td>
+                            <td><input type="checkbox" class="ui-checkbox"></td>
+                        </tr>
+                    </tbody>
+                </table>
+                <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article>
+                <div class="flex justify-end ">
+
+                </div>
+
+            </div>
+            <div class="flex justify-end ">
+                <button type="button" title="" class="new-btn mr10">
+                    취소
+                </button>
+                <button type="button" title="" class="new-btn">
+                    등록
+                </button>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
+
+
+export default {
+    data() {
+        return {
+            mdiMagnify: mdiMagnify,
+            mdiWindowClose: mdiWindowClose,
+            showModal: false,
+            searchOpen: false,
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+        closeModal() {
+            this.showModal = false;
+        },
+        buttonSearch() {
+            this.searchOpen = true;
+        },
+        closeBtn() {
+            this.searchOpen = false;
+
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/TextBookDetail.vue (added)
+++ client/views/pages/teacher/TextBookDetail.vue
@@ -0,0 +1,112 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">교재 관리</p>
+        <select name="" id="">
+            <option value="">A 교재</option>
+        </select>
+    </div>
+    <div class="board-wrap">
+        <label for="" class="title2">단원</label>
+        <div class="table-pagination flex mt10">
+            <button class="selected-btn">1</button>
+            <button>2</button>
+            <button>3</button>
+        </div>
+        <hr>
+        <div class="bookmanage-btn mb20 flex justify-between align-center" @click="goToPage('TextList')">
+            <label for="" class="title1">지문</label>
+            <div class="flex align-center " style="gap: 10px;">
+                <p>00개</p>
+                <button><img src="../../../resources/img/btn33_101t_normal.png" alt=""></button>
+            </div>
+        </div>
+        <div class="bookmanage-btn mb20 flex justify-between align-center" @click="goToPage('QuestionList')">
+            <label for="" class="title1">문제</label>
+            <div class="flex align-center " style="gap: 10px;">
+                <p>00개</p>
+                <button><img src="../../../resources/img/btn33_101t_normal.png" alt=""></button>
+            </div>
+        </div>
+        <div class="bookmanage-btn mb20 flex justify-between align-center" @click="goToPage('VocaList')">
+            <label for="" class="title1">단어</label>
+            <div class="flex align-center " style="gap: 10px;">
+                <p>00개</p>
+                <button><img src="../../../resources/img/btn33_101t_normal.png" alt=""></button>
+            </div>
+        </div>
+        <div class="bookmanage-btn mb20 flex justify-between align-center" @click="goToPage('ExamList')">
+            <label for="" class="title1">중간 평가</label>
+            <div class="flex align-center " style="gap: 10px;">
+                <p>00개</p>
+                <button><img src="../../../resources/img/btn33_101t_normal.png" alt=""></button>
+            </div>
+        </div>
+        <div class="bookmanage-btn flex justify-between align-center" @click="goToPage('ExamList')">
+            <label for="" class="title1">최종 평가</label>
+            <div class="flex align-center " style="gap: 10px;">
+                <p>00개</p>
+                <button><img src="../../../resources/img/btn33_101t_normal.png" alt=""></button>
+            </div>
+        </div>
+    </div>
+    <div class="flex justify-end mt30">
+        <button type="button" title="" class="new-btn" @click="showConfirm('delete')">
+            삭제
+        </button>
+    </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdilArrowRight } from '@mdi/js';
+import ProgressBar from '../../component/ProgressBar.vue';
+
+
+export default {
+    data() {
+        return {
+            mdiMagnify: mdiMagnify,
+            mdilArrowRight: mdilArrowRight,
+            timer: "00:00",
+            progress: 20
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        increaseProgress() {
+            if (this.progress < 100) {
+                this.progress += 10;
+            }
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'delete') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon,
+        ProgressBar
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/TextInsert.vue (added)
+++ client/views/pages/teacher/TextInsert.vue
@@ -0,0 +1,64 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">지문 등록</p>
+    </div>
+        <div class="board-wrap">
+            <div class="flex align-center mb20">
+                <label for="" class="title2">제목</label>
+                <input type="text" class="data-wrap">
+            </div>
+            <div class="flex align-center">
+                <label for="" class="title2">URL</label>
+                <input type="text" class="data-wrap">
+            </div>
+            <hr>
+            <div class="flex align-center">
+                <label for="" class="title2">스크립트</label>
+                <textarea name="" id="" class="data-wrap"></textarea>
+            </div>
+        </div>
+        <div class="flex justify-between mt50">
+                <button type="button" title="글쓰기" class="new-btn"  @click="goToPage('TextList')">
+                    목록
+                </button>
+               <div class="flex">
+                    <button type="button" title="글쓰기" class="new-btn mr10"  >
+                        수정
+                    </button>
+                    <button type="button" title="글쓰기" class="new-btn"  >
+                        삭제
+                    </button>
+               </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/TextList.vue (added)
+++ client/views/pages/teacher/TextList.vue
@@ -0,0 +1,95 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">지문</p>
+        <select name="" id="">
+            <option value="">1단원</option>
+        </select>
+    </div>
+    <div class="search-wrap flex justify-end mb20">
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">전체</option>
+            </select>
+                <input  type="text" placeholder="검색하세요.">
+                <button type="button" title="위원회 검색">
+                    <img src="../../../resources/img/look_t.png" alt="">
+                </button>
+        </div>
+        <div class="table-wrap">
+            <table>
+                <thead>
+                    <td>No.</td>
+                    <td>제목</td>
+                    <td>내용</td>
+                    <td>작성자</td>
+                    <td>등록일</td>
+                </thead>
+                <tbody>
+                    <tr @click="goToPage('TextInsert')">
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                    </tr>
+                </tbody>
+            </table>
+            <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article>
+                <div class="flex justify-end ">
+                <button type="button" title="등록" class="new-btn" @click="goToPage('TextInsert')">
+                    등록
+                </button>
+        </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/VocaList.vue (added)
+++ client/views/pages/teacher/VocaList.vue
@@ -0,0 +1,95 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">단어</p>
+        <select name="" id="">
+            <option value="">1단원</option>
+        </select>
+    </div>
+    <div class="search-wrap flex justify-end mb20">
+            <select name="" id="" class="mr10 data-wrap">
+                <option value="">전체</option>
+            </select>
+                <input  type="text" placeholder="검색하세요.">
+                <button type="button" title="위원회 검색">
+                    <img src="../../../resources/img/look_t.png" alt="">
+                </button>
+        </div>
+        <div class="table-wrap">
+            <table>
+                <thead>
+                    <td>No.</td>
+                    <td>단어</td>
+                    <td>뜻</td>
+                    <td>작성자</td>
+                    <td>등록일</td>
+                </thead>
+                <tbody>
+                    <tr @click="goToPage('noticeDetail')">
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                    </tr>
+                </tbody>
+            </table>
+            <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px;">
+                    <button><img src="../../../resources/img/btn27_90t_normal.png" alt=""></button>
+                    <button class="selected-btn">1</button>
+                    <button>2</button>
+                    <button>3</button>
+                    <button><img src="../../../resources/img/btn28_90t_normal.png" alt=""></button>
+                </article>
+                <div class="flex justify-end ">
+                <button type="button" title="등록" class="new-btn" @click="goToPage('noticeInsert')">
+                    등록
+                </button>
+        </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      showConfirm(type) {
+            let message = '';
+            if (type === 'cancel') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/noticeDetail.vue (added)
+++ client/views/pages/teacher/noticeDetail.vue
@@ -0,0 +1,78 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">공지 등록</p>
+    </div>
+        <div class="board-wrap">
+            <div class="flex align-center">
+                <label for="" class="title2">제목</label>
+                <input type="text" class="data-wrap">
+            </div>
+            <hr>
+            <textarea name="" id=""></textarea>
+            <hr>
+            <div class="flex align-center">
+                <label for="" class="title2">첨부파일</label>
+                <input type="file" ref="fileInput" @change="handleFileUpload" />
+            </div>
+            <hr>
+            <div class="flex justify-between">
+                <button type="button" class="flex align-center">
+                            <svg-icon type="mdi" :path="mdilChevronLeft" ></svg-icon>
+                   <p> 이전글</p>
+                        </button>
+                <button type="button" class="flex align-center"><p>다음글</p>
+                            <svg-icon type="mdi" :path="mdilChevronRight" ></svg-icon>
+
+                        </button>
+
+
+            </div>
+        </div>
+        <div class="flex justify-between mt50">
+                <button type="button" title="글쓰기" class="new-btn"  @click="goToPage('Board')">
+                    목록
+                </button>
+               <div class="flex">
+                    <button type="button" title="글쓰기" class="new-btn mr10"  >
+                        수정
+                    </button>
+                    <button type="button" title="글쓰기" class="new-btn"  >
+                        삭제
+                    </button>
+               </div>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify } from '@mdi/js';
+import { mdilChevronRight,mdilChevronLeft } from '@mdi/light-js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+            mdilChevronRight: mdilChevronRight ,
+            mdilChevronLeft:mdilChevronLeft,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/noticeInsert.vue (added)
+++ client/views/pages/teacher/noticeInsert.vue
@@ -0,0 +1,57 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">공지 등록</p>
+    </div>
+        <div class="board-wrap">
+            <div class="flex align-center">
+                <label for="" class="title2">제목</label>
+                <input type="text" class="data-wrap">
+            </div>
+            <hr>
+            <textarea name="" id=""></textarea>
+            <hr>
+            <div class="flex align-center">
+                <label for="" class="title2">첨부파일</label>
+                <input type="file" ref="fileInput" @change="handleFileUpload" />
+            </div>
+        </div>
+        <div class="flex justify-between mt50">
+                <button type="button" title="글쓰기" class="new-btn"  @click="goToPage('Board')">
+                    목록
+                </button>
+                <button type="button" title="글쓰기" class="new-btn"  @click="goToPage('Board')">
+                     등록
+                </button>
+        </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify} from '@mdi/js';
+
+
+export default {
+    data () {
+        return {
+            mdiMagnify: mdiMagnify,
+        }
+    },
+    methods: {
+        goToPage(page) {
+         this.$router.push({ name: page });
+      },
+    },
+    watch: {
+
+    },
+    computed: {
+       
+    },
+    components:{
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/teacher/textbook.vue (added)
+++ client/views/pages/teacher/textbook.vue
@@ -0,0 +1,110 @@
+<template>
+    <div class="title-box flex justify-between mb40">
+        <p class="title">교재</p>
+        <select name="" id="">
+            <option value="">A반</option>
+        </select>
+        </div>
+        <div class="content-t">
+            <div  class=" flex " style="gap: 50px;">
+                <div class="textbook">
+                    <div class="box " style="gap: 10px;" @click="goToPage('TextBookDetail')">
+                    </div>
+                    <div class="text ">
+                        <p class="title1" style="color: #fff;">A 교재</p>
+                        <div class="btnGroup mt15 flex align-center justify-end" style="gap: 10px;">
+                            <button>수정</button><p>&#124;</p>
+                            <button @click="showConfirm('delete')">삭제</button>
+                        </div>
+                    </div>
+                </div>
+                
+                <div class="textbook-add">
+                        <button  @click="buttonSearch"><img src="../../../resources/img/btn32_98t_normal.png" alt=""></button>
+        
+                </div>
+            </div>
+        </div>
+        <div v-show="searchOpen" class="popup-wrap">
+                <div class="popup-box ">
+                    <div class="flex justify-between mb30">
+                        <p class="popup-title">교재 이름</p>
+                        <button type="button" class="popup-close-btn" @click="closeBtn">
+                            <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+
+                        </button>
+                    </div>
+                    <div class="search-wrap mb30">
+                        <input type="text" class="data-wrap" placeholder="">
+                        <button type="button" title="교재 검색">
+                            <img src="../../../resources/img/look_t.png" alt="">
+                        </button>
+                    </div>
+                    <div class="flex justify-center ">
+                        <button type="button" title="글쓰기" class="new-btn mr10">
+                            취소
+                        </button>
+                        <button type="button" title="글쓰기" class="new-btn">
+                            생성
+                        </button>
+                    </div>
+                </div>
+            </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
+
+export default {
+    data () {
+        return {
+            mdiWindowClose: mdiWindowClose,
+            showModal: false,
+            searchOpen: false,
+        }
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        closeModal() {
+            this.showModal = false;
+        },
+        buttonSearch() {
+            this.searchOpen = true;
+        },
+        closeBtn() {
+            this.searchOpen = false;
+
+        },
+        showConfirm(type) {
+            let message = '';
+            if (type === 'delete') {
+                message = '삭제하시겠습니까?';
+            } else if (type === 'reset') {
+                message = '초기화하시겠습니까?';
+            } else if (type === 'save') {
+                message = '등록하시겠습니까?';
+            }
+
+            if (confirm(message)) {
+                this.goBack();
+            }
+        },
+
+    },
+    watch: {
+
+    },
+    computed: {
+
+    },
+    components: {
+        SvgIcon
+    },
+    mounted() {
+        console.log('Main2 mounted');
+    }
+}
+</script>(파일 끝에 줄바꿈 문자 없음)
package-lock.json
--- package-lock.json
+++ package-lock.json
@@ -7,6 +7,9 @@
       "dependencies": {
         "@babel/cli": "7.19.3",
         "@babel/core": "7.19.3",
+        "@jamescoyle/vue-icon": "^0.1.2",
+        "@mdi/js": "^7.4.47",
+        "@mdi/light-js": "^0.2.63",
         "babel-loader": "8.2.5",
         "css-loader": "6.7.1",
         "express": "^4.18.1",
@@ -316,6 +319,12 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/@jamescoyle/vue-icon": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@jamescoyle/vue-icon/-/vue-icon-0.1.2.tgz",
+      "integrity": "sha512-KFrImXx5TKIi6iQXlnyLEBl4rNosNKbTeRnr70ucTdUaciVmd9qK9d/pZAaKt1Ob/8xNnX2GMp8LisyHdKtEgw==",
+      "license": "MIT"
+    },
     "node_modules/@jridgewell/gen-mapping": {
       "version": "0.3.5",
       "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
@@ -374,6 +383,18 @@
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
+    "node_modules/@mdi/js": {
+      "version": "7.4.47",
+      "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz",
+      "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@mdi/light-js": {
+      "version": "0.2.63",
+      "resolved": "https://registry.npmjs.org/@mdi/light-js/-/light-js-0.2.63.tgz",
+      "integrity": "sha512-+SUtJIOxvEy6DiVq0wTRPIzVuoPB5fhnubmzaN7e2ew0v3/nvnpC4mqbGCjiTK0diVd3+zvhEQHZzPDErGb1fg==",
+      "license": "MIT"
+    },
     "node_modules/@nicolo-ribaudo/chokidar-2": {
       "version": "2.1.8-no-fsevents.3",
       "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
package.json
--- package.json
+++ package.json
@@ -2,6 +2,9 @@
   "dependencies": {
     "@babel/cli": "7.19.3",
     "@babel/core": "7.19.3",
+    "@jamescoyle/vue-icon": "^0.1.2",
+    "@mdi/js": "^7.4.47",
+    "@mdi/light-js": "^0.2.63",
     "babel-loader": "8.2.5",
     "css-loader": "6.7.1",
     "express": "^4.18.1",
Add a comment
List