jichoi / lms_front star
[jichoi] 08-07
240807 최정임
@8782c099e76eea3c025f99e63ca0e3f06705f1b5
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -1101,7 +1101,6 @@
   .title1 {
     font-size: 24px !important;
     font-weight: bold;
-    width: max-content;
   }
   .title2 {
     font-size: 20px !important;
client/resources/css/style.css
--- client/resources/css/style.css
+++ client/resources/css/style.css
@@ -468,7 +468,27 @@
 .race-btn p.long {
   width: fit-content;
 }
-
+/* 사진촬영 */
+.camera{background-color: #000;}
+.camera .header{height: 110px; background-color: #eaedf4; padding: 0 60px;}
+.camera .body{width: 1435px; height: 810px; margin: 0 auto;}
+.stickers button{margin: 5px; text-align: center;}
+.frame{
+  background-image: url('../img/img142_76s.png');
+  width: 993px;
+  height: 634px;
+  padding: 55px;
+  text-align: center;
+}
+.frame .photo{
+  width: 845px;
+  height: 476px;
+  margin: 0 auto;
+}
+.frame .photo img{
+  width: inherit;
+}
+/* 학습을 마친 친구들 */
 .complete-wrap h2 {
   font-size: 32px;
   color: #331600;
@@ -476,7 +496,7 @@
   font-weight: 100;
 }
 .complete-wrap img{width: inherit;}
-.complete-wrap .photo{cursor: pointer; width: 200px; height: 130px;}
+.complete-wrap .photo{cursor: pointer; width: 200px; height: 130px; }
 /* 챕터 */
 .content-wrap {
   margin: 90px 60px 0 60px;
@@ -510,7 +530,7 @@
 .content {
   position: relative;
   box-shadow: 10px 10px 10px rgba(0, 0, 0, 0.1);
-  width: 1670px;
+  width: 93%;
   height: 710px;
   background-color: #fff;
   border-radius: 20px;
@@ -695,7 +715,7 @@
   }
 
 /* step2_2 */
-.popTxt{position: relative; width: fit-content;}
+.popTxt{position: relative; }
 .popTxt img:last-child{position: absolute; top: 0; left: 0;}
 
 h4{font-size: 20px;}
client/resources/img/img142_76s.png (Binary)
--- client/resources/img/img142_76s.png
+++ client/resources/img/img142_76s.png
Binary file is not shown
 
client/resources/img/img152_75s_01.png (Binary) (added)
+++ client/resources/img/img152_75s_01.png
Binary file is not shown
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -8,6 +8,9 @@
 import MyPlan2 from './main/MyPlan2.vue';
 import PhotoBook from './main/PhotoBook.vue';
 import Dashboard from './main/Dashboard.vue';
+import Camera from "./main/Camera.vue"
+import PhotoDesign from "./main/PhotoDesign.vue"
+import PhotoEdit from "./main/PhotoEdit.vue"
 import PreviewNote from './main/PreviewNote.vue';
 import Main from "./main/Main.vue";
 import Chapter1 from "./main/Chapter/Chapter1.vue";
@@ -77,6 +80,7 @@
 const routes = [
     { path: '/login.page', name: 'login', component: login },
     { path: '/Join.page', name: 'Join', component: Join },
+    
     // { path: '/App.page', name: 'App', component: App,
     //     children:[
     //     ]
@@ -96,7 +100,9 @@
             { path: '/PreviewNote.page', name: 'PreviewNote', component: PreviewNote },
         ]
     },
-
+    { path: '/Camera.page', name: 'Camera', component: Camera },
+    { path: '/PhotoDesign.page', name: 'PhotoDesign', component: PhotoDesign },
+    { path: '/PhotoEdit.page', name: 'PhotoEdit', component: PhotoEdit },
     /* 지문 */
     { path: '/Chapter1.page', name: 'Chapter1', component: Chapter1 },
     { path: '/Chapter1_1.page', name: 'Chapter1_1', component: Chapter1_1 },
 
client/views/pages/main/Camera.vue (added)
+++ client/views/pages/main/Camera.vue
@@ -0,0 +1,56 @@
+<template>
+   <div class="camera">
+      <div class="header flex justify-between title-box">
+         <button type="button" class="flex align-center" @click="goToPage('Dashboard')">
+            <svg-icon type="mdi" :path="mdilChevronLeft" style="width: 50px; height: 50px;"></svg-icon>
+            <p class="title"> 이전글</p>
+         </button>
+         <button @click="goToPage('PhotoDesign')" ><img src="../../../resources/img/btn19_74s_normal.png" alt="">
+         </button>
+      </div>
+      <div class="body ">
+<img src="../../../resources/img/img140_747s.png" alt="">
+      </div>
+   </div>
+</template>
+
+<script>
+import SvgIcon from '@jamescoyle/vue-icon';
+import { mdiMagnify, mdiWindowClose } from '@mdi/js';
+import { mdilChevronRight, mdilChevronLeft } from '@mdi/light-js';
+
+import axios from "axios";
+
+export default {
+   data() {
+      return {
+         selectedTab: 'tab1',
+         username: '',
+         password: '',
+         mdiWindowClose: mdiWindowClose,
+         mdilChevronLeft: mdilChevronLeft,
+         showModal: false,
+         searchOpen: false,
+      }
+   },
+   methods: {
+      
+      goToPage(page) {
+         this.$router.push({ name: page });
+      },
+      closeModal() {
+         this.showModal = false;
+      },
+      buttonSearch() {
+         this.searchOpen = true;
+      },
+      closeBtn() {
+         this.searchOpen = false;
+
+      },
+   },
+   components: {
+      SvgIcon
+   },
+}
+</script>
client/views/pages/main/Dashboard.vue
--- client/views/pages/main/Dashboard.vue
+++ client/views/pages/main/Dashboard.vue
@@ -9,52 +9,99 @@
                 <div class="rabbit"><img src="../../../resources/img/img09_s.png" alt=""></div>
                 <div class="rcon flex justify-end mb5">
                     <div class="race-btn" @click="goToPage('Chapter1')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="1">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="1">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>지문1</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter2')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="2">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="2">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>단어장</p>
                     </div>
                 </div>
                 <div class="lcon flex justify-between mb5">
                     <div class="race-btn" @click="goToPage('Chapter7')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="7">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="7">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>문제1</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter6')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="6">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="6">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>단어장</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter5')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="5">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="5">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>지문2</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter4')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="4">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="4">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>문제2</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter3')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="3">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="3">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>문제1</p>
                     </div>
                 </div>
                 <div class="rcon flex">
                     <div class="race-btn" @click="goToPage('Chapter8')">
-                        <img src="../../../resources/img/img11_2_s.png" alt="" data-num="8">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="8">
+                    <img :src="item.imgSrc3" >
+                    <img :src="item.imgSrc4" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p class="long">중간 평가</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter9')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="9">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="9">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>지문3</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter10')">
-                        <img src="../../../resources/img/img11_1_s.png" alt="" data-num="10">
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="10">
+                    <img :src="item.imgSrc1" >
+                    <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p>단어장</p>
                     </div>
-                    <div class="race-btn" @click="goToPage('Chapter11')">
-                        <img src="../../../resources/img/img11_2_s.png" alt="" data-num="11">
+                    <div class="race-btn" >
+                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="11">
+                    <img :src="item.imgSrc3" >
+                    <img :src="item.imgSrc4" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                 </button>
                         <p class="long">최종 평가</p>
+                    </div>
+                </div>
+            </div>
+            <!-- 팝업 -->
+            <div v-show="searchOpen" class="popup-wrap">
+                <div class="popup-box ">
+                    <div class=" mb30 text-ct">
+                        <p class="title1 mb20">1단원이 끝났습니다! </p>
+                        <p class="title1"><em class="yellow">기념사진</em>을 촬영하러 가요 </p>
+                    </div>
+                    <div class="flex justify-center ">
+                        <button type="button" title="사진촬영" class="new-btn" @click="goToPage('Camera')">
+                            사진촬영
+                        </button>
                     </div>
                 </div>
             </div>
@@ -75,7 +122,7 @@
                         </button>
                     </div>
                     <div class="box">
-                        <div><img src="../../../resources/img/img184_91t.png" alt=""></div>
+                        <div><img src="../../../resources/img/img140_747s.png" alt=""></div>
                     </div>
                    <div class="flex justify-between mt20">
                         <div class="text  flex">
@@ -97,6 +144,9 @@
 export default {
     data() {
         return {
+            items: [
+            { imgSrc1: 'client/resources/img/img11_1_s.png', imgSrc2: 'client/resources/img/img12_1_s.png', imgSrc3: 'client/resources/img/img11_2_s.png', imgSrc4: 'client/resources/img/img12_2_s.png', isSecondImageVisible: false },
+         ],
             mdiWindowClose: mdiWindowClose,
             mdiHeart: mdiHeart,
             showModal: false,
@@ -105,6 +155,9 @@
         }
     },
     methods: {
+        toggleImage(index) {
+         this.items[index].isSecondImageVisible = !this.items[index].isSecondImageVisible;
+      },
         goToPage(page) {
             this.$router.push({ name: page });
         },
 
client/views/pages/main/PhotoDesign.vue (added)
+++ client/views/pages/main/PhotoDesign.vue
@@ -0,0 +1,167 @@
+<template>
+  <div class="content-wrap">
+    <div class="title-box mb25 flex align-center mt40">
+      <span class="title mr40">1. Hello WORLD</span>
+      <span class="title mr40">기념 사진을 꾸며봅시다.</span>
+    </div>
+    <div class="flex justify-between align-center" style="gap: 40px;">
+      <div class="content " style="padding: 30px;">
+        <div class="tool">
+          <div class="flex justify-center mb20" style="gap: 20px;">
+            <button class="popTxt" v-for="(item, index) in items" :key="index" @click="updateContent(index)" :class="{ active: selectedIndex === index }">
+                       <img :src="item.imgSrc1" style="display: block;">
+                       <img :src="item.imgSrc2" v-if="selectedIndex === index" style="display: block;">
+                    </button>
+          </div>
+        </div>
+        <div class="stickers">
+          <button><img src="../../../resources/img/img146_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img147_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img148_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img149_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img150_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img151_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img152_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img153_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img154_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img155_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img156_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img157_75s.png" alt=""></button>
+          <button><img src="../../../resources/img/img158_75s.png" alt=""></button>
+        </div>
+      </div>
+      <div>
+        <div class="content " style="height: 549px; width: 973px;">
+          <button><img src="../../../resources/img/img143_75s.png" alt=""></button>
+        </div>
+        <div class="btn-wrap flex justify-center mt40" style="gap: 40px;">
+          <button class="login-btn" @click="goToPage('Camera')">
+            <img src="../../../resources/img/btn07_s.png" alt="">
+            <p>재촬영</p>
+          </button>
+
+          <button class="login-btn" type="submit" @click="goToPage('PhotoEdit')"><img
+              src="../../../resources/img/btn07_s.png" alt="">
+            <p>완성</p>
+          </button>
+        </div>
+      </div>
+      <div class="content title-box" style="padding: 30px;">
+        <div class="mb20">
+          <p class="title">랜덤 단어</p>
+        </div>
+        <div class="flex-column" style="gap: 10px;">
+          <button class="login-btn"><img src="../../../resources/img/img141_75s.png" alt="">
+            <p class="title">a</p>
+          </button>
+          <button class="login-btn"><img src="../../../resources/img/img152_75s_01.png" alt="">
+            <p class="title">a</p>
+          </button>
+          <button class="login-btn"><img src="../../../resources/img/img144_75s.png" alt="">
+            <p class="title" style="color: #fff;">a</p>
+          </button>
+          <button class="login-btn"><img src="../../../resources/img/img145_75s.png" alt="">
+            <p class="title mt20" style="color: #fff;">a</p>
+          </button>
+        </div>
+      </div>
+
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      items: [
+        { imgSrc1: 'client/resources/img/btn20_75s_normal.png', imgSrc2: 'client/resources/img/btn20_75s_click.png', },
+        { imgSrc1: 'client/resources/img/btn21_75s_normal.png', imgSrc2: 'client/resources/img/btn21_75s_click.png', },
+      ],
+      timer: '00',
+      selectedIndex: 0,
+    }
+  },
+  methods: {
+    updateContent(index) {
+         this.selectedIndex = index;
+        //  this.currentCon = this.items[index].con;
+      },
+    goToPage(page) {
+      this.$router.push({ name: page });
+    },
+    startTimer() {
+      if (this.intervalId) {
+        clearInterval(this.intervalId);
+      }
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
+        }
+      }, 1000);
+    }
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  components: {
+  },
+  mounted() {
+
+  }
+}
+</script>
+<style scoped>
+.imgGroup {
+  width: fit-content;
+}
+
+.imgGroup button {
+  position: relative;
+}
+
+.imgGroup button p,
+.textbox p {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: fit-content;
+  height: fit-content;
+  background: #ffffffb8;
+  border-radius: 5px;
+  padding: 10px;
+  font-size: 48px;
+  font-family: 'ONEMobilePOP';
+}
+
+.pickGroup button {
+  position: relative;
+  margin-right: 30px;
+}
+
+.pickGroup button p {
+  font-size: 34px;
+  color: #c6c6c6;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+}
+
+.pickGroup article img {
+  object-fit: contain;
+  width: -webkit-fill-available;
+}
+
+.pickGroup article>div>p {
+  font-size: 64px;
+}
+.popTxt{width: 101px;}
+</style>(파일 끝에 줄바꿈 문자 없음)
 
client/views/pages/main/PhotoEdit.vue (added)
+++ client/views/pages/main/PhotoEdit.vue
@@ -0,0 +1,122 @@
+<template>
+   <div class="content-wrap " >
+    <div class="flex justify-center">
+      <div>
+        <div class="frame title-box">
+          <div class="photo" >
+            <img src="../../../resources/img/img143_75s.png" alt="">
+          </div>
+          <p class="title mt20" style="color: #fff;">2024.07.01 1단원 완료!</p>
+          
+        </div>
+        <div class="btn-wrap flex justify-center mt40" style="gap: 40px;">
+            <button class="login-btn" @click="goToPage('PhotoDesign')">
+              <img src="../../../resources/img/btn07_s.png" alt="">
+              <p>수정하기</p>
+            </button>
+  
+            <button class="login-btn" type="submit" @click="goToPage('Dashboard')"><img
+                src="../../../resources/img/btn07_s.png" alt="">
+              <p>완료</p>
+            </button>
+          </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      items: [
+        { imgSrc1: 'client/resources/img/btn20_75s_normal.png', imgSrc2: 'client/resources/img/btn20_75s_click.png', },
+        { imgSrc1: 'client/resources/img/btn21_75s_normal.png', imgSrc2: 'client/resources/img/btn21_75s_click.png', },
+      ],
+      timer: '00',
+      selectedIndex: 0,
+    }
+  },
+  methods: {
+    updateContent(index) {
+         this.selectedIndex = index;
+        //  this.currentCon = this.items[index].con;
+      },
+    goToPage(page) {
+      this.$router.push({ name: page });
+    },
+    startTimer() {
+      if (this.intervalId) {
+        clearInterval(this.intervalId);
+      }
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
+        }
+      }, 1000);
+    }
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  components: {
+  },
+  mounted() {
+
+  }
+}
+</script>
+<style scoped>
+.imgGroup {
+  width: fit-content;
+}
+
+.imgGroup button {
+  position: relative;
+}
+
+.imgGroup button p,
+.textbox p {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: fit-content;
+  height: fit-content;
+  background: #ffffffb8;
+  border-radius: 5px;
+  padding: 10px;
+  font-size: 48px;
+  font-family: 'ONEMobilePOP';
+}
+
+.pickGroup button {
+  position: relative;
+  margin-right: 30px;
+}
+
+.pickGroup button p {
+  font-size: 34px;
+  color: #c6c6c6;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+}
+
+.pickGroup article img {
+  object-fit: contain;
+  width: -webkit-fill-available;
+}
+
+.pickGroup article>div>p {
+  font-size: 64px;
+}
+.popTxt{width: 101px;}
+</style>(파일 끝에 줄바꿈 문자 없음)
Add a comment
List