jichoi / lms_front star
홍아랑 홍아랑 09-11
240911 홍아랑 사진첩 css 수정
@72103049b399f6451140ae47a9d5ffd7209e6f3b
client/resources/css/style.css
--- client/resources/css/style.css
+++ client/resources/css/style.css
@@ -134,10 +134,25 @@
   top: 179px;
   z-index: 1;
 }
+
+.main-wrap-mypage {
+  width: 134rem;
+  height: 70rem;
+  border-radius: 10px;
+  position: absolute;
+  right: 60px;
+  top: 179px;
+  z-index: 1;
+  background-image: url("../img/new_img/mypage/background.png");
+  background-size: 100% 100%;
+  background-position: center;
+  background-repeat: no-repeat;
+  padding: 6rem 8rem;
+}
+
 .main-wrap-plan {
   width: 134rem;
   height: 70rem;
-  background-color: #fff;
   border-radius: 10px;
   position: absolute;
   right: 60px;
@@ -406,15 +421,16 @@
 }
 
 .myphoto > div {
-  background-image: url("../img/img207_15s.png");
-  width: 1011px;
-  height: 558px;
+  background-image: url("../img/new_img/photobook/background.png");
+  width: 127rem;
+  height: 56rem;
   padding: 30px 60px;
   margin: 0 auto;
+  background-size: 100% 100%;
 }
 .tab-btn {
   position: relative;
-  color: #568bfa;
+  color: #fff;
 }
 .tab-btn p.custom-style {
   color: #fff;
@@ -426,12 +442,13 @@
   right: 7%;
   transform: translate(-50%, -50%);
   font-family: "ONEMobilePOPOTF";
-  font-size: 36px;
+  font-size: 27px;
 }
 .myphoto .btnGroup {
   width: max-content;
   position: absolute;
-  right: 45px;
+  top: 134px;
+  right: 14px;
   z-index: 10000;
 }
 .myphoto .class {
@@ -1169,7 +1186,8 @@
 }
 
 .class {
-  background-color: #f8f9fb;
+  /* background-color: #f8f9fb; */
+  background-image: url("../img/new_img/photobook/photo.png");
   border-radius: 10px;
   padding: 25px;
   font-size: 19px;
 
client/resources/img/new_img/photobook/background.png (Binary) (added)
+++ client/resources/img/new_img/photobook/background.png
Binary file is not shown
 
client/resources/img/new_img/photobook/down_btn.png (Binary) (added)
+++ client/resources/img/new_img/photobook/down_btn.png
Binary file is not shown
 
client/resources/img/new_img/photobook/heart.png (Binary) (added)
+++ client/resources/img/new_img/photobook/heart.png
Binary file is not shown
 
client/resources/img/new_img/photobook/heart_click.png (Binary) (added)
+++ client/resources/img/new_img/photobook/heart_click.png
Binary file is not shown
 
client/resources/img/new_img/photobook/page.png (Binary) (added)
+++ client/resources/img/new_img/photobook/page.png
Binary file is not shown
 
client/resources/img/new_img/photobook/page_click.png (Binary) (added)
+++ client/resources/img/new_img/photobook/page_click.png
Binary file is not shown
 
client/resources/img/new_img/photobook/photo.png (Binary) (added)
+++ client/resources/img/new_img/photobook/photo.png
Binary file is not shown
 
client/resources/img/new_img/photobook/up_btn.png (Binary) (added)
+++ client/resources/img/new_img/photobook/up_btn.png
Binary file is not shown
client/views/pages/main/MyPage.vue
--- client/views/pages/main/MyPage.vue
+++ client/views/pages/main/MyPage.vue
@@ -1,297 +1,341 @@
 <template>
-    <div class="mypage">
-        <div class="flex justify-between mb30" style="gap: 30px;">
-            <div>
-                <div class="title-box flex justify-between mb20">
-                    <p class="title" style="color: white;">소속 반</p>
-                    <div class="flex align-center look-btn">
-                        <!-- <p>더보기 </p><svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon> -->
-                    </div>
-                </div>
-                <div style="width: 82rem; padding: 2rem;">
-                    <section class="flex" style="gap: 20px;">
-                        <div class="class flex justify-between" style="cursor: default; background-color: transparent;">
-                            <div class="box gd-col2" style="gap: 5px;">
-                                <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 style="position: absolute; left: 102rem; top: 10rem; "
-                    @click="selectedTab = 'tab4'; goToPage('PhotoBook')"><img
-                        src="../../../resources/img/new_img/mypage/photoBtn.png" alt=""></div>
-                <div class="title-box flex justify-between mb20" style=" position: absolute; left: 117em; top: 6em; ">
-                    <p class="title" style="color: white;">사진첩</p>
-                </div>
-            </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" style="color: white;">{{ studentInfo.studentName }} 학생 랭킹</p>
+          <p class="title" style="color: white">소속 반</p>
+          <div class="flex align-center look-btn">
+            <!-- <p>더보기 </p><svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon> -->
+          </div>
         </div>
-        <div class=" mb30">
-            <div class=" flex " style="gap: 95px;">
-                <div class="textbook book-red" style="background-color: white; width: 19%; border: #f9c4eb solid 6px;">
-                    <div class="text" style="background-color: #f9c4eb;">
-                        <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="subtitle mt10" style="font-size: 19px;">현재 {{ stdCount }}명 중 <em class="red">{{
-                            photo_rank }}등</em>입니다.</P>
-                    </div>
+        <div style="width: 82rem; padding: 2rem">
+          <section class="flex" style="gap: 20px">
+            <div
+              class="class flex justify-between"
+              style="cursor: default; background-color: transparent"
+            >
+              <div class="box gd-col2" style="gap: 5px">
+                <div>
+                  <img src="../../../resources/img/img176_82t.png" alt="" />
                 </div>
-                <div class="textbook " style="background-color: white; width: 19%;  border: #b5dbcc solid 6px;">
-                    <div class="text" style="background-color: #b5dbcc;">
-                        <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="subtitle mt10" style="font-size: 19px;">현재 {{ stdCount }}명 중 <em class="yellow">{{
-                            problem_rank }}등</em>입니다.</P>
-                    </div>
+                <div>
+                  <img src="../../../resources/img/img176_82t.png" alt="" />
                 </div>
-                <div class="textbook book-blue "
-                    style="background-color: white; width: 19%;  border: #bcd3eb solid 6px;">
-                    <div class="text" style="background-color: #bcd3eb;">
-                        <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="subtitle mt10" style="font-size: 19px;">현재 {{ stdCount }}명 중 <em class="blue">{{
-                            score_rank }}등</em>입니다.</P>
-                    </div>
+                <div>
+                  <img src="../../../resources/img/img176_82t.png" alt="" />
                 </div>
-                <div class="textbook book-navy "
-                    style="background-color: white; width: 19%;  border: #f9c894 solid 6px;">
-                    <div class="text" style="background-color: #f9c894;">
-                        <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="subtitle mt10" style="font-size: 19px;">현재 {{ stdCount }}명 중 <em class="navy">{{
-                            time_rank }}등</em>입니다.</P>
-                    </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
+          style="position: absolute; left: 102rem; top: 10rem; cursor: pointer"
+          @click="
+            selectedTab = 'tab4';
+            goToPage('PhotoBook');
+          "
+        >
+          <img
+            src="../../../resources/img/new_img/mypage/photoBtn.png"
+            alt=""
+          />
+        </div>
+        <div
+          class="title-box flex justify-between mb20"
+          style="position: absolute; left: 117em; top: 6em"
+        >
+          <p class="title" style="color: white">사진첩</p>
+        </div>
+      </div>
     </div>
+    <div class="title-box flex justify-between mb20">
+      <p class="title" style="color: white">
+        {{ studentInfo.studentName }} 학생 랭킹
+      </p>
+    </div>
+    <div class="mb30">
+      <div class="flex" style="gap: 95px">
+        <div
+          class="textbook book-red"
+          style="background-color: white; width: 19%; border: #f9c4eb solid 6px"
+        >
+          <div class="text" style="background-color: #f9c4eb">
+            <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="subtitle mt10" style="font-size: 19px"
+              >현재 {{ stdCount }}명 중
+              <em class="red">{{ photo_rank }}등</em>입니다.</P
+            >
+          </div>
+        </div>
+        <div
+          class="textbook"
+          style="background-color: white; width: 19%; border: #b5dbcc solid 6px"
+        >
+          <div class="text" style="background-color: #b5dbcc">
+            <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="subtitle mt10" style="font-size: 19px"
+              >현재 {{ stdCount }}명 중
+              <em class="yellow">{{ problem_rank }}등</em>입니다.</P
+            >
+          </div>
+        </div>
+        <div
+          class="textbook book-blue"
+          style="background-color: white; width: 19%; border: #bcd3eb solid 6px"
+        >
+          <div class="text" style="background-color: #bcd3eb">
+            <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="subtitle mt10" style="font-size: 19px"
+              >현재 {{ stdCount }}명 중
+              <em class="blue">{{ score_rank }}등</em>입니다.</P
+            >
+          </div>
+        </div>
+        <div
+          class="textbook book-navy"
+          style="background-color: white; width: 19%; border: #f9c894 solid 6px"
+        >
+          <div class="text" style="background-color: #f9c894">
+            <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="subtitle mt10" style="font-size: 19px"
+              >현재 {{ stdCount }}명 중
+              <em class="navy">{{ time_rank }}등</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';
+import SvgIcon from "@jamescoyle/vue-icon";
+import { mdiMagnify } from "@mdi/js";
+import { mdilArrowRight } from "@mdi/light-js";
+import ProgressBar from "../../component/ProgressBar.vue";
 import axios from "axios";
 
-
 export default {
-    data() {
-        return {
-            stdCount: 0,
-            photo_rank: 0,
-            problem_rank: 0,
-            score_rank: 0,
-            time_rank: 0,
-            mdiMagnify: mdiMagnify,
-            mdilArrowRight: mdilArrowRight,
-            timer: "00:00",
-            progress: 20,
-            studentInfo: {
-                studentName: "",
-                institutionName: "",
-                grade: "",
-                className: "",
-                studentQuestion: "",
-                history: [],
-            },
-        }
+  data() {
+    return {
+      stdCount: 0,
+      photo_rank: 0,
+      problem_rank: 0,
+      score_rank: 0,
+      time_rank: 0,
+      mdiMagnify: mdiMagnify,
+      mdilArrowRight: mdilArrowRight,
+      timer: "00:00",
+      progress: 20,
+      studentInfo: {
+        studentName: "",
+        institutionName: "",
+        grade: "",
+        className: "",
+        studentQuestion: "",
+        history: [],
+      },
+    };
+  },
+  methods: {
+    classStdCount: function () {
+      const vm = this;
+      axios({
+        url: "/userclass/classStdCountByUserId.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
+        },
+        data: {
+          userId: "USID_000000000000002", // 로그인한 학생의 userId
+        },
+      })
+        .then(function (response) {
+          console.log("classStdCount - response : ", response.data);
+          vm.stdCount = response.data;
+        })
+        .catch(function (error) {
+          console.log("classStdCount - error : ", error);
+          alert("반 학생 수 조회에 오류가 발생했습니다.");
+        });
     },
-    methods: {
-        classStdCount: function () {
-            const vm = this;
-            axios({
-                url: "/userclass/classStdCountByUserId.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    userId: "USID_000000000000002"   // 로그인한 학생의 userId
-                }
-            })
-                .then(function (response) {
-                    console.log("classStdCount - response : ", response.data);
-                    vm.stdCount = response.data;
-                })
-                .catch(function (error) {
-                    console.log("classStdCount - error : ", error);
-                    alert("반 학생 수 조회에 오류가 발생했습니다.");
-                });
+    fetchStudentInfo() {
+      const vm = this;
+      axios({
+        url: "/studentInfo/getInfo.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        fetchStudentInfo() {
-            const vm = this;
-            axios({
-                url: "/studentInfo/getInfo.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    userId: "USID_000000000000002" // 로그인한 학생의 userId
-                }
-            })
-                .then((response) => {
-                    console.log(response.data);
-                    this.studentInfo = response.data;
-                })
-                .catch((error) => {
-                    console.error("학생 정보 가져오기 실패:", error);
-                });
+        data: {
+          userId: "USID_000000000000002", // 로그인한 학생의 userId
         },
-        photoRankByLikeData: function () {
-            const vm = this;
-            axios({
-                url: "/photo/photoRankByLikeData.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    sclsId: "1",
-                    stdId: "1"
-                }
-            })
-                .then(function (response) {
-                    console.log("Photo Rank - response : ", response.data);
-                    vm.photo_rank = response.data;
-                })
-                .catch(function (error) {
-                    console.log("Photo Rank - error : ", error);
-                    alert("학생 사진 랭킹 조회에 오류가 발생했습니다.");
-                });
+      })
+        .then((response) => {
+          console.log(response.data);
+          this.studentInfo = response.data;
+        })
+        .catch((error) => {
+          console.error("학생 정보 가져오기 실패:", error);
+        });
+    },
+    photoRankByLikeData: function () {
+      const vm = this;
+      axios({
+        url: "/photo/photoRankByLikeData.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        getUserRankByScore: function () {
-            const vm = this;
-            axios({
-                url: "/userclass/getUserRankByScore.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    userId: "USID_000000000000002"   // 로그인한 학생의 userId
-                }
-            })
-                .then(function (response) {
-                    console.log("User Rank - response : ", response.data);
-                    vm.score_rank = response.data;
-                })
-                .catch(function (error) {
-                    console.log("User Rank - error : ", error);
-                    alert("점수 랭킹 조회에 오류가 발생했습니다.");
-                });
+        data: {
+          sclsId: "1",
+          stdId: "1",
         },
-        getUserRankByStudyTime: function () {
-            const vm = this;
-            axios({
-                url: "/userclass/getUserRankByStudyTime.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    userId: "1"   // 로그인한 학생의 userId
-                }
-            })
-                .then(function (response) {
-                    console.log("User Rank - response : ", response.data);
-                    vm.time_rank = response.data;
-                })
-                .catch(function (error) {
-                    console.log("User Rank - error : ", error);
-                    alert("학습시간 랭킹 조회에 오류가 발생했습니다.");
-                });
+      })
+        .then(function (response) {
+          console.log("Photo Rank - response : ", response.data);
+          vm.photo_rank = response.data;
+        })
+        .catch(function (error) {
+          console.log("Photo Rank - error : ", error);
+          alert("학생 사진 랭킹 조회에 오류가 발생했습니다.");
+        });
+    },
+    getUserRankByScore: function () {
+      const vm = this;
+      axios({
+        url: "/userclass/getUserRankByScore.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        problemRankByProblemData: function () {
-            const vm = this;
-            axios({
-                url: "/problemLog/problemRankByProblemData.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    sclsId: "1",
-                    stdId: "2"
-                }
-            })
-                .then(function (response) {
-                    console.log("Problem Rank - response : ", response.data);
-                    vm.problem_rank = response.data;
-                })
-                .catch(function (error) {
-                    console.log("Problem Rank - error : ", error);
-                    alert("학생 문제 랭킹 조회에 오류가 발생했습니다.");
-                });
+        data: {
+          userId: "USID_000000000000002", // 로그인한 학생의 userId
         },
-        goToPage(page) {
-            this.$router.push({ name: page });
+      })
+        .then(function (response) {
+          console.log("User Rank - response : ", response.data);
+          vm.score_rank = response.data;
+        })
+        .catch(function (error) {
+          console.log("User Rank - error : ", error);
+          alert("점수 랭킹 조회에 오류가 발생했습니다.");
+        });
+    },
+    getUserRankByStudyTime: function () {
+      const vm = this;
+      axios({
+        url: "/userclass/getUserRankByStudyTime.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        increaseProgress() {
-            if (this.progress < 100) {
-                this.progress += 10;
-            }
+        data: {
+          userId: "1", // 로그인한 학생의 userId
         },
-        showConfirm(type) {
-            let message = '';
-            if (type === 'cancel') {
-                message = '삭제하시겠습니까?';
-            } else if (type === 'reset') {
-                message = '초기화하시겠습니까?';
-            } else if (type === 'save') {
-                message = '등록하시겠습니까?';
-            }
+      })
+        .then(function (response) {
+          console.log("User Rank - response : ", response.data);
+          vm.time_rank = response.data;
+        })
+        .catch(function (error) {
+          console.log("User Rank - error : ", error);
+          alert("학습시간 랭킹 조회에 오류가 발생했습니다.");
+        });
+    },
+    problemRankByProblemData: function () {
+      const vm = this;
+      axios({
+        url: "/problemLog/problemRankByProblemData.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
+        },
+        data: {
+          sclsId: "1",
+          stdId: "2",
+        },
+      })
+        .then(function (response) {
+          console.log("Problem Rank - response : ", response.data);
+          vm.problem_rank = response.data;
+        })
+        .catch(function (error) {
+          console.log("Problem Rank - error : ", error);
+          alert("학생 문제 랭킹 조회에 오류가 발생했습니다.");
+        });
+    },
+    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();
-            }
-        },
+      if (confirm(message)) {
+        this.goBack();
+      }
     },
-    watch: {
-
-    },
-    computed: {
-
-    },
-    components: {
-        SvgIcon,
-        ProgressBar
-    },
-    mounted() {
-        console.log('Main2 mounted');
-        this.fetchStudentInfo();
-        this.classStdCount();
-        this.photoRankByLikeData();
-        this.getUserRankByScore();
-        this.problemRankByProblemData();
-        this.getUserRankByStudyTime();
-    }
-}
+  },
+  watch: {},
+  computed: {},
+  components: {
+    SvgIcon,
+    ProgressBar,
+  },
+  mounted() {
+    console.log("Main2 mounted");
+    this.fetchStudentInfo();
+    this.classStdCount();
+    this.photoRankByLikeData();
+    this.getUserRankByScore();
+    this.problemRankByProblemData();
+    this.getUserRankByStudyTime();
+  },
+};
 </script>
 <style scoped>
 .mypage .textbook {
-    width: 22%;
+  width: 22%;
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+</style>
client/views/pages/main/PhotoBook.vue
--- client/views/pages/main/PhotoBook.vue
+++ client/views/pages/main/PhotoBook.vue
@@ -5,48 +5,95 @@
   <div class="myphoto mb30">
     <div>
       <div class="title-box flex justify-end mb40">
+        <p class="class-p">반</p>
         <select @change="handleClassChange">
-          <option v-for="classItem in classList" :key="classItem.sclsId" :value="classItem.sclsId">
+          <option
+            v-for="classItem in classList"
+            :key="classItem.sclsId"
+            :value="classItem.sclsId"
+          >
             {{ classItem.sclsNm }}
           </option>
         </select>
       </div>
       <div class="btnGroup" style="display: flex; flex-direction: column">
-        <button v-for="n in totalPages" :key="n" @click="changePage(n)" type="button" title="페이지 버튼" class="tab-btn">
-          <img v-if="currentPage !== n" src="../../../resources/img/btn49_15s_normal.png" alt="" />
-          <img v-else src="../../../resources/img/btn49_15s_click.png" alt="" />
+        <button
+          v-for="n in totalPages"
+          :key="n"
+          @click="changePage(n)"
+          type="button"
+          title="페이지 버튼"
+          class="tab-btn"
+        >
+          <img
+            v-if="currentPage !== n"
+            src="../../../resources/img/new_img/photobook/page.png"
+            alt=""
+          />
+          <img
+            v-else
+            src="../../../resources/img/new_img/photobook/page_click.png"
+            alt=""
+          />
           <p :class="{ 'custom-style': currentPage === n }">{{ n }}</p>
         </button>
       </div>
       <div v-if="selectedTab === 'tab1'" class="tab-box">
-        <div class="flex justify-between">
-          <div v-for="(photo, index) in (photoList?.result || []).slice(0, 3)" :key="index" class="photo"
-            :style="{ transform: getRotation(index) }" @click="buttonSearch(photo)">
-            <div class="class">
-              <div class="box">
-                <div class="photo-container">
-                  <img :src="fetchImage(photo.fileRpath)" alt="" />
+        <div
+          class="flex justify-between"
+          style="margin-right: -82px; margin-left: -47px"
+        >
+          <!-- 왼쪽에 4개의 사진 -->
+          <div class="left-side">
+            <div
+              v-for="(photo, index) in (photoList?.result || []).slice(0, 4)"
+              :key="index"
+              class="photo"
+              :style="{ transform: getRotation(index) }"
+              @click="buttonSearch(photo)"
+            >
+              <div class="class">
+                <div class="box">
+                  <div class="photo-container">
+                    <img
+                      :src="fetchImage(photo.fileRpath)"
+                      alt=""
+                      style="width: 150px"
+                    />
+                  </div>
                 </div>
-              </div>
-              <div class="photo-text mt10 ml10">
-                <div class="member ml30">{{ photo.likeData }}</div>
-                <div class="title2">{{ photo.unitName }}</div>
+                <div class="photo-text mt20 ml30">
+                  <div class="member ml30">{{ photo.likeData }}</div>
+                  <div class="title2-photo">{{ photo.unitName }}</div>
+                </div>
               </div>
             </div>
           </div>
-        </div>
-        <div class="flex justify-between mt20">
-          <div v-for="(photo, index) in (photoList?.result || []).slice(3, 6)" :key="index + 3" class="photo"
-            :style="{ transform: getRotation(index + 3) }" @click="buttonSearch(photo)">
-            <div class="class">
-              <div class="box">
-                <div class="photo-container">
-                  <img :src="fetchImage(photo.fileRpath)" alt="" style="width: 150px" />
+
+          <!-- 오른쪽에 4개의 사진 -->
+          <div class="right-side">
+            <div
+              v-for="(photo, index) in (photoList?.result || []).slice(4, 8)"
+              :key="index + 4"
+              class="photo"
+              :style="{ transform: getRotation(index + 4) }"
+              style="width: fit-content"
+              @click="buttonSearch(photo)"
+            >
+              <div class="class" style="width: 24rem; height: 21rem">
+                <div class="box">
+                  <div class="photo-container">
+                    <img
+                      :src="fetchImage(photo.fileRpath)"
+                      alt=""
+                      style="width: 150px"
+                    />
+                  </div>
                 </div>
-              </div>
-              <div class="photo-text mt10 ml10">
-                <div class="member ml30">{{ photo.likeData }}</div>
-                <div class="title2">{{ photo.unitName }}</div>
+                <div class="photo-text mt20 ml30">
+                  <div class="member ml30">{{ photo.likeData }}</div>
+                  <div class="title2-photo">{{ photo.unitName }}</div>
+                </div>
               </div>
             </div>
           </div>
@@ -57,20 +104,32 @@
           <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>
+              <svg-icon
+                type="mdi"
+                :path="mdiWindowClose"
+                class="close-btn"
+              ></svg-icon>
             </button>
           </div>
 
-          <div class="photo-modal flex justify-between mt20" v-if="photoData.length > 0">
+          <div
+            class="photo-modal flex justify-between mt20"
+            v-if="photoData.length > 0"
+          >
             <div class="box">
               <div>
-                <img :src="fetchImage(photoData[0].fileRpath)" alt="" style="width: 640px; height: 480px" />
+                <img
+                  :src="fetchImage(photoData[0].fileRpath)"
+                  alt=""
+                  style="width: 640px; height: 480px"
+                />
               </div>
             </div>
             <div class="photo-title-container">
               <div class="title1">
                 {{ photoData[0].unitName }}을 마친
-                <em class="yellow">{{ photoData[0].stdName }}</em>친구
+                <em class="yellow">{{ photoData[0].stdName }}</em
+                >친구
               </div>
               <p class="title2 date">{{ photoData[0].photoDate }}</p>
             </div>
@@ -101,7 +160,7 @@
       photoData: [],
 
       currentPage: 1,
-      pageSize: 6,
+      pageSize: 8,
       totalPages: 1,
 
       mdiWindowClose: mdiWindowClose,
@@ -133,9 +192,8 @@
           console.log("classList - response : ", response.data);
           vm.classList = response.data.data;
           vm.currentPage = 1;
-          vm.selectedSclsId= vm.classList[0].sclsId;
+          vm.selectedSclsId = vm.classList[0].sclsId;
           vm.stdPhotoSelectList();
-
         })
         .catch(function (error) {
           console.log("classList - error : ", error);
@@ -144,35 +202,35 @@
     },
 
     handleClassChange(event) {
-    this.selectedSclsId = event.target.value; // 선택된 sclsId 가져오기
-    this.currentPage = 1; // 페이지 초기화
-    this.stdPhotoSelectList(); // 함수 호출
-  },
-  stdPhotoSelectList: function (scsId) {
-    const vm = this;
-    axios({
-      url: "/photo/stdPhotoList.json",
-      method: "post",
-      headers: {
-        "Content-Type": "application/json; charset=UTF-8",
-      },
-      data: {
-        stdId: "1",
-        sclsId: vm.selectedSclsId, // 여기에 sclsId 들어가야 함
-        page: vm.currentPage,
-        pageSize: vm.pageSize,
-      },
-    })
-      .then(function (response) {
-        console.log("photoList - response : ", response.data);
-        vm.photoList = response.data;
-        vm.totalPages = Math.ceil(response.data.photoCount / vm.pageSize);
+      this.selectedSclsId = event.target.value; // 선택된 sclsId 가져오기
+      this.currentPage = 1; // 페이지 초기화
+      this.stdPhotoSelectList(); // 함수 호출
+    },
+    stdPhotoSelectList: function (scsId) {
+      const vm = this;
+      axios({
+        url: "/photo/stdPhotoList.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
+        },
+        data: {
+          stdId: "1",
+          sclsId: vm.selectedSclsId, // 여기에 sclsId 들어가야 함
+          page: vm.currentPage,
+          pageSize: vm.pageSize,
+        },
       })
-      .catch(function (error) {
-        console.log("photoList - error : ", error);
-        alert("반별 내 사진 조회에 오류가 발생했습니다.");
-      });
-  },
+        .then(function (response) {
+          console.log("photoList - response : ", response.data);
+          vm.photoList = response.data;
+          vm.totalPages = Math.ceil(response.data.photoCount / vm.pageSize);
+        })
+        .catch(function (error) {
+          console.log("photoList - error : ", error);
+          alert("반별 내 사진 조회에 오류가 발생했습니다.");
+        });
+    },
     getRotation(index) {
       const rotations = [2, -1, 1, -2, 1, -1];
       return `rotate(${rotations[index]}deg)`;
@@ -305,6 +363,7 @@
 .class {
   width: 260px;
   height: 200px;
+  background-repeat: no-repeat;
 }
 
 .photo-container {
@@ -314,6 +373,9 @@
 .photo-container img {
   width: 150px;
   height: 110px;
+  height: 105px;
+  position: relative;
+  top: 23px;
 }
 
 .photo-text {
@@ -335,4 +397,36 @@
   justify-content: space-between;
   margin-top: 20px;
 }
+
+select {
+  border-radius: 16px;
+  position: absolute;
+  top: 42px;
+  right: 33px;
+}
+
+.class-p {
+  font-size: 23px;
+  position: absolute;
+  top: 52px;
+  right: 218px;
+}
+
+.left-side,
+.right-side {
+  width: 48%; /* 좌우로 나눔 */
+  display: flex;
+  flex-wrap: wrap;
+  align-content: flex-start;
+}
+
+.title2-photo {
+  font-size: 15px;
+  font-weight: bold;
+  font-family: "ONEMobileOTF-Regular";
+  max-width: 175px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
 </style>
Add a comment
List